/ O \

\ '

PRO"^

AERMINUTE User's Guide


-------

-------
EPA-454/B-23-007
October 2023

AERMINUTE User's Guide

U.S. Environmental Protection Agency
Office of Air Quality Planning and Standards
Air Quality Assessment Division
Air Quality Modeling Group
Research Triangle Park, North Carolina


-------
Preface

This document provides a description of AERMINUTE, a pre-processor to AERMET to read 1-
minute and optionally, 5-minute ASOS data to calculate hourly average winds for input into
AERMET. Included in this document are descriptions of inputs, processing methodology, and
outputs.

11


-------
Contents

Preface	ii

Figures	v

Tables	vi

1.	Purpose	1

2.	Changes to AERMINUTE	1

2.1	Version 11325	1

2.2	Version 14237	2

2.3	Version 14337	2

2.4	Version 15272	3

3.	Obtaining ASOS wind data	3

4.	Processing and hourly averaging	7

4.1 User inputs	7

4.1.1	STARTEND	8

4.1.2	II WGROLP	8

4.1.3	DATAFILE	9

4.1.3 DAT5FILE	10

4.1.5 SLRI DATA	11

4.1.6. 01 TITLES	11

4.2. File checking	14

4.3	Record processing	14

4.3.1	1-MINUTE DATA FILES	14

4.3.2	5-MINUTE DATA FILES	15

4.4	Data substitution and flagging 2-minute values for hourly averaging	16

4.5	Quality control	17

4.6	Averaging	18

5.	Outputs	18

5.1	Hourly winds (1101 RIII.H)	19

5.2	Record check files	20

5.3	Summary file (SIMMI 11.11)	21

5.4	Comparison file (COMPFILE)	25

5.5	1-minute and 5-minute comparison file (1_5_FILE)	27

5.6.	List of substituted minutes (SUB5FILE)	27

5.7.	Log file	28

in


-------
6. References	36

Appendix A: Record Quality Control Check Methodology	1

Appendix B. ASOS stations missing 1-minute data files for June-December 2013	1

iv


-------
Figures

Figure 1. General format of an ASOS 1-minute file	4

Figure 2. General format of an ASOS 5-minute file	6

Figure 3. Initial prompt of name of AERMINUTE control file	7

Figure 4. AERMINUTE control input file structure	8

Figure 5. Examples of inputfiles.txt for a) files enclosed in quotations, with full pathname, and

out of sequential order; and b) files for multiple years in the current working directory	10

Figure 6. Example AERMINUTE control input file	13

Figure 7. Example hourly averaged winds and order of variables	20

Figure 8. Format of SUMMFILE when 5-minute data is not read by AERMINUTE	23

Figure 9. Format of SUMMFILE when 5-minute data is read by AERMINUTE	24

Figure 10. Format of COMPFILE	26

Figure 11. Format of 1_5_FILE	27

Figure 12. Format of SUB5FILE	28

Figure 13. Input summary section of aerminute.log	28

Figure 14. Data file check section of AERMINUTE.LOG	29

Figure 15. 1-minute file processing section of aerminute.log	31

Figure 16. 5-minute file processing section of aerminute.log	32

Figure 17. Quality control summaries listed in AERMINUTE.LOG	33

Figure 18. Summary section of aerminute.log	35

Figure A-l. Example good_records.dat file	A-4

Figure A-2. Example check_records.dat file	A-5

Figure A-3. Example bad_records.dat file	A-7

Figure B-l. Locations of ASOS stations in conterminous U.S. with missing June-December

2013 1-minute data files	B-10

Figure B-2. Locations of ASOS stations in Alaska with missing June-December 2013 1-minute
data files	B-ll

v


-------
Tables

Table A-l. Quality control checks on 1-minute winds read by AERMINUTE	A-2

Table A-2. Description of records in check_records.dat file	A-6

TableB-l. Region 1 ASOS stations	B-l

Table B-2. Region 2 ASOS stations	B-2

Table B-3. Region 3 ASOS stations	B-2

Table B-4. Region 4 ASOS stations	B-3

Table B-5. Region 5 ASOS stations	B-4

Table B-6. Region 6 ASOS stations	B-5

Table B-7. Region 7 ASOS stations	B-6

Table B-8. Region 8 ASOS stations	B-7

Table B-9. Region 9 ASOS stations	B-8

Table B-10. Region 10 ASOS stations	B-9

vi


-------
1.	Purpose

Surface meteorological data collected by the National Weather Service (NWS) and Federal
Aviation Administration (FAA) are often used as the source of input meteorological data for
AERMOD (EPA, 2023a). A potential concern related to the use of NWS meteorological data for
dispersion modeling is the often high incidence of calms and variable wind conditions reported
for the Automated Surface Observing Stations (ASOS) in use at most NWS stations since the
mid-1990's. In the METAR coding used to report surface observations beginning July 1996, a
calm wind is defined as a wind speed less than 3 knots and is assigned a value of 0 knots. The
METAR code also introduced the variable wind observation that may include wind speeds up to
6 knots, but the wind direction is reported as missing if the wind direction varies more than 60
degrees during the 2-minute averaging period for the observation. The AERMOD model
currently cannot simulate dispersion under calm or missing wind conditions. To reduce the
number of calms and missing winds in the surface data, archived 1-minute winds for the ASOS
stations can be used to calculate hourly average wind speed and directions, which are used to
supplement the standard archive of hourly observed winds processed in AERMET (EPA, 2023b).
Beginning with version 15272, AERMINUTE will also read in 5-minute ASOS data to
supplement the 1-minute data when 1-minute data is missing. The 5-minute data consists of the
2-minute wind speeds reported every 5-minutes. The impetus for including the 5-minute data
files is due to 253 stations across the U.S. missing 1-minute data files for June through December
of 2013. These stations did have 5-minute data files however that could be used to supplement
the missing data. A list and map of the 253 stations can be found in Appendix B of this
document.

2.	Changes to AERMINUTE

The original version of AERMINUTE is version 11059. Following is a list of changes with each
subsequent version.

2.1 Version 11325

1. Modified subroutine CHECKWIND to adjust quality control flags 3, 4, and 5 when
checking the wind data line format. Flag 3 was modified to better check for four digit
character strings that may indicate a possible time. In version 11059 of AERMINUTE,
any four digit string was considered a possible time. In version 11325, the string is only
considered a possible time if the entire four digit string is a complete integer string, i.e.
1105 would be a possible time but not 110503. If a possible time is found flag 3 is set to
one, otherwise flag 3 is zero. Flag 4 previously checked for a 'M', 'N', or 'D' in column
39. Flag 4 now checks for a non-blank character in column 30. If column 30 contains a
non-blank character, then flag 4 is set to one. Otherwise, flag 4 is zero. Flag 5 as
modified to look for any non-blank character in column 67 of the data line. If a non-
blank character is found in column 67 flag 5 is set to one, otherwise flag 5 is zero. For
any of the three flags, if a value is one, the record is considered suspicious and not used
in hourly averaging. The record is output to check_records.dat.

1


-------
2.2 Version 14237

1.	Modified subroutine CHECKWIND to adjust quality control flags 6 through 9. Flags 6
through 9 were modified to account a change in the format of the 6405 1-minute data
files roughly beginning with year 2014 files. Flag 6 (2-minute wind direction) now
checks columns 70-74, flag 7 (2-minute wind speed) checks columns 76-79, flag 8(5-
second gust direction) checks columns 82-84 and flag 9 (5-second gust speed) checks for
columns 87-89. For these flags, if there is a number in any of those columns, the
respective flag is set to 0, otherwise the flag is set to 1. These changes allow
AERMINUTE to work with pre 2014 and 2014 and new files.

2.	Modified subroutine CHECKWIND to create a new flag 10. Flag 10 checks columns 64-
68 for non-blank characters. If a non-blank character is found flag 10 is set to 1,
otherwise it is set to 0.

3.	Modified subroutine CHECKWIND to create a new flag 11. Flag 11 checks column 90
for a non-blank character. If a non-blank character is found, flag 11 is set to 1, otherwise
it is set to 0.

4.	Modified subroutine CHECKWIND to make the previous versions of flags 10 and 11 to

12	and 13 respectively.

5.	Modified subroutine CHECKWIND to check for the number of fields in columns 67-90
if the record passes the strict quality control check, all flags are zero. The number of
fields should be four, representing 2-minute wind direction and speed and 5-second gust
direction and speed. If the number of fields is not equal to 4 then flag 12 is set 1 and flag

13	is set to the number of fields. If the number of fields is equal to 4 then flag 12 is set to
0 and flag 13 is set to 9.

6.	Modified subroutine CHECKWIND to increase size of variables aflag and iflagl from 11
to 13

7.	Modified module MAIN1 reset variable flagcounts from size 12 to 14.

8.	Modified subroutine READONE, modified variable flagstr from size 12 to 14 and
included descriptions of modified flags 6-9 and new flags 10 and 11. Also the format
statement for the counts of records was modified to left justify the text and right justify
the counts.

9.	Modified subroutine READLINE to increase length of variable aflag from 11 to 13 to
accommodate new flags.

2.3 Version 14337

1.	Modified subroutine CHECKWIND to remove the check on column 67 for non-blank
character and columns 64-68 for non-blank characters.

2.	Flags 6-12 were renumbered accordingly, flags 6-9 became flags 5-8 and flags 11 and 12
became flags 9 and 10.

3.	Modified subroutine CHECKWIND to search columns 68-90 for non-numeric columns
for flag 1. The check was originally columns 67-90.

4.	Modified subroutine CHECKWIND to decrease the size of variables aflag and iflagl
from 13 to 11.

5.	Modified module MAIN1 to reset variable flagcounts from size 14 to 12.

2


-------
6.	Modified subroutine READONE to reset variable flagstr from size 14 to 12 and included
descriptions of modified flags.

7.	Modified subroutine READLINE to decrease length of variable aflag from 13 to 11 to
accommodate new flags.

2.4 Version 15272

1.	Modified subroutine USERINP to add optional data section for 5-minute ASOS data files
(DSI-6401 format).

2.	Modified subroutine USERINP to allow for no 1-minute data file listing as long as
optional 5-minute data files are listed.

3.	Modified subroutine USERINP to allow for optional output files, SUB5FILE and
15FILE.

4.	Modified subroutine CHECKFILES to perform QA on 1-minute or optional 5-minute
data filenames.

5.	Added subroutines READFIVE, READ5, and CHECKWIND5 to read and QA 5-minute
data files.

6.	Added subroutine CHECKWBAN to check WBAN number for non-numeric characters
for 1-minute and 5-minute data files.

7.	Added subroutine SUB5 to substitute missing 1-minute data values with corresponding 5-
minute data values.

8.	Modified subroutine WRITEOUT to include 5-minute data summaries for summary file
and output file.

9.	Modified subroutine MINMAXONE to include source of minimum and maximum 2-
minute winds, i.e. 1-minute or 5-minute data file.

10.	Modified subroutine HOURLYMINMAX to include source of data (1-minute or 5-
minute) for hourly minimum and maximum wind speeds and directions.

3. Obtaining ASOS wind data

Recently, the National Climatic Data Center (NCDC) began archiving the 2-minute average
wind speeds for each minute of the hour for most ASOS stations for public access. These 2-
minute values have not been subjected to the METAR coding for calm and variable winds, but
have also been subjected to only limited quality control measures. However, the 2-minute winds
listed in the 5-minute files have been subjected to the METAR coding for calm and variable
winds. The 1-minute ASOS wind data consists of running 2-minute average winds, reported
every minute, for commissioned ASOS stations. The 1-minute ASOS wind data can be obtained
without cost through the National Center for Environmental Information (NCEI) website at
https://www.ncei.noaa.gov/data/automated-surface-observing-svstem-one-minute-pgl/access/
and the 5-minute data can be obtained at https://www.ncei.noaa.gov/data/automated-surface-
observing-svstem-five-minute/access/.

