﻿
=======================================================================
AERMET Version 22112
=======================================================================

       AERMET 22112 represents an update of the AERMET code from version 
       21DRF. The changes listed in this document reflect changes made to 
       AERMET since the 21DRF version.
       
-----  BUG FIXES

       1.  Correct mechanical mixing heights for convective hours for ONSITE 
           or PROG applications involving input mixing height. Mechanical 
           mixing height is now calculated for convective hours and the 
           input mixing height is assigned to the convective mixing heights. 
           This change makes AERMET consistent the AERMOD formulation 
           (See AERMOD Model Formulation document, Appendix A, Section A.11)
       
       2.  Correct a bug to initialize the variable SAVEWAN in the READ_ISHD 
           subroutine
       
       3.  Correct a bug in subroutine AUDIT_SUMM that references the 
           UP_AUDIT_INDEX array when it has not been allocated and no soundings 
           have been read. Only reference the array if there are valid soundings
       
       4.  Correct a bug related to the MODIFY keyword in the UPPERAIR pathway
       
       5.  Correct a bug for the RANGE keyword with SURFACE data
       
       6.  Correct a bug in READ_EXT in the surface module that allowed 
           AERMET to see non-ASOS observations as ASOS observations and 
           apply the ASOS truncation correction; Non-ASOS observations 
           now seen as non-ASOS
       

-----  ENHANCEMENTS

       1.  Modified AERMET to ignore the input surface friction velocity (u*) 
           and cloud cover if input data is prognostic and overland. This 
           change makes AERMET 22112 consistent with past versions of AERMET 
           when reading prognostic data
       
       2.  Modified PBL_PROC to recalculate u* and Monin-Obukhov length (L) 
           for overwater applications when the reference wind speed is reset to 
           √2σv (minimum wind speed in AERMET) because the wind speed is less 
           than √2σv. Recalculated u* and L are based on the ratio of AERMET 
           calculated u* based on the reset wind speed and original wind speed 
           (See Section 5.6.2 of AERMET user’s guide for details)       
       

-----  MISCELLANEOUS

       1.  Added code E81 to alert user that UPPERAIR data not read in and no 
           input site-specific or prognostic mixing heights
       
       2.  Use code W75 to alert user of zero value for mixing height
       
       3.  New code I28, no sounding for the day
       
       4.  New code I29, no morning sounding for the day
       
       5.  Reset codes I80-I84 to I81-I85
       
       6.  New code I80 to alert user that prognostic data is overland and 
           certain variables not used
       
       7.  New code I86, to alert user that u* and L are being calculated 
           because wind speed has been reset to square root √2σv when an 
           overwater application
       
       8.  New code I87 to alert user that mixing height is calculated for 
           missing hour when ONSITE or PROG mixing height is input
       
       9.  Summary of calms, ASOS calms, variable winds, number of day with 
           no soundings, number of days with no morning soundings, number 
           of days with no convective conditions, number of observations 
           per day for UPPERAIR, SURFACE, ONSITE/PROG, and ASOS 1-minute 
           observations to REPORT file
       
      10.  AERMET run status (successful or unsuccessful) written to top 
           of REPORT file

=======================================================================
AERMET Version 21DRF
=======================================================================

       AERMET 21DRF represents a complete update of the AERMET code from 
       version 21112. New subroutines have been written and all previous 
       subroutines have been deleted. While most changes will fall under 
       enhancements there have been two bugs corrected since AERMET 21112.
       
-----  BUG FIXES

       1.  Correct hourly site-specific precipitation values. Previous  
           versions of AERMET did not reset output hourly precipitation so 
           hours that were missing had the precipitation value for the 
           previous occurrence of the precipitation for the hour.

       2.  Smooth the mechanical mixing height for each based on the previous 
           hour’s mixing height. Previously, this was only done for calculated 
           mixing heights and not site-specific mixing heights. The AERMOD Model 
           Formulation and Evaluation document specifies that the mixing 
           heights should be smoothed regardless of whether the mixing height 
           is calculated or read from site-specific data.       

-----  ENHANCEMENTS

       1.  AERMET is now a two-stage process instead of a three-stage process. 
           The merge stage, stage 2 in previous versions of AERMET has been 
           eliminated and the previous Stage 3 is now Stage 2. If the MERGE 
           pathway is found in the AERMET control file, AERMET will ignore the 
           associated keywords. Likewise, if AERMET encounters the DATA keyword 
           with the METPREP pathway, AERMET will ignore the DATA keyword and 
           associated file (old Stage 2 output)
              
       2.  AERMET can now run stage 1 and 2 in one single AERMET run instead of 
           separate runs as with previous AERMET versions. Each stage can still 
           be run separately.
       
       3.  EXTRACT and QAOUT files are now optional when running stage 1 and 2 
           in the same AERMET run
       
       4.  AERMET will now keep the case (lower or upper case) of any input or 
           output files, instead of assuming all uppercase for filenames. This 
           makes the code more portable for Linux operating systems as Linux 
           systems are case sensitive while DOS systems are case insensitive.
       
       5.  A new averaging option for vector averaging of winds has been added 
           to Stage 1 for sub-hourly site-specific data. The user invokes the
           option by specifying the word VECTOR after the number of observations 
           per hour with the OBS_HOUR keyword. The default averaging is a scalar 
           average
       
       6.  Surface data checked against XDATES after conversion from GMT to LST 
           and hour 00-23 to 01-24
       
       7.  A new upper air data source, the Integrated Global Radiosonde Archive 
           (IGRA), has been added in addition to the 6201 and FSL formats
       
       8.  A debug option has been added to help in diagnosing calculated variables
           or report additional details on ISHD processing or upper-air calculated 
           variables
       
       9.  Addition of a new pathway, PROG for prognostic data. The PROG pathway is 
           analogous to the ONSITE pathway and uses the same keywords. The PROG 
           pathway is utilized for prognostic data to allow for processing of 
           certain variables when the application is overwater versus overland. 
           When using the PROG pathway, AERMET will output a text string to the 
           AERMET OUTPUT file in the header and for each hour denoting that the 
           data is prognostic. This allows AERMOD to know the data is prognostic
       
      10.  New ONSITE variables have been added as input variables for overwater 
           processing for the PROG pathway

      11.  New optional parameter to denote overland or overwater data for DATA 
           keyword for the ONSITE or PROG pathway. The optional parameter informs 
           AERMET which input variables to use in calculations. Overland data is 
           valid for both the ONSITE and PROG pathway, but overwater is only 
           valid for the PROG pathway.

      12.  If using prognostic data over water, AERMET will use the Monin-Obukhov 
           length to determine the stability for the hour. If overland or input 
           Monin-Obukhov length is missing for the hour, the standard solar 
           angle approach is used to determine stability
      
      13.  AERMET now allows for the specification of year specific surface 
           characteristics via the FREQ_SECT, FREQ_SECT2, AERSURF, and 
           AERSURF2 keywords. This allows for a multi-year AERMET run for 
           stage 2 in one AERMET run instead of separate annual AERMET runs 
           when surface characteristics change on an annual basis.

      14.  For seasonal surface characteristics only, AERMET uses the primary 
           and secondary station coordinates to determine the hemisphere of 
           the respective station. This is used to allocate the seasonal 
           characteristics to the appropriate months based on the hemisphere.          

