1 

CALPUFF Chemistry Updates: 

User’s Instructions for API Chemistry Options 

October 25, 2010 

Prepared by 

TRC Environmental Corporation 

650 Suffolk Street 

Lowell, MA 01854 

Prepared for

WEST Associates 
2 

1.0 Introduction 

Two chemical transformation module options were introduced into Version 5.8 of the CALPUFF 

modeling system (Scire et al., 2000a,b) by Karamchandani et al. (2008) in a study sponsored by 

the American Petroleum Institute (API). These modules include: 

Modules 1 and 2

• Modification of the existing RIVAD chemical mechanism for the transformation of 

SO2 to SO4 and NO/NO2 to HNO3 and NO3

• Replacement of the MESOPUFF-II CHEMEQ model with the ISORROPIA (Version 

1.7) model for inorganic gas-particle equilibrium 

• Addition of a new option for aqueous-phase transformation adapted from the RADM 

cloud implementation in CMAQ/SCICHEM 

Module 2

• Addition of a new option for anthropogenic secondary organic aerosol (SOA) 

formation based on the CalTech SOA routines implemented in CMAQ-MADRID 

TRC has implemented these modules as options into a new version of CALPUFF (Version 6.4). 

Module Option 1 is implemented as the 6th CALPUFF chemical transformation option (MCHEM 

= 6), and Module Option 2 is implemented as the 7th CALPUFF chemical transformation option 

(MCHEM = 7). However, one difference is that TRC has updated the gas-particle equilibrium 

model for nitrates from ISORROPIA v1.7 to ISORROPIA v2.1 (Nenes et al., 1998; Fountoukis 

and Nenes, 2007). ISORROPIA v2.1 is the only version of the model currently supported by the 

developers. 

Both new module options use the ISORROPIA v2.1 model instead of the CHEMEQ gas-particle 

equilibrium model for nitrates used with the MCHEM=1, 3 options. Since total nitrate (TNO3) is 

partitioned into the gas (HNO3) and particulate (NO3) phases based in part on the ammonia 

available after preferential scavenging by sulfate, the equilibrium should be determined using the 

total amount of sulfate and nitrate (due to all sources, background, etc.) present at a particular 

location and time. This is accomplished using the ammonia-limiting method (ALM) of the 

POSTUTIL postprocessor in the CALPUFF modeling system. Because POSTUTIL also 

employs the CHEMEQ model in the ALM, Karamchandani et al. (2009) replaced CHEMEQ 

with ISORROPIA v1.7 in POSTUTIL Version 1.56 in a hardwired way which prevented 

backward compatibility. TRC has implemented the current ISORROPIA v2.1 module into a new 

POSTUTIL Version 1.64 as an option which retains backward compatibility of the POSTUTIL 

code. 

The ISORROPIA v2.1 model is documented and maintained by its developers, as described at 

