These files are for hours 0-48 every 3 hours for the 3 MM5 domains. They are little-endian binary. Stations included all fall with the lat/lon box around Washington $minlat,$minlon,$maxlat,$maxlon = "45.55,-124.75,49,-116.9" See station_list for more info. Since you are writing C, I also include PERL code that reads a line of the binary file: ($id,$init_time,$fcst_time,$fhour ,$obs{temp},$model{temp},$model{t2} ,$obs{rh},$model{rh},$obs{wsp},$model{wsp},$model{wsp2} ,$obs{wdir},$model{wdir},$obs{pres},$model{pres} ,$obs{pcpn},$model{pcpn},$obs{pcpn24},$model{pcpn24} ,$lat,$lon,$elev,$domxcor,$domycor,$xcor,$ycor) = unpack "a8 i i i f23",$row_data; Here are the lines from the fortran code that wrote these: CHARACTER*8 stnid REAL real23(23) INTEGER fhour, idate1, idate2 $ , iline, iend, hour1, hour2 write(63,rec=newrecl,err=905) stnid(refnum) $ ,idate1,idate2,fhour,real23 CC CC Description of Variables: CC stnid(1:5): the ID of the observation point CC stnid(7:8): the 2-character type of the observation point CC idate1: the initialization date of the run YYYYMMDDHH CC idate2: the actual time of the observation YYYYMMDDHH CC fhour: the forecast hour corresponding to idate2 CC CC the 23 elements of real23 are as follows: CC real23(1): observed temperature (Kelvin) CC real23(2): model predicted lowest sigma level temperature CC real23(3): model predicted lowest sigma level temperature average with CC the ground temperature CC real23(4): observed relative humidity CC real23(5): model predicted relative humidity CC real23(6): observed wind speed (meters/second) CC real23(7): model predicted lowest sigma level wind speed CC real23(8): model predicted lowest sigma level wind speed brought down CC to 10 meters using log profile CC real23(9): observed wind direction (degrees) CC real23(10): model predicted lowest sigma level wind direction CC real23(11): observed sea-level pressure (millibars) CC real23(12): model predicted sea-level pressure CC real23(13): observed 6-hour precipitation (millimeters) CC real23(14): model predicted 6-hour precipitation CC real23(15): observed 24-hour precipitation (millimeters) CC real23(16): model predicted 24-hour precipitation CC real23(17): observation latitude CC real23(18): observation longitude CC real23(19): observation elevation CC real23(20): observation x coordinate in dot points on the nest CC real23(21): observation y coordinate in dot points on the nest CC real23(22): observation x coordinate in dot points on the coarse grid CC real23(23): observation y coordinate in dot points on the coarse grid c Surface history WRITE(bigline,4036) stnid(refnum), & idate1, idate2, fhour, real23 4036 FORMAT(a8,',',2(i10,','),i4,',', $ 22(F11.3,','),F11.3) nsbl = nospace(bigline) call trim(nsbl,iblen) write (61,'(a)') nsbl(1:iblen) function nospace(word) integer nchars character *(*) word,nospace iout = 1 nchars = len(word) do i = 1,nchars nospace(i:i) = ' ' enddo do i = 1,nchars #ifdef OSF1 if (word(i:i).ne.' '.and.ichar(word(i:i)).ne.0) then #else if (word(i:i).ne.' '.and.word(i:i).ne.'') then #endif nospace(iout:iout) = word(i:i) iout = iout + 1 endif enddo return end subroutine trim (word,ilength) character*(*) word integer ilength,il,ifirst,ilast il = len(word) ilast = 0 ifirst = 0 do ii = 1,il if (word(ii:ii) .eq. ' ') then if (word(ii-1:ii-1) .ne. ' ') ilast = ii - 1 else if (ifirst .eq. 0) then ifirst = ii endif enddo ilength = (ilast - ifirst) + 1 ii = 0 do i = ifirst,ilast ii = ii + 1 word(ii:ii) = word(i:i) enddo do ii = ilength+1,il word(ii:ii) = ' ' enddo return end