-----  MISCELLANEOUS

       1.  Years associated with XDATES must be 4-digit years

       2.  Stage 1 EXTRACT and QAOUT files have different formats between 
           AERMET 21DRF and previous versions. The ONSITE QAOUT file now 
           has a consistent format whereas before the QAOUT file followed the format of the raw input file

       3.  The 3280 format for SURFACE data has been dropped due to being 
           obsolete

       4.  The no persistence keyword, NOPERS, used for cloud cover and 
           temperature substitution for hours 23 and 24 in METPREP are now 
           obsolete. These keywords were present because previous versions 
           of AERMET processed each day separately within the program and 
           previous versions could not read ahead to the next day to allow 
           for hours 23 and 24 interpolation. Based on the recoding of AERMET, 
           AERMET can now read the next day’s observations so hours 23 and 24 
           can be interpolated in the same manner as other hours in the day
       
       5.  In previous versions of AERMET, when processing NWS data, if hour 
           24 was completely missing from the stage 2 output, i.e., the hour 
           was not in the raw data file in stage 1, AERMET would copy hour 23 
           (if available) to hour 24 for the day. This is no longer done in 
           21DRF AERMET so hour 24 may be missing in the final AERMET output 
           or temperature and cloud cover may be substituted from hour 23 of 
           the same day and hour 1 or 2 of the next day. This change could 
           result in differences for hours 24, 1, and 2 when comparing 21DRF 
           AERMET to previous versions of AERMET
       
       6.  Real variables are now processed as double precision variables
       
       7.  NWS wind speeds associated with variable wind directions are not 
           corrected for truncation in Stage 2 as done in previous versions 
           of AERMET
       
=======================================================================
AERMET Version 21112
=======================================================================

       This revised version of AERMET (dated 21112) includes several
       modifications relative to the previous version (dated 19191);
       see AERMET Model Change Bulletin (MCB) #10 and AERMET User's
       Guide.

-----  BUG FIXES

       1.  Updated module ASOS_COMMDATES to correct anemometer height for
	       Willimantic Airport from 1.21 to 7.92 m.  
       2.  Updated module ASOS_COMMDATES to correct WBAN numbers for
           Harriman (54768) and Ann Arbor (94889).  Corrected coordinates
           for Harriman to 42.7N, 73.17W.  Corrected coordinates for Ann
           Ann Arbor to 42.22N, 83.74W.

       3.  Updated module ASOS_COMMDATES to correct WBAN for Francisco/
           Saipan International Airport to 41418.  

       4.  Updated module ASOS_COMMDATES to correct latitude for Challis Airport to 44.52. 
           Corrected longitude for Willow Run to 83.53 W.  
           Corrected longitude for Oneida County Airport to 75.38 W. 

       5.  Reset convective mixing height to missing if convective mixing height is zero in subroutine CBLHT.  
           Change does not affect AERMOD results as other convective parameters are already missing.

       6.  Update subroutine OSHRAV to average heights when sub-hourly site-specific data is read.

       7.  Update format statement for writing missing variables at a level in subroutine UAQASM.  
           Update is to allow 3 digits for the level instead of 2.  The change does not affect data 
           output, only reporting of data.

       8.  Update MPPBL to initialize the input albedo for subroutine NR_ANG when processing site-specific 
           data when temperature available but no cloud cover or no temperature and no cloud cover.

       9.  Update subroutine RDISHD to not reset missing wind direction to 9990 from 999 in order for AERMET 
           to not replace a valid observation with a missing observation.

      10.  Update subroutine RDISHD to read the USAF ID in as character instead of integer to accommodate 
           newer stationswith non-numeric USAF IDs.

      11.  Update subroutine RDISHD to check the date as well as the hour for potential duplicate observations to avoid 
           losing an hour on a day when the next observation in the ISHD file is the same hour but a different day.

      12.  Update subroutine OSQACK to only write out 2-digit years to avoid a format overflow when the site-specific data   
           has 4-digit years.This change does not affect data output, only reporting the date to the screen.

      13.  Update MPPBL to only calculate mechanical mixing heights if ONSITE mixing heights are not provided.
  
      14.  Update SUBST.FOR to calculate station pressure from onsite elevation (if available) from standard 
           atmosphere using SURFACE temperature, and ONSITE temperature is not available for the hour.  
           This change makes the code consistent with the AERMET User's Guide, Section 5.6, bullet 2(h), page 5-13.

      15.  Updated SUMHF.FOR to check for missing heat flux values when checking for negative heat flux values 
           throughout the day to determine the last convective hour of the day for heat flux integration to calculate 
           convective mixing heights.  Previously, AERMET did not check for missing values so a positive heat flux 
           followed by two missing values early in the convective portion of the day could result in a short convective day.

      16.  Updated SUMHF.FOR to only interpolate missing heat flux values for convective hours if the hour is already 
           determined to be convective based on solar angle in MPPBL.FOR.  Previously, AERMET interpolated for any 
           missing hour that was next to a convective hour, even if the interpolated hour was stable.
      17.  Updated MPPBL and SMTHZI to check that the previous hour is also the same day as the current hour when 
           smoothing the mechanical mixing height