the ISORROPIA home page (http://nenes.eas.gatech.edu/ISORROPIA). It is incorporated in this 

version of CALPUFF and POSTUTIL without modification, with permission from the model 

developers following the terms-of-use requirements. 
3 

2.0 Model Implementation 

The FORTRAN codes introduced in the API-sponsored update to CALPUFF are made up of a 

number of subroutines and supporting include-files for declarations of parameters and variables 

stored in common. To facilitate future maintenance new subroutines other than those that are 

part of ISORROPIA are bundled in a single FORTRAN file (API_CHEM.FOR) that is separate 

from the CALPUFF file (CALPUFF.FOR), the code for ISORROPIA remains a separate file 

(ISORROPIA.FOR), and the included commons-files are retained without modification 

(aqueous.puf, newsoa.puf, soadat.puf, and isrpia.inc). Should any of these submodels be 

updated, CALPUFF can be immediately updated as well. 

The file API_CHEM.FOR includes: 

AER routines based on existing CALPUFF routines 

 Subroutine CHEMRIV6 

 Subroutine CHEMRIV7 

 Subroutine CHMRIV6 

 Subroutine CHMRIV7 

 Subroutine SETBCKOC 

ISORROPIA interface routine 

 Subroutine ISODRIVER 

CALTECH SOA routines 

 Subroutine SOADRIVER 

 Subroutine CALTECH_SOA 

 Subroutine SOASUB 

AQUEOUS-CHEMISTRY ROUTINES BASED ON RADM/CMAQ 

 Subroutine AQRADM 

 Function HLCONST 

 Function INDEX1 

Several modifications were made to these new modules. Options have been assigned either new 

user-selected modeling option variables (changed via the control file) or local logical operators 

that may be switched in an individual subroutine to restore the original logic. CALPUFF will 

need to be recompiled if a local logical variable is changed. 

The following variable settings will restore the features and logic of the original API 

implementation (for testing): 

Control File 

• MLWC = 0 Do not read gridded cloud water from file 

• MNH3 = 1 Read monthly ammonia vertical profiles 

• MAVGNH3 = 0 Do not average NH3 profiles within a puff 
4 

• RNITE1 = 0.0 Do not include heterogeneous SO2 transformation 

Local Logical in Subroutine 

• L_KGPCM = .FALSE. CHEMRIV6, CHEMRIV7 

• L_TNO3FLOOR = .FALSE. CHEMRIV6, CHEMRIV7 

• L_RAINCLOUD = .FALSE. CHEMRIV6, CHEMRIV7 

• L_SCAV6 = .FALSE. WET 

More documentation about the local logical configuration is provided in the code. 
5 

3.0 CALPUFF 

The new chemistry options in CALPUFF are accessed through control-file selections. 

Depending on the configuration, one or two new files may also be required. Most of the controlfile selections are simple to characterize as few new settings are involved. These are detailed in 

Section 3.1. 

When CALPUFF is used to calculate secondary aerosol (SOA) formation from the source 

emissions using the new mechanism (MCHEM = 7), species in addition to those used in the 

RIVAD mechanism are associated with the SOA treatment. These species include 

• primary organic carbon 

• precursor (emitted) volatile organic compounds (VOCs): toluene, xylene, long-chain 

alkanes, and polycyclic aromatic hydrocarbons 

• condensable products from these species and their particle-phase counterparts 

As with the other chemical transformation mechanisms, the species must use particular names 

and must be assigned in a particular order. Both must conform to the list in Table 3-1. 

These species have been added to the species library of the CALPUFF GUI, and a "Quick-Start" 

option is available to select these species in the correct order. This feature should be used to 

construct the control file for this chemical transformation option. 

Source emission rates for the SOA option will typically include emissions of the four VOC 

species and primary organic carbon emissions when available, although some sources may have 

zero emissions of some of these species. For example, if a given source only emits the aromatic 

VOCs TOL and XYL then all the other species can be designated as non-emitted species in the 

control file. Furthermore, fewer than 25 species may be used in a simulation if the omitted 

species are at the end of the list. For example, if PAH emissions are zero, then the first 20 

species may be used. If both ALKH and PAH emissions are zero, then the first 17 species may 

be used. 

Background organic carbon concentrations are also needed, and these are provided in the same 

way they are provided for MCHEM = 4, as monthly values of fine particulate concentration 

(BCKPMF) and the corresponding monthly fractions for the organic portion (OFRAC) of the 

fine particulate. See the control file Input Group 11 in Section 3.1. 
6 

Table 3-1 

Species Names and Sequence 

SPECIES 

NUMBER 

SPECIES 

NAME 

DESCRIPTION PHASE 

1 SO2 Sulfur Dioxide Gas 

2 SO4 Sulfate Particle 

3 NO Nitrogen Oxide Gas 

4 NO2 Nitrogen Dioxide Gas 

5 HNO3 Nitrate Gas 

6 NO3 Nitrate Particle 

7 POC Primary Organic Carbon Particle 

8 TOL Toluene Gas 

9 TOLAER1 Condensable product from TOL Gas 

10 TOLAER2 Condensable product from TOL Gas 

11 ATOLA1 Condensable product from TOL Particle 

12 ATOLA2 Condensable product from TOL Particle 

13 XYL Xylene Gas 

14 XYLAER1 Condensable product from XYL Gas 

15 XYLAER2 Condensable product from XYL Gas 

16 AXYLA1 Condensable product from XYL Particle 

17 AXYLA2 Condensable product from XYL Particle 

18 ALKH Long-Chain Alkanes Gas 

19 ALKHAER Condensable product from ALKH Gas 

20 AALKHA Condensable product from ALKH Particle 

21 PAH Polycyclic Aromatic Hydrocarbons Gas 

22 PAHAER1 Condensable product from PAH Gas 

23 PAHAER2 Condensable product from PAH Gas 

24 APAHA1 Condensable product from PAH Particle 

25 APAHA2 Condensable product from PAH Particle 

Notes: Species emitted from sources (primary) are in BOLD typeface 
7 

3.1 CALPUFF Control File 

Changes for selecting and configuring the new chemistry options are found in Input Groups 0, 2, 

and 11. 

Input Group 0 provides the file-name information for the simulation. The new names are listed 

in the Other Files section, and are assigned to AUXEXT and NH3ZDAT: 

INPUT GROUP: 0 -- Input and Output File Names 

-------------------------------------------------------------------------------- 

Other Files 

----------- 

OZONE.DAT input * OZDAT = * 

VD.DAT input * VDDAT = * 

CHEM.DAT input * CHEMDAT= * 

AUX input ! AUXEXT = AUX ! 

(Extension added to METDAT filename(s) for files 

 with auxilliary 2D and 3D data) 

H2O2.DAT input * H2O2DAT= * 

NH3Z.DAT input ! NH3ZDAT=NH3Z_07.DAT ! 

HILL.DAT input * HILDAT= * 

HILLRCT.DAT input * RCTDAT= * 

COASTLN.DAT input * CSTDAT= * 

FLUXBDY.DAT input * BDYDAT= * 

BCON.DAT input * BCNDAT= * 

DEBUG.DAT output * DEBUG = * 

MASSFLX.DAT output * FLXDAT= * 

MASSBAL.DAT output ! BALDAT=CALPUFF.BAL ! 

FOG.DAT output * FOGDAT= * 

RISE.DAT output * RISDAT= * 

-------------------------------------------------------------------------------- 

AUXEXT identifies auxiliary data files from a CALMET application. For the new chemistry 

options with aqueous-phase reactions, the auxiliary file may be used to provide a gridded field of 

liquid cloud water content. Data for this are processed within CALMET from the 3D.DAT 

mesoscale model fields to the CALMET modeling grid. Each auxiliary file retains the file name 

of the standard CALMET output file associated with it, but adds the extension assigned by 

AUXEXT. In the example above, the extension added to all output CALMET data files in the 

simulation is ".AUX". 

NH3ZDAT identifies the name of a file of monthly average ammonia concentrations for each 

layer in the CALMET/CALPUFF simulation grid. This is used only if the new control variable 

MNH3 in Input Group 2 is set to 1. 

Input Group 2 is used to configure the major technical options. New or augmented options are 

MCHEM, MAQCHEM, and MLWC: 
8 

INPUT GROUP: 2 -- Technical options 

-------------- 

 Chemical mechanism flag (MCHEM) Default: 1 ! MCHEM = 6 ! 

 0 = chemical transformation not 

 modeled 

 1 = transformation rates computed 

 internally (MESOPUFF II scheme) 

 2 = user-specified transformation 

 rates used 

 3 = transformation rates computed 

 internally (RIVAD/ARM3 scheme) 

 4 = secondary organic aerosol formation 

 computed (MESOPUFF II scheme for OH) 

 5 = user-specified half-life with or 

 without transfer to child species 

 6 = transformation rates computed 

 internally (Updated RIVAD scheme with 

 ISORROPIA equilibrium) 

 7 = transformation rates computed 

 internally (Updated RIVAD scheme with 

 ISORROPIA equilibrium and CalTech SOA) 

 Aqueous phase transformation flag (MAQCHEM) 

 (Used only if MCHEM = 6, or 7) Default: 0 ! MAQCHEM = 0 ! 

 0 = aqueous phase transformation 

 not modeled 

 1 = transformation rates and wet 

 scavenging coefficients adjusted 

 for in-cloud aqueous phase reactions 

 (adapted from RADM cloud model 

 implementation in CMAQ/SCICHEM) 

 Liquid Water Content flag (MLWC) 

 (Used only if MAQCHEM = 1) Default: 1 ! MLWC = 0 ! 

 0 = water content estimated from cloud cover 

 and presence of precipitation 

 1 = Gridded cloud water data read from CALMET 

 water content output files (filenames are 

 the CALMET.DAT names PLUS the extension 

 AUXEXT provided in Input Group 0) 

MCHEM selects the chemical transformation mechanism. The API modules appear as Options 6 

and 7. They differ only in the addition of the SOA chemistry module in the latter. 

MAQCHEM selects the RADM aqueous-phase transformation module, and is active only in 

combination with MCHEM Options 6 or 7. When selected, it requires information on the cloud 

liquid water content and the background H2O2 concentrations. 

MLWC selects the method used to obtain cloud liquid water content. The cloud water originally 

used in the aqueous chemistry was set to 0.5 g/m3

 for precipitating (rain, not snow or ice) clouds 

and 0.1 g/m3

 for non-precipitating clouds in lieu of providing a pathway for obtaining more 

specific information. This method is used if MLWC = 0, and it requires cloud cover, 

temperature, and precipitation rate fields. Procedures have been implemented in CALMET to 

pass gridded cloud liquid water content from MM5/WRF to a new auxiliary output file which 

may be read by CALPUFF. These data currently allow CALPUFF to obtain a mean cloud water 
9 

mixing ratio (g/kg) that is vertically-averaged over the depth of the cloud layer, when present, at 

the current puff location. This method is used if MLWC = 1. 

Input Group 11 provides parameters used in the chemical transformation mechanisms. New 

parameters or existing parameters that are used with the API modules are MOZ, BCKO3, 

MNH3, MAVGNH3, BCKNH3, RNITE1, MH2O2, BCKH2O2, BCKPMF, and OFRAC: 

INPUT GROUP: 11a, 11b -- Chemistry Parameters 

--------------------- 

--------------- 

Subgroup (11a) 

--------------- 

 Several parameters are needed for one or more of the chemical transformation 

 mechanisms. Those used for each mechanism are: 

 M B 

 A B R R R C B N 

 B V C N N N M K C O D 

 C M G K I I I H H K F V E 

 M K N N N T T T 2 2 P R C C 

 O O H H H E E E O O M A N A 

 Mechanism (MCHEM) Z 3 3 3 3 1 2 3 2 2 F C X Y 

 -------------------- -------------------------------------------- 

 0 None . . . . . . . . . . . . . . 

 1 MESOPUFF II X X . . X X X X . . . . . . 

 2 User Rates . . . . . . . . . . . . . . 

 3 RIVAD X X . . X . . . . . . . . . 

 4 SOA X X . . . . . . . . X X X . 

 5 Radioactive Decay . . . . . . . . . . . . . X 

 6 RIVAD/ISORRPIA X X X X X X . . X X . . . . 

 7 RIVAD/ISORRPIA/SOA X X X X X X . . X X X X . . 

 Ozone data input option (MOZ) Default: 1 ! MOZ = 0 ! 

 (Used only if MCHEM = 1,3,4,6, or 7) 

 0 = use a monthly background ozone value 

 1 = read hourly ozone concentrations from 

 the OZONE.DAT data file 

 Monthly ozone concentrations in ppb (BCKO3) 

 (Used only if MCHEM = 1,3,4,6, or 7 and either 

 MOZ = 0, or 

 MOZ = 1 and all hourly O3 data missing) 

 Default: 12*80. 

 ! BCKO3 = 30.00, 30.00, 30.00, 30.00, 30.00, 30.00, 

 30.00, 30.00, 30.00, 30.00, 30.00, 30.00 ! 

 Ammonia data option (MNH3) Default: 1 ! MNH3 = 0 ! 

 (Used only if MCHEM = 6 or 7) 

 0 = use a single monthly background ammonia value for all layers 

 1 = read monthly background ammonia values for each layer from 

 the NH3Z.DAT data file 

 Ammonia vertical averaging option (MAVGNH3) 

 (Used only if MCHEM = 6 or 7, and MNH3 = 1) 

 0 = use NH3 at puff center height (no averaging is done) 

 1 = average NH3 values over vertical extent of puff 

 Default: 1 ! MAVGNH3 = 0 ! 
10 

 Monthly ammonia concentrations in ppb (BCKNH3) 

 (Used only if MCHEM = 1 or 3, or 

 if MCHEM = 6 or 7, and MNH3 = 0) 

 Default: 12*10. 

 ! BCKNH3 = 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 

 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 ! 

 Nighttime SO2 loss rate in %/hour (RNITE1) 

 (Used only if MCHEM = 1, 6 or 7) 

 This rate is used only at night for MCHEM=1 

 and is added to the computed rate both day 

 and night for MCHEM=6,7 (heterogeneous reactions) 

 Default: 0.2 ! RNITE1 = .2 ! 

 Nighttime NOx loss rate in %/hour (RNITE2) 

 (Used only if MCHEM = 1) 

 Default: 2.0 ! RNITE2 = 2.0 ! 

 Nighttime HNO3 formation rate in %/hour (RNITE3) 

 (Used only if MCHEM = 1) 

 Default: 2.0 ! RNITE3 = 2.0 ! 

 H2O2 data input option (MH2O2) Default: 1 ! MH2O2 = 1 ! 

 (Used only if MCHEM = 6 or 7, and MAQCHEM = 1) 

 0 = use a monthly background H2O2 value 

 1 = read hourly H2O2 concentrations from 

 the H2O2.DAT data file 

 Monthly H2O2 concentrations in ppb (BCKH2O2) 

 (Used only if MQACHEM = 1 and either 

 MH2O2 = 0 or 

 MH2O2 = 1 and all hourly H2O2 data missing) 

 Default: 12*1. 

 ! BCKH2O2 = 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 

 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 ! 

 --- Data for SECONDARY ORGANIC AEROSOL (SOA) Options 

 (used only if MCHEM = 4 or 7) 

 The MCHEM = 4 SOA module uses monthly values of: 

 Fine particulate concentration in ug/m^3 (BCKPMF) 

 Organic fraction of fine particulate (OFRAC) 

 VOC / NOX ratio (after reaction) (VCNX) 

 The MCHEM = 7 SOA module uses monthly values of: 

 Fine particulate concentration in ug/m^3 (BCKPMF) 

 Organic fraction of fine particulate (OFRAC) 

 These characterize the air mass when computing 

 the formation of SOA from VOC emissions. 

MOZ selects the source of the background ozone data, and functions as before. 

BCKO3 provides monthly ozone concentrations to be used as indicated by MOZ. 

MNH3 selects the source of the monthly background ammonia data when chemical 

transformation mechanism MCHEM = 6 or 7 is selected. It provides the option to use either 

monthly concentrations entered in this control file or to read monthly ammonia profiles (a 

concentration for each layer for each month) from the NH3Z.DAT input file. 
11 

MAVGNH3 selects the way vertical ammonia profiles are used. The background ammonia 

concentration for a particular puff and time step may be either taken from the layer that contains 

the puff-center, or averaged from values in the layers that the puff overlaps. 

BCKNH3 provides monthly ammonia concentrations to be used as indicated by MNH3 for 

chemical transformation mechanisms MCHEM = 6 and 7. These values are always used for 

chemical transformation mechanisms MCHEM = 1 and 3. 

RNITE1 assigns the nighttime SO2 loss rate for the MESOPUFF-II (MCHEM = 1) chemical 

mechanism, and it assigns the SO2 loss rate due to heterogeneous reactions (day and night) for 

the API modules (MCHEM = 6, 7). Its default value is 0.2%/hr. 

Both the MESOPUFF-II and the RIVAD (MCHEM = 3) transformation options in CALPUFF 

include an SO2-to-SO4 transformation rate due to heterogeneous reactions. These are not 

important during the day when gas reactions dominate, but remain active at night. The default 

transformation rate is 0.2%/hour for this pathway. RIVAD adds this rate to all other SO2

transformation rates calculated both day and night. MESOPUFF-II uses 0.2%/hour as a 

minimum for heterogeneous reactions during the day and it uses RNITE1 at night. 

Karamchandani et al. (2008) do not explicitly include heterogeneous SO2-to-SO4 reactions in 

their implementation for API, so the SO2-to-SO4 transformation rate at night in the absence of 

aqueous-phase reactions is identically zero, which is equivalent to setting RNITE1 = 0.0. 

3.2 Monthly Ammonia Concentration File 

The control-file variable MNH3 selects the source of the monthly background ammonia data 

when chemical transformation mechanism MCHEM = 6 or 7 is selected. It provides the option 

to use monthly vertical profiles of ammonia (a concentration for each layer for each month) from 

the NH3Z.DAT input file. 

The header of the NH3Z.DAT file provides the concentration units, the number of layers, and the 

row-order of the data. The row-order currently accepted places data for one month on a single 

line in which the data progress from Layer 1 to the top-most CALPUFF layer. Therefore there 

are 12 data records, one for each month. The first entry of each line is the name of the month so 

there is no ambiguity. An example file is listed in Table 3-2, and the variables are defined in 

Table 3-3 and Table 3-4. Note that Record 2 of the file identifies the number of comment 

records that follow. These comment records should provide important information on the source 

of the ammonia data and the methods and assumptions used to prepare the file. There is no limit 

on the number of these records. 
12 

Table 3-2 

Example NH3Z.DAT Input Data File 

NH3Z.DAT 1.0 Monthly NH3 for each model layer 

2 

Example file for illustration only. 

Application-specific ammonia concentration profiles must be developed. 

PPB 

MONTH_LAYER 

10 

JANUARY : 0.2186 0.2186 0.2125 0.2054 0.1918 0.1645 0.1460 0.1228 0.0993 0.0903 

FEBRUARY : 0.2186 0.2186 0.2125 0.2054 0.1918 0.1645 0.1460 0.1228 0.0993 0.0903 

MARCH : 0.5416 0.5416 0.5394 0.5394 0.5348 0.4955 0.4431 0.3636 0.2412 0.1847 

APRIL : 0.5416 0.5416 0.5394 0.5394 0.5348 0.4955 0.4431 0.3636 0.2412 0.1847 

MAY : 0.5416 0.5416 0.5394 0.5394 0.5348 0.4955 0.4431 0.3636 0.2412 0.1847 

JUNE : 0.6458 0.6458 0.6378 0.6339 0.6139 0.5699 0.5287 0.4508 0.3354 0.2660 

JULY : 0.6458 0.6458 0.6378 0.6339 0.6139 0.5699 0.5287 0.4508 0.3354 0.2660 

AUGUST : 0.6458 0.6458 0.6378 0.6339 0.6139 0.5699 0.5287 0.4508 0.3354 0.2660 

SEPTEMBER : 0.5107 0.5107 0.4986 0.4869 0.4691 0.4334 0.3763 0.2981 0.1921 0.1400 

OCTOBER : 0.5107 0.5107 0.4986 0.4869 0.4691 0.4334 0.3763 0.2981 0.1921 0.1400 

NOVEMBER : 0.5107 0.5107 0.4986 0.4869 0.4691 0.4334 0.3763 0.2981 0.1921 0.1400 

DECEMBER : 0.2186 0.2186 0.2125 0.2054 0.1918 0.1645 0.1460 0.1228 0.0993 0.0903 
13 

Table 3-3 

NH3Z.DAT - Header Records - General Data 

Record Variable Type Description

1 DATASET character*16 Dataset name (NH3Z.DAT) 

1 DATAVER character*16 Dataset version (1.0) 

1 DATAMOD character*64 Dataset message field 

2 NCOM integer Number of comment records to follow 

NEXT NCOM 

Lines 

COMMENT1 character *132 Documentation for QA (up to 132 characters/line) 

NCOM+3 CUNITS character*16 Concentration units (must be PPB) 

NCOM+4 CFORMAT character*16 Format of data records (must be MONTH_LAYER) 

NCOM+5 NZFILE integer Number of layers (must match modeling grid) 

Table 3-4 

NH3Z.DAT - Data Records 

(Repeated for each month for MONTH-LAYER format)

Data Record 

No. 

Variable 

No. 

Variable Type Description 

1 1 CMONTH C*10 Month name (upper case, left-justified) 

1 2 (Delimiter) C*1 ':' delimiter separates month name from data 

1 3 BCKNH3ZM 

(imo,1) 

real Background ammonia concentration for month in 

model Layer 1 

1 4 BCKNH3ZM 

(imo,2) 

real Background ammonia concentration for month in 

model Layer 2 

1 5 BCKNH3ZM 

(imo,3) 

real Background ammonia concentration for month in 

model Layer 3 

1 2+iz BCKNH3ZM 

(imo,iz) 

real Background ammonia concentration for month in 

model Layer iz 

1 2+ 

NZFILE 

BCKNH3ZM 

(imo,nzfile) 

real Background ammonia concentration for month in 

model Layer nzfile (top layer in grid) 

NOTES:

1. Record length is limited to 264 characters 

2. BCKNH3ZM values are read free-format and must be separated by 1 or more spaces. 
14 

3.3 CALMET Auxiliary Data File (CALMET.AUX) 

Gridded cloud liquid water data from MM5/WRF can be passed through CALMET via the 

3D.DAT input file and then output as one of the variables written to a CALMET auxiliary data 

file (CALMET.AUX). The content of this file is flexible in that any number of 2-dimensional 

(2-D) and 3-dimensional (3-D) variables can be accommodated. All 2-D and 3-D data arrays are 

defined on the CALMET modeling grid. 

The CALMET.AUX file header records contain file identification labels, descriptive titles of the 

CALMET run (including a complete image of the CALMET control file) as comment records, 

and information about the horizontal and vertical grid systems of the meteorological grid. A 

description of each variable in the header records is provided in Table 3-5. 

Sample FORTRAN write statements for the CALMET.AUX header records are: 

c --- Record #1 - File Declaration -- 24 words 

 write(ioaux) dataset,dataver,datamod 

c --- Record #2 - Number of comment lines -- 1 word 

 write(ioaux) ncom 

c --- Record #3 to NCOM+2 (Comment record section) -- 33 words each 

c --- Loop over records 

 do i=1,ncom 

 write(ioaux) comment 

 enddo 

c --- record #NCOM+3 - run control parameters -- 36 words 

 write(ioaux) ibyrn,ibmon,ibdyn,ibhrn,ibsecn, 

 1 ieyrn,iemon,iedyn,iehrn,iesecn,axtz,irlg, 

 2 nx, ny, nz, dgrid, xorigr, yorigr, 

 3 pmap,datum,daten,feast,fnorth,utmhem,iutmzn, 

 4 rnlat0,relon0,xlat1,xlat2,naux2d,naux3d 

c --- record #NCOM+4 - cell face heights (NZ + 1 words) 

 clabel='ZFACE' 

 write(ioaux)clabel,idum,idum,idum,idum,zface 

c --- record #NCOM+5 - Names, units and types of 2D variables 

c --- (2+naux2d*5 words) 

 clabel='2D_VARS' 

 write(ioaux) clabel,(auxnam2d(k),k=1,naux2d), 

 & (auxunit2d(k),k=1,naux2d), 

 & (auxtyp2d(k),k=1,naux2d) 

c --- record #NCOM+6 - Names, units and types of 3D variables 

c --- (2+naux3d*5 words) 

 clabel='3D_VARS' 

 write(ioaux) clabel,(auxnam3d(k),k=1,naux3d), 

 & (auxunit3d(k),k=1,naux3d), 

 & (auxtyp3d(k),k=1,naux3d) 

The following declarations apply: 

 real ZFACEM(nz+1) 

 character*132 COMMENT(ncom) 

 character*64 DATAMOD 
15 

 character*16 DATASET,DATAVER 

 character*12 DATEN 

 character*8 PMAP,DATUM 

 character*8 CLABEL 

 character*4 UTMHEM 

 character*8 AUXNAM2D(naux2d), auxnam3d(naux3d) 

 character*8 AUXUNIT2D(naux2d), auxunit3d(naux3d) 

 character*4 AUXTYP2D(naux2d), auxtyp3d(naux3d) 

The CALMET.AUX file data records contain time-varying fields of the gridded meteorological 

variables named in the header. For each time period, data for the 2-D variables are written first, followed 

by data for the 3-D variables. A description of each variable in the data records is provided in 

Table 3-6. 

Sample FORTRAN write statements for the CALMET.AUX data records are: 

c --- Write the 2D variables 

 Loop over NAUX2D 2D variables, k 

 (for integer*4 variables ...) 

 write(ioaux)AUXNAME2D(k),NDATHRB,IBSEC,NDATHRE,IESEC,I2DVAR 

 (OR, for real*4 variables ...) 

 write(ioaux)AUXNAME2D(k),NDATHRB,IBSEC,NDATHRE,IESEC,R2DVAR 

 End loop over 2D variables 

c --- Write the 3D variables 

 Loop over NAUX3D 3D variables, k 

 Loop over NZFILE layers, n 

 clabel=AUXNAME3D(k) 

 write(clabel(6:8),'(i3.3)') n 

 (for integer*4 variables ...) 

 write(ioaux)clabel,NDATHRB,IBSEC,NDATHRE,IESEC,((I3DVAR(i,j,k),i=1,nx),j=1,ny) 

 (OR, for real*4 variables ...) 

 write(ioaux)clabel,NDATHRB,IBSEC,NDATHRE,IESEC,((R3DVAR(i,j,k),i=1,nx),j=1,ny) 

 End loop over layers 

 End loop over 3D variables 

The following declarations apply: 

 real R2DVAR(nx,ny), R3DVAR(nx,ny,nzfile) 

 integer I2DVAR(nx,ny), I3DVAR(nx,ny,nzfile) 

 character*8 CLABEL 
16 

Table 3-5 

CALMET.AUX - Header Records 

Header 

Record No. 

Variable 

No. 

Variable Typea Description

1 1 DATASET char*16 Dataset name (CALMET.AUX) 

1 2 DATAVER char*16 Dataset version 

1 3 DATAMOD char*64 Dataset message field 

2 1 NCOM integer Number of comment records to follow 

3 to 

NCOM+2 

1 COMMENT char*132 Comment record (repeated NCOM times), each 

containing an image of one line of the CALMET 

control file, or other information 

NCOM+3 1 IBYR integer Starting year of CALMET run 

NCOM+3 2 IBMO integer Starting month 

NCOM+3 3 IBDY integer Starting day 

NCOM+3 4 IBHR integer Starting time (hour at start) 

NCOM+3 5 IBSEC integer Starting time (seconds at start, 0-3600) 

NCOM+3 6 IEYR integer Ending year of CALMET run 

NCOM+3 7 IEMO integer Ending month 

NCOM+3 8 IEDY integer Ending day 

NCOM+3 9 IEHR integer Ending time (hour at end) 

NCOM+3 10 IESEC integer Ending time (seconds at end, 0-3600) 

NCOM+3 11 ABTZ char*8 Base time zone (e.g., UTC-0500 = EST in USA) 

NCOM+3 12 IRLG integer Run length 

NCOM+3 13 NX integer Number of grid cells in the X direction 

NCOM+3 14 NY integer Number of grid cells in the Y direction 

NCOM+3 15 NZ integer Number of vertical layers 

NCOM+3 16 DGRID real Grid spacing (m) 

NCOM+3 17 XORIGR real X coordinate (m) of southwest corner of grid cell 

(1,1) 

NCOM+3 18 YORIGR real Y coordinate (m) of southwest corner of grid cell 

(1,1) 

 

a

char*N = Character*N 
17 

Table 3-5 (Continued) 

CALMET.AUX - Header Records 

Header 

Record 

No. 

Variable No. Variable Typea Description 

NCOM+3 19 PMAPb char*8 Map projectionb 

UTM : Universal Transverse Mercator 

TTM : Tangential Transverse Mercator 

LCC : Lambert Conformal Conic 

PS : Polar Stereographic 

EM : Equatorial Mercator 

LAZA : Lambert Azimuthal Equal Area 

NCOM+3 20 DATUM char*8 DATUM Code for grid coordinates 

NCOM+3 21 DATEN char*12 NIMA date (MM-DD-YYYY) for datum 

definitions 

NCOM+3 22 FEAST real False Easting (km) for PMAP = TTM, LCC, or 

LAZA 

NCOM+3 23 FNORTH real False Northing (km) for PMAP = TTM, LCC, 

or LAZA 

NCOM+3 24 UTMHEM char*4 Hemisphere for UTM projection (N or S) 

NCOM+3 25 IUTMZN integer UTM zone for PMAP = UTM 

NCOM+3 26 RNLAT0 real North latitude (degrees) for projection origin 

(for PMAP= TTM, LCC, PS, EM, or LAZA) 

NCOM+3 27 RELON0 real East longitude (degrees) for projection origin 

(for PMAP= TTM, LCC, PS, EM, or LAZA) 

NCOM+3 28 XLAT1 real North latitude (degrees) of matching parallel #1 

for map projection PMAP= LCC or PS 

NCOM+3 29 XLAT2 real North latitude (degrees) of matching parallel #2 

for map projection PMAP= LCC 

NCOM+3 30 NAUX2D integer Number of 2D variables 

NCOM+3 31 NAUX3D integer Number of 3D variables 

a

 char*N = Character*N b

 PMAP = EM, PS, and LAZA are not currently available in CALMET 
18 

Table 3-5 (Concluded) 

CALMET.AUX - Header Records 

Header 

Record 

No. 

Variable No. Variable Typea Description 

NCOM+4 1 CLABEL char*8 Variable label ('ZFACE') 

NCOM+4 2-5 IDUM integer Variable not used 

NCOM+4 6 ZFACE real array Heights (m) of cell faces (NZ + 1 values) 

NCOM+5 1-NAUX2D AUXNAM2D char*8 

array 

Names of 2D variables in file 

NCOM+5 NAUX2D 

+1 to 

2*NAUX2D 

AUXUNIT2D char*8 

array 

Units for 2D variables in file (e.g. M, KG/M3, 

G/KG, etc.) 

NCOM+5 2*NAUX2D 

+1 to 

3*NAUX2D 

AUXTYP2D char*4 

array 

Data type for 2D variables in file (R_4 for 

real*4, I_4 for integer*4, etc.) 

NCOM+6 1-NAUX3D AUXNAM3D char*8 

array 

Names of 3D variables in file 

NCOM+6 NAUX3D 

+1 to 

2*NAUX3D 

AUXUNIT3D char*8 

array 

Units for 3D variables in file (e.g. M, KG/M3, 

G/KG, etc.) 

NCOM+6 2*NAUX3D 

+1 to 

3*NAUX3D 

AUXTYP3D char*4 

array 

Data type for 3D variables in file (R_4 for 

real*4, I_4 for integer*4, etc.) 

a

 char*N = Character*N 
19 

Table 3-6 

CALMET.AUX - Data Records 

Record 

Type 

Variable 

No. 

Variable 

Name 

Typea Description

2D 

integer 

1 CLABEL char*8 Variable label equal to corresponding 

AUXNAM2D in header 

2D 

integer 

2,3 NDATHRB, 

IBSEC 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) -- begin 