The 1-minute ASOS winds are in the DSI-6405 format and the 5-minute winds are in the DSI-
6401 format. For both types of data, for each station and year, files are available in monthly
blocks, i.e. one file per month for a station. For files downloaded prior to 2023 (regardless of the

3


-------
year of the data), the files are generally named 640Z0XXXXYYYYMM.dat where Z is 1 for
6401 (5-minute data) or 6405 (1-minute data), XXXX is the four-character station call sign, and
YYYY and MM are the 4-digit year and 2-digit month. Example 1-minute and 5-minute
filenames for Raleigh-Durham for January 2003 are '64050KRDU200301.dat' and
'64010KRDU200301.dat' respectively. For files downloaded beginning in 2023 (regardless of
year) the 1-minute files are generally named asos-lmin-pgl-XXXX-YYYYMM.dat and 5-
minute files are generally named asos-5min-XXXX-YYYYMM.dat where XXXX is the 4-
character station call sign, and YYYY and MM are the 4-digit year and 2-digit month. First-
order stations' archives generally begin with data for 2000 for both datasets. Other stations'
archives generally start in March 2005 for both datasets.

The file format of the 1-minute files can be found at https://www.ncei.noaa.gov/data/automated-
surface-observing-svstem-one-minute-pgl/doc/asos-lmin-pgl documentation.pdf and the
format for the 5-minute files (post 1998) can be found at

https://www.ncei.noaa.gov/data/automated-surface-observing-svstem-five-minute/doc/asos-
5min documentation.pdf

The general format of a 1-minute file and variable descriptions is shown in Figure 1 and a 5-
minute file is shown in Figure 2.

13874KATL ATL2003010100000500	0.059 N	0.118 N	135	10

13874KATL ATL2003010100010501	0.058 N	0.118 N	136	9

13874KATL ATL2003010100020502	0.058 N	0.118 N	141	9

13874KATL ATL2003010100030503	0.056 N	0.118 N	148	10

13874KATL ATL2003010100040504	0.054 N	0.119 N	154	11

13874KATL ATL2003010100050505	0.054 N	0.120 N	157	11

13874KATL ATL2003010100060506	0.052 N	0.117 N	160	11

13874KATL ATL2003010100070507	0.053 N	0.117 N	156	10

125	10	09R60+

131	11	09R60+

143	11	09R60+

164	13	09R60+

151	13	09R60+

163	13	09R60+

166	13	09R60+

154	12	09R60+

Variable

Columns

Station WBAN Number

1-5

4-letter station call sign (with leading K or P in most cases)

6-9

3-letter station call sign (without leading character)

11-13

4-digit year in local standard time (LST)

14-17

2-digit month in LST

18-19

2-digit day in LST

20-21

2-digit hour (00-23) in LST

22-23

2-digit minute (00-59) in LST

24-25

2-digit hour (00-23) in Universal Time Coordinate (UTC)

26-27

2-digit minute (00-59) in UTC

28-29

Visible extinction coefficient at first sensor (N=night, D=day, M=missing)

31-4P

Visible extinction coefficient at second sensor (N=night, D=day, M=missing)

Varies

2-minute average wind direction (deg)

67-74*

2-minute average wind speed (knots)

75-79*

Maximum 5-second wind speed direction (deg)

80-84*

Maximum 5-second wind speed (knots)

85-89*

Runway visual range (hundreds of feet)

92-97*

*Column placement is not always fixed for these variables. Ranges are based on visual inspection of files during
program testing.	

Figure 1. General format of an ASOS 1-minute file.

4


-------
As can be seen in the variable descriptions in Figure 1, the station information (WBAN and call
signs) and dates are in fixed formats while the wind data are not always in the same columns.
AERMINUTE takes the wind data format variability into consideration when reading the wind
data variables during file processing and looks for ranges of columns for the data variables.

Also, as discussed in more detail in Section 5.2 and Appendix A, the 1-minute ASOS data files
often records with "garbled" data that do not follow any clear format. For the 5-minute files, the
files appear to be in a more consistent format. Note in Figure 2, winds reported as '00000KT'
have been subjected to the METAR calms coding and winds starting with 'VRB' have been
subjected to the METAR variable wind coding.

5


-------
03032K6R6 6R620050303044010103/03/05 04:40:31 5-MIN K6R6 031040Z AUTO 00000KT 07/04 A2999 2260 82 1900 000/00 RMK A02 PWINO TSNO

03032K6R6 6R620050303044510103/03/05 04:45:31 5-MIN K6R6 031045Z AUTO 30003KT 07/04 A2999 2260 82 1900 300/03 RMK A02 PWINO TSNO

03032K6R6 6R620050303045011803/03/05 04:50:31 5-MIN K6R6 031050Z AUTO 29003KT 07/04 A2999 2260 82 1900 280/03 RMK A02 SLP139 T00720044 PWINO TSNO

03032K6R6 6R620050303045510103/03/05 04:55:31 5-MIN K6R6 031055Z AUTO 29004KT 07/04 A2999 2260 82 1900 290/04 RMK A02 PWINO TSNO

03032K6R6 6R620050303050010103/03/05 05:00:31 5-MIN K6R6 031100Z AUTO 29005KT 07/04 A3000 2250 86 1800 290/05 RMK A02 PWINO TSNO

03032K6R6 6R620050303050510103/03/05 05:05:31 5-MIN K6R6 031105Z AUTO 28006KT 07/04 A3000 2250 82 1800 270/06 RMK A02 PWINO TSNO

03032K6R6 6R620050303051010103/03/05 05:10:31 5-MIN K6R6 031110Z AUTO 29007KT 06/04 A3000 2250 86 1800 290/07 RMK A02 PWINO TSNO

03032K6R6 6R620050303111010103/03/05 11:10:31 5-MIN K6R6 031710Z AUTO VRB04KT 14/08 A3009 2160 64 2600 VRB/04 RMK A02 PWINO TSNO

03032K6R6 6R620050303180010803/03/05 18:00:31 5-MIN K6R6 040000Z AUTO 13012G19KT 19/07 A2995 2290 44 3400 130/12G19 RMK A02 PWINO TSNO

Variable

Columns

Station WBAN Number

1-5

4-letter station call sign (with leading K or P in most cases)

6-9

3-letter station call sign (without leading character)

11-13

4-digit year in local standard time (LST)

14-17

2-digit month in LST

18-19

2-digit day in LST

20-21

2-digit hour (00-23) in LST

22-23

2-digit minute at 5-minute interval (00-55) in LST

24-25

Record length starting at column 29

26-28

Date in LST (MM/DD/YY)

29-36

Tim in LST (HH:MM:SS)

38-45

Data type (always "5-min")

48-52

4-letter station call sign (with leading K in most cases)

54-57

Date and time in UTC (ddhhmmZ)

59-65

Observation type (only present when in auto mode =

67-70

'AUTO')



2-minute average wind direction in tens of degrees

67-68 (if'AUTO' not present), 72-73 (if'AUTO'

(degrees/10)

present)

2-minute average wind speed (knots)

69-71 (if'AUTO' not present), 74-76 (if'AUTO'
present)

Figure 2. General format of an ASOS 5-minute file.

6


-------
4. Processing and hourly averaging

4.1 User inputs

The user must create a file that contains information that controls the processing in
AERMINUTE, including several pieces of information about the station as well as the filenames
of the 1-minute data files and optional 5-minute files. The user is prompted for the name of the
input file (Figure 3). The structure and keywords of the file are shown in

Figure 4. In the input file, lines that start with '**' in the first two columns are comment lines
and are not processed by AERMINUTE. Each section of information is described below.

Command Prompt - ,,\aerminute_15272

©	i

Program start date & tine: September 30, 2015 11:31:51 AM
tttttttttttttttttttttttttttttltttttttttttttttttttttttttttttttttt INPUTS tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt

Enter the name of the AERMINUTE control File.

If the filename or pathname contains spaces enclose in quotations

Figure 3. Initial prompt of name of AERMINUTE control file.

7


-------
STARTEND start month start year end month end year

IFWGROUP Status comm

month comm day comm year

DATAFILE STARTING
1-minute data file list
DATAFILE FINISHED



DAT5FILE STARTING
5-minute data file list
DAT5FILE FINISHED

(Optional)

SURFDATA STARTING
Surface files list
SURFDATA FINISHED

(Optional)

OUTFILES STARTING
HOURFILE name
SUMMFILE name
COMPFILE name
1 5 FILE name
SUB5FILE name
OUTFILES FINISHED

(Optional)
(Optional)
(Optional)
(Optional)

Figure 4. AERMINUTE control input file structure.

4.1.1 STARTEND

The keyword STARTEND lists the start month, start year, end month and end year of data
processing. These are denoted by the variables start month, start year, end month, and
endjyear. The start day and hour are assumed to be one. The end day is the last day of the end
month and the end hour is assumed to be hour 24.

4 .1.2 IFWGROUP

The keyword IFWGROUP denotes if the station is part of the Ice Free Winds (IFW) group
during the period denoted by the dates listed with STARTEND. The IFW group is composed of
NWS and FAA ASOS sites that use sonic anemometers instead of cup and vane anemometers to
measure winds. AERMINUTE treats wind speeds less than 2 knots differently based on whether
the station uses a sonic or cup and vane anemometer during the data period. A list of stations
with their IFW installation dates, as of October 27, 2009, can be found at:
https://www.weather.gov/media/asos/ASQS%20Implementation/IFW stat.pdf. The variable,
status, denotes if the station is part of the IFW group. If a station is part of the IFW group during
the data period denoted by STARTEND, status should be set to an upper or lowercase "Y"
followed by the commission month, day, and 4-digit year. The hour of commission is assumed
to be hour 1 of the commission date. If a station is not part of the IFW group during the data

8


-------
period denoted by STARTEND or is not part of the IFW group at all, status should be set to an
uppercase or lowercase "N," and any text after the status variable is ignored. When
AERMINUTE detects that the station is part of the IFW group, it checks the commission date
against the end date listed in STARTEND. If the commission date is after the end date in
STARTEND, AERMINUTE resets the status of the station to "no" and notifies the user. This
would be the equivalent of setting IFWGROUP to "N" in the input file. If the IFW commission
date is before or after the start date but is before the end date, the IFW status is left unchanged
from the user input. If the data period being processed is after 2009 and the station is not listed
in the station list referenced above, it may be reasonable to assume that the station is part of the
IFW group and the IFW commission date can be set to the start date set with the STARTEND
keyword. Users may want to consult with NWS station responsible for the ASOS to verify if the
station is part of the IFW group.

4.1.3 DATAFILE

The DATAFILE section lists the 1-minute data files to be read by AERMINUTE. The
DATAFILE section begins with "DATAFILE STARTING." On lines below "DATAFILE
STARTING" the user lists the 1-minute data files, one file per line. After the last file, the
DATAFILE section ends with "DATAFILE FINISHED." Both "DATAFILE STARTING" and
"DATAFILE FINISHED" must be present or AERMINUTE will abort and notify the user of the
error if processing 1-minute data only. If including the optional 5-minute data, if both
"DATAFILE STARTING" and "DATAFILE FINISHED" are not found, AERMINUTE will
issue a warning and use the 5-minute data.

If multiple 1-minute data files are to be read into AERMINUTE, they do not have to be in
temporal sequential order and can cover dates not included in the file processing. However,
AERMINUTE will read all the data files, so if the user only wants to process a year or a few
months, the user may want to list only those files, or comment out files outside the data period,
to speed up processing. The files should be for one station only. If more than one station is
detected by AERMINUTE based on the WBAN number, a fatal error is issued and the
AERMINUTE program aborts further processing. If a change in the call sign is detected, but the
WBAN number does not change, the user is warned that the station call sign has changed during
processing. If the files are in the current working folder1 or directory, just the filenames can be
listed. If the files are in a different folder than the current folder, the filenames should include
the full pathame of the files. If the pathname or filenames have spaces in the names, the entire
text string should be enclosed in quotations. See Figure 5 for example inputs. In Figure 5a, the
files are located in a folder called "example files" that is a subfolder of the current working
directory. Note that the entire pathname is in quotations and that the files are not listed in
sequential order; i.e. January 2003 is listed at the end. Figure 5b shows files for multiple years
that are located in the current working directory.

1 Current working folder refers to the folder or directory where processing is taking place. If the user is executing
AERMINUTE by double clicking the AERMINUTE executable icon, the current folder is the location of the icon.
If the user is executing AERMINUTE from a command line, i.e. DOS, Linux, or Unix window, the current folder or
directory is the location the user is in at the time of processing.