=======================================================================

       This revised version of AERMET (dated 19191) includes several
       modifications relative to the previous version (dated 18081);
       see AERMET Model Change Bulletin (MCB) #9 and AERMET User's
       Guide.

 https://www.epa.gov/scram/meteorological-processors-and-accessory-programs#aermet


-----  MODIFIED BY:    
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       July 10, 2019

-----  MODIFIED FROM:         AERMET
                       (Version Dated 18081)


-----  BUG FIXES

       1.  Modified subroutine MPPBL to correct issues with onsite
           mixing height check when no non-missing convective mixing
           heights (ZICONV).

       2.  Corrected FORMAT statement in AUDIT.FOR to allow for larger
           number for NTOT and upper air soundings.

       3.  Modified subroutine RDISHD to replace a duplicate observation's
           precipition for a given hour if the newewst precipitation is missing
           or zero and the previous precipitation read for the hour is non-missing
           and zero or greater.
       4.  Removed check for missing station pressure and boundary checks on station
           pressure for a sounding only when it is the first sounding.  The boundary
           checks occur for each sounding and are used to determine the FSL version
           and allows for a mix of old and new FSL formats in case data was
           manually substituted into the FSL file.

=======================================================================

       This revised version of AERMET (dated 18081) includes several
       modifications relative to the previous version (dated 16216);
       see AERMET Model Change Bullentin (MCB) #8 and AERMET User's
       Guide Addendum.

 https://www.epa.gov/scram/meteorological-processors-and-accessory-programs#aermet


-----  MODIFIED BY:    
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       March 22, 2018

-----  MODIFIED FROM:         AERMET
                       (Version Dated 16216)


-----  BUG FIXES

       1.  Modified subroutine SUBST, to correct the precipitation 
           code to liquid or frozen if the precipitation amount is 
           greater than zero for National Weather Service data.  
           Previously, there was a mismatch in the code and precip 
           amounts.

       2.  Modified subroutine SFQASM to backspace file 70 to avoid 
           trying to write past end of file.

       3.  Modified subroutine BULKRI to set variables USTAR1, THSTR1,
           and OBU to missing when variable Z_OVER_L > 0.7, to avoid 
           NaN’s in the AERMET output surface file.

-----  ENHANCEMENTS:

       1.  Modified program AERMET to allow the user to input the 
           stage runstream control filename on the command line when 
           calling AERMET.  If no filename is provided, AERMET looks 
           for the default ‘aermet.inp’.

=======================================================================

       This revised version of AERMET (dated 16216) includes several
       modifications relative to the previous version (dated 15181);
       see AERMET Model Change Bullentin (MCB) #7 and AERMET User's
       Guide Addendum.

       http://www.epa.gov/ttn/scram/metobsdata_procaccprogs.htm#aermet


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       August 3, 2016

-----  MODIFIED FROM:         AERMET
                       (Version Dated 15181)


-----  BUG FIXES

       1.  Modified subroutines MPFIN and SUBST to set RANDOM as the
           default selection for the WIND_DIR variable under the
           METHOD option in Stage 3 for NWS wind directions. This
           affects Stage 3.

       2.  Modified subroutine UCALST to remove the code for
           adjusting USTAR if CHEK .GT. 1 for the ADJ_U* option.
           Also incorporated a lower limit of USTCR for USTAR based
           on Equation 26 of Qian and Venkatram (BLM, 2011). This
           affects Stage 3.

       3.  Modified subroutine BULKRI to set a lower limit of 1.0m
           for the Monin-Obukhov length (L) as one of the criteria
           for exiting the DO WHILE loop to avoid NaN’s for USTAR in
           the surface output file for the ADU_U* option. Subroutine
           BULKRI was also modified to use BETAM = 5.0 for the
           ADJ U* option instead of 4.7. This affects Stage 3.

       4.  Modified subroutine MPMET to correct the FORMAT statement
           for including the ‘BULKRN/MMIF’ string in the surface
           file header record. This affects Stage 3.


-----  Miscellaneous:

       1.  Modified several subroutines with minor or cosmetic
           changes to the documentation of user options and error
           handling and reporting. This affects all stages.

=======================================================================


       This revised version of AERMET (dated 15181) includes several
       modifications relative to the previous version (dated 14134);
       see AERMET Model Change Bullentin (MCB) #6 and AERMET User's
       Guide Addendum.

       http://www.epa.gov/ttn/scram/metobsdata_procaccprogs.htm#aermet


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       June 30, 2015

-----  MODIFIED FROM:         AERMET
                       (Version Dated 14134)


-----  Bug Fixes:

       1.  Modified subroutines UCALST and MPPBL to incorporate a
           constant value of THSTAR of 0.08, full inclusion of the
           displacement height, and a modified formulation for     
           Monin-Obukhov length for the ADJ_U* option based on Qian
           and Venkatram (BLM, v138, 2011). Subroutine UCALST was
           also modified to adjust USTAR for wind speeds below the
           “critical” wind speed. This affects Stage 3.

       2.  Modified subroutine BULKRI to correct the calculation of
           CDN to use ZREF(IHR)/Z0(IHR) instead of Z2/Z0(IHR).
           Subroutine BULKRI was also modified to use BETAM = 0.5
           for the ADJ_U* option instead of 0.47. This affects
           Stage 3.


-----  Enhancements:

       1.  Modified subroutine BULKRI to incorporate additional
           refinements to the ADJ_U* Beta option in conjunction with
           the Bulk Richardson Number (BULKRN) option, based on
           Luhar and Raynor (BLM, v132, 2009), including a more
           refined method for calculating THSTAR, and extending its
           applicability for very stable/low wind conditions. This
           affects Stage 3.

       2.  Modified subroutine MERGE to include the year in the
           Stage 2 table of Daily Output Statistics. This affects   
           Stage 2.

       3.  Subroutine GET620 was modified to issue a message if the
           UALOC in the upper data file does not match UALOC
           specified on the LOCATION keyword. This allows users to
           track when data from alternative representative upper air
           stations are used in conjunction with the UPPERAER tool.
           This affects Stage 1.