2D 

integer 

4,5 NDATHRE, 

IESEC 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) -- end 

2D 

integer 

6 I2DVAR integer 

array 

Value of integer variable at each grid point 

2D real 1 CLABEL char*8 Variable label equal to corresponding 

AUXNAM2D in header 

2D real 2,3 NDATHRB, 

IBSEC 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) -- begin 

2D real 4,5 NDATHRE, 

IESEC 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) -- end 

2D real 6 R2DVAR real 

array 

Value of real variable at each grid point 

3D 

integer 

1 CLABEL char*8 Variable label AUXNAM3D in header with 

characters 6,7,8 replaced with the layer number 

(001, 002, etc.) 

3D 

integer 

2,3 NDATHRB, 

NSECB 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) 

3D 

integer 

4,5 NDATHRE, 

NSECB 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) 

3D 

integer 

6 I3DVAR integer 

array 

Value of integer variable at each grid point in the 

current layer 

3D real 1 CLABEL char*8 Variable label AUXNAM3D in header with 

characters 6,7,8 replaced with the layer number 

(001, 002, etc.) 

3D real 2,3 NDATHRB, 

NSECB 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) 

3D real 4,5 NDATHRE, 

NSECB 

integer Year, Julian day and hour (YYYYJJJHH) and 

seconds (SSSS) 