9


-------
"example filHs\64050hATL200302 dat"



"example files\64050KATL200303 dat"

PI

"example fil
-------
DAT5FILE section ends with "DAT5FILE FINISHED " Both "DAT5FILE STARTING" and
"DAT5FILE FINISHED" must be present when processing 5-minute data or AERMINUTE will
abort and notify the user of the error.

As with the 1-minute data files, if multiple 5-minute data files are to be read into AERMINUTE,
they do not have to be in temporal sequential order and can cover dates not included in the file
processing. However, AERMINUTE will read all the data files, so if the user only wants to
process a year or a few months, the user may want to list only those files, or comment out files
outside the data period, to speed up processing. The files should be for one station only. If more
than one station is detected by AERMINUTE based on the WBAN number, a fatal error is issued
and the AERMINUTE program aborts further processing. AERMINUTE will also abort if the
WBAN number from the 5-minute files differs from those of the 1-minute files. If a change in
the call sign is detected, but the WBAN number does not change, the user is warned that the
station call sign has changed during processing. File listing for the 5-minute data files is similar
that described for the 1-minute data files and shown in Figure 5, i.e. use of quotations,
pathnames, etc.

4.1.5 SURFDATA

The keyword SURFDATA is optional. The SURFDATA section lists data files of standard
NWS observations. These are the same files that would be read by AERMET in Stage 1 when
processing NWS surface data. Currently, AERMINUTE is only configured to read Integrated
Surface Hourly Data (ISHD) in the DS-3505 full archival format. The purpose of reading these
data files is to compare the non-quality controlled 1-minute winds from the 1-minute data files
listed in the DATAFILE section and optional 5-minute data against the quality controlled
standard observations. The SURFDATA section follows the same syntax as the DATAFILE
section. The section starts with the keywords "SURFDATA STARTING" and ends with
"SURFDATA FINISHED." The standard observation files are listed between the lines as shown
in

Figure 4. The listing of the standard observation files also follows the convention of the 1-
minute data files, i.e. files with spaces in the names must be listed in quotation marks and full or
relative pathnames must be listed when the files are not in the current directory. If processing
the standard observations, both "SURFDATA STARTING" and "SURFDATA FINISHED"
must be present or AERMINUTE will abort and notify the user. If the SURFDATA section is
missing, AERMINUTE will not abort as long as the COMPFILE keyword is not listed in the
OUTFILES section (See Section 4.1.6).

4.1.6. OUTFILES

The OUTFILES section lists three files that can be output:

•	HOURFILE: The hourly averaged winds output from AERMINUTE and
formatted for input into AERMET in Stage 2. This keyword is mandatory.

•	SUMMFILE: A comma delimited summary file that details the number of
minutes used for each hour as well as minimum, maximum, and average wind
speed and direction. This keyword is optional.

11


-------
•	COMPFILE: A comma delimited file that lists the winds from the 1-minute data
and standard observations for all observation times listed in the standard
observations file. This keyword must be present if the SURFDATA keywords are
used or AERMINUTE will abort. If COMPFILE is present and the SURFDATA
keywords are not present, AERMINUTE will also abort.

•	15 FILE: A comma delimited file that lists the 1-minute and optional 5-minute
winds for dates and times where both data are non-missing. This keyword is
optional. However, if the keyword is present and the user is not inputting 5-
minute data or the user is not inputting 1-minute data, AERMINUTE will abort.

•	SUB5FILE: A comma delimited file that lists the dates and times as well as the
winds from the optional 5-minute data that is substituted into the 1-minute data
arrays. This keyword is optional. However, if the keyword is present and the
user is not inputting 5-minute data, AERMINUTE will abort.

The syntax of the OUTFILES section is similar to DATAFILE, DAT5FILE and SURFDATA.
The section starts with "OUTFILES STARTING" and ends with "OUTFILES FINISHED."

Both keyword lines must be present or AERMINUTE will abort.

An example input file for Richmond, VA for 2005 is shown in Figure 6. The data period to
process is January through December 2005. The IFWGROUP status is set to yes with a
commission date of March 28, 2007. Because the IFW commission date is after the end date of
December 31, 2005, AERMINUTE will reset the IFWGROUP status to no and notify the user.
The DATAFILES section contains the 12 monthly 1-minute data files as downloaded from the
NCDC website. The optional 5-minute data processing is also included. The optional
comparison to the standard observations will be performed with the standard observations file
listed. This should be the same file as read into AERMET for stage 1 processing of NWS data.
Finally, the output files are listed and the optional summary file will be output. Since
comparisons against the standard observations will be made, the optional COMPFILE must be
listed as well. The optional 1-minute and 5-minute comparison file, 15 FILE and 5-minute
substitution file, SUB5FILE are also listed.

12


-------
STARTEND 1 2005 12 2005

IFWGROUP y 3 28 2007

DATAFILE STARTING

64050KRIC200501.dat

64050KRIC200502.dat

64050KRIC200503.dat

64050KRIC200504.dat

64050KRIC200505.dat

64050KRIC200506.dat

64050KRIC200507.dat

64050KRIC200508.dat

64050KRIC200509.dat

64050KRIC200510.dat

64050KRIC200511.dat

64050KRIC200512.dat

DATAFILE FINISHED

DAT5FILE STARTING

64010KRIC200501.dat

64010KRIC200502.dat

64010KRIC200503.dat

64010KRIC200504.dat

64010KRIC200505.dat

64010KRIC200506.dat

64010KRIC200507.dat

64010KRIC200508.dat

64010KRIC200509.dat

64010KRIC200510.dat

64010KRIC200511.dat

64010KRIC200512.dat

DAT5FILE FINISHED

SURFDATA STARTING
724010-13740-2005.dat
SURFDATA FINISHED

OUTFILES STARTING
HOURFILE richmod_05.dat
SUMMFILE minute summary richmond.csv
COMPFILE checks richmond.csv
15 FILE ric_15_comps.csv
SUB5FILE ric_sub_5.csv

OUTFILES FINISHED	

Figure 6. Example AERMENUTE control input file.

13


-------
4.2. File checking

Once AERMINUTE has read the input control file, the program reads the list of 1-minute data
files and checks that each file exists and that there are no duplicate filenames. If there are non-
existent files or duplicate names, AERMINUTE notifies the users of the filenames and aborts. A
similar procedure is done for the 5-minute data files in the DAT5FILE section and the standard
observation data files in the SURFDATA section.

4.3 Record processing

4.3.1 1-MINUTE DATA FILES

Since AERMINUTE reports running 2-minute average winds every minute, non-overlapping
minutes are used in the hourly averages. That is, if winds listed at minute 2 are used, winds
listed at minute 3 are not used but winds listed at minute 4 are used as they do not overlap with
the minute 2 winds. Even minute winds are given first priority in calculating hourly average
winds. The times listed in the data files are assumed to be the ending time, i.e. the winds listed at
minute 2 are for minutes 1 and 2. Winds from minute 1 of any hour are not used at all since the
2-minute average wind spans two hours. The hourly averaged winds are assumed to be hour
ending, i.e. hour 1 average winds are from hour 0, minutes 2, 4, 6, etc. Winds for hour 1, minute
0 are also part of the hour 1 averaged winds. Winds in the files are reported for hours 0 through
23. During processing, hour 0 minute 0 winds become hour 24 minute 60 winds of the previous
day, since AERMET and AERMOD process hours 1 through 24.

Another issue with 1-minute ASOS wind data that influences the procedures used to process the
data is that all ASOS wind speeds, including 1-minute and ASOS data and ASOS data in
standard archives, are truncated, rather than rounded, to whole knots. Note that the hourly-
averaged wind speeds generated by AERMINUTE are not adjusted to account for the bias
introduced by truncating the ASOS wind speeds to whole knots. However, the AERMET
processing, beginning with version 11059, applies the truncation adjustment for all ASOS wind
speeds, including those derived from 1-minute data (EPA, 2023b).

The following steps are followed when reading a record from the 1-minute files:

•	The minute in LST is read from the record. If the minute is less than zero or equal to one,
the processing for that record is stopped and the next record is read.

•	If the minute is valid (not less than zero or equal to one), the record format of the wind
data section is checked. For details about the record format quality check see Appendix
A.

•	If the record passes the quality control check, the date in LST is read from the record. If
the date is outside the processing range, processing stops for the record and processing
for the next record begins.

•	If the record's date is inside the processing date range, the 2-minute average wind speed
and direction are processed as:

o If the wind speed is less than 2 knots:

14


-------
¦	If the station is not part of the IFW group, or the station is part of the IFW
group and the date and time of the record is before the station's IFW
commission date, the 2-minute wind is considered to be "calm" and the
wind speed is set to half the instrument threshold, i.e., 0.51 m/s (1 knot),
consistent with guidance for processing site-specific wind data. The wind
speed will be used in calculating the hourly average wind speed but the
direction is considered to be invalid and will not be used in calculating the
hourly wind direction.

¦	If the station is part of the IFW group and the record's date is on or after
the station's IFW commission date, the minute is flagged as non-calm and
the speeds are converted from knots to m/s, since the threshold for sonic
anemometers is effectively zero. The wind speed and wind direction are
used in hourly averages.

o If the wind speed is 2 knots or greater, regardless of IFW group status and date,
the 2-minute wind speed is converted from knots to m/s. The wind speed and
wind direction are used in hourly averages,
o AERMINUTE uses a unit vector approach to calculate the hourly-averaged wind
direction from the 2-minute average values. The 2-minute wind directions are
converted to x and y-component wind directions using Equations 1 and 2 below,
which are the functions inside the summations of equations 6.2.17 and 6.2.18 of
the meteorological guidance document (EPA, 2000).

vx = "Sin 0	(1)

vy - - cos 6	(2)

where vx and vy are the x- and y-components of the 2-minute wind direction 9.

As noted in the bullets above, while reading the 1-minute data files, AERMINUTE determines if
any records are within the data period set by the dates listed in STARTEND of the input file. If
no records are within the data period, AERMINUTE notifies the user of the earliest and latest
dates in the data files and aborts. Such a situation may occur because the user entered the wrong
dates on STARTEND or the wrong data files in the DATAFILES section of the input file.

4.3.2 5-MINUTE DATA FILES

For winds, the values recorded in the 5-minute data files are the 2-minute winds at the 5 minute
times, 5 minutes after the hour, 10 minutes after the hour, etc. As noted in Section 3, the 5-
minute data files are more consistent in format than the 1-minute data files.

The following steps are followed when reading a record from the 5-minute files and are similar
to the processing of the 1-minute files discussed in Section 4.3.1:

•	The minute in LST is read from the record. If the minute is less than zero the processing
for that record is stopped and the next record is read.

•	If the minute is valid (not less than zero), the record format of the wind data section is
checked. For details about the record format quality check see Appendix A.

15


-------
•	If the record passes the quality control check, the date in LST is read from the record. If
the date is outside the processing range, processing stops for the record and processing
for the next record begins.

•	If the record's date is inside the processing date range and wind is not calm or variable,
the 2-minute average wind speed and direction are processed as discussed in Section
4.3.1.

•	Because the wind direction is reported to the nearest ten degrees, a randomized wind
direction is calculated for the 5-minute wind direction. This step is analogous to what is
done in AERMET stage 3 for wind directions at NWS sites. For example, a wind
direction of 250° is reported in the 5-minute data, AERMINUTE resets the wind direction
to a number between 245° and 254°, inclusive.

As noted in the bullets above, while reading the 5-minute data files, AERMINUTE determines if
any records are within the data period set by the dates listed in STARTEND of the input file. If
no records are within the data period, AERMINUTE notifies the user of the earliest and latest
dates in the data files and notifies the user no 5-minute data substitution will occur. Such a
situation may occur because the user entered the wrong dates on STARTEND or the wrong data
files in the DATAFILES section of the input file.

4.4 Data substitution and flagging 2-minute values for hourly averaging