-----  Miscellaneous:

       1.  Modified several subroutines with minor or cosmetic
           changes to the documentation of user options and error
           handling and reporting. This affects all stages.

=======================================================================

       This revised version of AERMET (dated 14134) includes several
       modifications relative to the previous version (dated 13350);
       see AERMET Model Change Bullentin (MCB) #5 and AERMET User's
       Guide Addendum.

       http://www.epa.gov/ttn/scram/metobsdata_procaccprogs.htm#aermet


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       May 14, 2014

-----  MODIFIED FROM:         AERMET
                       (Version Dated 13350)


-----  Bug Fixes:

       1.  Modified subroutines SUBST and MPPBL to correct potential
           issues associated with the options that were introduced
           in version 13350 to substitute for missing cloud cover 
           (CCVR) and/or temperature (TEMP) by linear interpolation
           across 1 or 2-hour gaps. This included an error that may
           have resulted in substituted CCVR values larger than 10
           for hour 01, which may have resulted in 'NaN' (not a
           number) for some calculated variables.

           Issues with CCVR substitutions may also have occurred for
           applications using ONSITE meteorological data only, with
           ONSITE net radiation (NRAD) or with solar radiation 
           (INSO) and delta-T (DT01) data using the Bulk Richardson
           Number (BULKRN) option. In these cases AERMET calculates
           equivalent cloud cover values that are included in the
           surface output file, but no substitutions for missing
           values should be included. This affects Stage 3.

       2.  Modified subroutine SUBST to remove the initialization of
           the GOT_OSTMP logical variable to .FALSE. for the current
           hour. The GOT_OSTMP variable is assigned a value in
           subroutine GETTEMP prior to the call to subroutine SUBST.
           This error may have affected calculations of station
           pressure and relative humidity for applications with
           ONSITE data, including relative humidity values greater
           than 100 for applications with both SURFACE and ONSITE
           data. This affects Stage 3.

       3.  Modified subroutine GETTEMP to reinitialize the LTZMAX4T
           variable to .TRUE. within the hour loop, indicating that
           the maximum height for ONSITE temperature had not been
           reached yet. The ONSITE temperature may have been
           incorrectly interpreted as being missing in version 13350
           for some cases. This affects Stage 3.

       4.  Modified subroutines GETTEMP and SUBST to ensure that
           substitutions for missing ONSITE temperature data are
           only based on values from the same measurement level if
           multiple levels of temperature are available. This
           affects Stage 3.

       5.  Modified subroutine MPPBL to address issues associated
           with the selection of the appropriate upper air sounding
           time. This includes use the INT function instead of NINT
           when assigning ‘MyZone’ to determine the reference
           sounding time based on the longitude of the location for
           the default option. Subroutine MPPBL was also modified to
           use an integer variable (ICHRND_UASRISE) instead of a
           real variable (CHRND_UASRISE) for assigning the
           ‘START_WINDOW’ when the UASELECT SUNRISE option is used.
           This affects Stage 3.

       6.  Modified subroutines FLOPEN and WRTCRD to use
           STATUS='REPLACE' instead of STATUS='SCRATCH' when opening
           the DEV70 and DEV75 "temporary" files to store the header
           records in the ".IQA", ".OQA", and MERGE data files that
           contain information for reprocessing of input options
           during subsequent stages of AERMET processing. This
           modification addresses issues that were encountered where
           AERMET was not able to locate the 'SCRATCH' files when
           applying a 64-bit version of AERMET. This affects all
           stages.

       7.  Modified subroutines SUMHF and SUNDAT to eliminate
           integer/real mixed-mode calculations in summing the
           hourly heat fluxes, and in calculating sunrise/sunset
           times and solar elevation angles. This affects Stage 3.

       8.  Modified subroutine BULKRI to include the THSTAR
           adjustment for low solar elevation angles under the
           original BULKRN method and for the
           non-Default/BETA ADJ_U* option associated with the BULKRN
           option. Subroutine BULKRI was also modified to avoid an
           array subscript out-of-bounds error in cases where the
           iterative approach does not converge within the specified
           loop limits. This affects Stage 3.

       9.  Modified subroutine MPFIN to include additional error
           handling and reporting associated with processing of
           surface characteristics This affects Stage 3.

