The latest version of CALPUFF modeling system by Exponent is version 7.0 and is available
here.
The meteorological preprocessors include SURFGEN v7.0, for preparing a SURF file starting from ASOS 1-minute data.
ASOS 1-minute data are available from the NOAA repository:
ftp://ftp.ncdc.noaa.gov/pub/data/asos-onemin/
ASOS 1-minute data are made of two "pages", so it is necessary to download both the 6405 and 6406 files for any station of interest. Files are organized in directories named "6405-
year" and "6406-
year". Is such directories there is a file for each station and each month.
Not all ASOS 1-minute data are currently handled by SURFGEN. in cases when the number of fields is less than 12, SURFGEN is extracting missing values of wind speed and direction. It is however possible that the space-separated fields are less than 12, as can be seen from the EPA
AERMINUTE user's guide, Figure 1. The ASOS 1-minute format is also documented in the manuals
td6405.pdf and
td6406.pdf
An example of file that has less than 12 fields (they are 8 ) is
ftp://ftp.ncdc.noaa.gov/pub/data/asos-onemin/6405-2013/64050KRNT201312.dat
94248KRNT RNT2013120107291529 0.083 N 181 14 187 20
94248KRNT RNT2013120107301530 0.076 N 179 13 183 16
When given in input to SURFGEN V7.0 the .LST log file shows that data are extracted as missing:
READ_ASOS1: data for period 2013120107291529
WS,WD,TK,IRH = 9999.00000 9999.00000 285.372223 40
PRES,PRATE,IPCODE = 1009.07623 0.00000000E+00 0
READ_ASOS1: data for period 2013120107301530
WS,WD,TK,IRH = 9999.00000 9999.00000 285.372223 40
PRES,PRATE,IPCODE = 1009.13269 0.00000000E+00 0
Another example of file with less than 12 space-separated fields (they are 11) is
ftp://ftp.ncdc.noaa.gov/pub/data/asos-onemin/6405-2013/64050KSEA201312.dat
24233KSEA SEA2013120100140814 0.124 N 0.134 N 182 10 173 12 16L60+
24233KSEA SEA2013120100150815 0.124 N 0.127 N 185 9 201 10 16L60+
24233KSEA SEA2013120100160816 0.125 N 0.132 N 187 8 180 11 16L60+
In order to parse such files the SURFGEN 7.0 program must be modified by inserting after line 2292 of surfgen.for the block:
else if (ncol6405.EQ.8) then
c --- Wind direction (9)
if(INDEX(acol6405(5),'M').EQ.0) then
read(acol6405(5),*) iwd
wd=FLOAT(iwd)
endif
c --- Wind speed (10)
if(INDEX(acol6405(6),'M').EQ.0) then
read(acol6405(6),*) iwskt
c --- Adjust speed (conditional)
if(cwsadj(k).EQ.'ASOSBIAS') then
ws=(FLOAT(iwskt)+add_kt)*fkt2mps
else
ws=FLOAT(iwskt)*fkt2mps
endif
else if (ncol6405.EQ.11) then
c --- Wind direction (7)
if(INDEX(acol6405(7),'M').EQ.0) then
read(acol6405(7),*) iwd
wd=FLOAT(iwd)
endif
c --- Wind speed (8)
if(INDEX(acol6405(8),'M').EQ.0) then
read(acol6405(8),*) iwskt
c --- Adjust speed (conditional)
if(cwsadj(k).EQ.'ASOSBIAS') then
ws=(FLOAT(iwskt)+add_kt)*fkt2mps
else
ws=FLOAT(iwskt)*fkt2mps
endif
endif
In order to compile the code with gfortran, the code requires also some modifications to the reading format in several places, because of the use on non-standard zero-length format that generates an error:
read(acol6405(5),'(i)') iwd
1
Error: Nonnegative width required in format string at (1)
This can be fixed changing the lines with such formats with:
read(acol6405(5),*) iwd
The compilation with gfortran can be made as:
gfortran -o surfgen.exe modules.for surfgen.for
The result:
READ_ASOS1: data for period 2013120107291529
WS,WD,TK,IRH = 7.4588003 181.00000 285.37222 40
PRES,PRATE,IPCODE = 1009.0762 0.0000000 0
READ_ASOS1: data for period 2013120107301530
WS,WD,TK,IRH = 6.9443998 179.00000 285.37222 40