3D real 6 R3DVAR real 

array 

Value of real variable at each grid point in the 

current layer 

(3D record type is repeated NZFILE times (once per layer)) 

a

 char*8 = Character*8 
20 

4.0 POSTUTIL 

Since total nitrate (TNO3) is partitioned into the gas (HNO3) and particulate (NO3) phases based 

in part on the ammonia available after preferential scavenging by sulfate, the equilibrium should 

be determined using the total amount of sulfate and nitrate (due to all sources, background, etc.) 

present at a particular location and time. This is accomplished using the ammonia-limiting 

method (ALM) in POSTUTIL. TRC has implemented the ISORROPIA (Version 2.1) model as 

an option which retains backward compatibility of the POSTUTIL code. 

The option to use the ISORROPIA model for inorganic gas-particle equilibrium in place of the 

MESOPUFF-II CHEMEQ model is controlled by one new POSTUTIL control-file variable, 

MEQPHASE. This is located in Input Group 1: 

 Recompute the HNO3/NO3 partition for concentrations? 

 (MNITRATE) Default: 0 ! MNITRATE = 1 ! 

 0 = no 

 1 = yes, for all sources combined 

 2 = yes, for a source group 

 3 = yes, ALM application in one step 

 Gas-Particulate Phase Equilibrium Model used? 

 (MEQPHASE) Default: 1 ! MEQPHASE = 1 ! 

 1 = MESOPUFF-II CHEMEQ 

 2 = ISORROPIA 