-----  Enhancements:

       1.  Modified subroutines VRCARD, SUBST, MPPBL, and MPOUT to
           allow users to disable substitutions for missing
           CCVR and/or TEMP data that are based on persistence for
           hours 23 and 24. Additional flags have been added to the
           surface output file to identify when this option is
           applicable. These changes also allow users to specify
           either the NO_SUB or NOTSUB keyword to disable TEMP
           substitutions. This affects Stage 3.

       2.  Subroutine OSDTCD was modified to include logical
           variables to identify the availability of ONSITE data for
           ambient temperature, solar radiation/insolation, cloud
           cover, net radiation, delta-T, and/or mixing heights.
           Several other subroutines were modified, including MPPBL,
           MPMET, MPFIN, and MPTEST to track whether substitutions
           for missing temperature and/or cloud cover should be
           implemented by default, based on whether only ONSITE data
           or only SURFACE data are available for a given parameter.
           Cloud cover and temperature substitutions were not
           implemented by default in v13350 if both SURFACE and
           ONSITE data were available, irrespective of whether the
           substituted parameter was included in both SURFACE and
           ONSITE data inputs. Version 14134 will apply CCVR and/or
           TEMP substitutions by default if the parameter is only
           included in the SURFACE or ONSITE data. However, the user
           options to disable substitutions are still available.
           This affects Stage 3.

       3.  Modified subroutines MPPBL, SUBST, and EQ_CCVR to address
           potential issues with the use of ONSITE solar radiation
           and delta-T data in lieu of cloud cover (utilizing the
           delta-T based Bulk Richardson Number (BULKRN) method for
           stable conditions) or if delta-T/BULKRN is being applied
           with ONSITE or NWS cloud cover. These modifications were
           focused especially on the transition from nighttime
           stable conditions (controlled by delta-T/BULKRN) and
           daytime convective conditions (controlled by solar
           radiation data). The BULKRN/delta-T method will be used
           if valid delta-T and ONSITE wind data are available and
           if the delta-T lapse rate is stable, or if the cloud
           cover or insolation data is missing, or if the cloud
           cover is an "equivalent" cloud cover derived from solar
           radiation data when the solar elevation angle is less
           than the critical elevation angle for convective
           conditions.

           The critical solar elevation angle was also modified to
           use an average of the previous 24-hours of temperature
           data (with at least 75% data capture), instead of a
           default value of 288 K, for hours when the temperature is
           missing. An assumption of 5/10 cloud cover is also used
           in the calculation of critical solar elevation angle for
           hours when cloud cover is missing. Since the model will
           not compute concentrations for these hours due to missing
           temperature and/or cloud cover the effect of these
           changes on modeled concentrations is likely to be
           minimal. Furthermore, this approach should provide a
           reasonable estimate of early morning heat fluxes, and
           treating these hours as missing in terms of heat flux
           could result in the entire convective portion of the day
           being missing. This affects Stage 3.

       4.  Subroutine EQ_CCVR was modified to account for cases when
           the clear sky insolation value, QRNOT, is less than or
           equal to 0. The equivalent CCVR is set to 0 in these
           cases. This affects Stage 3.

       5.  Modified subroutines MPMET, MPFIN, MPOUT, and AERSURF to
           track and report the use of MMIF-generated inputs, in the
           form of pseudo-ONSITE data alone (including "ONSITE"
           mixing heights) or as pseudo-ONSITE and UPPERAIR data.
           The use of MMIF-generated inputs is gleaned from
           information in the AERSURF input file of surface
           characteristics if it is used in Stage 3. The use of MMIF
           data is flagged in the header record of the surface file
           and by the use of the 'MMIF-OS' flag instead of the
           hourly NAD-OS, ADJ-SFC, etc., flags associated with
           ONSITE and/or SURFACE data.

           Subroutines MPMET, MPFIN, and MPOUT were also modified to
           track and report the use of the Bulk Richardson Number 
           (BULKRN) option based on delta-T measurements, in lieu of
           cloud cover, for stable conditions. For applications
           using the BULKRN option, the header record of the surface
           file will include the 'BULKRN' flag. An additional 'MMIF'
           flag will be included if the BULKRN option is associated
           with use of MMIF data. This affects Stage 3.

       6.  Modified subroutine GET620 to allow the user to specify a
           standard 5-digit WBAN, instead of an 8-digit number with
           3 leading 0's, for processing upper air data in the 6201
           format. Checks have also been included to identify issues
           that may occur when users specify the 6201VB (TD-6201
           variable-length block) format for upper air data. This
           affects Stage 1.

       7.  Modified subroutine GETFSL to read the WMO number from
           upper air data in the FSL format, in addition to reading
           the WBAN, and assign the WMO number to the BUF08(1)
           variable if WBAN = '99999' to support non-US
           applications. This affects Stage 1.

       8.  Modified subroutines SETUP, MPPROC, OSCARD, MRCARD,
           WRTCRD, and HEADER to allow re-processing of the XDATES
           information from the MERGE file header records. This
           information is included in the Stage 3 report, unless the
           user has specified XDATES in the Stage 3 input file. Also
           modified subroutine MERGE to use a consistent form for
           reporting the extract dates in the report files across
           all three stages. Subroutine CHROND was modified to fully
           support 4-digit years and subroutine XDTCRD was modified
           to use 4-digit years for extract dates in the report
           files instead of 2-digit years. This affects Stage 3.

-----  Miscellaneous:

       1.  Modified several subroutines with minor or cosmetic
           changes to the documentation of user options and error
           handling and reporting, including elimination of trailing
           blanks associated with filenames, etc., to minimize line
           wrap in the AERMET report files. This affects all stages.

       2.  Modified several subroutines to replace the FLOAT Fortran
           function with the REAL function to convert integer
           variables to reals. This affects all stages.

=======================================================================

       This revised version of AERMET (dated 13350) includes the
       following modifications relative to the previous version
       (dated 12345); see MCB#4 and updated User's Guide Addendum:


-- Bug Fixes:

   1.  Modified subroutine UCALST to incorporate AECOM's recommended
       corrections to theta-star under the ADJ_U* Beta option.

   2.  Modified subroutine MPMET to correct assignment of time-zone
       adjustment (ZONE) to be based on the upper air time-zone (UALST)
       for cases where both upper-air data and ONSITE mixing heights
       are available.

   3.  Modified subroutine SBLHT to correct the coefficient for
       the mechnical mixing height from 2300 to 2400 based on
       the original Venkatram reference (BLM, 2009).

   4.  Modified subroutine MPPBL to correct the initialization of
       the NO_SKY variable for missing on-site cloud cover to use
       the OSTSKY(2) value based on the missing data code input by
       the user, instead of a value of 99. This error could have
       resulted in on-site cloud cover being flagged as missing
       inappropriately in previous versions.

   5.  Modified subroutine O3NEXT to remove the conversion of
       delta-T values to lapse rate values (delta-T/delta-z)
       before calling subroutine REALQA, which compares the value
       to upper and lower bounds based on delta-T values. This
       could have resulted in a large number of spurious QA warnings
       for delta-T values out-of-range.

   6.  Modified subroutine RDISHD to correct the processing of ASOS
       cloud cover data based on the GA1-GA6 codes to avoid
       inadvertently assigning a missing code to the ASKY variable.
       Also modified subroutine RDISHD to move the check for hour
       0 (zero) later in the processing in order to avoid using
       a "special" ISHD observation that occurs on the hour instead
       of a "non-special" (i.e., preferred) observation that occurs
       earlier.

   7.  Modified subroutine MPFIN to include additional error
       checking and reporting regarding the completeness of the
       surface characteristics arrays. Errors in processing user-
       specified surface characteristics (i.e., not generated by
       AERSURFACE) may have occurred in previous versions. This
       modification also includes initializing the storage arrays
       for surface characteristics in BLOCK1.INC to -9.0 instead
       of 0.0.

   8.  Modified several subroutines to allow the use of on-site
       mixing heights only (OSMIX), without requiring upper air
       data.  In these cases, the LOCATION keyword on the METPREP
       pathway can be used to specify the time zone adjustment from
       local time to GMT, since the time zone specified on the
       ONSITE pathway is likely to be for local time.  Otherwise,
       AERMET would assume GMT as local time and results would
       be incorrect (unless local time actually was GMT). This
       includes a modification to subroutine MPCARD to call
       subroutine MPPROC to obtain information on OSMIX and UADATA,
       before the METPREP LOCATION keyword is processed, and to
       to return the new MPLST variable from the location keyword
       processed in subroutine LOCCRD to identify the local vs.
       GMT zone adjustment for cases with only ONSITE data. The
       call to subroutine MPPROC, previously made in subroutine
       SETUP, has been removed.

       The warning message generated in subroutine LOCCRD was
       also modified to indicate that the METPREP LOCATION
       keyword is no longer considered obsolete if OSMIX and
       no UADATA are being used.

       Additional modifications were made to the initialization
       and processing of the location IDs for the surface (SF),
       upper air (UA) and onsite (OS) locations in order to
       select the appropriate location for determining time
       zone adjustments in Stage 3 processing. Previous
       versions used character variables of various lengths
       that were initialized as blank fields in WORK1.INC.
       However, the initializations were accomplished by an
       EQUIVALENCE statement in WORK1.INC, which may cause
       problems when checking whether a location ID was
       blank by comparing to the equivalenced variables.

   9.  Modified subroutine MPPBL to correct the error message
       associated with missing station pressure (FORMAT 1022)
       which was also used for missing sky cover data.  A new
       FORMAT statement (1021) was added for use with missing
       station pressure. Also removed several FORMAT statements
       in MPPBL that were not used.

