ANISORROPIA calculates simultaneously the aerosol-gas partitioning of semi-volatile inorganic species and the sensitivity of the partitioned species with respect to the model input. A user may transform a framework that previously employed ISORROPIA (i.e., a box model or chemical transport model) simply by replacing ISORROPIA code with ANISORROPIA and slightly modifying the interface; the cost is approximately a doubling of the execution time.
The current capabilities, interface modifications, and sensitivity calculations are provided below.
- Forward problem only
- Non-crustal species
CALL ISOROPIA_B (WI, WPadj, RHI, TEMPI, CNTRL, & WT, GAS, GASadj, AERLIQ, AERLIQadj, AERSLD, & SCASI, OTHER, TRUSTISO)
Concentrations and Conditions
- WI(NCOMP) [real*8] concentration of species in mol m-3
- WI(1) – sodium (Na)
- WI(2) – sulfuric acid (H2SO4)
- WI(3) – ammonia (NH3)
- WI(4) – nitric acid (HNO3)
- WI(5) – hydrogen chloride (HCl)
- RHI [real*8] fractional relative humidity
- TEMPI [real*8] temperature (K)
- CNTRL [integer]
- CNTRL(1) – type of problem to solve – currently only forward possible (0)
- CNTRL(2) – state of aerosol – only metastable solution possible (1)
When desiring specific sensitivities, ANISORROPIA can simultaneously calculate the sensitivity of one output (e.g., partitioned concentration) with respect to each input (e.g., total concentration). The following arrays allow the selection of the numerator of the sensitivity.
- GASadj(NGASAQ) [real*8]
- GASadj(1) – NH3)
- GASadj(2) – HNO3)
- GASadj(3) – HCl
- AERLIQadj(12) [real*8]
- AERLIQadj(1) – H+(aq)
- AERLIQadj(2) – Na+(aq)
- AERLIQadj(3) – NH4+(aq)
- AERLIQadj(4) – Cl–(aq)
- AERLIQadj(5) – SO42-(aq)
- AERLIQadj(6) – HSO4–(aq)
- AERLIQadj(7) – NO3–(aq)
- AERLIQadj(8-12) – exist but are not currently available for selection
Partitioned Concentrations and Solution Information
- WT(NCOMP) [real*8] total concentration of species in mol m-3
- WT(1) – sodium (Na)
- WT(2) – sulfuric acid(H2SO4)
- WT(3) – ammonia (NH3)
- WT(4) – nitric acid(HNO3)
- WT(5) – hydrogen chloride (HCl)
- GAS(NGASAQ) [real*8] concentration of species in mol m-3
- GAS(1) – ammonia (NH3)
- GAS(2) – nitric acid (HNO3)
- GAS(3) – hydrochloric acid (HCl)
- AERLIQ [real*8] concentration of species in mol m-3
- AERLIQ(01) – H+(aq)
- AERLIQ(02) – Na+(aq)
- AERLIQ(03) – NH4+(aq)
- AERLIQ(04) – Cl–(aq)
- AERLIQ(05) – SO42-(aq)
- AERLIQ(06) – HSO4–(aq)
- AERLIQ(07) – NO3–(aq)
- AERLIQ(08) – H2O
- AERLIQ(09) – NH3(aq) (undissociated)
- AERLIQ(10) – HCl(aq) (undissociated)
- AERLIQ(11) – HNO3(aq) (undissociated)
- AERLIQ(12) – OH–(aq)
- AERSLD [real*8] not currently used because only the metastable solution is possible
- SCASI [character*2] reflects the algorithm used within ANISORROPIA
- OTHER(6) [real*8]
- OTHER(1): Shows if aerosol water exists.
- 0 – Aerosol is WET
- 1 – Aerosol is DRY
- OTHER(2): Aerosol Sulfate ratio, defined as (moles m-3): (total ammonia + total Na) / (total sulfate)
- OTHER(3): Sulfate ratio based on aerosol properties that defines a sulfate poor system: (aerosol ammonia + aerosol Na) / (aerosol sulfate)
- OTHER(4): Aerosol sodium ratio, defined as (moles m-3): (total Na) / (total sulfate)
- OTHER(5): Ionic strength of the aqueous aerosol (if it exists).
- OTHER(6): Total number of calls to the activity coefficient calculation subroutine.
- OTHER(1): Shows if aerosol water exists.
- TRUSTISO – logical – false if an error occurs during execution of ANISORROPIA
- Implementation of an alternative to using the results of ANISO when TRUSTISO is false is imperative to achieving accurate results.
Sensitivities from ANISORROPIA are on a molar basis. The user may multiply the sensitivity by the ratio of the molar masses of the species in the numerator to the denominator if a mass-based sensitivity is desired.
- WPadj(NCOMP) [real*8] unitless sensitivities
Sensitivities of species as indicated by the AERLIQadj and GASadj arrays with respect to …
- WPadj(1) – … total sodium
- WPadj(2) – … total sulfate
- WPadj(3) – … total ammonium
- WPadj(4) – … total nitrate
- WPadj(5) – … total chloride
Specific Sensitivity Relationships
In a box model or attached to a CTM, ANISORROPIA can be used to determine sensitivities of partitioned inorganic species with respect to the total concentration present. After the user replaces the call to ISORROPIA with ANISORROPIA, the following steps enable the user to get the sensitivities.
1. Initialize the GASadj and AERLIQadj arrays to zero.
GASadj = 0.d0 AERLIQadj = 0.d0
2. Select one element of either GASadj or AERLIQadj(1-7) and set it to one to indicate that it is the numerator of the sensitivity. For instance, to calculate the sensitivity of NH4+:
AERLIQadj(3) = 1.d0
3. Call ANISORROPIA with all other input information specified as well.
4. The WPadj array now contains the sensitivity of the selected partitioned species with respect to each of the five total concentrations. To follow the example above,
WRITE(*,*) 'Sensitivity of NH4+ w.r.t. total sodium:', WPadj(1) WRITE(*,*) 'Sensitivity of NH4+ w.r.t. total sulfate:', WPadj(2) WRITE(*,*) 'Sensitivity of NH4+ w.r.t. total ammonium:', WPadj(3) WRITE(*,*) 'Sensitivity of NH4+ w.r.t. total nitrate:', WPadj(4) WRITE(*,*) 'Sensitivity of NH4+ w.r.t. total chloride:', WPadj(5)
5. Repeat if the sensitivity of another partitioned species is desired.
Within Adjoint Model
The implementation of ANISORROPIA within a chemical transport adjoint model will largely depend on the strategies that the adjoint developers have chosen for checkpointing and passing adjoint forcing vectors. Two principles to keep in mind are listed below.
- ANISORROPIA code includes an option for calling ISORROPIA (without the sensitivity calculations) for forward sweeps.
- No checkpointing of internal variables is necessary; the user needs only to supply the adjoint forcing vector (in GASadj and AERLIQadj) and the information typically input to ISORROPIA.
Please contact Shannon Capps (scapps at gatech dot edu) if you have further questions about implementing ANISORROPIA within an adjoint model framework.