No other changes are required. 
21 

5.0 References 

Karamchandani, P., S.-Y. Chen and C. Seigneur, 2008. CALPUFF Chemistry Upgrade, AER 

Final Report CP277-07-01 prepared for API, Washington, DC, February 2008. 

Karamchandani, P., S.-Y. Chen and R. Balmori, 2009. Evaluation of Original and Improved 

Versions of CALPUFF using the 1995 SWWYTAF Data Base, AER Report CP281-09-01 

prepared for API, Washington, DC, October 2009. 

Fountoukis, C. and Nenes, A., 2007: ISORROPIA II: A Computationally Efficient Aerosol 

Thermodynamic Equilibrium Model for K+, Ca2+, Mg2+, NH4+, Na+, SO42-, NO3-, 

Cl-, H2O Aerosols, Atmos.Chem.Phys., 7, 4639–4659. 

Nenes A, Pandis SN, Pilinis C. ISORROPIA, 1998: A new thermodynamic equilibrium model 

for multiphase multicomponent inorganic aerosols, Aquat.Geoch., 4, 123-152. 

Scire, J.S., F.R. Robe, M.E. Fernau and R.J. Yamartino, 2000a: A User's Guide for the CALMET 

Meteorological Model. (Version 5.0). Earth Tech., Inc. Concord, MA. (Available from 

http://www.src.com). 

Scire, J.S., D.G. Strimaitis and R.J. Yamartino, 2000b: A User's Guide for the CALPUFF 

Dispersion Model. (Version 5.0). Earth Tech, Inc., Concord, MA. (Available from 

http://www.src.com).