-- Enhancements:

   1.  Modified subroutine BULKRI to incorporate a modified Bulk
       Richardson Number approach under the ADJ_U* Beta option,
       based on Luhar and Raynor (2009).  As with the ADJ_U* Beta
       option incorporated in UCALST for applications which do not
       employ the BULKRN option, this method is considered a
       non-DFAULT option requiring approval as an alternative
       model for use in regulatory applications.

       Luhar A.K. and K. N. Rayner, 2009. Methods to Estimate Surface
            Fluxes of Momentum and Heat from Routine Weather Observations
            for Dispersion Applications under Stable Stratification.
            Boundary-Layer Meteorology. 132:437454.

   2.  Modified subroutines MPPBL, SUBST, VRCARD, and MPTEST to
       include substitutions for missing cloud cover data and/or
       missing ambient temperature by interpolating across 1 or 2-hour
       gaps in the input data. New subroutines (GETCCVR and GETTEMP)
       were also created to facilitate this enhancement.  The default
       option is for AERMET to apply the substition for both missing
       cloud cover and temperature, unless the user has specified
       both SURFACE and ONSITE data.  New options have been added
       to the METHOD keyword on Stage 3 that allow the user to
       disable the cloud cover and/or temperature substition(s)
       in cases where only SURFACE or ONSITE data are available,
       or to activate the options in cases where both SURFACE and
       ONSITE data are available. Subroutines MPMET and MPOUT
       were also modified to include appropiate flags in the
       surface output file indicating when these options have
       been utilized.