After processing the 1-minute data files and any 5-minute data files, AERMINUTE substitutes
any missing or calm 1-minute values with the values from the 5-minute data if the 5-minute
value for the minute is not missing or calm (wind direction=0° and wind speed=0 m/s)2 After
any data substitution, AERMINUTE determines if any odd minutes are to be used and which
hours are to be averaged. AERMINUTE will use all non-overlapping valid minutes to calculate
an hourly average. For each valid odd minute (calm or non-calm), if the even minutes just
before and just after the odd minute are not valid, the odd minute is flagged as a minute that can
be used. For example for hour 1, if minute 3 is valid but minutes 2 or 4 are also valid, minute 3
is not used. However, if both minutes 2 and 4 are not valid, minute 3 can be used in the hourly
averaging.

After determining all minutes that can be used for averaging, AERMINUTE determines the
status of the hour:

•	If an hour has at least two usable non-calm observations in the first half of the hour
(minutes 2 through 30) or at least one usable non-calm observation in the last half of the
hour (minutes 31 through 60) and,

o If 50% or more of the usable observations are non-calm, then an hourly wind

speed and direction will be calculated for the hour or,
o If less than 50% of the observations are non-calm, then the hour is considered
calm and the wind speed and direction are set to zero.

•	If the hour does not meet either of the number of observations per half hour above,
average wind speed and direction will not be calculated for the hour.

2 Herafter, 1-minute data refers to the original 1-minute with substituted 5-minute data.

16


-------
Only non-calm observations are considered because the calm wind directions are not used. If an
hour contained only calm minutes, no wind direction can be computed for the hour, and the
hourly-average is coded as missing.

4.5 Quality control

Before hourly averaging of the 1-minute winds is performed, the user can direct AERMINUTE
to read the standard hourly observations file that is read into AERMET. Currently this is limited
to ISH (DS-3505) files. AERMINUTE reads the standard observations and compares the winds
to the winds from the 1-minute data for times when there are observations in the both standard
observations files and the 1-minute files. The comparison is done as a quality control step on the
1-minute data to validate against quality controlled data from the standard observations. The
following checks are performed:

•	For standard observations that are calm, the corresponding 1-minute data are checked for:

o The number of missing 1-minute observations
o The number of 1-minute observations that are less than 3 knots
o The number of 1-minute observations that are 3 knots and greater

•	For standard observations that are variable, the corresponding 1-minute data are checked
for:

o The number of missing 1-minute observations
o The number of non-missing 1-minute observations

o The number of observations where the absolute difference in the 1-minute wind
speed and the standard observation wind speed are:

¦	0 m/s

¦	0.1 or 0.2 m/s

¦	0.3 through 0.5 m/s (inclusive)

¦	0.5 through 1.0 m/s (inclusive)

¦	1.0 through 3.0 m/s (inclusive)

¦	3.0 through 5.0 m/s (inclusive)

¦	>3.0 m/s

•	For standard observations that are normal or valid, the corresponding 1-minute data are
checked for:

o The number of missing 1-minute observations
o The number of non-missing 1-minute observations

o The number of observations where the absolute difference in the 1-minute wind
speed and the standard observation wind speed are:

¦	0 m/s

¦	0.1 or 0.2 m/s

¦	0.3 through 0.5 m/s (inclusive)

¦	0.5 through 1.0 m/s

¦	1.0 through 3.0 m/s

¦	3.0 through 5.0 m/s

¦	> 5.0 m/s

17


-------
o The number of observations where the absolute difference in the 1-minute wind
direction (nearest 10 degrees) and standard observations are:

¦	0 degrees

¦	10 degree increments (10, 20, 30, etc.)

4.6 Averaging

Hourly averaged wind speeds are the arithmetic averages of the wind speeds for all valid minutes
for the hour, including those flagged as calm, using half the threshold (Equation 3).

1 N

s = - Es,

A f	'

(3)

N^'

Where S is the hourly averaged wind speed, N is the number of valid observations or minutes for
the hour, and Si is the two minute wind speed for minute i.

For wind directions, the x- and y-components of non-calm observations are summed according to
equations 6.2.17 and 6.2.18 of the meteorological monitoring guidance (EPA, 2000),
summarized in equations 4 and 5 below with vxi and vyi calculated in equations 1 and 2. The
hourly wind direction is calculated based on a unit-vector approach, using equation 6.2.19 of the
meteorological monitoring guidance (EPA, 2000), summarized in equation 6.

1 N

(4)

1 N

V* = N^	<5>

6 = Arc tan^^/^ j + CORR	(6)

Where Vx and Vy are the hourly averaged x- and y-components of the wind respectively, 9 is the
hourly averaged wind direction, N is the number of observations used for the hour, and

= 180 for Vx > 0 and Vy > 0 or Vx < 0 and Vy > 0
CORR = 0 for Vx < 0 and Vy < 0
= 360 for Vx > 0 and Vy < 0

5. Outputs

Up to eight output files are generated by AERMINUTE, depending on the user options:
• Hourly averaged winds file (HOURFILE), formatted for input to AERMET Stage 2

18


-------
•	Good_records.dat

•	Bad_records.dat

•	Check_records.dat

•	Optional summary file (SUMMFILE)

•	Optional standard observations vs. 1-minute data file (COMPFILE)

•	Optional 1-minute and 5-minute comparison file (15FILE)

•	Optional file listing of minutes substituted with 5-minute data (SUB5FILE)

•	AERMINUTE.log

5.1 Hourly winds fHOURFILE)

The hourly average winds file is the file that is input to AERMET stage 2 processing. The
filename is set by the user using the HOURFILE keyword in the control input file. The file
format of the hourly averaged file is shown in Figure 7. The first line of the file contains
information about the AERMINUTE program and the station: AERMINUTE version number,
station WBAN, 4-character station call sign, IFW status, IFW date, and beginning with
AERMINUTE version 15272, whether 5-minute data is used ("Y" for yes, "N" for no). If the
station is part of the IFW group for the data period, the IFW status is "Y " Otherwise it is "N "
The IFW flag is considered for the data period only. If the station becomes part of the IFW
group after the data period, the flag will be set to "N " If the station is part of the IFW group for
the data period, the IFW installation date is listed as a character string composed of 4-digit year,
2-digit month, and 2-digit day. If the station is not part of the IFW group for the data period, the
IFW date is not listed. For the example shown Figure 7, Richmond International Airport (KRIC)
does not become part of the IFW group until March 28, 2007, so the IFW status is no and the
date is not included.

Beginning with line two, the hourly averaged winds are listed. The order of variables is listed in
Figure 7. AERMINUTE writes the output in a fixed format, but AERMET reads the data in free
format, i.e. the data fields are separated by spaces. AERMINUTE writes to a fixed format for
visual purposes only. For hours that are missing or not considered valid due to an insufficient
number of non-calm observations, the wind speed and direction are both set to 999.0. Calm
hours are denoted by a wind speed of 0.0 and wind direction of 0.0.

19


-------
AERMINUTE Version 15272 WBAN: 13740 Call sign: KRIC

IFW: N 5-MIN USED: Y

5 111

2.50 201.0



5 112

2.29 208.0



5 113

2.35 197.0



5 114

1.05 199.0



5 115

0.97 188.0



5 116

2.21 193.0



5 117

2.28 193.0



5 118

1.78 183.0



5 119

0.00 0.0



Variables

2-digit year





2-digit month





2-digit day





2-digit hour (1-24)



Wind speed (m/s)



Wind direction (degrees)



Figure 7. Example hourly averaged winds and order of variables.

5.2 Record check files

AERMINUTE generates three files that contain the full 1-minute data records as read from the 1-
minute data files, depending on whether AERMINUTE determines that the record contains
"good" data that can be used to calculate the hourly averages, the record do not meet strict
quality control checks on the format but may contain useable data, or the record is unusable due
to serious formatting problems. Each of these categories of data records are written to separate
files in order to fully document the data that were used or rejected by AERMINUTE.

The file 'good_records.dat' contains the records from the 1-minute files that meet the strict
quality control checks in AERMINUTE and the winds from these files are considered valid. A
detailed description of the quality control check is in Appendix A. These records include those
observations for odd minutes that may or may not be used in hourly averages. The user should be
able to rename good_records.dat (to avoid overwriting the data during processing), replace the
files listed in inputfiles.txt with the renamed file and rerun AERMINUTE and get the exact same
answers as using the full list of inputs. An example of good_records.dat is shown in Appendix
A.

The second file is called 'check_records.dat'. This is a file containing records that did not meet
the strict quality control of AERMINUTE and are not used in calculating hourly averages, but
the wind observations are close to the locations, i.e. column locations, set by strict quality
control. These records also contain the flags detailing the quality control failures. See
Appendix A for an example of check_records.dat. Often, manual editing by the user could allow
these records to be used by AERMINUTE. When viewing the data, the user should check
observations in good_records.dat from the same hour to determine if data is reasonable when
compared to other observations for the hour. If there is any doubt about the record, the
'check_records.dat' data should not be used in the hourly averages.

20


-------
A third file output by AERMINUTE is called 'bad_records.dat'. This file contains records from
the 1-minute files that did not meet the strict quality controls in AERMINUTE, and are unlikely
to contain usable data. This file also includes flags indicating what quality control checks failed.
These records do not meet the criteria outlined for acceptance into good_records.dat and are not
used. See Appendix A for details about the flags. This file should be reviewed by the user since
the quality and formatting of the 1-minute files varies from station to station and by year.

If the user determines that additional valid data can be obtained by appropriately editing the
'check_records.dat' data file, the user can rename the 'good_records.dat' and
'check_records.dat' files, replace the files listed in the control input file with these renamed files
and rerun AERMINUTE to get new hourly averages.

Similar files to the good, bad, and check record files for the 1-minute files are generated for the
5-minute data files, when processed. These files are called 'good_records_5.dat' and
bad_records_5.dat.' These files are analogous to 'good_records.dat' and 'bad_records.dat.' A
third file called 'calm_variable_5.dat' is generated for the 5-minute data and it contains the
records that are calm or variable in the 5-minute data. These are records where the winds are
reported as '00000KT' for calms and contain the string 'VRB' in the wind direction field for
variable winds, i.e. 'VRB03KT'. Records in 'bad_records_5.dat' and 'calm_variable_5.dat' are
not used in 5-minute data processing.

5.3 Summary file (SUMMFILE)

AERMINUTE can also output a comma delimited summary file that is named via the optional
SUMMFILE keyword in the AERMINUTE input file. The SUMMFILE lists each hour in the
data period, including those not in the 1-minute files, with counts of minutes for the hour and can
be used as a quality assurance check against the hourly averaged winds file. Also included for
each hour are the minimum and maximum 2-minute wind speed and direction used in the hourly
calculations, as well as the hourly averaged wind speed and direction that are listed in the
HOURFILE. The minimum wind speed and direction are unpaired in time, i.e. they may not
represent the same time. The same is true for the maximum wind speed and direction. An
example of the file is shown in Figure 8, along with the format. In this example, 5-minute data
was not read by AERMINUTE. Figure 9 shows an example summary file with 5-minute
information. When 5-minute data is read by AERMINUTE, the summary file lists the number 5-
minute values substituted into the 1-minute data as well as the source (1 or 5 minute data) of the
minimum and maximum wind speeds and minimum and maximum wind directions. If there
were observations for an hour, the keep flag for the hour is "V", "C", or "NV." Hours with a
keep flag of "V" have hourly averaged winds in the hourly average winds file. Hours with a
keep flag of "C" are calm hours. Hours with a keep flag of "NV" had observations for the hour
but did not meet the completeness criteria for the hour. Hours that were not in the files or had no
minutes in the file that met the quality control criteria are denoted by "M" for the keep flag.

After the keep flag, the IFW status of the hour is shown. A value of 0 means that the station was
not part of the IFW group for that hour. Missing hours will always have a value of 0 for the IFW
group. A value of 1 denotes the station was part of the IFW group for the hour. For the minute
counts, the number of total minutes read for the hour, total calms, even minutes, even calms, odd
minutes, odd calms, odd minutes used in hourly averages, and odd calms used in hourly averages

21


-------
are listed. When processing 5-minute data files, these counts include any substituted 5-minute
data. The maximum number of total minutes or total calms for an hour is 59. The maximum
number of even minutes or even calms for an hour is 30. The maximum number of odd minutes
or odd calms is 29 (minute 1 is excluded). The maximum number of odd minutes used or odd
calms used is 29. If the number of odd minutes used or odd calms used is 29, then the number of
even minutes should be zero, since overlapping observations are not used. When reviewing the
minute counts and looking at the raw 2-minute winds, the user should remember that the counts
for an hour are for minutes whose actual reporting hour is the hour before; i.e. counts for 0100
are for minutes whose reported hour in the 1-minute files is hour 00.