-- Miscellaneous:

   1.  Modified several subroutines to improve error handling and
       reporting in general, in addition to the modifications in
       subroutine MPFIN described above as item 5 under Bug Fixes
       to correct a potential bug related to processing of surface
       characteristics.

   2.  Modified subroutine MPFIN to include the temporal frequency
       of the original user input of surface characteristics, i.e.,
       MONTHLY, SEASONAL, or ANNUAL, since the summary table included
       in the Stage 3 report file automatically lists values by month.

   3.  Modified subroutine MPFIN to eliminate a redundant message
       if the default ((Holtslag) method is used for the stable
       boundary layer, without the non-default ADJ_U* Beta option.

   4.  Included a DATA statement in subroutine RDISHD to initialize
       the default "window" for acceptable data records, INC = 30
       (i.e., up to 30 minutes before the hour, including the hour)
       instead of a standard assignment statement.


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       December 16, 2013

-----  MODIFIED FROM:         AERMET
                       (Version Dated 12345)

=======================================================================

       This revised version of AERMET (dated 12345) includes the
       following modifications relative to the previous version
       (dated 11059); see MCB#3 and updated User's Guide Addendum:


-- Bug Fixes:

   1.  Modified subroutine DOCLDS to correct for errors that
       result when blank spaces occur between the cloud cover
       and ceiling height fields for HUSWO surface data. Also
       modified DOCLDS to no longer accept invalid ASOS cloud
       cover codes for HUSWO surface data. These bug fixes
       should not affect results for HUSWO surface data that
       were extracted from the HUSWO CD, but could affect
       results significantly for applications using surface
       data that were reformatted to the HUSWO format from
       another data format.

   2.  Modified subroutine CBLHT to correct an error in the
       calculation of the convective mixing height. Previous
       versions of AERMET may have underestimated convective
       mixing heights, and in turn the convective velocity
       scale (w*), due to this error. The magnitude of the
       errors would tend to be larger for cases where the
       vertical temperature profile based on the upper air
       sounding was based on fewer sounding levels. However,
       due to the widespread nature of these convective mixing
       height errors, AERMOD modeling results are likely to
       be affected to some degree by this AERMET bug fix in
       most cases.

       The magnitude and direction of changes in AERMOD model
       results due to this convective mixing height bug fix
       will vary depending on the resolution of the upper
       air data and the characteristics of the sources and
       terrain included in the AERMOD model application. Also,
       as noted in Section 3.2 of the "AERMOD Implementation
       Guide," upper air data input to AERMET should be based
       on "all levels" or "mandatory and significant levels"
       to ensure adequate resolution of the vertical profile;
       use of upper air data based on "mandatory levels only"
       is not acceptable for AERMOD modeling applications.

   3.  Modified subroutines CBLHT, MPPBL, MPMET, and SETUP
       to check for ONSITE mixing heights (OSMIX) in the
       determination of data completeness, and adjusted
       warning messages to account for possible presence
       of both ONSITE mixing heights and UPPERAIR data.


-- Enhancements:

   1.  Added a new THRESH_1MIN keyword to Stage 3 processing.
       This optional keyword allows the user to specify a threshold
       wind speed below which winds reported in the 1-minute ASOS
       data processed through AERMINUTE, if in use, are considered
       calm. There is no default value; however, a warning message
       will be generated if the user-specified threshold is greater
       than 0.5 m/s, and a fatal error message will be generated if
       the user-specified threshold is less than zero (0) or greater
       than 1.0.

       This new keyword also required that the length of the
       KEYWRD variable be increased from 10 to 12 characters,
       resulting in modifications to several subroutines.

   2.  Incorporated new "BETA" option to adjust u* (ustar) for
       low wind speed stable conditions, based on Qian, W.,
       and A. Venkatram, 2011: Performance of Steady-State
       Dispersion Models Under Low Wind-Speed Conditions.
       Boundary-Layer Meteorology, 138, 475-491. The new option
       is selected by including the METHOD STABLEBL ADJ_U*
       keyword on the METPREP pathway in the Stage 3 input file.

       The ADJ_U* "BETA" option is considered to be a non-Default
       option and is therefore subject to the alternative model
       provisions in Section 3.2 of Appendix W (40 CFR Part 51).
       Users should coordinate with the appropriate reviewing
       authority regarding the procedures and requirements for
       approval of this BETA option for regulatory modeling
       applications.  Use of this option also requires the user
       to include the BETA option on the CO MODELOPT keyword in
       the AERMOD input file.

   3.  Arrays for storing upper air soundings were increased to
       accommodate up to 48 soundings, including the current
       day and the previous day.


-- Miscellaneous:

   1.  The value used to adjust ASOS wind speeds to account for
       bias due to wind speeds being truncated to whole knots was
       modified to include three significant digits (from 0.26 m/s
       to 0.257 m/s, based on 0.5 kt). This modification avoids
       potential for mis-characterization of calm vs. non-calm
       due to precision issues associated with the truncation
       adjustment under the new THRESH_1MIN option.

   2.  Modified subroutine GETFSL to issue a non-fatal warning
       instead of a fatal error message when the UA station ID
       specified on the UA LOCATION keyword does not match the
       UA station ID in the data file. This change will accommodate
       substitutions for missing UA soundings using data from other
       representative UA stations, and will document when such
       substitutions were made in the Stage 1 report file.
       Since all convective hours will be missing on days when the
       UA sounding is missing, this will allow users to minimize
       the number of missing hours in the AERMET-processed surface
       file due to missing UA soundings, while maintaining a record
       of when such substitutions were made.

   3.  Modified subroutine RDHUSW for processing HUSWO surface
       data to change the "no records extracted" warning message
       to a fatal error.

   4.  Modified subroutines EQ_CCVR and INCRAD to remove a trailing
       period within the single quotes in the INCLUDE 'WORK1.INC'
       statements.


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       James O. Paumier
                       AMEC, Inc.

                       December 10, 2012

-----  MODIFIED FROM:          AERMET
                       (Version Dated 11059)

=======================================================================

       This revised version of AERMET (dated 11059) includes the
       following modifications relative to the previous version
       (dated 06341); see MCB#2 and updated User's Guide Addendum:


-- Bug Fixes:

   1.  Corrected several problems associated with the processing of
       subhourly ONSITE meteorological data, including:

       a) Modified the procedure for calculating hourly averages
          to use the "hour-ending" convention in accordance with
          Section 7.3 of "Meteorological Monitoring Guidance for
          Regulatory Modeling Applications," EPA-454/R-99-005,
          February 2000; previous versions used the "hour-beginning"
          convention.

       b) Corrected the procedure for calculating hourly averages
          from subhourly values for sigma-theta.  Previous versions
          used an equation in Section 5.2 of the AERMET User's Guide,
          but this has been replaced with the equation referenced in
          Table 8-3 of Appendix W. The equation from Section 5.2 of
          the AERMET User's Guide was also coded incorrectly in
          previous versions of AERMET, which resulted in runtime
          errors in some cases due to taking a square root of a
          negative number.

       c) Corrected the processing of subhourly wind data to properly
          code hours as calm when more than half of the samples for
          the hour are non-missing, but below the wind threshold.
          Previous versions coded these hours as missing rather than
          calm.

       d) Addressed several issues associated with the extraction of
          ONSITE data that could result in erroneous values being
          assigned to ONSITE variables, and also improved error
          handling and reporting for the processing of ONSITE data.

       e) Corrected problems associated with processing of ONSITE
          precipitation data, including the fact that subhourly
          precipitation values were averaged rather than summed
          to determine the hourly value, and that negative values
          were also included in the summed value (before averaging)
          if the missing data code was not properly specified.

   2.  The implementation of the SUBNWS option was corrected to
       avoid using the BULKRN option using ONSITE delta-T data when
       the ONSITE winds are missing and the reference winds are
       based on SURFACE data. Vertical rofiles of ONSITE temperature,
       sigma-theta, and sigma-w are also skipped if the reference
       winds are based on SURFACE data.  These changes are intended
       to avoid internal inconsistencies in the characterization of
       the boundary layer that may occur with some combinations of
       SURFACE and ONSITE data.

   3.  Corrected problems with time zone adjustments for cases with
       surface and onsite stations in different time zones.

   4.  Incorporated changes to properly handle ISHD surface files
       with the problem addressed on an interim basis by FIXISHD
       utility, which is no longer required.