22


-------
Date,hr,flag,IFW flag,total minutes,total calms,total even,even calms,total odd,total odd calm,odd used,odd calms
used,min speed,avg speed,max speed,min dir,avg dir,max dir

20050101.01,V,	0,59, 0,30, 0,29, 0, 0, 0, 1.53, 2.50, 3.57,182,201,217

20050101.02,V,	0,59, 0,30, 0,29, 0, 0, 0, 1.53, 2.29, 2.55,191,208,225

20050101.03,V,	0,59, 0,30, 0,29, 0, 0, 0, 1.53, 2.35, 3.06,184,197,223

20050101.04,V,	0,59,18,30, 9,29, 9, 0, 0, 0.51, 1.05, 2.04,176,199,279

20050101.05,V,	0,59,28,30,14,29,14, 0, 0, 0.51, 0.97, 1.53,157,188,209

20050101.06,V,	0,59, 0,30, 0,29, 0, 0, 0, 1.53, 2.21, 3.06,186,193,199

Variables

Date

Date of observation (YYYYMMDD)

Hr

Hour of observation (01-24)

Flag

Flag denoting if hour is valid (V), calm (C), non-valid (NV), or missing (M)

IFW flag

Integer code corresponding to IFW status (0=not IFW during data period, l=part of IFW group
during data period)

Total minutes

Total number of minutes read from 1-minute files for hour

Total calms

Total number of calm minutes for hour

Total even

Total even minutes read from files for hour

Even calms

Total number of even minutes with calm winds for hour

Total odd

Total odd minutes read from files for hour

Total odd calm

Total number of odd minutes with calm winds for hour

Odd used

Total odd minutes used in hourly average winds for hour

Odd calms used

Total number of odd minutes with calm winds used in hour average winds for hour

Min speed

Minimum 2-minute wind speed (m/s) for the hour

Avg speed

Hourly averaged wind speed (m/s)

Max speed

Maximum 2-minute wind speed (m/s) for the hour

Min dir

Minimum 2-minute wind direction (m/s) for the hour

Avg dir

Hourly averaged wind direction

Max dir

Maximum 2-minute wind direction (m/s) for the hour

Figure 8. Format of SUMMFILE when 5-minute data is not read by AERMINUTE.

23


-------
Date,hr,flag,IFW flag,total minutes,total 5-min subs,total calms,total even,total even 5-min subs,even calms,total odd,total odd 5-min subs,total

odd calm,odd used,odd calms used,min speed,min speed source,avg speed,max speed,max speed source,min dir,min dir source,avg dir,max

dir,max dir source



20050101,01,V, 0,59, 0,0,30, 0,0,29, 0,0, 0,0, 1.53,1, 2.50, 3.57,1,182,1,201,217,1

20050101,02,V, 0,59, 0,0,30, 0,0,29, 0,0, 0,0, 1.53,1, 2.29, 2.55,1,191,1,208,225,1

20050101,03,V, 0,59, 0,0,30, 0,0,29, 0,0, 0,0, 1.53,1, 2.35, 3.06,1,184,1,197,223,1

20050101,04,V, 0,59, 0,18,30, 0,9,29,0, 9, 0,0, 0.51,1, 1.05, 2.04,1,176,1,199,279,1

20050101,05,V, 0,59, 0,28,30, 0,14,29, 0,14, 0, 0, 0.51, 1, 0.97, 1.53, 1,157, 1,188,209, 1

20050101,06,V, 0,59, 0,0,30, 0,0,29, 0,0, 0,0, 1.53,1, 2.21, 3.06,1,186,1,193,199,1

Variables

Date

Date of observation (YYYYMMDD)

Hr

Hour of observation (01-24)

Flag

Flag denoting if hour is valid (V), calm (C), non-valid (NV), or missing (M)

IFW flag

Integer code corresponding to IFW status (0=not IFW during data period, l=part of IFW group during data period)

Total minutes

Total number of minutes read from 1-minute files for hour

Total 5-min subs

Total number of minutes 5-minute data was substituted into 1-minute data

Total calms

Total number of calm minutes for hour

Total even

Total even minutes read from files for hour

Total even 5-min subs

Total number of even minutes substituted with 5-minute data

Even calms

Total number of even minutes with calm winds for hour

Total odd

Total odd minutes read from files for hour

Total odd 5-min subs

Total number of odd minutes substituted with 5-minute data

Total odd calm

Total number of odd minutes with calm winds for hour

Odd used

Total odd minutes used in hourly average winds for hour

Odd calms used

Total number of odd minutes with calm winds used in hour average winds for hour

Min speed

Minimum 2-minute wind speed (m/s) for the hour

Min speed source

Source of minimum wind speed (l=l-minute data, 5=5-minute data)

Avg speed

Hourly averaged wind speed (m/s)

Max speed

Maximum 2-minute wind speed (m/s) for the hour

Max speed source

Source of maximum wind speed (l=l-minute data, 5=5-minute data)

Min dir

Minimum 2-minute wind direction (m/s) for the hour

Min dir source

Source of minimum wind direction (l=l-minute data, 5=5-minute data)

Avg dir

Hourly averaged wind direction

Max dir

Maximum 2-minute wind direction (m/s) for the hour

Max dir source

Source of maximum wind direction (l=l-minute data, 5=5-minute data)

Figure 9. Format of SUMMFILE when 5-minute data is read by AERMINUTE.

24


-------
5.4 Comparison file (COMPFILE)

AERMINUTE can output the optional COMPFILE that compares the standard observations
against the 1-minute observations. The file is comma delimited and the format of the file is
shown in Figure 10 using Richmond, VA (RIC) as an example. The file can be imported into a
spreadsheet program where the user can look at specific observations to determine if the 1-
minute data and the standard observations are in reasonable agreement. For minutes where
either the standard observation is missing or the 1-minute data is missing, speeds and directions
are listed as 999 and differences as -999.

25


-------
date(yyyymmdd),hour,minute,calmflag,l-mindir,l-mindirlO,l-min speed, 1-min speed l,obs. dir,obs. speed,dirdiff,speeddiff,windflag,qc flag
20050101,1,0,0, 209.0, 210.0, 1.5, 1.5, 210.0, 2.1, 0.0, 0.6,N,5

20050101,2,0,0, 198.0, 200.0, 2.0, 2.0, 999.0, 999.9, -999.0, -999.0,9,9

20050101,3,0,0, 223.0, 220.0, 1.5, 1.5, 999.0, 999.9, -999.0, -999.0,9,9

20050101,4,0,0, 184.0, 180.0, 1.0, 1.0, 999.0, 999.9, -999.0, -999.0,9,9

20050101,5,0,0, 185.0, 190.0, 1.5, 1.5, 999.0, 999.9, -999.0, -999.0,9,9

20050101,6,0,0, 193.0, 190.0, 2.5, 2.6, 999.0, 999.9, -999.0, -999.0,9,9

Variables

Date(yyyymmdd)

Date of observation with 4-digit year, month, and day

Hour

Hour of observation (1-24)

Minute

Minute of observation

Calm flag

Integer flag denoting if 1-minute observation is considered calm (0=non-calm,l=calm)

1-min dir

1-minute direction from 1-minute data files

1-min dir 10

1-minute direction from 1-minute data files rounded to nearest ten degrees

1-min speed

1-minute wind speed (m/s)

1-min speed 1

1-minute wind speed rounded to nearest tenth of a m/s

Obs. dir

Wind direction from standard observations

Obs. speed

Wind speed (m/s) from standard observation

dirdiff

Difference between 1-minute wind direction and standard observation direction, i.e. 1-min dirlO - obs. dir

speeddiff

Difference between 1-minute wind speed and standard observation speed, i.e. 1-min speed 1- obs. speed

Wind flag

Wind observation type code from standard observation

C=calm

N=normal

R=60 minute average speed

Q=squall

V=variable

9=missing

QC flag

Wind observation speed quality code from standard observation

0	= Passed gross limits check

1	= Passed all quality control checks

2	= Suspect

3	= Erroneous

4	= Passed gross limits check, from DSI-3280 or NCDC ASOS/AWOS

5	= Passed all quality control checks, from DSI-3280 or NCDC ASOS/AWOS

6	= Suspect, from DSI-3280 or NCDC ASOS/AWOS

7	= Erroneous, from DSI-3280 or NCDC ASOS/AWOS
9 = Passed gross limits check if element is present

Figure 10. Format of COMPFILE.

26


-------
5.5 1 -minute and 5-minute comparison file (1 5 FILE)

AERMINUTE can output the optional 1-minute vs. 5-minute comparison file, 15FILE when
5-minute data is processed by AERMINUTE. This file can be used to determine the agreement
between the 1-minute and 5-minute data after processing discussed in Section 4.3. A sample file
with format is shown in Figure 11. Note, that in some cases the winds between the 1- and 5-
minute data may not be equal. This may be due to multiple observations in one or both datasets
for a particular time. In such occurrences, AERMINUTE keeps the latest of the observations.
For observations where the 5-minute indicates a calm, it must be noted that the calms and
variable processing of the METAR code is used on the 5-minute data.

date(yyyymmdd),hour,minute,l-min dir,l-min speed,5-min 10 deg dir,5-min dir,5-min speed

20050101, 1,5,181, 3.06,180,183, 3.06

20050101, 1,10,197, 3.06,200,196, 3.06

20050101, 1,15,197, 2.55,200,196, 2.55

20050101, 1,20,194, 3.06,190,194, 3.06

20050101, 1,25,195, 3.06,200,202, 3.06

20050101,4,10,244, 0.51, 0, 0, 0.00

20050101,13,55,270, 1.53,VRB,VRB, 1.53

Variable

Date(yyyymmdd)

Date of observation with 4-digit year, month, and day

Hour

Hour of observation (1-24)

Minute

Minute of observation

1-mindir

1-minute dataset wind direction

1-min speed

1-minute dataset wind speed (m/s)

5-min 10 deg.

5-minute dataset wind direction to nearest 10°. 'VRB'
indicates variable wind direction

5-min dir

5-minute dataset randomized wind direction. 'VRB'
indicates variable wind direction

5-min speed

5-minute dataset wind speed (m/s)

Figure 11. Format of 15 FILE.



5.6. List of substituted minutes (SUB5FILE)



Another optional output file from AERMINUTE when processing 5-minute data is a comma
delimited file that lists the dates and times where 5-minute data is substituted into the 1-minute
data, SUB5FILE. For such times, the 1-minute data is missing and 5-minute data is not missing
and not calm. Figure 12 shows a sample file and format of the file.

27


-------
date(yyyymmdd),hour,minute,5-min dir,5-min speed
20050110,18,50,26, 2.04



20050110,18,55,50, 4.59



20050110,18,60,69, 3.57



20050110,19,5,60, 3.06



20050110,19,10,63, 3.57



20050110,19,15,69, 3.57



20050110,19,20,66, 3.57



Variable

Date(yyyymmdd)

Date of observation with 4-digit year, month, and day

Hour

Hour of observation (1-24)

Minute

Minute of observation

5-min dir

5-minute dataset randomized wind direction.

5-min speed

5-minute dataset wind speed (m/s)

Figure 12. Format of SUB5FILE.

5.7. Log file

During processing AERMINUTE writes information to the screen and a log file called,
aerminute.log. In Figure 13, a summary of the user inputs is listed. First, the AERMINUTE
version number and program start date and time are listed. Listed below those lines are a
summary of the processing dates and IFW status as well notifying the user that 5-minute data
will be read. In this example, the data period is from January 1 through December 31 2005. The
user entered that the station is part of the IFW group with a start date of March 28, 2007.
AERMINUTE notifies the user that this date is outside the range of processing dates. Therefore,
the IFW status of the station will be set to no.

AERMINUTE VERSION 15272
Program start date & time: September 30, 2015 11:49:18 AM

################################ INPUTS ################################

Control input file: aerminute.inp
Summary of dates
Start date: 1 1 2005
End Date: 12 31 2005