-- Enhancements:

   1.  Enhancements were made to the heirarchy for handling missing
       station pressure to make full use of other available data and
       of user-specified station elevations for SURFACE stations
       and ONSITE stations, if available.

   2.  Increased the maximum record length for the runstream input file
       from 80 to 132 characters, removed any limit on the record length
       for ONSITE data records, increased the maximum field length for
       filenames from 48 to 96, and allow for use of double quotes ()
       as field delimiters to support filenames with embedded spaces.

   3.  Several enhancements to provide more flexibility in selecting
       the most appropriate upper air sounding, including a new option
       for a user-specified window on upper air observation time, and
       an option for AERMET to automatically select the most appropriate
       sounding based on local sunrise. These enhancements allow AERMET
       to better utilize upper air data that occurs more frequently
       than twice-daily, including "pseudo" upper air data derived from
       gridded meteorological models or reanalysis data, if deemed to
       be appropriate in the future (note that use of gridded model
       outputs or reanalysis data in AERMET would be considered as
       an alternative modeling technique at the present time).  These
       enhancements also provide better support for applications of
       AERMOD beyond the U.S.

   4.  Enhancement to allow the use of hourly-averaged winds derived
       from 1-minute ASOS wind data (TD-6405), generated by the new
       AERMINUTE program, which can improve the representativeness
       of airport wind data by providing hourly averages as well as
       filling in for many hours that are missing in the standard
       airport data archives due to calm or variable winds.

   5.  Adjustment of ASOS-based wind speeds (including winds derived
       from 1-minute ASOS data) by +0.5 knot to account for the bias
       in reported ASOS wind speeds due to winds being truncated
       (rather than rounded) to whole knots.  This includes changes
       to several subroutines to allow tracking whether surface data
       are ASOS or observer-based across all three stages of data
       processing, and the inclusion of an ASOS 'flag' in the surface
       extraction and surface QA files.  A database of ASOS commission
       dates has been included to allow AERMET to determine whether
       observations for a specific surface station are ASOS or not.
       The surface output file format has also been modified to include
       a character string for each hour identifying whether the wind
       speeds have been adjusted or not to account for the truncation
       of the ASOS winds ('ADJ-' or 'NAD-') and whether the reference
       wind data is based on ONSITE, SURFACE or 1-MIN ASOS data (OS,
       SFC, or A1).

   6.  Several enhancements to the error handling and reporting related
       to processing ONSITE data, including an option to use FREE
       format to read the data and the option to specify missing data
       codes and upper/lower bounds for ONSITE data as REAL variables.

   7.  A new option/requirement incorporated in Stage 3 to specify a
       secondary set of surface characteristics for use when NWS winds
       are substituted for missing on-site winds using the SUBNWS option
       on the METPREP pathway.  The primary set of surface characteristics
       is used when the reference wind is based on ONSITE data, and the
       secondary surface characteristics are used when SURFACE data are
       substituted for missing ONSITE data.  This ensures that an
       appropriate surface roughness will be used depending on the
       location of the reference wind data.

   8.  New keywords, AERSURF and AERSURF2, were added to the METPREP
       pathway to allow users to specify an external file to read
       for surface characteristics, such as an AERSURFACE output file,
       rather than entering the data directly in the Stage 3 input
       file.

   9.  Enhancements to utilize on-site precipitation and relative
       humidity data, if available, in the surface output file.

-- Miscellaneous:

   1.  The LOCATION keyword is no longer supported on the METPREP
       pathway in Stage 3.  The METPREP LOCATION keyword had been used
       as the location for determining sunrise for convective mixing
       height calculations.  This could result in somewhat different
       results using the same raw input data depending on the METPREP
       LOCATION, which are not meaningful.  A non-fatal warning message
       is issued if the METPREP LOCATION keyword is found, and the
       location used to determine sunrise for convective mixing height
       calculations is based on the primary surface station location,
       i.e., the ONSITE station if available, or the SURFACE (NWS)
       station location.

   2.  Modified several subroutines to adjust the lower limit on the
       value of surface roughness length to 0.0001 meters, rather than
       0.001 meters.  This allows more flexibility for applications of
       AERMET for overwater or other very low roughness settings.

   3.  Several subroutines were modified to improve error handling and
       reporting for all three processing stages, including adjustments
       and improvements to the order and formatting of information in
       the report file.

   4.  Implemented some restrictions on the use of surface (NWS) data
       outside the valid range of dates based on the surface data format,
       i.e., data that have been reformatted from another file format.
       These restrictions affect cloud cover for ASOS data in the SCRAM
       or SAMSON format, since the SAMSON CDs and nearly all SCRAM surface
       data predated the advent of ASOS in 1992.  The ASOS cloud covers
       are set to missing for any SURFACE data input in the SCRAM or
       SAMSON format, since the interpretation and formatting of ASOS
       cloud cover codes cannot be verified in these cases.


-----  MODIFIED BY:    Roger W. Brode
                       U.S. EPA, OAQPS/AQAD
                       Air Quality Modeling Group

                       February 28, 2011

-----  MODIFIED FROM:          AERMET
                       (Version Dated 06341)

=======================================================================
                                 AERMET
        Meteorological Preprocessor for the AERMOD Dispersion Model

     PURPOSE:  Controls the overall flow of AERMET processing through
               Stages 1, 2 and 3.

               There are four data types that can be processed
               through AERMET:

                  UPPERAIR - Upper air soundings

                  SURFACE  - Hourly surface weather observations

                  ASOS1MIN - Hourly-averaged winds derived from
                             1-minute ASOS data (TD-6405), processed
                             by the AERMINUTE processor

                  ONSITE   - User supplied on-site meteorological data

                In Stage 1, the UPPERAIR and SURFACE data are extracted
                from a standard archive-formatted file and the quality
                of the data are assessed; also in this stage, the
                quality of the ONSITE data are assessed, if provided
                by the user. There is no standard archive format for
                on-site data, hence, there is no data extraction.

                In Stage 2, the data input in Stage 1 are combined,
                or merged, into 24-hour blocks of data.

                In Stage 3, the merged data from Stage 2 are processed
                to determine boundary layer scaling parameters, compute
                hourly mixing heights, and output hourly data formatted
                for input to the AERMOD dispersion model.  Stage 3 output
                consists of a "surface" file, with scaling paramters,
                reference wind and temperature data, hourly mixing
                heights, and other parameters that may be used with
                the deposition algorithms in AERMOD; and a "profile"
                file, with vertical profiles of wind, temperature, and
                turbulence data collected from an onsite tower, if
                available.

     Initial Release:  December 1992

     Maintained by: Pacific Environmental Services, Inc. (PES)
                    Research Triangle Park, NC

     Revision History:
        10/18/96
          - added the write statement to display processing setup and
            processing completed messages

        06/27/99
          - added capability to process upper air data retrieved from
            Radiosonde Data of North America compact disc (aka "FSL
            data")

        10/26/06
          - A single executable (AERMET) was created, replacing
            STAGE1N2 and STAGE3.

        05/29/08: MACTEC Federal Programs
          - Commented out opening unit 3 (the console or screen) all
            references to unit 3 in the code have been changed to
            * (default output)
-----------------------------------------------------------------------