Station is part of IFW group
With start date of 3 28 2007

But is outside of the range of processed dates
5-minute files will be read

########################################################################

Figure 13. Input summary section of aerminute.log.

After the user input summary, AERMINUTE checks for existence of the files listed in the
DATAFILES section and if there are any duplicate filenames. The same is done for the
DAT5FILES section, if listed. Also, if any files are listed in the SURFDATA section, the
existences of the listed files are checked as well to see if there are any duplicate filenames. In

28


-------
Figure 14, AERMINUTE finds 12 1-minute data files without any duplicate names as well as 12
5-minute data files without any duplicate names. AERMINUTE finds one standard observation
file to read and reads the file.

######################## 1 -MINUTE DATA FILES CHECK ######################

Checking for duplicate filenames

No duplicate filenames found

All files found...

Number of files to process: 12

########################################################################

######################## 5 -MINUTE DATA FILES CHECK ######################

Checking for duplicate filenames

No duplicate filenames found

All files found...

Number of files to process: 12

########################################################################

######################### SURFACE FILES CHECK ##########################

Obtaining surface data filenames

Checking for duplicate surface filenames

No duplicate filenames found

Reading surface files

Reading surface file 724010-13740-2005
########################################################################

Figure 14. Data file check section of AERMINUTE.LOG

After reading the standard observation files, AERMINUTE reads the 1-minute data files and lists
the files as they are processed. After processing the files, AERMINUTE lists the number of
processed and non-processed records. Under the processed record counts, the number of records
outside the data period set by the start and end dates are listed and the number of records within
the data period are also listed. Under the non-processed records count, subtotals are provided for
records that are minute 1, bad, need checking, or had a bad record for the time. The last subtotal
should be zero, unless there was a severe formatting problem with a file. After the subtotal of
records, AERMINUTE lists the number observations that failed the various quality assurance
checks. These counts are not mutually exclusive; some records may fail multiple checks. Figure
15 lists the record totals and quality assurance checks totals. Note that for the non-processed

29


-------
record counts and the number of observations that failed various quality control checks, the
counts include observations outside and within the data period set by the start and end dates.

30


-------
######################## 1-MIN FILE PROCESSING #########################
Reading 64050KRIC2005 01.dat
Reading 64050KRIC2005 02.dat
Reading 64050KRIC2005 03.dat
Reading 64050KRIC2005 04.dat
Reading 64050KRIC2005 05.dat
Reading 64050KRIC2005 06.dat
Reading 64050KRIC2005 07.dat
Reading 64050KRIC2005 08.dat
Reading 64050KRIC2005 09.dat
Reading 64050KRIC200510.dat
Reading 64050KRIC200511.dat
Reading 64050KRIC200512.dat
All files read...

RECORD FORMAT QA

Total number of records read from files:

Number of processed records:

Number of records outside data period:

Number of records inside data period:

Number of non-processed records:

Number of records for minute 1:

Number of bad records:

Number of check records:

Number of bad minute records:

458902
450677
1

450676
8225
7646
437
142
0

NOTE: Number of non-processed records includes records outside data period

QA FLAG SUMMARY COUNT

FLAG	DESCRIPTION

1	Non-numeric characters in columns 68 through 90

2	Text string with leading zero in columns 66 through 90

3	4-character numeric string found in columns 30 through 113

4	Column 30 is non-blank

5	No number in columns 70-74 for 2-minute wind direction

6	No number in columns 76-79 for 2-minute wind speed

7	No number in columns 82-84 for 5-second gust wind direction

8	No number in columns 87-89 for 5-second gust wind speed

9	Number in column 90

10	Wind speeds and directions outside allowable ranges

11	Other flags switched on, but winds may be okay
11	Other flags switched on, but record is bad

########################################################################

RECORDS
246
93
164
67

283
296

284
291
196

4

142
437

Figure 15. 1-minute file processing section of aerminute.log.

31


-------
If 5-minute data is to be read by AERMINUTE, AERMINUTE reads the files and notifies the
users that the files are being processed (Figure 16).

######################### 5-MIN FILE PROCESSING ########################

Reading 64010KRIC200501.dat

Reading 64010KRIC200502.dat

Reading 64010KRIC200503.dat

Reading 64010KRIC200504.dat

Reading 64010KRIC200505.dat

Reading 64010KRIC200506.dat

Reading 64010KRIC200507.dat

Reading 64010KRIC200508.dat

Reading 64010KRIC200509.dat

Reading 64010KRIC200510.dat

Reading 64010KRIC200511 .dat

Reading 64010KRIC200512.dat

All files read...

Figure 16. 5-minute file processing section of aerminute.log.

After reading the 1-minute and any 5-minute data files, AERMINUTE substitutes the 5-minute
data into the 1-minute data, if 5-minute data is present. AERMINUTE then compares the
updated 1-minute data against the standard observations as outlined in Section 4.5, if the optional
COMPFILE keyword is specified. AERMINUTE lists the summaries for standard calm winds,
standard missing winds, standard variable winds, and standard valid winds in
AERMINUTE.LOG (Figure 17).

32


-------
############################ DATA QC SUMMARY ############################

STANDARD CALMS

Number of standard observation calms:	1038

Number of missing 1-minute winds:	170

Number of 1-minute winds < 3 knots:	842

Number of 1-minute winds >= 3 knots:	28

STANDARD MISSING WINDS

Number of standard observation missing winds:	3697

Number of missing 1-minute winds:	274

Number of non-missing 1-minute winds:	3423

STANDARD VARIABLE WINDS

Number of standard observation variable	winds: 132

Number of missing 1-minute winds:	17

Number of non-missing 1-minute winds:	115

VARIABLE WINDS: SPEED DIFFERENCES (M/S)

Speed difference	Number of minutes



0

65

<

:= 0.2

29

0 . 3

- 0.5

7

0 . 5

- 1.0

2

1.0

-3.0

12

3 . 0

-5.0

0



>5.0

0

STANDARD VALID WINDS Number of standard observation valid winds: 4488
Number of missing 1-minute winds:	677

Number of non-missing 1-minute winds:	3811

VALID WINDS: SPEED DIFFERENCES (M/S)

Speed difference	Number of minutes



0



2223



<=0.2



1099

0

.3 - 0.5



198

0

.5 - 1.0



134

1

.0 - 3.0



131

3

.0 - 5.0



22



>5.0



4

VALID WINDS

: DIRECTION

DIFFERENCES



Direction

difference

Number of mi:



0



3362

<

= 10



291

<

= 20



85

<

= 30



37

<

= 40



17

<

= 50



6

<

= 60



4

<

= 70



2

<

= 80



1

<

= 90



2

<

= 100



0

<

= 110



1

<

= 120



1

<

= 130



0

<

= 140



1

<

= 150



1

<

= 160



0

<

= 170



0

<

= 180



0



> 180



0

(DEG)

########################################################################

Figure 17. Quality control summaries listed in AERMINUTE.LOG.

33


-------
After file processing and hourly averaging, AERMINUTE writes a summary of the winds to the
screen and log (Figure 18). AERMINUTE lists the minimum and maximum 2-minute wind
speeds processed along with their directions and date/times. Beginning with version 15272, the
source of the minimum and maximum winds, 1-minute or 5-minute is also listed. The dates and
times listed are the actual reported time for the observations. AERMINUTE also lists the
minimum and maximum hourly averaged winds with their directions and date/times. After the
summaries, AERMINUTE lists the number of hours in the data period. This is the number of
calendar hours, not just hours processed by AERMINUTE. In this example, since an entire year
is processed, there are 8,760 hours in the data period. AERMINUTE then lists the number of
processed hours, valid hours, invalid hours, and calm hours along with percentages of the data
period. Valid hours are those hours that met the observation criteria in Section 4.3 and 50% or
more of the observations were non-calm. Calm hours are hours that met the observation criteria
in Section 4.3 but had more than 50% calm observations. Invalid hours are those hours that did
not meet the observation criteria in Section 4.3. AERMINUTE also lists the number of valid,
invalid, calm, missing, and total hours by month, where total hours it the number of hours in the
month, including hours not processed. If 5-minute data is processed, the number of substituted
minutes per month is also listed. Finally, AERMINUTE lists the stop time of the program and if
the program terminated normally.

34


-------
################################ SUMMARY ###############################

Minimum

2-minute wind speed

(knots),

direction and original date

(YYYYMMDDHHmm)

0.00

253 200501010312

*1-minute

data







Maximum 2-minute wind speed (knots)

, direction

and original date

(YYYYMMDDHHmm)

47.00

39 200510050010

*1-minute

data







Minimum hourly wind speed

(m/s), direction and

date (YYYYMMDDHH)



0.77

170.0 2005012020











Maximum hourly wind speed

(m/s), direction and

date (YYYYMMDDHH)



12.04

353.0 2005030810











Number

of total hours in data period: 8760







Number

of processed hours:



7959 (

90.86%





Number

of valid hours:



7034 (

80.30%





Number

of processed non-valid hours

: 393 (

4.49%





Number

of calm hours:



532 (

6.07%







TOTAL

VALID

INVALID

CALM

MISSING

5-MIN

YEAR

MONTH HOURS

HOURS

HOURS

HOURS

HOURS

MINUTES

2005

January 74 4

678

4

24

38

10

2005

February 672

611

29

29

3

92

2005

March 74 4

624

19

27

74

19

2005

April 72 0

509

21

31

159

0

2005

May 744

610

19

50

65

4

2005

June 72 0

588

29

54

49

1

2005

July 74 4

569

37

82

56

36

2005

August 74 4

478

73

98

95

1035

2005 September 720

426

132

42

120

741

2005

October 744

644

7

32

61

67

2005

November 72 0

665

7

22

26

6

2005

December 744

632

16

41

55

1

########################################################################

Normal

termination











Program end date & time: September

30, 2015 11

: 4 9:51

AM



Figure 18. Summary section of aerminute.log

35


-------
6. References

EPA, 2000: Meteorological Monitoring Guidance for Regulatory Modeling Applications. EPA-
454/R-99-005. U.S. Environmental Protection Agency, Research Triangle Park, NC
27711.

EPA, 2023a: User's Guide for the AMS/EPA Regulatory Model - AERMOD. EPA-454/B-23-
008. U.S. Environmental Protection Agency, Research Triangle Park, NC 27711.

EPA, 2023b: User's Guide for the AERMOD Meteorological Preprocessor (AERMET). EPA-
454/B-23-005. U.S. Environmental Protection Agency, Research Triangle Park, NC
27711.

36


-------
Appendix A: Record Quality Control Check Methodology

This appendix details the quality control checks made on 1-minute data records and 5-minute
data records. Below are the quality control flag descriptions as well as example good_record.dat,
bad_record.dat, and check_record.dat files. The following quality control checks are made on
each record of the 1-minute files. The checks are made in the order shown in Table A-l. Flag
values of 0 are pass, values of 1 are fail.

A-l


-------
Table A-l. Quality control checks on 1-minute winds read by AERMINUTE.

Flag

Check

Flag value

0

1

1

Check columns 68 through 90 for non-numeric characters. Columns 67 through 90 should only
contain numbers or spaces.

No non-numeric characters in the
column range

At least one non-
numeric character in
the column range.

2

Check columns 66 through 90 for character strings that have a leading space followed by a zero and
then a non-zero number (" 01", " 02", etc.)

No text strings of leading zero in
column range.

Text string with
leading zero present in
column range.

3

Check columns 30 through 113 for a 4-character string, consisting of numbers representing a possible
time, i.e. 11:11 AM would be ' 1111' or 10:59 PM would be ' 2259'. These strings should not be
in the record after column 29.

No strings found

A time string found in
columns 38 through
90

4

Check column 30 for non-blank character. Column 30 should be blank.

Column 30 is blank

Column 30 is not
blank

5

Check column 67 for any non-blank character. There should not be non-blank character in column 67.

Column 67 is blank

Column 67 is non-
blank

5

Check columns 70-74 for the 2-minute average wind direction.

Any column contains a numeric
character and no non-numeric
characters

Columns 70-74 are
blank or non-numeric

6

Check columns 76-797 for the 2-minute average wind speed.

Any column contains a numeric
character and no non-numeric
characters

Columns 76-79 are
blank or non-numeric

7

Check columns 82-84 for the five second gust wind direction.

Any column contains a numeric
character and no non-numeric
characters

Columns 82 and 84
are blank or non-
numeric

8

Check columns 87-89 for the 2-minute average wind speed.

Any column contains a numeric
character and no non-numeric
characters

Columns 87-89 are
blank or non-numeric

9

Check column 90 for blank character

Column 90 is blank

Column 90 is non-
blank

10

If flags one through nine are all zero, check for the number of fields. If the number of fields is 4, read
the 2-minute average wind direction, 2-minute average wind speed, five second gust direction, and five
second gust speed from columns 68 through 90. If directions or speeds do not meet range check set
flag 10 to 1. Also set the 11th flag equal to 9, regardless of direction and speed check just noted. If the
number of fields is not 4 set the 10th flag to 1 and the 11th flag to the number of fields.

If flags 1 through 9 are zero and
wind data meets range criteria
OR

One of the flags 1 through 9 is
non-zero. Check for flag 10 is
not performed so flag is left at
zero.

Wind data does not
meet range criteria.

A-2


-------
If flags 1 through 9 are zero and flag 10 is zero, flag 11 is set to 9. AERMINUTE will check for
the number of fields and if the number of fields is not equal to 4 then flag 10 is set to 1 and flag
12 is set equal to the number of fields. If at least one of the flags is equal to one and flags 2 and
3 flags are zero, the record may be usable but does not fit the strict quality control criteria.
AERMINUTE reads columns 68 through 90 and checks for four or five numeric fields. If four
or five numeric fields are found, AERMINUTE performs the same checks as done for flag 10;
positive wind directions less than or equal to 360 degrees and positive wind speeds less than 50
knots. If these conditions are not met, set flag 11 equal to eight. Otherwise if at least one of the
conditions is met, set flag 11 equal to the number of numeric fields read from the line. If four or
five fields are not found, set the thirteenth flag equal to the number of fields read from the line.

Once all 11 flags have been set, get the maximum value among flags 1 through 10. If the
maximum value is zero, the record is considered good and will be further processed. Also write
the record to good_records.dat. If the maximum value for the first ten flags is not zero and the
eleventh flag is equal to four or five, write the line to check_records.dat. If the maximum value
among the first ten flags is not zero and the eleventh flag is not equal to four or five, write the
record to bad_records.dat. Do not use the record if it is written to bad_records.dat or
checkrecords. dat

In Figure A-l, are example records from good_records.dat which contains records that meet the
strict quality control checks above. Records in this file have zeros for the first ten flags and a
value of nine for the eleventh flag. The flags are not displayed for these records. The text string
"123456 1234 123 1234" is used as reference to denote where the wind variables should
generally be:

123456	2-minute average wind direction

1234	2-minute average wind speed (whole knots)

123	5-second maximum wind gust's direction

1234	5-second maximum wind gust's speed (whole knots)

In Figure A-l, the actual column numbers in the data file for each of the above text strings are
listed above each string, i.e., "123456" corresponds to columns 68 through 73. Also shown in
Figure A-l, is the location of column 39. The above checks are met (in order as listed above):

•	No non-numeric characters in columns 67 through90

•	No leading zero numbers in columns 66 through 90

•	No possible time strings outside of the station/date information block

•	Column 30 is blank

•	A number is present in at least one column of columns 70-74

•	A number is present in at least one column of columns 76-78

•	A number is present in at least one column of columns 82-84

•	A number is present in at least one column of columns 87-89

•	Column 90 is blank

•	All above conditions are met, read the wind data and winds meet direction and speed
criteria

A-3


-------
30

68-73 75-78 81-83 86-89

123456 1234 123 1234

137 4 OKRIC RIC2005010100000500	0.150 N

137 4 OKRIC RIC2005010100020502	0.152 N

137 4 OKRIC RIC2005010100030503	0.153 N

137 4 OKRIC RIC2005010100040504	0.152 N

137 4 OKRIC RIC2005010100050505	0.153 N

137 4 OKRIC RIC2005010100060506	0.154	N

180	4	185	5	34	60 +

188	5	189	5	34	60+

189	5	187	5	34	60+
186	5	180	6	34	60+

181	6	179	7	34	60+

182	7	184	7	34	60 +

Figure A-l. Example good_records.dat file.

In Figure A-2, are example records from check_records.dat. In check_records.dat, the values for
the eleven flags are listed at the end of the record. The text strings are as described for Figure A-
1. For a record to be written to check_records.dat, flags 1, 2 and 3 must be zero, no non-numeric
characters in columns 68 through 90 (flag 1), no leading zero numbers (flag 2), and no 4-digit
time strings (flag 3). Also, four numeric fields should be present in columns 67 through 90 and
at least one of the wind data fields meet the wind direction and speed range criteria. Table A-2
describes the situations found for each data record and possible solutions.

A-4


-------




30





68-73

75-78

81-83 86-89

















123456

1234

123

1234







137 4 OKRIC

RIC2005020916142114

0

069

D

174

3

168

2115

0.069

00100001104

137 4 OKRIC

RIC2005020919160016

0

111

N

197

5

196

5

34

0018

00100000004

137 4 OKRIC

RIC2005020922190319

0

132

N

200

9

202

11

34

0321

00100000004

137 4 OKRIC

RIC2005021003200820

0

265

N

308

10

310

11

34

0822

00100000004

137 4 OKRIC

RIC2005021015392039

0

050

D

302

18

295

22

34

2040

00100000004

137 4 OKRIC

RIC2005021102450745

0

050

N

309

9

311

13

34

0747

00100000004

137 4 OKRIC

RIC2005030713051805

40000.

00 M

205

18

197

20

34

60 +

00000000104

Figure A-2. Example check_records.dat file.

A-5


-------
Table A-2. Descri

ption of records in check records.dat file.

Record
number*

Non-zero flags

Situation

Possible solution

1

3, 8, and 9

4-character string in
columns 30-113; no
numbers in columns
87-89; number in
column 90

Do not use record; 4-
character string appears
to be a time

2-6

3

4-character string in
columns 30-113

Eliminate characters
after column 92

7

9

number in column 90

Shift data from 90 to
113 left one column and
eliminate columns
beginning with "34"

"actual line number in file is record number p

us one.

Once any records have been changed, the user can rename good_records.dat and
check_records.dat, enter the new filenames in inputfiles.txt in place of the original data, and
AERMINUTE can be rerun with the original good records and updated records from
check_records.dat.

Example records from bad_records.dat are shown in Figure A-3. As with the previous
examples, certain column numbers are denoted. In the first record, the record fails the quality
control check because there are non-numeric characters in columns 68 through 90, and no
numeric characters in columns 70-74, 76-79, 82-84, and 87-89. Other records shown in Figure
A-3 fail the quality control checks because flag 1 is triggered, non-numeric characters in
columns 67-90 and no numeric characters in columns 70-74 or 76-79. These are missing wind
fields as denoted by the letter "M "

A-6


-------


30

68-73

75-78

81-83 86-89











123456

1234

123

1234







137 4 OKRIC

RIC2005011110381538 M M

M

M

M

M

34

60 +

10001111000

137 4 OKRIC

RIC2005011110391539 M M

M

M

60

7

34

60 +

10001100000

137 4 OKRIC

RIC2005011110401540 0.216 D

M

M

128

7

34

60 +

10001100000

Figure A-3. Example bad_records.dat file

A-7


-------
Record checking of 5-minute data is more straightforward than record checking of 1-minute data
as the 5-minute data files are in a more consistent format than the 1-minute files. When
processing the 5-minute files, AERMINUTE performs the following checks:

•	The record is checked for the presence of the text string "5-MIN" and if not present the
record is no longer processed

•	The record is checked for the presence of the text string "AUTO" which sets the columns
in which to search for the wind data. If "AUTO" is not present, then the wind data are
determined in columns 67 through 73 of the record. If "AUTO" is present, then the wind
data are determined in columns 72 through 78.

•	In the text string containing the wind data, the string "KT" for knots is searched. If this is
not found, this is not necessarily a bad record, because the letter "G" for gust may be in
the string. If "KT" is not found and "G" is not subsequently found, the record is no
longer processed.

•	If "KT" or "G" are found in the wind data columns, the first five columns of the wind
data columns are searched for non-numeric characters. If non-numeric characters are
found, then the record is no longer processed.

•	If the first five columns of the wind data columns are numeric, the first two columns are
read in as the wind direction as tens of degrees and the remaining three columns are read
in as the wind speed in knots. The wind direction is checked to make sure it is between 0
and 36 (for 360) and the wind speed is between 0 and 50 knots. If these checks are
passed the winds are considered valid.

A-8


-------
Appendix B. ASOS stations missing 1-minute data files for June-December 2013

Tables B-l through B-10 list the stations, by EPA region, missing 1-minute data for June-
December 2013. Figures B-l and B-2 show the locations of the stations in the continental U.S.
and Alaska, respectively.

Table B-l. Region 1 ASOS stations.

Station

Station Name

State

KIJD

WILLIMANTIC WINDHAM AP

CT

KAQW

NORTH ADAMS HARRIMAN AP

MA

KCQX

CHATHAM MUNI AP

MA

KFIT

FITCHBURG MUNI AP

MA

KORE

ORANGE MUNI AP

MA

KPSF

PITTSFIELD MUNI AP

MA

KPYM

PLYMOUTH MUNI AP

MA

KTAN

TAUNTON MUNI AP

MA

KCAR

CARIBOU WFO

ME

KFVE

FRENCHVILLE AROOSTOOK AP

ME

KHUL

HOULTON AP

ME

KMLT

MILLINOCKET MUNI AP

ME

KAFN

JAFFREY MUNI AP

NH

KCON

CONCORD ASOS

NH

KUUU

NEWPORT STATE AP

RI

KWST

WESTERLY STATE AP

RI

KDDH

BENNINGTON MORSE ST AP

VT

KMPV

MONTPELIER AP

VT

KMVL

MORRISVILLE STOWE STATE AP

VT

KVSF

SPRINGFIELD HARTNESS AP

VT

B-l


-------
Table B-2. Region 2 ASOS stations.

Station

Station Name

State

K12N

ANDOVER AEROFLEX AP

NJ

KART

WATERTOWN AP

NY

KDKK

DUNKIRK CHAUTAUQUA AP

NY

KDSV

DANSVILLE AP

NY

KELZ

WELLSVILLE MUNI AP

NY

KFZY

FULTON OSWEGO CO AP

NY

KGFL

GLENS FALLS AP

NY

KMSS

MAS SENA AP

NY

KMTP

MONT AUK AP

NY

KNYC

NEW YORK CNTRL PRK WSF

NY

KPBG

PLATTSBURGH AFB

NY

KPEO

PENN YAN AP

NY

KRME

GRIFFISS AFB

NY

KSLK

SARANAC RGNL AP

NY

Table B-3. Region 3 ASOS stations.

Station

Station Name

State

KOXB

OCEAN CITY MUNI AP

MD

KAOO

ALTOONA BLAIR CO AP

PA

KBFD

BRADFORD FAA AP

PA

KFIG

CLEARFIELD LAWRENCE AP

PA

KGKJ

PORT MEADVILLE AP

PA

KAKQ

NORFOLK RICH

VA

KOFP

ASHLAND HANOVER CO MUNI
AP

VA

KBKW

BECKLEY RALEIGH CO AP

wv

KEKN

ELKINS RANDOLPH COUNTY AP

wv

B-2


-------
Table B-4. Region 4 ASOS stations.

Station

Station Name

State

KANB

ANNISTON ARPT ASOS

AL

KDCU

DECATUR PRYOR FLD

AL

KEET

ALABASTER 5 SSE

AL

KMSL

MUSCLE SHOALS AP

AL

KTOI

TROY AF

AL

K40J

PERRY FOLEY AP

FL

KAAF

APALACHICOLA AP

FL

KCTY

CROSS CITYAP

FL

KMTH

MARATHON AP

FL

KAMG

ALMA BACON CO AP

GA

KDNL

AUGUSTA DANIEL FLD

GA

KFFC

ATLANTA

GA

KGVL

GAINESVILLE GILMER AP

GA

KRMG

ROME R B RUSSELL AP

GA

KSSI

BRUNSWICK CAA AP

GA

KVPC

CARTERSVILLE AP

GA

KJKL

JACKSON

KY

KGWO

GREENWOOD FAA AP

MS

KECG

ELIZABETH CITY CG STN

NC

KHSE

CAPE HATTERAS AP

NC

KCUB

COLUMBIA OWENS DWTN AP

sc

KOGB

ORANGEBURG MUNI AP

sc

B-3


-------
Table B-5. Region 5 ASOS stations.

Station

Station Name

State

KADG

ADRIAN LENAWEE CO AP

MI

KANJ

SAULT STE MARIE SNDRSN

MI

KAPN

ALPENA AP

MI

KGLR

GAYLORD OTSEGO CO AP

MI

KHTL

HOUGHTON LAKE WSO AP

MI

KPLN

PELLSTON AP

MI

KBDE

BAUDETTE INTL AP

MN

KBRD

BRAINERD CROW WING CO AP

MN

KHIB

HIBBING CHISHOLM HIBBING A

MN

KINL

INTERNATIONAL FALLS AP

MN

KPKD

PARK RAPIDS 2 S

MN

KAKR

AKRON FULTON INTL AP

OH

KBJJ

WOOSTER WAYNE CO AP

OH

KFDY

FINDLAY AP

OH

KHZY

ASHTABULA CO AP

OH

KILN

CINCINNATI

OH

KLPR

ELYRIA LORAIN CO AP

OH

KMNN

MARION MUNI AP

OH

KTDZ

TOLEDO METCALF FLD

OH

KASX

ASHLAND KENNEDY MEM AP

WI

KAUW

WAUSAU ASOS

WI

KHYR

HAYWARD MUNI AP

WI

KISW

WISCONSIN RAPIDS
ALEXANDER

WI

KOVS

BOSCOBEL AP

WI

B-4


-------
Table B-6. Region 6 ASOS stations.

Station

Station Name

State

KESF

ALEXANDRIA ESLER FLD

LA

KTVR

TALLULAH VICKSBURG AP

LA

KCAO

CLAYTON MUNI ARPK AP

NM

KDMN

DEMING F AA AP

NM

KGUP

GALLUP FAA AP

NM

KLVS

LAS VEGAS FAA AP

NM

KRTN

RATON MUNI CREWS AP

NM

KTCC

TUCUMCARI FAA AP

NM

KTCS

TRUTH OR CONSEQUENCE AP

NM

KGUY

GUYMON MUNI AP

OK

K6R6

DRYDEN TERRELL CO AP

TX

KALI

ALICE CAA AP

TX

KBAZ

NEW BRAUNFELS AP

TX

KBGD

BORGER HUTCHINSON CO AP

TX

KBMQ

BURNET AP

TX

KCOT

COTULLA

TX

KCRS

CORSICANA CAMPBELL FLD

TX

KCXO

CONROE MONTGOMERY CO AP

TX

KDHT

DALHART FAA AP

TX

KDRT

DEL RIO AP

TX

KHDO

HONDO AP

TX

KJCT

JUNCTION

TX

KLBX

ANGLETON BRAZORIA AP

TX

KLVJ

HOUSTON CLOVER FLD

TX

KMWL

MINERAL WELLS AP

TX

KPIL

PORT ISABEL CAMERON AP

TX

KPSX

PALACIOS FAA AP

TX

KRKP

ROCKPORT ASOS

TX

KTRL

TERRELL MUNI AP

TX

KUTS

HUNTSVILLE MUNI AP

TX

KVCT

VICTORIA ASOS

TX

B-5


-------
Table B-7. Region 7 ASOS stations.

Station

Station Name

State

KAMW

AMES MUNI AP

IA

KBRL

BURLINGTON AP

IA

KDVN

DAVENPORT

IA

KEST

ESTHERVILLE MUNI AP

IA

KIOW

IOWA CITY CAA AP

IA

KLWD

LAMONI MUNI AP

IA

KMCW

MASON CITY AP

IA

KMIW

MARSHALLTOWN MUNI AP

IA

KOTM

OTTUMWA AP

IA

KSPW

SPENCER MUNI AP

IA

KCNK

CONCORDIA ASOS

KS

KDDC

DODGE CITY

KS

KGLD

GOODLAND

KS

KHLC

HILL CITY 1 NE

KS

KDMO

SEDALIA MEM AP

MO

KIRK

KIRKS VILLE RGNL AP

MO

KLXT

LEES SUMMIT MUNI AP

MO

KPOF

POPLAR BLUFF MUNI AP

MO

KAIA

ALLIANCE MUNI AP

NE

KBFF

SCOTTSBLUFF AP

NE

KCDR

CHADRON F AA AP

NE

KHSI

HASTINGS MUNI AP

NE

KLBF

NORTH PLATTE RGNL AP

NE

KMCK

MCCOOK MUNI AP

NE

KODX

EVELYN SHARP FIELD

NE

KOFK

NORFOLK

NE

KSNY

SIDNEY 3 S

NE

KVTN

VALENTINE MILLER AP

NE

B-6


-------
Table B-8. Region 8 ASOS stations.

Station

Station Name

State

KAKO

AKRON 1 N

CO

KALS

ALAMOSA BERGMAN FLD

CO

KCAG

CRAIG ASOS

CO

KCEZ

CORTEZ ASOS

CO

KDRO

DURANGO ASOS

CO

KEEO

MEEKER AP

CO

KITR

BURLINGTON CARSON AP

CO

KLIC

LIMON WSMO

CO

KLXV

LEADVILLE 2 SW

CO

KMT J

MONTROSE ASOS

CO

KBHK

BAKER MUNI AP

MT

KBTM

BUTTE BERT MOONEY AP

MT

KGGW

GLASGOW

MT

KHVR

HAVRE AP ASOS

MT

KJDN

JORDAN AP

MT

KLVM

LIVINGSTON AP

MT

KMLS

MILES CITY AP

MT

KOLF

WOLF POINT INTL AP

MT

KDIK

DICKINSON FAA AP

ND

KHEI

HETTINGER MUNI AP

ND

KISN

WILLISTON SLOULIN FLD

ND

KJMS

JAMESTOWN FAA AP

ND

K8D3

SISSETON MUNI AP

SD

K9V9

CHAMBERLAIN MUNI AP

SD

KABR

ABERDEEN

SD

KATY

WATERTOWN FAA AP

SD

KCUT

CUSTER CO AP

SD

KD07

FAITH MUNI AP

SD

KHON

HURON AP

SD

KMBG

MOBRIDGE MUNI AP

SD

KMHE

MITCHELL AP

SD

KPHP

PHILIP 2 N

SD

KPIR

PIERRE FAA AP

SD

KCNY

CANYONLANDS ASOS

UT

KMLF

MILFORD MUNI AP

UT

KVEL

VERNAL AP

UT

KDGW

CONVERSE CO AP ASOS

WY

KGCC

GILLETTE CAMPBELL AP

WY

KLAR

LARAMIE AP

WY

B-7


-------
Table B-8. Continued.

Station

Station Name

State

KLND

LANDER AP

WY

KP60

YELLOWSTONE LAKE

WY

KRIW

RIVERTON

WY

KRWL

RAWLINS AP

WY

KSHR

SHERIDAN AP

WY

KTOR

TORRINGTON MUNI AP

WY

Table B-9. Region 9 ASOS stations.

Station

Station Name

State

KIGM

KINGMAN AP

AZ

KINW

WINSLOW AP

AZ

KPGA

PAGE MUNI AP

AZ

KRQE

WINDOW ROCK AP

AZ

KSAD

SAFFORD MUNI AP

AZ

KSJN

ST JOHNS INDUSTRIAL AP

AZ

KAAT

ALTURAS MUNI AP

CA

KACV

ARC ATA AP

CA

KAVX

AVALON CATALINA AP

CA

KBIH

BISHOP AP

CA

KBLU

BLUE CANYON

CA

KCEC

CRESCENT CITY CAA AP

CA

KHJO

HANFORD MUNI AP

CA

KMAE

MADERA MUNI AP

CA

KMCE

MERCED MUNI AP

CA

KPRB

PASO ROBLES CAA AP

CA

KRBL

RED BLUFF

CA

KSIY

MONTAGUE

CA

KUKI

UKIAH FAA AP

CA

KWVI

WATS ON VILLE MUNI AP

CA

KELY

ELY AIRPORT

NV

KWMC

WINNEMUCCA AP

NV

B-8


-------
Table B-10.

Region 10 ASOS stations.

Station

Station Name

State

PABR

BARROW WSO AP

AK

PACD

COLD BAY AP

AK

PACV

CORDOVA AP

AK

PADE

DEERING AP

AK

PAGK

GULKANA AP

AK

PAMC

MCGRATH AP

AK

PANN

NENANA MUNI AP

AK

PANT

ANNETTE WSO AP

AK

PAPB

ST GEORGE ISLAND AP

AK

PAQT

NUIQSUT AP

AK

PASN

ST PAUL ISLAND AP

AK

PASO

SELDOVIA AP

AK

PATO

PORTAGE GLACIER V C

AK

PAVL

KIVALINA AP

AK

PAWD

SEWARD

AK

PAYA

YAKUT AT AP

AK

KBYI

BURLEY F AA AP

ID

KJER

JEROME CO AP

ID

KLLJ

CHALLIS AP

ID

KMLP

MULLAN PASS VOR/DME

ID

KMYL

MCCALL AP

ID

KP69

LOWELL THREE RIVERS

ID

KRXE

REXBURG MADISON CO AP

ID

KAST

ASTORIA AP PORT OF

OR

KBKE

BAKER CAA AP

OR

KBNO

BURNS MUNI AP

OR

KHRI

HERMISTON MUNI AP

OR

KONO

ONTARIO

OR

KRBG

ROSEBURG RGNL AP

OR

KREO

ROME ST AP

OR

KDEW

DEERPARK

WA

KEAT

WENATCHEE AP

WA

KELN

ELLENSBURG BOWERS FLD

WA

KEPH

EPHRATA AP

WA

KOMK

OMAK

WA

KPUW

PULLMAN MOSCOW RGNL AP

WA

KSHN

SHELTON AP

WA

KUIL

QUILLAYUTE AP

WA

B-9


-------
KUIL
~

KSHN
~

KAST

KOMK



iKEPH 4

KDEW

KHVR

KHRI

KBKE

~

KCEC

~

PACVKACV*
~

KRBG

KPUt/

~

KP69

~

:KMYL

kbdekinl
# ~

KB NO KONO

KBTM
~ KLVM
~

KPeo

KHIB

KSIY

KAAT

KRBL
~

KUKI

KREO

KWMC

KRX£

kggwkolf KISN

^KJdTj *

* KMLS	.«™£d KASX

kbhi*khei	~ J***

KHH,% KMBG DADO	*

KSHR	KDOt f^8D3KATY

XISW

KFVE

~

KCARKHUL

w&ilt

KJER

~	^KBYI

KLU

~

KLN^

-kCU;-kp,r^

KCU T ^ K9Vy KM HE

m	a a

KANJ
~

KPLN

~KGL|!

*KHTL
~

KBLU

^	KBIH

~ ^2MGEV\

KPflB

KAVX

,KRIW	~	^ #

KDGW KCDR KVTN

KRWL jY « »
+ KMNN
~

KJKL

KAOO

KEKN

KDDC

KIGM

KRQE
KINW^KGUP

A

KSJN

.^JN KGUY
KLVS * KDI^T
~

KPOF

KOXB
' -f
KOFP
* KAKQ
~ KECG
~

KHSE

PAVL

KMSLKRMQ
KDCU%

KVfC

KSAD

KTCS

~

KDMN

KMWL KTRL

1
-------




' PAQT





~



PA0E





~



PASN





~



PAGK

PAPB

~

PAMC

*

~

' PACD

' PATO



~

PASO PA#£f





'* ~ \-







' PAYA





~





'mnmmn





*

Figure B-2. Locations of ASOS stations in Alaska with missing June-December 2013 1-
minute data files.

B-ll


-------

-------
United States	Office of Air Quality Planning and Standards	Publication No. EPA-454/B-23-007

Environmental Protection	Air Quality Assessment Division	October 2023

Agency	Research Triangle Park, NC


-------