updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / chem / module_isorev.F
blobafb54950331faffabbf86c5ca2125b4ffc601483
2 !C=======================================================================
3 !C
4 !C *** ISORROPIA CODE
5 !C *** SUBROUTINE ISRP1R
6 !C *** THIS SUBROUTINE IS THE DRIVER ROUTINE FOR THE REVERSE PROBLEM OF 
7 !C     AN AMMONIUM-SULFATE AEROSOL SYSTEM. 
8 !C     THE COMPOSITION REGIME IS DETERMINED BY THE SULFATE RATIO AND BY 
9 !C     THE AMBIENT RELATIVE HUMIDITY.
11 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
12 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
13 !C *** WRITTEN BY ATHANASIOS NENES
15 !C=======================================================================
17       SUBROUTINE ISRP1R2p1 (WI, RHI, TEMPI)
18       INCLUDE 'module_isrpia_inc.F'
19       DIMENSION WI(NCOMP)
21 !C *** INITIALIZE COMMON BLOCK VARIABLES *********************************
23       CALL INIT12p1 (WI, RHI, TEMPI)
25 !C *** CALCULATE SULFATE RATIO *******************************************
27       IF (RH.GE.DRNH42S4) THEN         ! WET AEROSOL, NEED NH4 AT SRATIO=2.0
28          SULRATW = GETASR2p1(WAER(2), RHI)     ! AEROSOL SULFATE RATIO
29       ELSE
30          SULRATW = 2.0D0                    ! DRY AEROSOL SULFATE RATIO
31       ENDIF
32       SULRAT  = WAER(3)/WAER(2)         ! SULFATE RATIO
34 !C *** FIND CALCULATION REGIME FROM (SULRAT,RH) **************************
36 !C *** SULFATE POOR 
38       IF (SULRATW.LE.SULRAT) THEN
40       IF(METSTBL.EQ.1) THEN
41          SCASE = 'S2'
42          CALL CALCS22p1                 ! Only liquid (metastable)
43       ELSE
45          IF (RH.LT.DRNH42S4) THEN    
46             SCASE = 'S1'
47             CALL CALCS12p1              ! NH42SO4              ; case K1
49          ELSEIF (DRNH42S4.LE.RH) THEN
50             SCASE = 'S2'
51             CALL CALCS22p1              ! Only liquid          ; case K2
52          ENDIF
53       ENDIF
55 !C *** SULFATE RICH (NO ACID)
57       ELSEIF (1.0.LE.SULRAT .AND. SULRAT.LT.SULRATW) THEN
58       W(2) = WAER(2)
59       W(3) = WAER(3)
61       IF(METSTBL.EQ.1) THEN
62          SCASE = 'B4'
63          CALL CALCB42p1                 ! Only liquid (metastable)
64          SCASE = 'B4'
65       ELSE
67          IF (RH.LT.DRNH4HS4) THEN         
68             SCASE = 'B1'
69             CALL CALCB12p1              ! NH4HSO4,LC,NH42SO4   ; case B1
70             SCASE = 'B1'
72          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRLC) THEN         
73             SCASE = 'B2'
74             CALL CALCB22p1              ! LC,NH42S4            ; case B2
75             SCASE = 'B2'
77          ELSEIF (DRLC.LE.RH .AND. RH.LT.DRNH42S4) THEN         
78             SCASE = 'B3'
79             CALL CALCB32p1              ! NH42S4               ; case B3
80             SCASE = 'B3'
82          ELSEIF (DRNH42S4.LE.RH) THEN         
83             SCASE = 'B4'
84             CALL CALCB42p1              ! Only liquid          ; case B4
85             SCASE = 'B4'
86          ENDIF
87       ENDIF
89       CALL CALCNH3P2p1          ! Compute NH3(g)
91 !C *** SULFATE RICH (FREE ACID)
93       ELSEIF (SULRAT.LT.1.0) THEN             
94       W(2) = WAER(2)
95       W(3) = WAER(3)
97       IF(METSTBL.EQ.1) THEN
98          SCASE = 'C2'
99          CALL CALCC22p1                 ! Only liquid (metastable)
100          SCASE = 'C2'
101       ELSE
103          IF (RH.LT.DRNH4HS4) THEN         
104             SCASE = 'C1'
105             CALL CALCC12p1              ! NH4HSO4              ; case C1
106             SCASE = 'C1'
108          ELSEIF (DRNH4HS4.LE.RH) THEN         
109             SCASE = 'C2'
110             CALL CALCC22p1              ! Only liquid          ; case C2
111             SCASE = 'C2'
112          ENDIF
113       ENDIF
114 !C 
115       CALL CALCNH3P2p1
117       ENDIF
118       RETURN
120 !C *** END OF SUBROUTINE ISRP1R *****************************************
122       END
124 !C=======================================================================
126 !C *** ISORROPIA CODE
127 !C *** SUBROUTINE ISRP2R
128 !C *** THIS SUBROUTINE IS THE DRIVER ROUTINE FOR THE REVERSE PROBLEM OF 
129 !C     AN AMMONIUM-SULFATE-NITRATE AEROSOL SYSTEM. 
130 !C     THE COMPOSITION REGIME IS DETERMINED BY THE SULFATE RATIO AND BY
131 !C     THE AMBIENT RELATIVE HUMIDITY.
133 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
134 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
135 !C *** WRITTEN BY ATHANASIOS NENES
137 !C=======================================================================
139       SUBROUTINE ISRP2R2p1 (WI, RHI, TEMPI)
140       INCLUDE 'module_isrpia_inc.F'
141       DIMENSION WI(NCOMP)
142       LOGICAL   TRYLIQ
144 !C *** INITIALIZE ALL VARIABLES IN COMMON BLOCK **************************
146       TRYLIQ = .TRUE.             ! Assume liquid phase, sulfate poor limit 
148 10    CALL INIT22p1 (WI, RHI, TEMPI)
150 !C *** CALCULATE SULFATE RATIO *******************************************
152       IF (TRYLIQ .AND. RH.GE.DRNH4NO3) THEN ! *** WET AEROSOL
153          SULRATW = GETASR2p1(WAER(2), RHI)     ! LIMITING SULFATE RATIO
154       ELSE
155          SULRATW = 2.0D0                    ! *** DRY AEROSOL
156       ENDIF
157       SULRAT = WAER(3)/WAER(2)
159 !C *** FIND CALCULATION REGIME FROM (SULRAT,RH) **************************
161 !C *** SULFATE POOR 
163       IF (SULRATW.LE.SULRAT) THEN                
165       IF(METSTBL.EQ.1) THEN
166          SCASE = 'N3'
167          CALL CALCN32p1                 ! Only liquid (metastable)
168       ELSE
170          IF (RH.LT.DRNH4NO3) THEN    
171             SCASE = 'N1'
172             CALL CALCN12p1              ! NH42SO4,NH4NO3       ; case N1
174          ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNH42S4) THEN         
175             SCASE = 'N2'
176             CALL CALCN22p1              ! NH42S4               ; case N2
178          ELSEIF (DRNH42S4.LE.RH) THEN
179             SCASE = 'N3'
180             CALL CALCN32p1              ! Only liquid          ; case N3
181          ENDIF
182       ENDIF
184 !C *** SULFATE RICH (NO ACID)
186 !C     FOR SOLVING THIS CASE, NITRIC ACID AND AMMONIA IN THE GAS PHASE ARE
187 !C     ASSUMED A MINOR SPECIES, THAT DO NOT SIGNIFICANTLY AFFECT THE 
188 !C     AEROSOL EQUILIBRIUM.
190       ELSEIF (1.0.LE.SULRAT .AND. SULRAT.LT.SULRATW) THEN 
191       W(2) = WAER(2)
192       W(3) = WAER(3)
193       W(4) = WAER(4)
195       IF(METSTBL.EQ.1) THEN
196          SCASE = 'B4'
197          CALL CALCB42p1                 ! Only liquid (metastable)
198          SCASE = 'B4'
199       ELSE
201          IF (RH.LT.DRNH4HS4) THEN         
202             SCASE = 'B1'
203             CALL CALCB12p1              ! NH4HSO4,LC,NH42SO4   ; case O1
204             SCASE = 'B1'
206          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRLC) THEN         
207             SCASE = 'B2'
208             CALL CALCB22p1              ! LC,NH42S4            ; case O2
209             SCASE = 'B2'
211          ELSEIF (DRLC.LE.RH .AND. RH.LT.DRNH42S4) THEN         
212             SCASE = 'B3'
213             CALL CALCB32p1              ! NH42S4               ; case O3
214             SCASE = 'B3'
216          ELSEIF (DRNH42S4.LE.RH) THEN         
217             SCASE = 'B4'
218             CALL CALCB42p1              ! Only liquid          ; case O4
219             SCASE = 'B4'
220          ENDIF
221       ENDIF
223 !C *** Add the NO3 to the solution now and calculate partitioning.
225       MOLAL(7) = WAER(4)             ! There is always water, so NO3(aer) is NO3-
226       MOLAL(1) = MOLAL(1) + WAER(4)  ! Add H+ to balance out
227       CALL CALCNAP2p1            ! HNO3, NH3 dissolved
228       CALL CALCNH3P2p1
230 !C *** SULFATE RICH (FREE ACID)
232 !C     FOR SOLVING THIS CASE, NITRIC ACID AND AMMONIA IN THE GAS PHASE ARE
233 !C     ASSUMED A MINOR SPECIES, THAT DO NOT SIGNIFICANTLY AFFECT THE 
234 !C     AEROSOL EQUILIBRIUM.
236       ELSEIF (SULRAT.LT.1.0) THEN             
237       W(2) = WAER(2)
238       W(3) = WAER(3)
239       W(4) = WAER(4)
241       IF(METSTBL.EQ.1) THEN
242          SCASE = 'C2'
243          CALL CALCC22p1                 ! Only liquid (metastable)
244          SCASE = 'C2'
245       ELSE
247          IF (RH.LT.DRNH4HS4) THEN         
248             SCASE = 'C1'
249             CALL CALCC12p1              ! NH4HSO4              ; case P1
250             SCASE = 'C1'
252          ELSEIF (DRNH4HS4.LE.RH) THEN         
253             SCASE = 'C2'
254             CALL CALCC22p1              ! Only liquid          ; case P2
255             SCASE = 'C2'
256          ENDIF
257       ENDIF
259 !C *** Add the NO3 to the solution now and calculate partitioning.
261       MOLAL(7) = WAER(4)             ! There is always water, so NO3(aer) is NO3-
262       MOLAL(1) = MOLAL(1) + WAER(4)  ! Add H+ to balance out
264       CALL CALCNAP2p1                   ! HNO3, NH3 dissolved
265       CALL CALCNH3P2p1
266       ENDIF
268 !C *** IF SULRATW < SULRAT < 2.0 and WATER = 0 => SULFATE RICH CASE.
270       IF (SULRATW.LE.SULRAT .AND. SULRAT.LT.2.0  &
271                                           .AND. WATER.LE.TINY) THEN
272           TRYLIQ = .FALSE.
273           GOTO 10
274       ENDIF
276       RETURN
278 !C *** END OF SUBROUTINE ISRP2R *****************************************
280       END
281 !C=======================================================================
283 !C *** ISORROPIA CODE
284 !C *** SUBROUTINE ISRP3R
285 !C *** THIS SUBROUTINE IS THE DRIVER ROUTINE FOR THE REVERSE PROBLEM OF
286 !C     AN AMMONIUM-SULFATE-NITRATE-CHLORIDE-SODIUM AEROSOL SYSTEM. 
287 !C     THE COMPOSITION REGIME IS DETERMINED BY THE SULFATE & SODIUM 
288 !C     RATIOS AND BY THE AMBIENT RELATIVE HUMIDITY.
290 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
291 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
292 !C *** WRITTEN BY ATHANASIOS NENES
294 !C=======================================================================
296       SUBROUTINE ISRP3R2p1 (WI, RHI, TEMPI)
297       INCLUDE 'module_isrpia_inc.F'
298       DIMENSION WI(NCOMP)
299       LOGICAL   TRYLIQ
300 !ccC
301 !ccC *** ADJUST FOR TOO LITTLE AMMONIUM AND CHLORIDE ***********************
302 !ccC
303 !cc      WI(3) = MAX (WI(3), 1.D-10)  ! NH4+ : 1e-4 umoles/m3
304 !cc      WI(5) = MAX (WI(5), 1.D-10)  ! Cl-  : 1e-4 umoles/m3
306 !C *** INITIALIZE ALL VARIABLES ******************************************
308       TRYLIQ = .TRUE.             ! Use liquid phase sulfate poor limit 
310 10    CALL ISOINIT32p1 (WI, RHI, TEMPI) ! COMMON block variables
311 !ccC
312 !ccC *** CHECK IF TOO MUCH SODIUM ; ADJUST AND ISSUE ERROR MESSAGE *********
313 !ccC
314 !cc      REST = 2.D0*WAER(2) + WAER(4) + WAER(5) 
315 !cc      IF (WAER(1).GT.REST) THEN            ! NA > 2*SO4+CL+NO3 ?
316 !cc         WAER(1) = (ONE-1D-6)*REST         ! Adjust Na amount
317 !cc         CALL PUSHERR (0050, 'ISRP3R')     ! Warning error: Na adjusted
318 !cc      ENDIF
320 !C *** CALCULATE SULFATE & SODIUM RATIOS *********************************
322       IF (TRYLIQ .AND. RH.GE.DRNH4NO3) THEN  ! ** WET AEROSOL
323          FRSO4   = WAER(2) - WAER(1)/2.0D0     ! SULFATE UNBOUND BY SODIUM
324          FRSO4   = MAX(FRSO4, TINY)
325          SRI     = GETASR2p1(FRSO4, RHI)          ! SULFATE RATIO FOR NH4+
326          SULRATW = (WAER(1)+FRSO4*SRI)/WAER(2) ! LIMITING SULFATE RATIO
327          SULRATW = MIN (SULRATW, 2.0D0)
328       ELSE
329          SULRATW = 2.0D0                     ! ** DRY AEROSOL
330       ENDIF
331       SULRAT = (WAER(1)+WAER(3))/WAER(2)
332       SODRAT = WAER(1)/WAER(2)
334 !C *** FIND CALCULATION REGIME FROM (SULRAT,RH) **************************
336 !C *** SULFATE POOR ; SODIUM POOR
338       IF (SULRATW.LE.SULRAT .AND. SODRAT.LT.2.0) THEN                
340       IF(METSTBL.EQ.1) THEN
341          SCASE = 'Q5'
342          CALL CALCQ52p1                 ! Only liquid (metastable)
343          SCASE = 'Q5'
344       ELSE
346          IF (RH.LT.DRNH4NO3) THEN    
347             SCASE = 'Q1'
348             CALL CALCQ12p1              ! NH42SO4,NH4NO3,NH4CL,NA2SO4
350          ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNH4CL) THEN         
351             SCASE = 'Q2'
352             CALL CALCQ22p1              ! NH42SO4,NH4CL,NA2SO4
354          ELSEIF (DRNH4CL.LE.RH  .AND. RH.LT.DRNH42S4) THEN         
355             SCASE = 'Q3'
356             CALL CALCQ32p1              ! NH42SO4,NA2SO4
357 !C 
358         ELSEIF (DRNH42S4.LE.RH  .AND. RH.LT.DRNA2SO4) THEN         
359             SCASE = 'Q4'
360             CALL CALCQ42p1              ! NA2SO4
361             SCASE = 'Q4'
363          ELSEIF (DRNA2SO4.LE.RH) THEN         
364             SCASE = 'Q5'
365             CALL CALCQ52p1              ! Only liquid
366             SCASE = 'Q5'
367          ENDIF
368       ENDIF
370 !C *** SULFATE POOR ; SODIUM RICH
372       ELSE IF (SULRAT.GE.SULRATW .AND. SODRAT.GE.2.0) THEN                
374       IF(METSTBL.EQ.1) THEN
375          SCASE = 'R6'
376          CALL CALCR62p1                 ! Only liquid (metastable)
377          SCASE = 'R6'
378       ELSE
380          IF (RH.LT.DRNH4NO3) THEN    
381             SCASE = 'R1'
382             CALL CALCR12p1              ! NH4NO3,NH4CL,NA2SO4,NACL,NANO3
384          ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNANO3) THEN         
385             SCASE = 'R2'
386             CALL CALCR22p1              ! NH4CL,NA2SO4,NACL,NANO3
388          ELSEIF (DRNANO3.LE.RH  .AND. RH.LT.DRNACL) THEN         
389             SCASE = 'R3'
390             CALL CALCR32p1              ! NH4CL,NA2SO4,NACL
392          ELSEIF (DRNACL.LE.RH   .AND. RH.LT.DRNH4CL) THEN         
393             SCASE = 'R4'
394             CALL CALCR42p1              ! NH4CL,NA2SO4
396          ELSEIF (DRNH4CL.LE.RH .AND. RH.LT.DRNA2SO4) THEN         
397             SCASE = 'R5'
398             CALL CALCR52p1              ! NA2SO4
399             SCASE = 'R5'
401          ELSEIF (DRNA2SO4.LE.RH) THEN         
402             SCASE = 'R6'
403             CALL CALCR62p1              ! NO SOLID
404             SCASE = 'R6'
405          ENDIF
406       ENDIF
408 !C *** SULFATE RICH (NO ACID) 
410       ELSEIF (1.0.LE.SULRAT .AND. SULRAT.LT.SULRATW) THEN 
411       DO 100 I=1,NCOMP
412          W(I) = WAER(I)
413 100   CONTINUE
415       IF(METSTBL.EQ.1) THEN
416          SCASE = 'I6'
417          CALL CALCI62p1                 ! Only liquid (metastable)
418          SCASE = 'I6'
419       ELSE
421          IF (RH.LT.DRNH4HS4) THEN         
422             SCASE = 'I1'
423             CALL CALCI12p1              ! NA2SO4,(NH4)2SO4,NAHSO4,NH4HSO4,LC
424             SCASE = 'I1'
426          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRNAHSO4) THEN         
427             SCASE = 'I2'
428             CALL CALCI22p1              ! NA2SO4,(NH4)2SO4,NAHSO4,LC
429             SCASE = 'I2'
431          ELSEIF (DRNAHSO4.LE.RH .AND. RH.LT.DRLC) THEN         
432             SCASE = 'I3'
433             CALL CALCI32p1              ! NA2SO4,(NH4)2SO4,LC
434             SCASE = 'I3'
436          ELSEIF (DRLC.LE.RH     .AND. RH.LT.DRNH42S4) THEN         
437             SCASE = 'I4'
438             CALL CALCI42p1              ! NA2SO4,(NH4)2SO4
439             SCASE = 'I4'
441          ELSEIF (DRNH42S4.LE.RH .AND. RH.LT.DRNA2SO4) THEN         
442             SCASE = 'I5'
443             CALL CALCI52p1              ! NA2SO4
444             SCASE = 'I5'
446          ELSEIF (DRNA2SO4.LE.RH) THEN         
447             SCASE = 'I6'
448             CALL CALCI62p1              ! NO SOLIDS
449             SCASE = 'I6'
450          ENDIF
451       ENDIF
453       CALL CALCNHP2p1                ! HNO3, NH3, HCL in gas phase
454       CALL CALCNH3P2p1
456 !C *** SULFATE RICH (FREE ACID)
458       ELSEIF (SULRAT.LT.1.0) THEN             
459       DO 200 I=1,NCOMP
460          W(I) = WAER(I)
461 200   CONTINUE
463       IF(METSTBL.EQ.1) THEN
464          SCASE = 'J3'
465          CALL CALCJ32p1                 ! Only liquid (metastable)
466          SCASE = 'J3'
467       ELSE
469          IF (RH.LT.DRNH4HS4) THEN         
470             SCASE = 'J1'
471             CALL CALCJ12p1              ! NH4HSO4,NAHSO4
472             SCASE = 'J1'
474          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRNAHSO4) THEN         
475             SCASE = 'J2'
476             CALL CALCJ22p1              ! NAHSO4
477             SCASE = 'J2'
479          ELSEIF (DRNAHSO4.LE.RH) THEN         
480             SCASE = 'J3'
481             CALL CALCJ32p1              
482             SCASE = 'J3'
483          ENDIF
484       ENDIF
486       CALL CALCNHP2p1                ! HNO3, NH3, HCL in gas phase
487       CALL CALCNH3P2p1
489       ENDIF
491 !C *** IF AFTER CALCULATIONS, SULRATW < SULRAT < 2.0  
492 !C                            and WATER = 0          => SULFATE RICH CASE.
494       IF (SULRATW.LE.SULRAT .AND. SULRAT.LT.2.0  &
495                             .AND. WATER.LE.TINY) THEN
496           TRYLIQ = .FALSE.
497           GOTO 10
498       ENDIF
500       RETURN
502 !C *** END OF SUBROUTINE ISRP3R *****************************************
504       END
506 !C=======================================================================
508 !C *** ISORROPIA CODE II
509 !C *** SUBROUTINE ISRP4R
510 !C *** THIS SUBROUTINE IS THE DRIVER ROUTINE FOR THE REVERSE PROBLEM OF
511 !C     AN AMMONIUM-SULFATE-NITRATE-CHLORIDE-SODIUM-CALCIUM-POTTASIUM-MAGNESIUM AEROSOL SYSTEM.
512 !C     THE COMPOSITION REGIME IS DETERMINED BY THE SULFATE & SODIUM
513 !C     RATIOS AND BY THE AMBIENT RELATIVE HUMIDITY.
515 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
516 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
517 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
519 !C=======================================================================
521       SUBROUTINE ISRP4R2p1 (WI, RHI, TEMPI)
522       INCLUDE 'module_isrpia_inc.F'
523       DIMENSION WI(NCOMP)
524       LOGICAL   TRYLIQ
525 !ccC
526 !ccC *** ADJUST FOR TOO LITTLE AMMONIUM AND CHLORIDE ***********************
527 !ccC
528 !cc      WI(3) = MAX (WI(3), 1.D-10)  ! NH4+ : 1e-4 umoles/m3
529 !cc      WI(5) = MAX (WI(5), 1.D-10)  ! Cl-  : 1e-4 umoles/m3
531 !C *** INITIALIZE ALL VARIABLES ******************************************
533       TRYLIQ  = .TRUE.             ! Use liquid phase sulfate poor limit
534       IPROB   = 1            ! SOLVE REVERSE PROBLEM
535 !C      METSTBL = 1
537 10    CALL INIT42p1 (WI, RHI, TEMPI) ! COMMON block variables
538 !ccC
539 !ccC *** CHECK IF TOO MUCH SODIUM ; ADJUST AND ISSUE ERROR MESSAGE *********
540 !ccC
541 !cc      REST = 2.D0*WAER(2) + WAER(4) + WAER(5)
542 !cc      IF (WAER(1).GT.REST) THEN            ! NA > 2*SO4+CL+NO3 ?
543 !cc         WAER(1) = (ONE-1D-6)*REST         ! Adjust Na amount
544 !cc         CALL PUSHERR (0050, 'ISRP3R')     ! Warning error: Na adjusted
545 !cc      ENDIF
547 !C *** CALCULATE SULFATE, CRUSTAL & SODIUM RATIOS ***********************
549       IF (TRYLIQ) THEN                               ! ** WET AEROSOL
550          FRSO4   = WAER(2) - WAER(1)/2.0D0 &
551                  - WAER(6) - WAER(7)/2.0D0 - WAER(8) ! SULFATE UNBOUND BY SODIUM,CALCIUM,POTTASIUM,MAGNESIUM
552          FRSO4   = MAX(FRSO4, TINY)
553          SRI     = GETASR2p1(FRSO4, RHI)                ! SULFATE RATIO FOR NH4+
554          SULRATW = (WAER(1)+FRSO4*SRI+WAER(6) &
555                     +WAER(7)+WAER(8))/WAER(2)       ! LIMITING SULFATE RATIO
556          SULRATW = MIN (SULRATW, 2.0D0)
557       ELSE
558          SULRATW = 2.0D0                     ! ** DRY AEROSOL
559       ENDIF
560       SO4RAT = (WAER(1)+WAER(3)+WAER(6)+WAER(7)+WAER(8))/WAER(2)
561       CRNARAT = (WAER(1)+WAER(6)+WAER(7)+WAER(8))/WAER(2)
562       CRRAT  = (WAER(6)+WAER(7)+WAER(8))/WAER(2)
564 !C *** FIND CALCULATION REGIME FROM (SULRAT,RH) **************************
566 !C *** SULFATE POOR ; SODIUM+CRUSTALS POOR
568       IF (SULRATW.LE.SO4RAT .AND. CRNARAT.LT.2.0) THEN
570        IF(METSTBL.EQ.1) THEN
571          SCASE = 'V7'
572          CALL CALCV72p1                 ! Only liquid (metastable)
573        ELSE
575          IF (RH.LT.DRNH4NO3) THEN
576             SCASE = 'V1'
577             CALL CALCV12p1              ! CaSO4, NH4NO3, NH4CL, (NH4)2SO4, MGSO4, NA2SO4, K2SO4
579          ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNH4CL) THEN
580             SCASE = 'V2'
581             CALL CALCV22p1              ! CaSO4, NH4CL, (NH4)2SO4, MGSO4, NA2SO4, K2SO4
583          ELSEIF (DRNH4CL.LE.RH  .AND. RH.LT.DRNH42S4) THEN
584             SCASE = 'V3'
585             CALL CALCV32p1              ! CaSO4, (NH4)2SO4, MGSO4, NA2SO4, K2SO4
587          ELSEIF (DRNH42S4.LE.RH  .AND. RH.LT.DRMGSO4) THEN
588             SCASE = 'V4'
589             CALL CALCV42p1              ! CaSO4, MGSO4, NA2SO4, K2SO4
591          ELSEIF (DRMGSO4.LE.RH .AND. RH.LT.DRNA2SO4) THEN
592             SCASE = 'V5'
593             CALL CALCV52p1              ! CaSO4, NA2SO4, K2SO4
595          ELSEIF (DRNA2SO4.LE.RH .AND. RH.LT.DRK2SO4) THEN
596             SCASE = 'V6'
597             CALL CALCV62p1              ! CaSO4, K2SO4
599          ELSEIF (DRK2SO4.LE.RH) THEN
600             SCASE = 'V7'
601             CALL CALCV72p1              ! CaSO4
602          ENDIF
603        ENDIF
605 !C *** SULFATE POOR: Rso4>2; (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
607       ELSEIF (SO4RAT.GE.SULRATW .AND. CRNARAT.GE.2.0) THEN
609        IF (CRRAT.LE.2.0) THEN
611         IF(METSTBL.EQ.1) THEN
612          SCASE = 'U8'
613          CALL CALCU82p1                 ! Only liquid (metastable)
614         ELSE
616            IF (RH.LT.DRNH4NO3) THEN
617              SCASE = 'U1'
618              CALL CALCU12p1             ! CaSO4, NH4NO3, NH4CL, MGSO4, NA2SO4, K2SO4, NACL, NANO3
620            ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNANO3) THEN
621              SCASE = 'U2'
622              CALL CALCU22p1            ! CaSO4, NH4CL, MGSO4, NA2SO4, K2SO4, NACL, NANO3
624            ELSEIF (DRNANO3.LE.RH  .AND. RH.LT.DRNACL) THEN
625              SCASE = 'U3'
626              CALL CALCU32p1            ! CaSO4, NH4CL, MGSO4, NA2SO4, K2SO4, NACL
628            ELSEIF (DRNACL.LE.RH   .AND. RH.LT.DRNH4Cl) THEN
629              SCASE = 'U4'
630              CALL CALCU42p1            ! CaSO4, NH4CL, MGSO4, NA2SO4, K2SO4
632            ELSEIF (DRNH4Cl.LE.RH .AND. RH.LT.DRMGSO4) THEN
633              SCASE = 'U5'
634              CALL CALCU52p1            ! CaSO4, MGSO4, NA2SO4, K2SO4
636            ELSEIF (DRMGSO4.LE.RH .AND. RH.LT.DRNA2SO4) THEN
637              SCASE = 'U6'
638              CALL CALCU62p1            ! CaSO4, NA2SO4, K2SO4
640            ELSEIF (DRNA2SO4.LE.RH .AND. RH.LT.DRK2SO4) THEN
641              SCASE = 'U7'
642              CALL CALCU72p1            ! CaSO4, K2SO4
644            ELSEIF (DRK2SO4.LE.RH) THEN
645              SCASE = 'U8'
646              CALL CALCU82p1            ! CaSO4
647            ENDIF
648         ENDIF
650 !C *** SULFATE POOR: Rso4>2; (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
652        ELSEIF (CRRAT.GT.2.0) THEN
654         IF(METSTBL.EQ.1) THEN
655          SCASE = 'W13'
656          CALL CALCW132p1                 ! Only liquid (metastable)
657         ELSE
659            IF (RH.LT.DRCACL2) THEN
660              SCASE = 'W1'
661              CALL CALCW12p1             ! CaSO4, CA(NO3)2, CACL2, K2SO4, KNO3, KCL, MGSO4,
662 !C                                    ! MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
664            ELSEIF (DRCACL2.LE.RH .AND. RH.LT.DRMGCL2) THEN
665              SCASE = 'W2'
666              CALL CALCW22p1            ! CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4,
667 !C                                   ! MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
669            ELSEIF (DRMGCL2.LE.RH  .AND. RH.LT.DRCANO32) THEN
670              SCASE = 'W3'
671              CALL CALCW32p1            ! CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4,
672 !C                                   ! MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL
674            ELSEIF (DRCANO32.LE.RH   .AND. RH.LT.DRMGNO32) THEN
675              SCASE = 'W4'
676              CALL CALCW42p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4,
677 !C                                   ! MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL
679            ELSEIF (DRMGNO32.LE.RH .AND. RH.LT.DRNH4NO3) THEN
680              SCASE = 'W5'
681              CALL CALCW52p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4,
682 !C                                   ! NANO3, NACL, NH4NO3, NH4CL
684            ELSEIF (DRNH4NO3.LE.RH .AND. RH.LT.DRNANO3) THEN
685              SCASE = 'W6'
686              CALL CALCW62p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4, NANO3, NACL, NH4CL
688            ELSEIF (DRNANO3.LE.RH .AND. RH.LT.DRNACL) THEN
689              SCASE = 'W7'
690              CALL CALCW72p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4, NACL, NH4CL
692            ELSEIF (DRNACL.LE.RH .AND. RH.LT.DRNH4CL) THEN
693              SCASE = 'W8'
694              CALL CALCW82p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4, NH4CL
696            ELSEIF (DRNH4CL.LE.RH .AND. RH.LT.DRKCL) THEN
697              SCASE = 'W9'
698              CALL CALCW92p1            ! CaSO4, K2SO4, KNO3, KCL, MGSO4
700            ELSEIF (DRKCL.LE.RH .AND. RH.LT.DRMGSO4) THEN
701              SCASE = 'W10'
702              CALL CALCW102p1            ! CaSO4, K2SO4, KNO3, MGSO4
704            ELSEIF (DRMGSO4.LE.RH .AND. RH.LT.DRKNO3) THEN
705              SCASE = 'W11'
706              CALL CALCW112p1            ! CaSO4, K2SO4, KNO3
708            ELSEIF (DRKNO3.LE.RH .AND. RH.LT.DRK2SO4) THEN
709              SCASE = 'W12'
710              CALL CALCW122p1            ! CaSO4, K2SO4
712            ELSEIF (DRK2SO4.LE.RH) THEN
713              SCASE = 'W13'
714              CALL CALCW132p1            ! CaSO4
715            ENDIF
716          ENDIF
717 !C        CALL CALCNH3
718        ENDIF
720 !C *** SULFATE RICH (NO ACID): 1<Rso4<2;
722       ELSEIF (1.0.LE.SO4RAT .AND. SO4RAT.LT.SULRATW) THEN
723       DO 800 I=1,NCOMP
724          W(I) = WAER(I)
725  800  CONTINUE
727        IF(METSTBL.EQ.1) THEN
728          SCASE = 'L9'
729          CALL CALCL92p1                 ! Only liquid (metastable)
730        ELSE
732          IF (RH.LT.DRNH4HS4) THEN
733             SCASE = 'L1'
734             CALL CALCL12p1            ! CASO4,K2SO4,MGSO4,KHSO4,NA2SO4,(NH4)2SO4,NAHSO4,NH4HSO4,LC
736          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRNAHSO4) THEN
737             SCASE = 'L2'
738             CALL CALCL22p1            ! CASO4,K2SO4,MGSO4,KHSO4,NA2SO4,(NH4)2SO4,NAHSO4,LC
740          ELSEIF (DRNAHSO4.LE.RH .AND. RH.LT.DRLC) THEN
741             SCASE = 'L3'
742             CALL CALCL32p1            ! CASO4,K2SO4,MGSO4,KHSO4,NA2SO4,(NH4)2SO4,LC
744          ELSEIF (DRLC.LE.RH .AND. RH.LT.DRNH42S4) THEN
745             SCASE = 'L4'
746             CALL CALCL42p1            ! CASO4,K2SO4,MGSO4,KHSO4,NA2SO4,(NH4)2SO4
748          ELSEIF (DRNH42S4.LE.RH .AND. RH.LT.DRKHSO4) THEN
749             SCASE = 'L5'
750             CALL CALCL52p1            ! CASO4,K2SO4,MGSO4,KHSO4,NA2SO4
752          ELSEIF (DRKHSO4.LE.RH .AND. RH.LT.DRMGSO4) THEN
753             SCASE = 'L6'
754             CALL CALCL62p1            ! CASO4,K2SO4,MGSO4,NA2SO4
756          ELSEIF (DRMGSO4.LE.RH .AND. RH.LT.DRNA2SO4) THEN
757             SCASE = 'L7'
758             CALL CALCL72p1            ! CASO4,K2SO4,NA2SO4
760          ELSEIF (DRNA2SO4.LE.RH .AND. RH.LT.DRK2SO4) THEN
761             SCASE = 'L8'
762             CALL CALCL82p1            ! CASO4,K2SO4
764          ELSEIF (DRK2SO4.LE.RH) THEN
765             SCASE = 'L9'
766             CALL CALCL92p1            ! CaSO4
767          ENDIF
768        ENDIF
770       CALL CALCNHP2p1                ! MINOR SPECIES: HNO3, HCl
771       CALL CALCNH3P2p1               !                NH3
773 !C *** SULFATE SUPER RICH (FREE ACID): Rso4<1;
775       ELSEIF (SO4RAT.LT.1.0) THEN
776       DO 900 I=1,NCOMP
777          W(I) = WAER(I)
778  900  CONTINUE
780        IF(METSTBL.EQ.1) THEN
781          SCASE = 'K4'
782          CALL CALCK42p1                 ! Only liquid (metastable)
783        ELSE
785          IF (RH.LT.DRNH4HS4) THEN                   ! RH < 0.4
786             SCASE = 'K1'
787             CALL CALCK12p1           ! NH4HSO4,NAHSO4,KHSO4,CASO4
789          ELSEIF (DRNH4HS4.LE.RH .AND. RH.LT.DRNAHSO4) THEN
790             SCASE = 'K2'
791             CALL CALCK22p1           ! NAHSO4,KHSO4,CASO4
793          ELSEIF (DRNAHSO4.LE.RH .AND. RH.LT.DRKHSO4) THEN
794             SCASE = 'K3'
795             CALL CALCK32p1           ! KHSO4,CASO4    0.52 < RH < 0.86
797          ELSEIF (DRKHSO4.LE.RH) THEN
798             SCASE = 'K4'
799             CALL CALCK42p1           ! CASO4
800          ENDIF
801        ENDIF
803       CALL CALCNHP2p1                  ! MINOR SPECIES: HNO3, HCl
804       CALL CALCNH3P2p1                 !                NH3
806       ENDIF
808 !C *** IF AFTER CALCULATIONS, SULRATW < SO4RAT < 2.0
809 !C                            and WATER = 0          => SULFATE RICH CASE.
811       IF (SULRATW.LE.SO4RAT .AND. SO4RAT.LT.2.0 &
812                             .AND. WATER.LE.TINY) THEN
813           TRYLIQ = .FALSE.
814           GOTO 10
815       ENDIF
817       RETURN
819 !C *** END OF SUBROUTINE ISRP4R *****************************************
821       END
822 !C=======================================================================
824 !C *** ISORROPIA CODE
825 !C *** SUBROUTINE CALCS2
826 !C *** CASE S2
828 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
829 !C     1. SULFATE POOR (SULRAT > 2.0)
830 !C     2. LIQUID AEROSOL PHASE ONLY POSSIBLE
832 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
833 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
834 !C *** WRITTEN BY ATHANASIOS NENES
836 !C=======================================================================
838       SUBROUTINE CALCS22p1
839       INCLUDE 'module_isrpia_inc.F'
840       DOUBLE PRECISION NH4I, NH3GI, NH3AQ
842 !C *** SETUP PARAMETERS ************************************************
844       CALAOU   =.TRUE.     ! Outer loop activity calculation flag
845       FRST     =.TRUE.
846       CALAIN   =.TRUE.
848 !C *** CALCULATE WATER CONTENT *****************************************
850       MOLALR(4)= MIN(WAER(2), 0.5d0*WAER(3))
851       WATER    = MOLALR(4)/M0(4)  ! ZSR correlation
853 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
855       DO 10 I=1,NSWEEP
856 !CC         A21  = XK21*WATER*R*TEMP
857          A2   = XK2 *R*TEMP/XKW/RH*(GAMA(8)/GAMA(9))**2.
858          AKW  = XKW *RH*WATER*WATER
860          NH4I = WAER(3)
861          SO4I = WAER(2)
862          HSO4I= ZERO
864          CALL CALCPH2p1 (2.D0*SO4I - NH4I, HI, OHI)    ! Get pH
866          NH3AQ = ZERO                               ! AMMONIA EQUILIBRIUM
867          IF (HI.LT.OHI) THEN
868             CALL CALCAMAQ2p1 (NH4I, OHI, DEL)
869             NH4I  = MAX (NH4I-DEL, ZERO) 
870             OHI   = MAX (OHI -DEL, TINY)
871             NH3AQ = DEL
872             HI    = AKW/OHI
873          ENDIF
875          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)         ! SULFATE EQUILIBRIUM
876          SO4I  = SO4I - DEL
877          HI    = HI   - DEL
878          HSO4I = DEL
880          NH3GI = NH4I/HI/A2   !    NH3AQ/A21
882 !C *** SPECIATION & WATER CONTENT ***************************************
884          MOLAL(1) = HI
885          MOLAL(3) = NH4I
886          MOLAL(5) = SO4I
887          MOLAL(6) = HSO4I
888          COH      = OHI
889          GASAQ(1) = NH3AQ
890          GNH3     = NH3GI
892 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
894          IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
895             CALL CALCACT2p1     
896          ELSE
897             GOTO 20
898          ENDIF
899 10    CONTINUE
901 20    RETURN
903 !C *** END OF SUBROUTINE CALCS2 ****************************************
905       END
906 !C=======================================================================
908 !C *** ISORROPIA CODE
909 !C *** SUBROUTINE CALCS1
910 !C *** CASE S1
912 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
913 !C     1. SULFATE POOR (SULRAT > 2.0)
914 !C     2. SOLID AEROSOL ONLY
915 !C     3. SOLIDS POSSIBLE : (NH4)2SO4
917 !C     A SIMPLE MATERIAL BALANCE IS PERFORMED, AND THE SOLID (NH4)2SO4
918 !C     IS CALCULATED FROM THE SULFATES. THE EXCESS AMMONIA REMAINS IN
919 !C     THE GAS PHASE.
921 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
922 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
923 !C *** WRITTEN BY ATHANASIOS NENES
925 !C=======================================================================
927       SUBROUTINE CALCS12p1
928       INCLUDE 'module_isrpia_inc.F'
930       CNH42S4 = MIN(WAER(2),0.5d0*WAER(3))  ! For bad input problems
931       GNH3    = ZERO
933       W(2)    = CNH42S4
934       W(3)    = 2.D0*CNH42S4 + GNH3
936       RETURN
938 !C *** END OF SUBROUTINE CALCS1 ******************************************
940       END
943 !C=======================================================================
945 !C *** ISORROPIA CODE
946 !C *** SUBROUTINE CALCN3
947 !C *** CASE N3
949 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
950 !C     1. SULFATE POOR (SULRAT > 2.0)
951 !C     2. THERE IS ONLY A LIQUID PHASE
953 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
954 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
955 !C *** WRITTEN BY ATHANASIOS NENES
957 !C=======================================================================
959       SUBROUTINE CALCN32p1
960       INCLUDE 'module_isrpia_inc.F'
961       DOUBLE PRECISION NH4I, NO3I, NH3AQ, NO3AQ
963       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
964                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
965                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
966                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
967                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
968                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
970 !C *** SETUP PARAMETERS ************************************************
972       CALAOU =.TRUE.              ! Outer loop activity calculation flag
973       FRST   =.TRUE.
974       CALAIN =.TRUE.
976 !C *** AEROSOL WATER CONTENT
978       MOLALR(4) = MIN(WAER(2),0.5d0*WAER(3))       ! (NH4)2SO4
979       AML5      = MAX(WAER(3)-2.D0*MOLALR(4),ZERO) ! "free" NH4
980       MOLALR(5) = MAX(MIN(AML5,WAER(4)), ZERO)     ! NH4NO3=MIN("free",NO3)
981       WATER     = MOLALR(4)/M0(4) + MOLALR(5)/M0(5)
982       WATER     = MAX(WATER, TINY)
984 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
986       DO 10 I=1,NSWEEP
987          A2    = XK2 *R*TEMP/XKW/RH*(GAMA(8)/GAMA(9))**2.
988 !CC         A21   = XK21*WATER*R*TEMP
989          A3    = XK4*R*TEMP*(WATER/GAMA(10))**2.0
990          A4    = XK7*(WATER/GAMA(4))**3.0
991          AKW   = XKW *RH*WATER*WATER
993 !C ION CONCENTRATIONS
995          NH4I  = WAER(3)
996          NO3I  = WAER(4)
997          SO4I  = WAER(2)
998          HSO4I = ZERO
1000          CALL CALCPH2p1 (2.D0*SO4I + NO3I - NH4I, HI, OHI)
1002 !C AMMONIA ASSOCIATION EQUILIBRIUM
1004          NH3AQ = ZERO
1005          NO3AQ = ZERO
1006          GG    = 2.D0*SO4I + NO3I - NH4I
1007          IF (HI.LT.OHI) THEN
1008             CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
1009             HI    = AKW/OHI
1010          ELSE
1011             HI    = ZERO
1012             CALL CALCNIAQ22p1 (GG, NO3I, HI, NO3AQ) ! HNO3
1014 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
1016             CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
1017             SO4I  = SO4I  - DEL
1018             HI    = HI    - DEL
1019             HSO4I = DEL
1020             OHI   = AKW/HI
1021          ENDIF
1023 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
1025          MOLAL (1) = HI
1026          MOLAL (3) = NH4I
1027          MOLAL (5) = SO4I
1028          MOLAL (6) = HSO4I
1029          MOLAL (7) = NO3I
1030          COH       = OHI
1032          CNH42S4   = ZERO
1033          CNH4NO3   = ZERO
1035          GASAQ(1)  = NH3AQ
1036          GASAQ(3)  = NO3AQ
1038          GHNO3     = HI*NO3I/A3
1039          GNH3      = NH4I/HI/A2   !   NH3AQ/A21 
1041 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP ******************
1043          IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
1044             CALL CALCACT2p1     
1045          ELSE
1046             GOTO 20
1047          ENDIF
1048 10    CONTINUE
1050 !C *** RETURN ***********************************************************
1052 20    RETURN
1054 !C *** END OF SUBROUTINE CALCN3 *****************************************
1056       END
1057 !C=======================================================================
1059 !C *** ISORROPIA CODE
1060 !C *** SUBROUTINE CALCN2
1061 !C *** CASE N2
1063 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1064 !C     1. SULFATE POOR (SULRAT > 2.0)
1065 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
1066 !C     3. SOLIDS POSSIBLE : (NH4)2SO4
1068 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1069 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1070 !C *** WRITTEN BY ATHANASIOS NENES
1072 !C=======================================================================
1074       SUBROUTINE CALCN22p1
1075       INCLUDE 'module_isrpia_inc.F'
1077       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
1078                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
1079                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
1080                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
1081                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
1082                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
1084 !C *** SETUP PARAMETERS ************************************************
1086       CHI1   = MIN(WAER(2),0.5d0*WAER(3))     ! (NH4)2SO4
1087       CHI2   = MAX(WAER(3) - 2.D0*CHI1, ZERO) ! "Free" NH4+
1088       CHI3   = MAX(WAER(4) - CHI2, ZERO)      ! "Free" NO3
1090       PSI2   = CHI2
1091       PSI3   = CHI3
1093       CALAOU = .TRUE.              ! Outer loop activity calculation flag
1094       PSI1LO = TINY                ! Low  limit
1095       PSI1HI = CHI1                ! High limit
1097 !C *** INITIAL VALUES FOR BISECTION ************************************
1099       X1 = PSI1HI
1100       Y1 = FUNCN22p1 (X1)
1101       IF (Y1.LE.EPS) RETURN   ! IF (ABS(Y1).LE.EPS .OR. Y1.LE.ZERO) RETURN
1102       YHI= Y1                 ! Save Y-value at HI position
1104 !C *** ROOT TRACKING ; FOR THE RANGE OF HI AND LO **********************
1106       DX = (PSI1HI-PSI1LO)/FLOAT(NDIV)
1107       DO 10 I=1,NDIV
1108          X2 = MAX(X1-DX, ZERO)
1109          Y2 = FUNCN22p1 (X2)
1110          IF (SIGN(1.d0,Y1)*SIGN(1.d0,Y2).LT.ZERO) GOTO 20  ! (Y1*Y2.LT.ZERO)
1111          X1 = X2
1112          Y1 = Y2
1113 10    CONTINUE
1115 !C *** NO SUBDIVISION WITH SOLUTION FOUND 
1117       YLO= Y1                      ! Save Y-value at Hi position
1118       IF (ABS(Y2) .LT. EPS) THEN   ! X2 IS A SOLUTION 
1119          RETURN
1121 !C *** { YLO, YHI } < 0.0 THE SOLUTION IS ALWAYS UNDERSATURATED WITH NH3
1123       ELSE IF (YLO.LT.ZERO .AND. YHI.LT.ZERO) THEN
1124          P4 = CHI4
1125          YY = FUNCN22p1(P4)
1126          GOTO 50
1128 !C *** { YLO, YHI } > 0.0 THE SOLUTION IS ALWAYS SUPERSATURATED WITH NH3
1130       ELSE IF (YLO.GT.ZERO .AND. YHI.GT.ZERO) THEN
1131          P4 = TINY
1132          YY = FUNCN22p1(P4)
1133          GOTO 50
1134       ELSE
1135          CALL PUSHERR2p1 (0001, 'CALCN2')    ! WARNING ERROR: NO SOLUTION
1136          RETURN
1137       ENDIF
1139 !C *** PERFORM BISECTION ***********************************************
1141 20    DO 30 I=1,MAXIT
1142          X3 = 0.5*(X1+X2)
1143          Y3 = FUNCN22p1 (X3)
1144          IF (SIGN(1.d0,Y1)*SIGN(1.d0,Y3) .LE. ZERO) THEN  ! (Y1*Y3 .LE. ZERO)
1145             Y2    = Y3
1146             X2    = X3
1147          ELSE
1148             Y1    = Y3
1149             X1    = X3
1150          ENDIF
1151          IF (ABS(X2-X1) .LE. EPS*X1) GOTO 40
1152 30    CONTINUE
1153       CALL PUSHERR2p1 (0002, 'CALCN2')    ! WARNING ERROR: NO CONVERGENCE
1155 !C *** CONVERGED ; RETURN **********************************************
1157 40    X3 = 0.5*(X1+X2)
1158       Y3 = FUNCN22p1 (X3)
1159 50    CONTINUE
1160       RETURN
1162 !C *** END OF SUBROUTINE CALCN2 ******************************************
1164       END
1168 !C======================================================================
1170 !C *** ISORROPIA CODE
1171 !C *** FUNCTION FUNCN2
1172 !C *** CASE D2 
1173 !C     FUNCTION THAT SOLVES THE SYSTEM OF EQUATIONS FOR CASE D2 ; 
1174 !C     AND RETURNS THE VALUE OF THE ZEROED FUNCTION IN FUNCN2.
1176 !C=======================================================================
1178       DOUBLE PRECISION FUNCTION FUNCN22p1 (P1)
1179       INCLUDE 'module_isrpia_inc.F'
1180       DOUBLE PRECISION NH4I, NO3I, NH3AQ, NO3AQ
1182       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
1183                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
1184                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
1185                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
1186                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
1187                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
1189 !C *** SETUP PARAMETERS ************************************************
1191       FRST   = .TRUE.
1192       CALAIN = .TRUE.
1193       PSI1   = P1
1195 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
1197       DO 10 I=1,NSWEEP
1198          A2    = XK2 *R*TEMP/XKW/RH*(GAMA(8)/GAMA(9))**2.
1199 !CC         A21   = XK21*WATER*R*TEMP
1200          A3    = XK4*R*TEMP*(WATER/GAMA(10))**2.0
1201          A4    = XK7*(WATER/GAMA(4))**3.0
1202          AKW   = XKW *RH*WATER*WATER
1204 !C ION CONCENTRATIONS
1206          NH4I  = 2.D0*PSI1 + PSI2 
1207          NO3I  = PSI2 + PSI3
1208          SO4I  = PSI1 
1209          HSO4I = ZERO
1211          CALL CALCPH2p1 (2.D0*SO4I + NO3I - NH4I, HI, OHI)
1213 !C AMMONIA ASSOCIATION EQUILIBRIUM
1215          NH3AQ = ZERO
1216          NO3AQ = ZERO
1217          GG    = 2.D0*SO4I + NO3I - NH4I
1218          IF (HI.LT.OHI) THEN
1219             CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
1220             HI    = AKW/OHI
1221          ELSE
1222             HI    = ZERO
1223             CALL CALCNIAQ22p1 (GG, NO3I, HI, NO3AQ) ! HNO3
1225 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
1227             CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
1228             SO4I  = SO4I  - DEL
1229             HI    = HI    - DEL
1230             HSO4I = DEL
1231             OHI   = AKW/HI
1232          ENDIF
1234 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
1236          MOLAL (1) = HI
1237          MOLAL (3) = NH4I
1238          MOLAL (5) = SO4I
1239          MOLAL (6) = HSO4I
1240          MOLAL (7) = NO3I
1241          COH       = OHI
1243          CNH42S4   = CHI1 - PSI1
1244          CNH4NO3   = ZERO
1246          GASAQ(1)  = NH3AQ
1247          GASAQ(3)  = NO3AQ
1249          GHNO3     = HI*NO3I/A3
1250          GNH3      = NH4I/HI/A2   !   NH3AQ/A21 
1252 !C *** CALCULATE MOLALR ARRAY, WATER AND ACTIVITIES **********************
1254          CALL CALCMR2p1
1256 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
1258          IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
1259             CALL CALCACT2p1     
1260          ELSE
1261             GOTO 20
1262          ENDIF
1263 10    CONTINUE
1265 !C *** CALCULATE OBJECTIVE FUNCTION ************************************
1267 20    FUNCN22p1= NH4I*NH4I*SO4I/A4 - ONE 
1268       RETURN
1270 !C *** END OF FUNCTION FUNCN2 ********************************************
1272       END
1273 !C=======================================================================
1275 !C *** ISORROPIA CODE
1276 !C *** SUBROUTINE CALCN1
1277 !C *** CASE N1 
1279 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1280 !C     1. SULFATE POOR (SULRAT > 2.0)
1281 !C     2. SOLID AEROSOL ONLY
1282 !C     3. SOLIDS POSSIBLE : (NH4)2SO4, NH4NO3
1284 !C     THERE ARE TWO REGIMES DEFINED BY RELATIVE HUMIDITY:
1285 !C     1. RH < MDRH  ; ONLY SOLID PHASE POSSIBLE (SUBROUTINE CALCN1A)
1286 !C     2. RH >= MDRH ; LIQUID PHASE POSSIBLE (MDRH REGION)
1288 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1289 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1290 !C *** WRITTEN BY ATHANASIOS NENES
1292 !C=======================================================================
1294       SUBROUTINE CALCN12p1
1295       INCLUDE 'module_isrpia_inc.F'
1296       EXTERNAL CALCN1A2p1, CALCN22p1
1298 !C *** REGIME DEPENDS UPON THE AMBIENT RELATIVE HUMIDITY *****************
1300       IF (RH.LT.DRMASAN) THEN    
1301          SCASE = 'N1 ; SUBCASE 1'  
1302          CALL CALCN1A2p1              ! SOLID PHASE ONLY POSSIBLE
1303          SCASE = 'N1 ; SUBCASE 1'
1304       ELSE
1305          SCASE = 'N1 ; SUBCASE 2'  
1306          CALL CALCMDRP2p1 (RH, DRMASAN, DRNH4NO3, CALCN1A2p1, CALCN22p1)
1307          SCASE = 'N1 ; SUBCASE 2'
1308       ENDIF
1309 !C 
1310       RETURN
1312 !C *** END OF SUBROUTINE CALCN1 ******************************************
1314       END
1318 !C=======================================================================
1320 !C *** ISORROPIA CODE
1321 !C *** SUBROUTINE CALCN1A
1322 !C *** CASE N1 ; SUBCASE 1
1324 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1325 !C     1. SULFATE POOR (SULRAT > 2.0)
1326 !C     2. SOLID AEROSOL ONLY
1327 !C     3. SOLIDS POSSIBLE : (NH4)2SO4, NH4NO3
1329 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1330 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1331 !C *** WRITTEN BY ATHANASIOS NENES
1333 !C=======================================================================
1335       SUBROUTINE CALCN1A2p1
1336       INCLUDE 'module_isrpia_inc.F'
1338 !C *** SETUP PARAMETERS *************************************************
1340 !CCC      A1      = XK10/R/TEMP/R/TEMP
1342 !C *** CALCULATE AEROSOL COMPOSITION ************************************
1344 !CCC      CHI1    = 2.D0*WAER(4)        ! Free parameter ; arbitrary value.
1345       PSI1    = WAER(4)
1347 !C *** The following statment is here to avoid negative NH4+ values in 
1348 !C     CALCN? routines that call CALCN1A
1350       PSI2    = MAX(MIN(WAER(2),0.5d0*(WAER(3)-PSI1)),TINY)
1352       CNH4NO3 = PSI1
1353       CNH42S4 = PSI2
1355 !CCC      GNH3    = CHI1 + PSI1 + 2.0*PSI2
1356 !CCC      GHNO3   = A1/(CHI1-PSI1) + PSI1
1357       GNH3    = ZERO
1358       GHNO3   = ZERO
1360       W(2)    = PSI2
1361       W(3)    = GNH3  + PSI1 + 2.0*PSI2   
1362       W(4)    = GHNO3 + PSI1
1364       RETURN
1366 !C *** END OF SUBROUTINE CALCN1A *****************************************
1368       END
1370 !C=======================================================================
1372 !C *** ISORROPIA CODE
1373 !C *** SUBROUTINE CALCQ5
1374 !C *** CASE Q5
1376 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1377 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM POOR (SODRAT < 2.0)
1378 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
1380 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1381 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1382 !C *** WRITTEN BY ATHANASIOS NENES
1384 !C=======================================================================
1386       SUBROUTINE CALCQ52p1
1387       INCLUDE 'module_isrpia_inc.F'
1389       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
1391       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
1392                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
1393                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
1394                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
1395                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
1396                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
1398 !C *** SETUP PARAMETERS ************************************************
1400       FRST    =.TRUE.
1401       CALAIN  =.TRUE. 
1402       CALAOU  =.TRUE.
1404 !C *** CALCULATE INITIAL SOLUTION ***************************************
1406       CALL CALCQ1A2p1
1408       PSI1   = CNA2SO4      ! SALTS DISSOLVED
1409       PSI4   = CNH4CL
1410       PSI5   = CNH4NO3
1411       PSI6   = CNH42S4
1413       CALL CALCMR2p1           ! WATER
1415       NH3AQ  = ZERO
1416       NO3AQ  = ZERO
1417       CLAQ   = ZERO
1419 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
1421       DO 10 I=1,NSWEEP
1422       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
1424 !C ION CONCENTRATIONS
1426       NAI    = WAER(1)
1427       SO4I   = WAER(2)
1428       NH4I   = WAER(3)
1429       NO3I   = WAER(4)
1430       CLI    = WAER(5)
1432 !C SOLUTION ACIDIC OR BASIC?
1434       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
1435       IF (GG.GT.TINY) THEN                        ! H+ in excess
1436          BB =-GG
1437          CC =-AKW
1438          DD = BB*BB - 4.D0*CC
1439          HI = 0.5D0*(-BB + SQRT(DD))
1440          OHI= AKW/HI
1441       ELSE                                        ! OH- in excess
1442          BB = GG
1443          CC =-AKW
1444          DD = BB*BB - 4.D0*CC
1445          OHI= 0.5D0*(-BB + SQRT(DD))
1446          HI = AKW/OHI
1447       ENDIF
1449 !C UNDISSOCIATED SPECIES EQUILIBRIA
1451       IF (HI.LT.OHI) THEN
1452          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
1453          HI    = AKW/OHI
1454          HSO4I = ZERO
1455       ELSE
1456          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
1457          GGCL  = MAX(GG-GGNO3, ZERO)
1458          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
1459          IF (GGNO3.GT.TINY) THEN
1460             IF (GGCL.LE.TINY) HI = ZERO
1461             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
1462          ENDIF
1464 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
1466          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
1467          SO4I  = SO4I  - DEL
1468          HI    = HI    - DEL
1469          HSO4I = DEL
1470          OHI   = AKW/HI
1471       ENDIF
1473 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
1475       MOLAL(1) = HI
1476       MOLAL(2) = NAI
1477       MOLAL(3) = NH4I
1478       MOLAL(4) = CLI
1479       MOLAL(5) = SO4I
1480       MOLAL(6) = HSO4I
1481       MOLAL(7) = NO3I
1483 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
1485       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
1486          CALL CALCACT2p1
1487       ELSE
1488          GOTO 20
1489       ENDIF
1490 10    CONTINUE
1491 !ccc      CALL PUSHERR (0002, 'CALCQ5')    ! WARNING ERROR: NO CONVERGENCE
1492 !C 
1493 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
1495 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
1496       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
1497       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
1499       GNH3    = NH4I/HI/A2
1500       GHNO3   = HI*NO3I/A3
1501       GHCL    = HI*CLI /A4
1503       GASAQ(1)= NH3AQ
1504       GASAQ(2)= CLAQ
1505       GASAQ(3)= NO3AQ
1507       CNH42S4 = ZERO
1508       CNH4NO3 = ZERO
1509       CNH4CL  = ZERO
1510       CNACL   = ZERO
1511       CNANO3  = ZERO
1512       CNA2SO4 = ZERO
1514       RETURN
1516 !C *** END OF SUBROUTINE CALCQ5 ******************************************
1518       END
1520 !C=======================================================================
1522 !C *** ISORROPIA CODE
1523 !C *** SUBROUTINE CALCQ4
1524 !C *** CASE Q4
1526 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1527 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM POOR (SODRAT < 2.0)
1528 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
1530 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1531 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1532 !C *** WRITTEN BY ATHANASIOS NENES
1534 !C=======================================================================
1536       SUBROUTINE CALCQ42p1
1537       INCLUDE 'module_isrpia_inc.F'
1539       LOGICAL PSCONV1
1540       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
1542       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
1543                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
1544                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
1545                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
1546                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
1547                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
1549 !C *** SETUP PARAMETERS ************************************************
1551       FRST    =.TRUE.
1552       CALAIN  =.TRUE. 
1553       CALAOU  =.TRUE.
1554 !C 
1555       PSCONV1 =.TRUE.
1556       PSI1O   =-GREAT
1557       ROOT3   = ZERO
1559 !C *** CALCULATE INITIAL SOLUTION ***************************************
1561       CALL CALCQ1A2p1
1563       CHI1   = CNA2SO4      ! SALTS
1565       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
1566       PSI4   = CNH4CL
1567       PSI5   = CNH4NO3
1568       PSI6   = CNH42S4
1570       CALL CALCMR2p1           ! WATER
1572       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
1573       SO4I   = WAER(2)
1574       NH4I   = WAER(3)
1575       NO3I   = WAER(4)
1576       CLI    = WAER(5)
1577       HSO4I  = ZERO
1578       NH3AQ  = ZERO
1579       NO3AQ  = ZERO
1580       CLAQ   = ZERO
1582 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
1584       DO 10 I=1,NSWEEP
1585       A5  = XK5 *(WATER/GAMA(2))**3.         ! Na2SO4    <==> Na+
1586       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
1588 !C SODIUM SULFATE
1590       IF (NAI*NAI*SO4I .GT. A5) THEN
1591          BB =-(WAER(2) + WAER(1))
1592          CC = WAER(1)*WAER(2) + 0.25*WAER(1)*WAER(1)
1593          DD =-0.25*(WAER(1)*WAER(1)*WAER(2) - A5)
1594          CALL POLY32p1(BB, CC, DD, ROOT3, ISLV)
1595          IF (ISLV.NE.0) ROOT3 = TINY
1596          ROOT3 = MIN (ROOT3, WAER(1)/2.0, WAER(2), CHI1)
1597          ROOT3 = MAX (ROOT3, ZERO)
1598          PSI1  = CHI1-ROOT3
1599       ENDIF
1600       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
1601       PSI1O   = PSI1
1603 !C ION CONCENTRATIONS ; CORRECTIONS
1605       NAI = WAER(1) - 2.D0*ROOT3
1606       SO4I= WAER(2) - ROOT3
1607       NH4I   = WAER(3)
1608       NO3I   = WAER(4)
1609       CLI    = WAER(5)
1611 !C SOLUTION ACIDIC OR BASIC?
1613       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
1614       IF (GG.GT.TINY) THEN                        ! H+ in excess
1615          BB =-GG
1616          CC =-AKW
1617          DD = BB*BB - 4.D0*CC
1618          HI = 0.5D0*(-BB + SQRT(DD))
1619          OHI= AKW/HI
1620       ELSE                                        ! OH- in excess
1621          BB = GG
1622          CC =-AKW
1623          DD = BB*BB - 4.D0*CC
1624          OHI= 0.5D0*(-BB + SQRT(DD))
1625          HI = AKW/OHI
1626       ENDIF
1628 !C UNDISSOCIATED SPECIES EQUILIBRIA
1630       IF (HI.LT.OHI) THEN
1631          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
1632          HI    = AKW/OHI
1633          HSO4I = ZERO
1634       ELSE
1635          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
1636          GGCL  = MAX(GG-GGNO3, ZERO)
1637          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
1638          IF (GGNO3.GT.TINY) THEN
1639             IF (GGCL.LE.TINY) HI = ZERO
1640             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
1641          ENDIF
1643 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
1645          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
1646          SO4I  = SO4I  - DEL
1647          HI    = HI    - DEL
1648          HSO4I = DEL
1649          OHI   = AKW/HI
1650       ENDIF
1652 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
1654       MOLAL(1) = HI
1655       MOLAL(2) = NAI
1656       MOLAL(3) = NH4I
1657       MOLAL(4) = CLI
1658       MOLAL(5) = SO4I
1659       MOLAL(6) = HSO4I
1660       MOLAL(7) = NO3I
1662 !C *** CALCULATE WATER **************************************************
1664       CALL CALCMR2p1
1666 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
1668       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
1669          CALL CALCACT2p1
1670       ELSE
1671          IF (PSCONV1) GOTO 20
1672       ENDIF
1673 10    CONTINUE
1674 !ccc      CALL PUSHERR (0002, 'CALCQ4')    ! WARNING ERROR: NO CONVERGENCE
1675 !C 
1676 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
1678 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
1679       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
1680       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
1682       GNH3    = NH4I/HI/A2
1683       GHNO3   = HI*NO3I/A3
1684       GHCL    = HI*CLI /A4
1686       GASAQ(1)= NH3AQ
1687       GASAQ(2)= CLAQ
1688       GASAQ(3)= NO3AQ
1690       CNH42S4 = ZERO
1691       CNH4NO3 = ZERO
1692       CNH4CL  = ZERO
1693       CNACL   = ZERO
1694       CNANO3  = ZERO
1695       CNA2SO4 = CHI1 - PSI1
1697       RETURN
1699 !C *** END OF SUBROUTINE CALCQ4 ******************************************
1701       END
1702 !C=======================================================================
1704 !C *** ISORROPIA CODE
1705 !C *** SUBROUTINE CALCQ3
1706 !C *** CASE Q3
1708 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1709 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
1710 !C     2. SOLID & LIQUID AEROSOL POSSIBLE
1711 !C     3. SOLIDS POSSIBLE : NH4CL, NA2SO4, NANO3, NACL
1713 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1714 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1715 !C *** WRITTEN BY ATHANASIOS NENES
1717 !C=======================================================================
1719       SUBROUTINE CALCQ32p1
1720       INCLUDE 'module_isrpia_inc.F'
1721       LOGICAL EXNO, EXCL
1722       EXTERNAL CALCQ1A2p1, CALCQ42p1
1724 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
1726       EXNO = WAER(4).GT.TINY   
1727       EXCL = WAER(5).GT.TINY   
1729       IF (EXNO .OR. EXCL) THEN             ! *** NITRATE OR CHLORIDE EXISTS
1730          SCASE = 'Q3 ; SUBCASE 1'  
1731          CALL CALCQ3A2p1                                   
1732          SCASE = 'Q3 ; SUBCASE 1' 
1734       ELSE                                 ! *** NO CHLORIDE AND NITRATE
1735          IF (RH.LT.DRMG3) THEN    
1736             SCASE = 'Q3 ; SUBCASE 2'  
1737             CALL CALCQ1A2p1             ! SOLID
1738             SCASE = 'Q3 ; SUBCASE 2'
1739          ELSE
1740             SCASE = 'Q3 ; SUBCASE 3' ! MDRH (NH4)2SO4, NA2SO4
1741             CALL CALCMDRP2p1 (RH, DRMG3, DRNH42S4, CALCQ1A2p1, CALCQ42p1)
1742             SCASE = 'Q3 ; SUBCASE 3'
1743          ENDIF
1744       ENDIF
1745 !C 
1746       RETURN
1748 !C *** END OF SUBROUTINE CALCQ3 ******************************************
1750       END
1754 !C=======================================================================
1756 !C *** ISORROPIA CODE
1757 !C *** SUBROUTINE CALCQ3A
1758 !C *** CASE Q3 ; SUBCASE A
1760 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1761 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM POOR (SODRAT < 2.0)
1762 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
1764 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1765 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1766 !C *** WRITTEN BY ATHANASIOS NENES
1768 !C=======================================================================
1770       SUBROUTINE CALCQ3A2p1
1771       INCLUDE 'module_isrpia_inc.F'
1773       LOGICAL PSCONV1, PSCONV6
1774       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
1776       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
1777                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
1778                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
1779                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
1780                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
1781                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
1783 !C *** SETUP PARAMETERS ************************************************
1785       FRST    =.TRUE.
1786       CALAIN  =.TRUE. 
1787       CALAOU  =.TRUE.
1788 !C 
1789       PSCONV1 =.TRUE.
1790       PSCONV6 =.TRUE.
1792       PSI1O   =-GREAT
1793       PSI6O   =-GREAT
1795       ROOT1   = ZERO
1796       ROOT3   = ZERO
1798 !C *** CALCULATE INITIAL SOLUTION ***************************************
1800       CALL CALCQ1A2p1
1802       CHI1   = CNA2SO4      ! SALTS
1803       CHI4   = CNH4CL
1804       CHI6   = CNH42S4
1806       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
1807       PSI4   = CNH4CL
1808       PSI5   = CNH4NO3
1809       PSI6   = CNH42S4
1811       CALL CALCMR2p1           ! WATER
1813       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
1814       SO4I   = WAER(2)
1815       NH4I   = WAER(3)
1816       NO3I   = WAER(4)
1817       CLI    = WAER(5)
1818       HSO4I  = ZERO
1819       NH3AQ  = ZERO
1820       NO3AQ  = ZERO
1821       CLAQ   = ZERO
1823 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
1825       DO 10 I=1,NSWEEP
1826       A5  = XK5 *(WATER/GAMA(2))**3.         ! Na2SO4    <==> Na+
1827       A7  = XK7 *(WATER/GAMA(4))**3.         ! (NH4)2SO4 <==> NH4+
1828       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
1830 !C SODIUM SULFATE
1832       IF (NAI*NAI*SO4I .GT. A5) THEN
1833          BB =-(WAER(2) + WAER(1) - ROOT1)
1834          CC = WAER(1)*(WAER(2) - ROOT1) + 0.25*WAER(1)*WAER(1)
1835          DD =-0.25*(WAER(1)*WAER(1)*(WAER(2) - ROOT1) - A5)
1836          CALL POLY32p1(BB, CC, DD, ROOT3, ISLV)
1837          IF (ISLV.NE.0) ROOT3 = TINY
1838          ROOT3 = MIN (ROOT3, WAER(1)/2.0, WAER(2) - ROOT1, CHI1)
1839          ROOT3 = MAX (ROOT3, ZERO)
1840          PSI1  = CHI1-ROOT3
1841       ENDIF
1842       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
1843       PSI1O   = PSI1
1845 !C AMMONIUM SULFATE
1847       IF (NH4I*NH4I*SO4I .GT. A7) THEN
1848          BB =-(WAER(2)+WAER(3)-ROOT3)
1849          CC =  WAER(3)*(WAER(2)-ROOT3+0.5D0*WAER(3))
1850          DD =-((WAER(2)-ROOT3)*WAER(3)**2.D0 + A7)/4.D0
1851          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
1852          IF (ISLV.NE.0) ROOT1 = TINY
1853          ROOT1 = MIN(ROOT1, WAER(3), WAER(2)-ROOT3, CHI6)
1854          ROOT1 = MAX(ROOT1, ZERO)
1855          PSI6  = CHI6-ROOT1
1856       ENDIF
1857       PSCONV6 = ABS(PSI6-PSI6O) .LE. EPS*PSI6O
1858       PSI6O   = PSI6
1860 !C ION CONCENTRATIONS
1862       NAI = WAER(1) - 2.D0*ROOT3
1863       SO4I= WAER(2) - ROOT1 - ROOT3
1864       NH4I= WAER(3) - 2.D0*ROOT1
1865       NO3I= WAER(4)
1866       CLI = WAER(5)
1868 !C SOLUTION ACIDIC OR BASIC?
1870       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
1871       IF (GG.GT.TINY) THEN                        ! H+ in excess
1872          BB =-GG
1873          CC =-AKW
1874          DD = BB*BB - 4.D0*CC
1875          HI = 0.5D0*(-BB + SQRT(DD))
1876          OHI= AKW/HI
1877       ELSE                                        ! OH- in excess
1878          BB = GG
1879          CC =-AKW
1880          DD = BB*BB - 4.D0*CC
1881          OHI= 0.5D0*(-BB + SQRT(DD))
1882          HI = AKW/OHI
1883       ENDIF
1885 !C UNDISSOCIATED SPECIES EQUILIBRIA
1887       IF (HI.LT.OHI) THEN
1888          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
1889          HI    = AKW/OHI
1890          HSO4I = ZERO
1891       ELSE
1892          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
1893          GGCL  = MAX(GG-GGNO3, ZERO)
1894          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
1895          IF (GGNO3.GT.TINY) THEN
1896             IF (GGCL.LE.TINY) HI = ZERO
1897             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
1898          ENDIF
1900 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
1902          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
1903          SO4I  = SO4I  - DEL
1904          HI    = HI    - DEL
1905          HSO4I = DEL
1906          OHI   = AKW/HI
1907       ENDIF
1909 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
1911       MOLAL(1) = HI
1912       MOLAL(2) = NAI
1913       MOLAL(3) = NH4I
1914       MOLAL(4) = CLI
1915       MOLAL(5) = SO4I
1916       MOLAL(6) = HSO4I
1917       MOLAL(7) = NO3I
1919 !C *** CALCULATE WATER **************************************************
1921       CALL CALCMR2p1
1923 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
1925       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
1926          CALL CALCACT2p1
1927       ELSE
1928          IF (PSCONV1 .AND. PSCONV6) GOTO 20      
1929       ENDIF
1930 10    CONTINUE
1931 !ccc      CALL PUSHERR (0002, 'CALCQ3A')    ! WARNING ERROR: NO CONVERGENCE
1932 !C 
1933 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
1935 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
1936       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
1937       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
1939       GNH3    = NH4I/HI/A2
1940       GHNO3   = HI*NO3I/A3
1941       GHCL    = HI*CLI /A4
1943       GASAQ(1)= NH3AQ
1944       GASAQ(2)= CLAQ
1945       GASAQ(3)= NO3AQ
1947       CNH42S4 = CHI6 - PSI6
1948       CNH4NO3 = ZERO
1949       CNH4CL  = ZERO
1950       CNACL   = ZERO
1951       CNANO3  = ZERO
1952       CNA2SO4 = CHI1 - PSI1
1954       RETURN
1956 !C *** END OF SUBROUTINE CALCQ3A *****************************************
1958       END
1959 !C=======================================================================
1961 !C *** ISORROPIA CODE
1962 !C *** SUBROUTINE CALCQ2
1963 !C *** CASE Q2
1965 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
1966 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
1967 !C     2. SOLID & LIQUID AEROSOL POSSIBLE
1968 !C     3. SOLIDS POSSIBLE : NH4CL, NA2SO4, NANO3, NACL
1970 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
1971 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
1972 !C *** WRITTEN BY ATHANASIOS NENES
1974 !C=======================================================================
1976       SUBROUTINE CALCQ22p1
1977       INCLUDE 'module_isrpia_inc.F'
1978       LOGICAL EXNO, EXCL
1979       EXTERNAL CALCQ1A2p1, CALCQ3A2p1, CALCQ42p1
1981 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
1983       EXNO = WAER(4).GT.TINY   
1984       EXCL = WAER(5).GT.TINY   
1986       IF (EXNO) THEN                       ! *** NITRATE EXISTS
1987          SCASE = 'Q2 ; SUBCASE 1'  
1988          CALL CALCQ2A2p1                                   
1989          SCASE = 'Q2 ; SUBCASE 1' 
1990 !C 
1991       ELSEIF (.NOT.EXNO .AND. EXCL) THEN   ! *** ONLY CHLORIDE EXISTS
1992          IF (RH.LT.DRMG2) THEN    
1993             SCASE = 'Q2 ; SUBCASE 2'  
1994             CALL CALCQ1A2p1             ! SOLID
1995             SCASE = 'Q2 ; SUBCASE 2'
1996          ELSE
1997             SCASE = 'Q2 ; SUBCASE 3' ! MDRH (NH4)2SO4, NA2SO4, NH4CL
1998             CALL CALCMDRP2p1 (RH, DRMG2, DRNH4CL, CALCQ1A2p1, CALCQ3A2p1)
1999             SCASE = 'Q2 ; SUBCASE 3'
2000          ENDIF
2002       ELSE                                 ! *** NO CHLORIDE AND NITRATE
2003          IF (RH.LT.DRMG3) THEN    
2004             SCASE = 'Q2 ; SUBCASE 2'  
2005             CALL CALCQ1A2p1             ! SOLID
2006             SCASE = 'Q2 ; SUBCASE 2'
2007          ELSE
2008             SCASE = 'Q2 ; SUBCASE 4' ! MDRH (NH4)2SO4, NA2SO4
2009             CALL CALCMDRP2p1 (RH, DRMG3, DRNH42S4, CALCQ1A2p1, CALCQ42p1)
2010             SCASE = 'Q2 ; SUBCASE 4'
2011          ENDIF
2012       ENDIF
2013 !C 
2014       RETURN
2016 !C *** END OF SUBROUTINE CALCQ2 ******************************************
2018       END
2021 !C=======================================================================
2023 !C *** ISORROPIA CODE
2024 !C *** SUBROUTINE CALCQ2A
2025 !C *** CASE Q2 ; SUBCASE A
2027 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2028 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM POOR (SODRAT < 2.0)
2029 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
2031 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2032 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2033 !C *** WRITTEN BY ATHANASIOS NENES
2035 !C=======================================================================
2037       SUBROUTINE CALCQ2A2p1
2038       INCLUDE 'module_isrpia_inc.F'
2040       LOGICAL PSCONV1, PSCONV4, PSCONV6
2041       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
2043       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
2044                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
2045                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
2046                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
2047                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
2048                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
2050 !C *** SETUP PARAMETERS ************************************************
2052       FRST    =.TRUE.
2053       CALAIN  =.TRUE. 
2054       CALAOU  =.TRUE.
2055 !C 
2056       PSCONV1 =.TRUE.
2057       PSCONV4 =.TRUE.
2058       PSCONV6 =.TRUE.
2060       PSI1O   =-GREAT
2061       PSI4O   =-GREAT
2062       PSI6O   =-GREAT
2064       ROOT1   = ZERO
2065       ROOT2   = ZERO
2066       ROOT3   = ZERO
2068 !C *** CALCULATE INITIAL SOLUTION ***************************************
2070       CALL CALCQ1A2p1
2072       CHI1   = CNA2SO4      ! SALTS
2073       CHI4   = CNH4CL
2074       CHI6   = CNH42S4
2076       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
2077       PSI4   = CNH4CL
2078       PSI5   = CNH4NO3
2079       PSI6   = CNH42S4
2081       CALL CALCMR2p1           ! WATER
2083       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
2084       SO4I   = WAER(2)
2085       NH4I   = WAER(3)
2086       NO3I   = WAER(4)
2087       CLI    = WAER(5)
2088       HSO4I  = ZERO
2089       NH3AQ  = ZERO
2090       NO3AQ  = ZERO
2091       CLAQ   = ZERO
2093 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
2095       DO 10 I=1,NSWEEP
2096       A5  = XK5 *(WATER/GAMA(2))**3.         ! Na2SO4    <==> Na+
2097       A14 = XK14*(WATER/GAMA(6))**2.         ! NH4Cl     <==> NH4+
2098       A7  = XK7 *(WATER/GAMA(4))**3.         ! (NH4)2SO4 <==> Na+
2099       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
2101 !C AMMONIUM CHLORIDE
2103       IF (NH4I*CLI .GT. A14) THEN
2104          BB    =-(WAER(3) + WAER(5) - 2.D0*ROOT1)
2105          CC    = WAER(5)*(WAER(3) - 2.D0*ROOT1) - A14
2106          DD    = BB*BB - 4.D0*CC
2107          IF (DD.LT.ZERO) THEN
2108             ROOT2 = ZERO
2109          ELSE
2110             DD    = SQRT(DD)
2111             ROOT2A= 0.5D0*(-BB+DD)  
2112             ROOT2B= 0.5D0*(-BB-DD)  
2113             IF (ZERO.LE.ROOT2A) THEN
2114                ROOT2 = ROOT2A
2115             ELSE
2116                ROOT2 = ROOT2B
2117             ENDIF
2118             ROOT2 = MIN(ROOT2, WAER(5), WAER(3) - 2.D0*ROOT1, CHI4)
2119             ROOT2 = MAX(ROOT2, ZERO)
2120             PSI4  = CHI4 - ROOT2
2121          ENDIF
2122       ENDIF
2123       PSCONV4 = ABS(PSI4-PSI4O) .LE. EPS*PSI4O
2124       PSI4O   = PSI4
2126 !C SODIUM SULFATE
2128       IF (NAI*NAI*SO4I .GT. A5) THEN
2129          BB =-(WAER(2) + WAER(1) - ROOT1)
2130          CC = WAER(1)*(WAER(2) - ROOT1) + 0.25*WAER(1)*WAER(1)
2131          DD =-0.25*(WAER(1)*WAER(1)*(WAER(2) - ROOT1) - A5)
2132          CALL POLY32p1(BB, CC, DD, ROOT3, ISLV)
2133          IF (ISLV.NE.0) ROOT3 = TINY
2134          ROOT3 = MIN (ROOT3, WAER(1)/2.0, WAER(2) - ROOT1, CHI1)
2135          ROOT3 = MAX (ROOT3, ZERO)
2136          PSI1  = CHI1-ROOT3
2137       ENDIF
2138       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
2139       PSI1O   = PSI1
2141 !C AMMONIUM SULFATE
2143       IF (NH4I*NH4I*SO4I .GT. A7) THEN
2144          BB =-(WAER(2)+WAER(3)-ROOT2-ROOT3)
2145          CC = (WAER(3)-ROOT2)*(WAER(2)-ROOT3+0.5D0*(WAER(3)-ROOT2))
2146          DD =-((WAER(2)-ROOT3)*(WAER(3)-ROOT2)**2.D0 + A7)/4.D0
2147          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
2148          IF (ISLV.NE.0) ROOT1 = TINY
2149          ROOT1 = MIN(ROOT1, WAER(3)-ROOT2, WAER(2)-ROOT3, CHI6)
2150          ROOT1 = MAX(ROOT1, ZERO)
2151          PSI6  = CHI6-ROOT1
2152       ENDIF
2153       PSCONV6 = ABS(PSI6-PSI6O) .LE. EPS*PSI6O
2154       PSI6O   = PSI6
2156 !C ION CONCENTRATIONS
2158       NAI = WAER(1) - 2.D0*ROOT3
2159       SO4I= WAER(2) - ROOT1 - ROOT3
2160       NH4I= WAER(3) - ROOT2 - 2.D0*ROOT1
2161       NO3I= WAER(4)
2162       CLI = WAER(5) - ROOT2
2164 !C SOLUTION ACIDIC OR BASIC?
2166       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
2167       IF (GG.GT.TINY) THEN                        ! H+ in excess
2168          BB =-GG
2169          CC =-AKW
2170          DD = BB*BB - 4.D0*CC
2171          HI = 0.5D0*(-BB + SQRT(DD))
2172          OHI= AKW/HI
2173       ELSE                                        ! OH- in excess
2174          BB = GG
2175          CC =-AKW
2176          DD = BB*BB - 4.D0*CC
2177          OHI= 0.5D0*(-BB + SQRT(DD))
2178          HI = AKW/OHI
2179       ENDIF
2181 !C UNDISSOCIATED SPECIES EQUILIBRIA
2183       IF (HI.LT.OHI) THEN
2184          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
2185          HI    = AKW/OHI
2186          HSO4I = ZERO
2187       ELSE
2188          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
2189          GGCL  = MAX(GG-GGNO3, ZERO)
2190          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
2191          IF (GGNO3.GT.TINY) THEN
2192             IF (GGCL.LE.TINY) HI = ZERO
2193             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
2194          ENDIF
2196 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
2198          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
2199          SO4I  = SO4I  - DEL
2200          HI    = HI    - DEL
2201          HSO4I = DEL
2202          OHI   = AKW/HI
2203       ENDIF
2205 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
2207       MOLAL(1) = HI
2208       MOLAL(2) = NAI
2209       MOLAL(3) = NH4I
2210       MOLAL(4) = CLI
2211       MOLAL(5) = SO4I
2212       MOLAL(6) = HSO4I
2213       MOLAL(7) = NO3I
2215 !C *** CALCULATE WATER **************************************************
2217       CALL CALCMR2p1
2219 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
2221       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
2222          CALL CALCACT2p1
2223       ELSE
2224          IF (PSCONV1 .AND. PSCONV4 .AND. PSCONV6) GOTO 20
2225       ENDIF      
2226 10    CONTINUE
2227 !ccc      CALL PUSHERR (0002, 'CALCQ2A')    ! WARNING ERROR: NO CONVERGENCE
2228 !C 
2229 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
2231 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
2232       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
2233       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
2235       GNH3    = NH4I/HI/A2
2236       GHNO3   = HI*NO3I/A3
2237       GHCL    = HI*CLI /A4
2239       GASAQ(1)= NH3AQ
2240       GASAQ(2)= CLAQ
2241       GASAQ(3)= NO3AQ
2243       CNH42S4 = CHI6 - PSI6
2244       CNH4NO3 = ZERO
2245       CNH4CL  = CHI4 - PSI4
2246       CNACL   = ZERO
2247       CNANO3  = ZERO
2248       CNA2SO4 = CHI1 - PSI1
2250       RETURN
2252 !C *** END OF SUBROUTINE CALCQ2A *****************************************
2254       END
2255 !C=======================================================================
2257 !C *** ISORROPIA CODE
2258 !C *** SUBROUTINE CALCQ1
2259 !C *** CASE Q1
2261 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2262 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM POOR (SODRAT < 2.0)
2263 !C     2. SOLID AEROSOL ONLY
2264 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, (NH4)2SO4, NA2SO4
2266 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2267 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2268 !C *** WRITTEN BY ATHANASIOS NENES
2270 !C=======================================================================
2272       SUBROUTINE CALCQ12p1
2273       INCLUDE 'module_isrpia_inc.F'
2274       LOGICAL EXNO, EXCL
2275       EXTERNAL CALCQ1A2p1, CALCQ2A2p1, CALCQ3A2p1, CALCQ42p1
2277 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
2279       EXNO = WAER(4).GT.TINY   
2280       EXCL = WAER(5).GT.TINY   
2282       IF (EXNO .AND. EXCL) THEN           ! *** NITRATE & CHLORIDE EXIST
2283          IF (RH.LT.DRMG1) THEN    
2284             SCASE = 'Q1 ; SUBCASE 1'  
2285             CALL CALCQ1A2p1             ! SOLID
2286             SCASE = 'Q1 ; SUBCASE 1'
2287          ELSE
2288             SCASE = 'Q1 ; SUBCASE 2' ! MDRH (NH4)2SO4, NA2SO4, NH4CL, NH4NO3
2289             CALL CALCMDRP2p1 (RH, DRMG1, DRNH4NO3, CALCQ1A2p1, CALCQ2A2p1)
2290             SCASE = 'Q1 ; SUBCASE 2'
2291          ENDIF
2293       ELSE IF (EXNO .AND. .NOT.EXCL) THEN ! *** ONLY NITRATE EXISTS
2294          IF (RH.LT.DRMQ1) THEN    
2295             SCASE = 'Q1 ; SUBCASE 1'  
2296             CALL CALCQ1A2p1             ! SOLID
2297             SCASE = 'Q1 ; SUBCASE 1'
2298          ELSE
2299             SCASE = 'Q1 ; SUBCASE 3' ! MDRH (NH4)2SO4, NA2SO4, NH4NO3
2300             CALL CALCMDRP2p1 (RH, DRMQ1, DRNH4NO3, CALCQ1A2p1, CALCQ2A2p1)
2301             SCASE = 'Q1 ; SUBCASE 3'
2302          ENDIF
2304       ELSE IF (.NOT.EXNO .AND. EXCL) THEN ! *** ONLY CHLORIDE EXISTS
2305          IF (RH.LT.DRMG2) THEN    
2306             SCASE = 'Q1 ; SUBCASE 1'  
2307             CALL CALCQ1A2p1             ! SOLID
2308             SCASE = 'Q1 ; SUBCASE 1'
2309          ELSE
2310             SCASE = 'Q1 ; SUBCASE 4' ! MDRH (NH4)2SO4, NA2SO4, NH4CL
2311             CALL CALCMDRP2p1 (RH, DRMG2, DRNH4CL, CALCQ1A2p1, CALCQ3A2p1)
2312             SCASE = 'Q1 ; SUBCASE 4'
2313          ENDIF
2315       ELSE                                ! *** NO CHLORIDE AND NITRATE
2316          IF (RH.LT.DRMG3) THEN    
2317             SCASE = 'Q1 ; SUBCASE 1'  
2318             CALL CALCQ1A2p1             ! SOLID
2319             SCASE = 'Q1 ; SUBCASE 1'
2320          ELSE
2321             SCASE = 'Q1 ; SUBCASE 5' ! MDRH (NH4)2SO4, NA2SO4
2322             CALL CALCMDRP2p1 (RH, DRMG3, DRNH42S4, CALCQ1A2p1, CALCQ42p1)
2323             SCASE = 'Q1 ; SUBCASE 5'
2324          ENDIF
2325       ENDIF
2326 !C 
2327       RETURN
2329 !C *** END OF SUBROUTINE CALCQ1 ******************************************
2331       END
2334 !C=======================================================================
2336 !C *** ISORROPIA CODE
2337 !C *** SUBROUTINE CALCQ1A
2338 !C *** CASE Q1 ; SUBCASE 1
2340 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2341 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM POOR (SODRAT < 2.0)
2342 !C     2. SOLID AEROSOL ONLY
2343 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, (NH4)2SO4, NA2SO4
2345 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2346 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2347 !C *** WRITTEN BY ATHANASIOS NENES
2349 !C=======================================================================
2351       SUBROUTINE CALCQ1A2p1
2352       INCLUDE 'module_isrpia_inc.F'
2354 !C *** CALCULATE SOLIDS **************************************************
2356       CNA2SO4 = 0.5d0*WAER(1)
2357       FRSO4   = MAX (WAER(2)-CNA2SO4, ZERO)
2359       CNH42S4 = MAX (MIN(FRSO4,0.5d0*WAER(3)), TINY)
2360       FRNH3   = MAX (WAER(3)-2.D0*CNH42S4, ZERO)
2362       CNH4NO3 = MIN (FRNH3, WAER(4))
2363 !CCC      FRNO3   = MAX (WAER(4)-CNH4NO3, ZERO)
2364       FRNH3   = MAX (FRNH3-CNH4NO3, ZERO)
2366       CNH4CL  = MIN (FRNH3, WAER(5))
2367 !CCC      FRCL    = MAX (WAER(5)-CNH4CL, ZERO)
2368       FRNH3   = MAX (FRNH3-CNH4CL, ZERO)
2370 !C *** OTHER PHASES ******************************************************
2372       WATER   = ZERO
2374       GNH3    = ZERO
2375       GHNO3   = ZERO
2376       GHCL    = ZERO
2378       RETURN
2380 !C *** END OF SUBROUTINE CALCQ1A *****************************************
2382       END
2383 !C=======================================================================
2385 !C *** ISORROPIA CODE
2386 !C *** SUBROUTINE CALCR6
2387 !C *** CASE R6
2389 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2390 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM RICH (SODRAT >= 2.0)
2391 !C     2. THERE IS ONLY A LIQUID PHASE
2393 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2394 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2395 !C *** WRITTEN BY ATHANASIOS NENES
2397 !C=======================================================================
2399       SUBROUTINE CALCR62p1
2400       INCLUDE 'module_isrpia_inc.F'
2402       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
2404       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
2405                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
2406                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
2407                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
2408                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
2409                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
2411 !C *** SETUP PARAMETERS ************************************************
2413       CALL CALCR1A2p1
2415       PSI1   = CNA2SO4
2416       PSI2   = CNANO3
2417       PSI3   = CNACL
2418       PSI4   = CNH4CL
2419       PSI5   = CNH4NO3
2421       FRST   = .TRUE.
2422       CALAIN = .TRUE. 
2423       CALAOU = .TRUE. 
2425 !C *** CALCULATE WATER **************************************************
2427       CALL CALCMR2p1
2429 !C *** SETUP LIQUID CONCENTRATIONS **************************************
2431       HSO4I  = ZERO
2432       NH3AQ  = ZERO
2433       NO3AQ  = ZERO
2434       CLAQ   = ZERO
2436 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
2438       DO 10 I=1,NSWEEP
2439       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+      
2441       NAI    = WAER(1)
2442       SO4I   = WAER(2)
2443       NH4I   = WAER(3)
2444       NO3I   = WAER(4)
2445       CLI    = WAER(5)
2447 !C SOLUTION ACIDIC OR BASIC?
2449       GG  = 2.D0*WAER(2) + NO3I + CLI - NAI - NH4I
2450       IF (GG.GT.TINY) THEN                        ! H+ in excess
2451          BB =-GG
2452          CC =-AKW
2453          DD = BB*BB - 4.D0*CC
2454          HI = 0.5D0*(-BB + SQRT(DD))
2455          OHI= AKW/HI
2456       ELSE                                        ! OH- in excess
2457          BB = GG
2458          CC =-AKW
2459          DD = BB*BB - 4.D0*CC
2460          OHI= 0.5D0*(-BB + SQRT(DD))
2461          HI = AKW/OHI
2462       ENDIF
2464 !C UNDISSOCIATED SPECIES EQUILIBRIA
2466       IF (HI.LT.OHI) THEN
2467          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
2468          HI    = AKW/OHI
2469       ELSE
2470          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
2471          GGCL  = MAX(GG-GGNO3, ZERO)
2472          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
2473          IF (GGNO3.GT.TINY) THEN
2474             IF (GGCL.LE.TINY) HI = ZERO
2475             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
2476          ENDIF
2478 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
2480          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
2481          SO4I  = SO4I  - DEL
2482          HI    = HI    - DEL
2483          HSO4I = DEL
2484          OHI   = AKW/HI
2485       ENDIF
2487 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
2489       MOLAL(1) = HI
2490       MOLAL(2) = NAI
2491       MOLAL(3) = NH4I
2492       MOLAL(4) = CLI
2493       MOLAL(5) = SO4I
2494       MOLAL(6) = HSO4I
2495       MOLAL(7) = NO3I
2497 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
2499       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
2500          CALL CALCACT2p1
2501       ELSE
2502          GOTO 20
2503       ENDIF
2504 10    CONTINUE
2505 !ccc      CALL PUSHERR (0002, 'CALCR6')    ! WARNING ERROR: NO CONVERGENCE
2506 !C 
2507 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
2509 20    A2       = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
2510       A3       = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
2511       A4       = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
2513       GNH3     = NH4I/HI/A2
2514       GHNO3    = HI*NO3I/A3
2515       GHCL     = HI*CLI /A4
2517       GASAQ(1) = NH3AQ
2518       GASAQ(2) = CLAQ
2519       GASAQ(3) = NO3AQ
2521       CNH42S4  = ZERO
2522       CNH4NO3  = ZERO
2523       CNH4CL   = ZERO
2524       CNACL    = ZERO
2525       CNANO3   = ZERO
2526       CNA2SO4  = ZERO 
2528       RETURN
2530 !C *** END OF SUBROUTINE CALCR6 ******************************************
2532       END
2533 !C=======================================================================
2535 !C *** ISORROPIA CODE
2536 !C *** SUBROUTINE CALCR5
2537 !C *** CASE R5
2539 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2540 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM RICH (SODRAT >= 2.0)
2541 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
2543 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2544 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2545 !C *** WRITTEN BY ATHANASIOS NENES
2547 !C=======================================================================
2549       SUBROUTINE CALCR52p1
2550       INCLUDE 'module_isrpia_inc.F'
2552       LOGICAL PSCONV
2553       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
2555       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
2556                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
2557                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
2558                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
2559                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
2560                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
2562       LOGICAL  NEAN, NEAC, NESN, NESC
2564 !C *** SETUP PARAMETERS ************************************************
2566       CALL CALCR1A2p1                             ! DRY SOLUTION
2568       NEAN = CNH4NO3.LE.TINY    ! NH4NO3       ! Water exists?
2569       NEAC = CNH4CL .LE.TINY    ! NH4CL
2570       NESN = CNANO3 .LE.TINY    ! NANO3
2571       NESC = CNACL  .LE.TINY    ! NACL
2572       IF (NEAN .AND. NEAC .AND. NESN .AND. NESC) RETURN
2574       CHI1   = CNA2SO4
2576       PSI1   = CNA2SO4
2577       PSI2   = CNANO3
2578       PSI3   = CNACL
2579       PSI4   = CNH4CL
2580       PSI5   = CNH4NO3
2582       PSIO   =-GREAT
2584 !C *** CALCULATE WATER **************************************************
2586       CALL CALCMR2p1
2588       FRST   = .TRUE.
2589       CALAIN = .TRUE. 
2590       CALAOU = .TRUE. 
2591       PSCONV = .FALSE.
2593 !C *** SETUP LIQUID CONCENTRATIONS **************************************
2595       NAI    = WAER(1)
2596       SO4I   = WAER(2)
2597       NH4I   = WAER(3)
2598       NO3I   = WAER(4)
2599       CLI    = WAER(5)
2600       HSO4I  = ZERO
2601       NH3AQ  = ZERO
2602       NO3AQ  = ZERO
2603       CLAQ   = ZERO
2605 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
2607       DO 10 I=1,NSWEEP
2608       A5  = XK5*(WATER/GAMA(2))**3.                   ! Na2SO4 <==> Na+
2609       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+
2611 !C SODIUM SULFATE
2613       ROOT = ZERO
2614       IF (NAI*NAI*SO4I .GT. A5) THEN
2615          BB =-3.D0*CHI1
2616          CC = 3.D0*CHI1**2.0
2617          DD =-CHI1**3.0 + 0.25D0*A5 
2618          CALL POLY32p1(BB, CC, DD, ROOT, ISLV)
2619          IF (ISLV.NE.0) ROOT = TINY
2620          ROOT = MIN (MAX(ROOT,ZERO), CHI1)
2621          PSI1 = CHI1-ROOT
2622       ENDIF
2623       PSCONV = ABS(PSI1-PSIO) .LE. EPS*PSIO
2624       PSIO   = PSI1
2626 !C ION CONCENTRATIONS
2628       NAI  = WAER(1) - 2.D0*ROOT
2629       SO4I = WAER(2) - ROOT
2630       NH4I = WAER(3)
2631       NO3I = WAER(4)
2632       CLI  = WAER(5)
2634 !C SOLUTION ACIDIC OR BASIC?
2636       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
2637       IF (GG.GT.TINY) THEN                        ! H+ in excess
2638          BB =-GG
2639          CC =-AKW
2640          DD = BB*BB - 4.D0*CC
2641          HI = 0.5D0*(-BB + SQRT(DD))
2642          OHI= AKW/HI
2643       ELSE                                        ! OH- in excess
2644          BB = GG
2645          CC =-AKW
2646          DD = BB*BB - 4.D0*CC
2647          OHI= 0.5D0*(-BB + SQRT(DD))
2648          HI = AKW/OHI
2649       ENDIF
2651 !C UNDISSOCIATED SPECIES EQUILIBRIA
2653       IF (HI.LT.OHI) THEN
2654          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
2655          HI    = AKW/OHI
2656       ELSE
2657          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
2658          GGCL  = MAX(GG-GGNO3, ZERO)
2659          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
2660          IF (GGNO3.GT.TINY) THEN
2661             IF (GGCL.LE.TINY) HI = ZERO
2662             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
2663          ENDIF
2665 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
2667          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
2668          SO4I  = SO4I  - DEL
2669          HI    = HI    - DEL
2670          HSO4I = DEL
2671          OHI   = AKW/HI
2672       ENDIF
2674 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
2676       MOLAL(1) = HI
2677       MOLAL(2) = NAI
2678       MOLAL(3) = NH4I
2679       MOLAL(4) = CLI
2680       MOLAL(5) = SO4I
2681       MOLAL(6) = HSO4I
2682       MOLAL(7) = NO3I
2684 !C *** CALCULATE WATER **************************************************
2686       CALL CALCMR2p1
2688 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
2690       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
2691          CALL CALCACT2p1
2692       ELSE
2693          IF (PSCONV) GOTO 20
2694       ENDIF
2695 10    CONTINUE
2696 !ccc      CALL PUSHERR (0002, 'CALCR5')    ! WARNING ERROR: NO CONVERGENCE
2697 !C 
2698 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
2700 20    A2       = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
2701 !CC      A21      = XK21*WATER*R*TEMP
2702       A3       = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
2703       A4       = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
2705       GNH3     = NH4I/HI/A2  ! NH4I*OHI/A2/AKW
2706       GHNO3    = HI*NO3I/A3
2707       GHCL     = HI*CLI /A4
2709       GASAQ(1) = NH3AQ
2710       GASAQ(2) = CLAQ
2711       GASAQ(3) = NO3AQ
2713       CNH42S4  = ZERO
2714       CNH4NO3  = ZERO
2715       CNH4CL   = ZERO
2716       CNACL    = ZERO
2717       CNANO3   = ZERO
2718       CNA2SO4  = CHI1 - PSI1
2720       RETURN
2722 !C *** END OF SUBROUTINE CALCR5 ******************************************
2724       END
2725 !C=======================================================================
2727 !C *** ISORROPIA CODE
2728 !C *** SUBROUTINE CALCR4
2729 !C *** CASE R4
2731 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2732 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
2733 !C     2. SOLID AEROSOL ONLY
2734 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, NA2SO4, NANO3, NACL
2736 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2737 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2738 !C *** WRITTEN BY ATHANASIOS NENES
2740 !C=======================================================================
2742       SUBROUTINE CALCR42p1
2743       INCLUDE 'module_isrpia_inc.F'
2744       LOGICAL  EXAN, EXAC, EXSN, EXSC
2745       EXTERNAL CALCR1A2p1, CALCR52p1
2747 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
2749       SCASE = 'R4 ; SUBCASE 2'  
2750       CALL CALCR1A2p1              ! SOLID
2751       SCASE = 'R4 ; SUBCASE 2'
2752 !C     
2753       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
2754       EXAC = CNH4CL .GT.TINY    ! NH4CL
2755       EXSN = CNANO3 .GT.TINY    ! NANO3
2756       EXSC = CNACL  .GT.TINY    ! NACL
2758 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
2760       IF (EXAN .OR. EXSN .OR. EXSC) THEN   ! *** NH4NO3,NANO3 EXIST
2761          IF (RH.GE.DRMH1) THEN    
2762             SCASE = 'R4 ; SUBCASE 1' 
2763             CALL CALCR4A2p1
2764             SCASE = 'R4 ; SUBCASE 1'
2765          ENDIF
2767       ELSE IF (EXAC) THEN                  ! *** NH4CL EXISTS ONLY
2768          IF (RH.GE.DRMR5) THEN    
2769             SCASE = 'R4 ; SUBCASE 3'  
2770             CALL CALCMDRP2p1 (RH, DRMR5, DRNH4CL, CALCR1A2p1, CALCR52p1)
2771             SCASE = 'R4 ; SUBCASE 3'
2772          ENDIF
2773       ENDIF
2774 !C 
2775       RETURN
2777 !C *** END OF SUBROUTINE CALCR4 ******************************************
2779       END
2783 !C=======================================================================
2785 !C *** ISORROPIA CODE
2786 !C *** SUBROUTINE CALCR4A
2787 !C *** CASE R4A
2789 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2790 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM RICH (SODRAT >= 2.0)
2791 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
2793 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2794 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2795 !C *** WRITTEN BY ATHANASIOS NENES
2797 !C=======================================================================
2799       SUBROUTINE CALCR4A2p1
2800       INCLUDE 'module_isrpia_inc.F'
2802       LOGICAL PSCONV1, PSCONV4
2803       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
2805       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
2806                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
2807                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
2808                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
2809                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
2810                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
2812 !C *** SETUP PARAMETERS ************************************************
2814       FRST    = .TRUE.
2815       CALAIN  = .TRUE. 
2816       CALAOU  = .TRUE. 
2817       PSCONV1 = .FALSE.
2818       PSCONV4 = .FALSE.
2819       PSIO1   =-GREAT
2820       PSIO4   =-GREAT
2822 !C *** CALCULATE INITIAL SOLUTION ***************************************
2824       CALL CALCR1A2p1
2826       CHI1   = CNA2SO4      ! SALTS
2827       CHI4   = CNH4CL
2829       PSI1   = CNA2SO4
2830       PSI2   = CNANO3
2831       PSI3   = CNACL
2832       PSI4   = CNH4CL
2833       PSI5   = CNH4NO3
2835       CALL CALCMR2p1           ! WATER
2837       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
2838       SO4I   = WAER(2)
2839       NH4I   = WAER(3)
2840       NO3I   = WAER(4)
2841       CLI    = WAER(5)
2842       HSO4I  = ZERO
2843       NH3AQ  = ZERO
2844       NO3AQ  = ZERO
2845       CLAQ   = ZERO
2847 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
2849       DO 10 I=1,NSWEEP
2850       A5  = XK5 *(WATER/GAMA(2))**3.                  ! Na2SO4 <==> Na+
2851       A14 = XK14*(WATER/GAMA(6))**2.                  ! NH4Cl  <==> NH4+
2852       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+
2854 !C SODIUM SULFATE
2856       ROOT = ZERO
2857       IF (NAI*NAI*SO4I .GT. A5) THEN
2858          BB =-3.D0*CHI1
2859          CC = 3.D0*CHI1**2.0
2860          DD =-CHI1**3.0 + 0.25D0*A5 
2861          CALL POLY32p1(BB, CC, DD, ROOT, ISLV)
2862          IF (ISLV.NE.0) ROOT = TINY
2863          ROOT = MIN (MAX(ROOT,ZERO), CHI1)
2864          PSI1 = CHI1-ROOT
2865          NAI  = WAER(1) - 2.D0*ROOT
2866          SO4I = WAER(2) - ROOT
2867       ENDIF
2868       PSCONV1 = ABS(PSI1-PSIO1) .LE. EPS*PSIO1
2869       PSIO1   = PSI1
2871 !C AMMONIUM CHLORIDE
2873       ROOT = ZERO
2874       IF (NH4I*CLI .GT. A14) THEN
2875          BB   =-(NH4I + CLI)
2876          CC   =-A14 + NH4I*CLI
2877          DD   = BB*BB - 4.D0*CC
2878          ROOT = 0.5D0*(-BB-SQRT(DD)) 
2879          IF (ROOT.GT.TINY) THEN
2880             ROOT    = MIN(ROOT, CHI4)
2881             PSI4    = CHI4 - ROOT
2882             NH4I    = WAER(3) - ROOT
2883             CLI     = WAER(5) - ROOT
2884          ENDIF
2885       ENDIF
2886       PSCONV4 = ABS(PSI4-PSIO4) .LE. EPS*PSIO4
2887       PSIO4   = PSI4
2889       NO3I   = WAER(4)
2891 !C SOLUTION ACIDIC OR BASIC?
2893       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
2894       IF (GG.GT.TINY) THEN                        ! H+ in excess
2895          BB =-GG
2896          CC =-AKW
2897          DD = BB*BB - 4.D0*CC
2898          HI = 0.5D0*(-BB + SQRT(DD))
2899          OHI= AKW/HI
2900       ELSE                                        ! OH- in excess
2901          BB = GG
2902          CC =-AKW
2903          DD = BB*BB - 4.D0*CC
2904          OHI= 0.5D0*(-BB + SQRT(DD))
2905          HI = AKW/OHI
2906       ENDIF
2908 !C UNDISSOCIATED SPECIES EQUILIBRIA
2910       IF (HI.LT.OHI) THEN
2911          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
2912          HI    = AKW/OHI
2913       ELSE
2914          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
2915          GGCL  = MAX(GG-GGNO3, ZERO)
2916          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
2917          IF (GGNO3.GT.TINY) THEN
2918             IF (GGCL.LE.TINY) HI = ZERO
2919             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
2920          ENDIF
2922 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
2924          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
2925          SO4I  = SO4I  - DEL
2926          HI    = HI    - DEL
2927          HSO4I = DEL
2928          OHI   = AKW/HI
2929       ENDIF
2931 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
2933       MOLAL(1) = HI
2934       MOLAL(2) = NAI
2935       MOLAL(3) = NH4I
2936       MOLAL(4) = CLI
2937       MOLAL(5) = SO4I
2938       MOLAL(6) = HSO4I
2939       MOLAL(7) = NO3I
2941 !C *** CALCULATE WATER **************************************************
2943       CALL CALCMR2p1
2945 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
2947       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
2948          CALL CALCACT2p1
2949       ELSE
2950          IF (PSCONV1 .AND. PSCONV4) GOTO 20
2951       ENDIF
2952 10    CONTINUE
2953 !ccc      CALL PUSHERR (0002, 'CALCR4A')    ! WARNING ERROR: NO CONVERGENCE
2954 !C 
2955 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
2957 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
2958       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
2959       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
2961       GNH3    = NH4I/HI/A2
2962       GHNO3   = HI*NO3I/A3
2963       GHCL    = HI*CLI /A4
2965       GASAQ(1)= NH3AQ
2966       GASAQ(2)= CLAQ
2967       GASAQ(3)= NO3AQ
2969       CNH42S4 = ZERO
2970       CNH4NO3 = ZERO
2971       CNH4CL  = CHI4 - PSI4
2972       CNACL   = ZERO
2973       CNANO3  = ZERO
2974       CNA2SO4 = CHI1 - PSI1
2976       RETURN
2978 !C *** END OF SUBROUTINE CALCR4A *****************************************
2980       END
2981 !C=======================================================================
2983 !C *** ISORROPIA CODE
2984 !C *** SUBROUTINE CALCR3
2985 !C *** CASE R3
2987 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
2988 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
2989 !C     2. SOLID AEROSOL ONLY
2990 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, NA2SO4, NANO3, NACL
2992 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
2993 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
2994 !C *** WRITTEN BY ATHANASIOS NENES
2996 !C=======================================================================
2998       SUBROUTINE CALCR32p1
2999       INCLUDE 'module_isrpia_inc.F'
3000       LOGICAL  EXAN, EXAC, EXSN, EXSC
3001       EXTERNAL CALCR1A2p1, CALCR4A2p1, CALCR52p1
3003 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
3005       SCASE = 'R3 ; SUBCASE 2'  
3006       CALL CALCR1A2p1              ! SOLID
3007       SCASE = 'R3 ; SUBCASE 2'
3008 !C     
3009       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
3010       EXAC = CNH4CL .GT.TINY    ! NH4CL
3011       EXSN = CNANO3 .GT.TINY    ! NANO3
3012       EXSC = CNACL  .GT.TINY    ! NACL
3014 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
3016       IF (EXAN .OR. EXSN) THEN                   ! *** NH4NO3,NANO3 EXIST
3017          IF (RH.GE.DRMH1) THEN    
3018             SCASE = 'R3 ; SUBCASE 1' 
3019             CALL CALCR3A2p1
3020             SCASE = 'R3 ; SUBCASE 1'
3021          ENDIF
3023       ELSE IF (.NOT.EXAN .AND. .NOT.EXSN) THEN   ! *** NH4NO3,NANO3 = 0
3024          IF      (     EXAC .AND.      EXSC) THEN
3025             IF (RH.GE.DRMR4) THEN    
3026                SCASE = 'R3 ; SUBCASE 3'  
3027                CALL CALCMDRP2p1 (RH, DRMR4, DRNACL, CALCR1A2p1, CALCR4A2p1)
3028                SCASE = 'R3 ; SUBCASE 3'
3029             ENDIF
3031          ELSE IF (.NOT.EXAC .AND.      EXSC) THEN
3032             IF (RH.GE.DRMR2) THEN    
3033                SCASE = 'R3 ; SUBCASE 4'  
3034                CALL CALCMDRP2p1 (RH, DRMR2, DRNACL, CALCR1A2p1, CALCR4A2p1)
3035                SCASE = 'R3 ; SUBCASE 4'
3036             ENDIF
3038          ELSE IF (     EXAC .AND. .NOT.EXSC) THEN
3039             IF (RH.GE.DRMR5) THEN    
3040                SCASE = 'R3 ; SUBCASE 5'  
3041                CALL CALCMDRP2p1 (RH, DRMR5, DRNACL, CALCR1A2p1, CALCR52p1)
3042                SCASE = 'R3 ; SUBCASE 5'
3043             ENDIF
3044          ENDIF
3046       ENDIF
3047 !C 
3048       RETURN
3050 !C *** END OF SUBROUTINE CALCR3 ******************************************
3052       END
3055 !C=======================================================================
3057 !C *** ISORROPIA CODE
3058 !C *** SUBROUTINE CALCR3A
3059 !C *** CASE R3A
3061 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3062 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM RICH (SODRAT >= 2.0)
3063 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
3065 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3066 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3067 !C *** WRITTEN BY ATHANASIOS NENES
3069 !C=======================================================================
3071       SUBROUTINE CALCR3A2p1
3072       INCLUDE 'module_isrpia_inc.F'
3074       LOGICAL PSCONV1, PSCONV3, PSCONV4
3075       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
3077       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,    &
3078                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,    &
3079                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,  &
3080                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,      &
3081                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,&
3082                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
3084 !C *** SETUP PARAMETERS ************************************************
3086       FRST    =.TRUE.
3087       CALAIN  =.TRUE. 
3088       CALAOU  =.TRUE. 
3089       PSCONV1 =.TRUE.
3090       PSCONV3 =.TRUE.
3091       PSCONV4 =.TRUE.
3092       PSI1O   =-GREAT
3093       PSI3O   =-GREAT
3094       PSI4O   =-GREAT
3095       ROOT1   = ZERO
3096       ROOT2   = ZERO
3097       ROOT3   = ZERO
3099 !C *** CALCULATE INITIAL SOLUTION ***************************************
3101       CALL CALCR1A2p1
3103       CHI1   = CNA2SO4      ! SALTS
3104       CHI4   = CNH4CL
3105       CHI3   = CNACL
3107       PSI1   = CNA2SO4
3108       PSI2   = CNANO3
3109       PSI3   = CNACL
3110       PSI4   = CNH4CL
3111       PSI5   = CNH4NO3
3113       CALL CALCMR2p1           ! WATER
3115       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
3116       SO4I   = WAER(2)
3117       NH4I   = WAER(3)
3118       NO3I   = WAER(4)
3119       CLI    = WAER(5)
3120       HSO4I  = ZERO
3121       NH3AQ  = ZERO
3122       NO3AQ  = ZERO
3123       CLAQ   = ZERO
3125       MOLAL(1) = ZERO
3126       MOLAL(2) = NAI
3127       MOLAL(3) = NH4I
3128       MOLAL(4) = CLI
3129       MOLAL(5) = SO4I
3130       MOLAL(6) = HSO4I
3131       MOLAL(7) = NO3I
3133       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
3135 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
3137       DO 10 I=1,NSWEEP
3138       A5  = XK5 *(WATER/GAMA(2))**3.                  ! Na2SO4 <==> Na+
3139       A8  = XK8 *(WATER/GAMA(1))**2.                  ! NaCl   <==> Na+
3140       A14 = XK14*(WATER/GAMA(6))**2.                  ! NH4Cl  <==> NH4+
3141       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+
3143 !C AMMONIUM CHLORIDE
3145       IF (NH4I*CLI .GT. A14) THEN
3146          BB    =-(WAER(3) + WAER(5) - ROOT3)
3147          CC    =-A14 + NH4I*(WAER(5) - ROOT3)
3148          DD    = MAX(BB*BB - 4.D0*CC, ZERO)
3149          ROOT2A= 0.5D0*(-BB+SQRT(DD))  
3150          ROOT2B= 0.5D0*(-BB-SQRT(DD))  
3151          IF (ZERO.LE.ROOT2A) THEN
3152             ROOT2 = ROOT2A
3153          ELSE
3154             ROOT2 = ROOT2B
3155          ENDIF
3156          ROOT2 = MIN(MAX(ZERO, ROOT2), MAX(WAER(5)-ROOT3,ZERO),  &
3157                      CHI4, WAER(3))
3158          PSI4  = CHI4 - ROOT2
3159       ENDIF
3160       PSCONV4 = ABS(PSI4-PSI4O) .LE. EPS*PSI4O
3161       PSI4O   = PSI4
3163 !C SODIUM SULFATE
3165       IF (NAI*NAI*SO4I .GT. A5) THEN
3166          BB =-(CHI1 + WAER(1) - ROOT3)
3167          CC = 0.25D0*(WAER(1) - ROOT3)*(4.D0*CHI1+WAER(1)-ROOT3)
3168          DD =-0.25D0*(CHI1*(WAER(1)-ROOT3)**2.D0 - A5) 
3169          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
3170          IF (ISLV.NE.0) ROOT1 = TINY
3171          ROOT1 = MIN (MAX(ROOT1,ZERO), MAX(WAER(1)-ROOT3,ZERO),  &
3172                       CHI1, WAER(2))
3173          PSI1  = CHI1-ROOT1
3174       ENDIF
3175       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
3176       PSI1O   = PSI1
3178 !C ION CONCENTRATIONS
3180       NAI = WAER(1) - (2.D0*ROOT1 + ROOT3)
3181       SO4I= WAER(2) - ROOT1
3182       NH4I= WAER(3) - ROOT2
3183       CLI = WAER(5) - (ROOT3 + ROOT2)
3184       NO3I= WAER(4)
3186 !C SODIUM CHLORIDE  ; To obtain new value for ROOT3
3188       IF (NAI*CLI .GT. A8) THEN
3189          BB    =-((CHI1-2.D0*ROOT1) + (WAER(5) - ROOT2))
3190          CC    = (CHI1-2.D0*ROOT1)*(WAER(5) - ROOT2) - A8
3191          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
3192          ROOT3A= 0.5D0*(-BB-SQRT(DD)) 
3193          ROOT3B= 0.5D0*(-BB+SQRT(DD)) 
3194          IF (ZERO.LE.ROOT3A) THEN
3195             ROOT3 = ROOT3A
3196          ELSE
3197             ROOT3 = ROOT3B
3198          ENDIF
3199          ROOT3   = MIN(MAX(ROOT3, ZERO), CHI3)
3200          PSI3    = CHI3-ROOT3
3201       ENDIF
3202       PSCONV3 = ABS(PSI3-PSI3O) .LE. EPS*PSI3O
3203       PSI3O   = PSI3
3205 !C SOLUTION ACIDIC OR BASIC?
3207       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
3208       IF (GG.GT.TINY) THEN                        ! H+ in excess
3209          BB =-GG
3210          CC =-AKW
3211          DD = BB*BB - 4.D0*CC
3212          HI = 0.5D0*(-BB + SQRT(DD))
3213          OHI= AKW/HI
3214       ELSE                                        ! OH- in excess
3215          BB = GG
3216          CC =-AKW
3217          DD = BB*BB - 4.D0*CC
3218          OHI= 0.5D0*(-BB + SQRT(DD))
3219          HI = AKW/OHI
3220       ENDIF
3222 !C UNDISSOCIATED SPECIES EQUILIBRIA
3224       IF (HI.LT.OHI) THEN
3225          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
3226          HI    = AKW/OHI
3227       ELSE
3228          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
3229          GGCL  = MAX(GG-GGNO3, ZERO)
3230          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
3231          IF (GGNO3.GT.TINY) THEN
3232             IF (GGCL.LE.TINY) HI = ZERO
3233             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
3234          ENDIF
3236 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
3238          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
3239          SO4I  = SO4I  - DEL
3240          HI    = HI    - DEL
3241          HSO4I = DEL
3242          OHI   = AKW/HI
3243       ENDIF
3245 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
3247       MOLAL(1) = HI
3248       MOLAL(2) = NAI
3249       MOLAL(3) = NH4I
3250       MOLAL(4) = CLI
3251       MOLAL(5) = SO4I
3252       MOLAL(6) = HSO4I
3253       MOLAL(7) = NO3I
3255 !C *** CALCULATE WATER **************************************************
3257       CALL CALCMR2p1
3259 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
3261       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
3262          CALL CALCACT2p1
3263       ELSE
3264          IF (PSCONV1.AND.PSCONV3.AND.PSCONV4) GOTO 20
3265       ENDIF
3266 10    CONTINUE
3267 !ccc      CALL PUSHERR (0002, 'CALCR3A')    ! WARNING ERROR: NO CONVERGENCE
3268 !C 
3269 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
3271 20    IF (CLI.LE.TINY .AND. WAER(5).GT.TINY) THEN !No disslv Cl-;solid only
3272          DO 30 I=1,NIONS
3273             MOLAL(I) = ZERO
3274 30       CONTINUE
3275          DO 40 I=1,NGASAQ
3276             GASAQ(I) = ZERO
3277 40       CONTINUE
3278          CALL CALCR1A2p1
3279       ELSE
3280          A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
3281          A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
3282          A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
3284          GNH3    = NH4I/HI/A2
3285          GHNO3   = HI*NO3I/A3
3286          GHCL    = HI*CLI /A4
3288          GASAQ(1)= NH3AQ
3289          GASAQ(2)= CLAQ
3290          GASAQ(3)= NO3AQ
3292          CNH42S4 = ZERO
3293          CNH4NO3 = ZERO
3294          CNH4CL  = CHI4 - PSI4
3295          CNACL   = CHI3 - PSI3
3296          CNANO3  = ZERO
3297          CNA2SO4 = CHI1 - PSI1
3298       ENDIF
3300       RETURN
3302 !C *** END OF SUBROUTINE CALCR3A *****************************************
3304       END
3305 !C=======================================================================
3307 !C *** ISORROPIA CODE
3308 !C *** SUBROUTINE CALCR2
3309 !C *** CASE R2
3311 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3312 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
3313 !C     2. SOLID AEROSOL ONLY
3314 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, NA2SO4, NANO3, NACL
3316 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3317 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3318 !C *** WRITTEN BY ATHANASIOS NENES
3320 !C=======================================================================
3322       SUBROUTINE CALCR22p1
3323       INCLUDE 'module_isrpia_inc.F'
3324       LOGICAL  EXAN, EXAC, EXSN, EXSC
3325       EXTERNAL CALCR1A2p1, CALCR3A2p1, CALCR4A2p1, CALCR52p1
3327 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
3329       SCASE = 'R2 ; SUBCASE 2'  
3330       CALL CALCR1A2p1              ! SOLID
3331       SCASE = 'R2 ; SUBCASE 2'
3332 !C     
3333       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
3334       EXAC = CNH4CL .GT.TINY    ! NH4CL
3335       EXSN = CNANO3 .GT.TINY    ! NANO3
3336       EXSC = CNACL  .GT.TINY    ! NACL
3338 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
3340       IF (EXAN) THEN                             ! *** NH4NO3 EXISTS
3341          IF (RH.GE.DRMH1) THEN    
3342             SCASE = 'R2 ; SUBCASE 1' 
3343             CALL CALCR2A2p1
3344             SCASE = 'R2 ; SUBCASE 1'
3345          ENDIF
3347       ELSE IF (.NOT.EXAN) THEN                   ! *** NH4NO3 = 0
3348          IF      (     EXAC .AND.      EXSN .AND.      EXSC) THEN
3349             IF (RH.GE.DRMH2) THEN    
3350                SCASE = 'R2 ; SUBCASE 3'  
3351                CALL CALCMDRP2p1 (RH, DRMH2, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3352                SCASE = 'R2 ; SUBCASE 3'
3353             ENDIF
3355          ELSE IF (.NOT.EXAC .AND.      EXSN .AND.      EXSC) THEN
3356             IF (RH.GE.DRMR1) THEN    
3357                SCASE = 'R2 ; SUBCASE 4'  
3358                CALL CALCMDRP2p1 (RH, DRMR1, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3359                SCASE = 'R2 ; SUBCASE 4'
3360             ENDIF
3362          ELSE IF (.NOT.EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
3363             IF (RH.GE.DRMR2) THEN    
3364                SCASE = 'R2 ; SUBCASE 5'  
3365                CALL CALCMDRP2p1 (RH, DRMR2, DRNACL, CALCR1A2p1, CALCR4A2p1)
3366                SCASE = 'R2 ; SUBCASE 5'
3367             ENDIF
3369          ELSE IF (.NOT.EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
3370             IF (RH.GE.DRMR3) THEN    
3371                SCASE = 'R2 ; SUBCASE 6'  
3372                CALL CALCMDRP2p1 (RH, DRMR3, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3373                SCASE = 'R2 ; SUBCASE 6'
3374             ENDIF
3376          ELSE IF (     EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
3377             IF (RH.GE.DRMR4) THEN    
3378                SCASE = 'R2 ; SUBCASE 7'  
3379                CALL CALCMDRP2p1 (RH, DRMR4, DRNACL, CALCR1A2p1, CALCR4A2p1)
3380                SCASE = 'R2 ; SUBCASE 7'
3381             ENDIF
3383          ELSE IF (     EXAC .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
3384             IF (RH.GE.DRMR5) THEN    
3385                SCASE = 'R2 ; SUBCASE 8'  
3386                CALL CALCMDRP2p1 (RH, DRMR5, DRNH4CL, CALCR1A2p1, CALCR52p1)
3387                SCASE = 'R2 ; SUBCASE 8'
3388             ENDIF
3390          ELSE IF (     EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
3391             IF (RH.GE.DRMR6) THEN    
3392                SCASE = 'R2 ; SUBCASE 9'  
3393                CALL CALCMDRP2p1 (RH, DRMR6, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3394                SCASE = 'R2 ; SUBCASE 9'
3395             ENDIF
3396          ENDIF
3398       ENDIF
3399 !C 
3400       RETURN
3402 !C *** END OF SUBROUTINE CALCR2 ******************************************
3404       END
3407 !C=======================================================================
3409 !C *** ISORROPIA CODE
3410 !C *** SUBROUTINE CALCR2A
3411 !C *** CASE R2A
3413 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3414 !C     1. SULFATE POOR (SULRAT > 2.0); SODIUM RICH (SODRAT >= 2.0)
3415 !C     2. LIQUID AND SOLID PHASES ARE POSSIBLE
3417 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3418 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3419 !C *** WRITTEN BY ATHANASIOS NENES
3421 !C=======================================================================
3423       SUBROUTINE CALCR2A2p1
3424       INCLUDE 'module_isrpia_inc.F'
3426       LOGICAL PSCONV1, PSCONV2, PSCONV3, PSCONV4
3427       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ
3429       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
3430                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
3431                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
3432                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
3433                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
3434                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
3436 !C *** SETUP PARAMETERS ************************************************
3438       FRST    =.TRUE.
3439       CALAIN  =.TRUE. 
3440       CALAOU  =.TRUE.
3441 !C 
3442       PSCONV1 =.TRUE.
3443       PSCONV2 =.TRUE.
3444       PSCONV3 =.TRUE.
3445       PSCONV4 =.TRUE.
3447       PSI1O   =-GREAT
3448       PSI2O   =-GREAT
3449       PSI3O   =-GREAT
3450       PSI4O   =-GREAT
3452       ROOT1   = ZERO
3453       ROOT2   = ZERO
3454       ROOT3   = ZERO
3455       ROOT4   = ZERO
3457 !C *** CALCULATE INITIAL SOLUTION ***************************************
3459       CALL CALCR1A2p1
3461       CHI1   = CNA2SO4      ! SALTS
3462       CHI2   = CNANO3
3463       CHI3   = CNACL
3464       CHI4   = CNH4CL
3466       PSI1   = CNA2SO4
3467       PSI2   = CNANO3
3468       PSI3   = CNACL
3469       PSI4   = CNH4CL
3470       PSI5   = CNH4NO3
3472       CALL CALCMR2p1           ! WATER
3474       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
3475       SO4I   = WAER(2)
3476       NH4I   = WAER(3)
3477       NO3I   = WAER(4)
3478       CLI    = WAER(5)
3479       HSO4I  = ZERO
3480       NH3AQ  = ZERO
3481       NO3AQ  = ZERO
3482       CLAQ   = ZERO
3484       MOLAL(1) = ZERO
3485       MOLAL(2) = NAI
3486       MOLAL(3) = NH4I
3487       MOLAL(4) = CLI
3488       MOLAL(5) = SO4I
3489       MOLAL(6) = HSO4I
3490       MOLAL(7) = NO3I
3492       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
3494 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
3496       DO 10 I=1,NSWEEP
3497       A5  = XK5 *(WATER/GAMA(2))**3.                  ! Na2SO4 <==> Na+
3498       A8  = XK8 *(WATER/GAMA(1))**2.                  ! NaCl   <==> Na+
3499       A9  = XK9 *(WATER/GAMA(3))**2.                  ! NaNO3  <==> Na+
3500       A14 = XK14*(WATER/GAMA(6))**2.                  ! NH4Cl  <==> NH4+
3501       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+
3503 !C AMMONIUM CHLORIDE
3505       IF (NH4I*CLI .GT. A14) THEN
3506          BB    =-(WAER(3) + WAER(5) - ROOT3)
3507          CC    = NH4I*(WAER(5) - ROOT3) - A14
3508          DD    = MAX(BB*BB - 4.D0*CC, ZERO)
3509          DD    = SQRT(DD)
3510          ROOT2A= 0.5D0*(-BB+DD)  
3511          ROOT2B= 0.5D0*(-BB-DD)  
3512          IF (ZERO.LE.ROOT2A) THEN
3513             ROOT2 = ROOT2A
3514          ELSE
3515             ROOT2 = ROOT2B
3516          ENDIF
3517          ROOT2 = MIN(MAX(ROOT2, ZERO), CHI4)
3518          PSI4  = CHI4 - ROOT2
3519       ENDIF
3520       PSCONV4 = ABS(PSI4-PSI4O) .LE. EPS*PSI4O
3521       PSI4O   = PSI4
3523 !C SODIUM SULFATE
3525       IF (NAI*NAI*SO4I .GT. A5) THEN
3526          BB =-(WAER(2) + WAER(1) - ROOT3 - ROOT4)
3527          CC = WAER(1)*(2.D0*ROOT3 + 2.D0*ROOT4 - 4.D0*WAER(2) - ONE) &
3528              -(ROOT3 + ROOT4)**2.0 + 4.D0*WAER(2)*(ROOT3 + ROOT4)
3529          CC =-0.25*CC
3530          DD = WAER(1)*WAER(2)*(ONE - 2.D0*ROOT3 - 2.D0*ROOT4) + &
3531               WAER(2)*(ROOT3 + ROOT4)**2.0 - A5
3532          DD =-0.25*DD
3533          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
3534          IF (ISLV.NE.0) ROOT1 = TINY
3535          ROOT1 = MIN (MAX(ROOT1,ZERO), CHI1)
3536          PSI1  = CHI1-ROOT1
3537       ENDIF
3538       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
3539       PSI1O   = PSI1
3541 !C SODIUM NITRATE
3543       IF (NAI*NO3I .GT. A9) THEN
3544          BB    =-(WAER(4) + WAER(1) - 2.D0*ROOT1 - ROOT3)
3545          CC    = WAER(4)*(WAER(1) - 2.D0*ROOT1 - ROOT3) - A9
3546          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
3547          ROOT4A= 0.5D0*(-BB-DD) 
3548          ROOT4B= 0.5D0*(-BB+DD) 
3549          IF (ZERO.LE.ROOT4A) THEN
3550             ROOT4 = ROOT4A
3551          ELSE
3552             ROOT4 = ROOT4B
3553          ENDIF
3554          ROOT4 = MIN(MAX(ROOT4, ZERO), CHI2)
3555          PSI2  = CHI2-ROOT4
3556       ENDIF
3557       PSCONV2 = ABS(PSI2-PSI2O) .LE. EPS*PSI2O
3558       PSI2O   = PSI2
3560 !C ION CONCENTRATIONS
3562       NAI = WAER(1) - (2.D0*ROOT1 + ROOT3 + ROOT4)
3563       SO4I= WAER(2) - ROOT1
3564       NH4I= WAER(3) - ROOT2
3565       NO3I= WAER(4) - ROOT4
3566       CLI = WAER(5) - (ROOT3 + ROOT2)
3568 !C SODIUM CHLORIDE  ; To obtain new value for ROOT3
3570       IF (NAI*CLI .GT. A8) THEN
3571          BB    =-(WAER(1) - 2.D0*ROOT1 + WAER(5) - ROOT2 - ROOT4)
3572          CC    = (WAER(5) + ROOT2)*(WAER(1) - 2.D0*ROOT1 - ROOT4) - A8
3573          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
3574          ROOT3A= 0.5D0*(-BB-DD) 
3575          ROOT3B= 0.5D0*(-BB+DD) 
3576          IF (ZERO.LE.ROOT3A) THEN
3577             ROOT3 = ROOT3A
3578          ELSE
3579             ROOT3 = ROOT3B
3580          ENDIF
3581          ROOT3   = MIN(MAX(ROOT3, ZERO), CHI3)
3582          PSI3    = CHI3-ROOT3
3583       ENDIF
3584       PSCONV3 = ABS(PSI3-PSI3O) .LE. EPS*PSI3O
3585       PSI3O   = PSI3
3587 !C SOLUTION ACIDIC OR BASIC?
3589       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I
3590       IF (GG.GT.TINY) THEN                        ! H+ in excess
3591          BB =-GG
3592          CC =-AKW
3593          DD = BB*BB - 4.D0*CC
3594          HI = 0.5D0*(-BB + SQRT(DD))
3595          OHI= AKW/HI
3596       ELSE                                        ! OH- in excess
3597          BB = GG
3598          CC =-AKW
3599          DD = BB*BB - 4.D0*CC
3600          OHI= 0.5D0*(-BB + SQRT(DD))
3601          HI = AKW/OHI
3602       ENDIF
3604 !C UNDISSOCIATED SPECIES EQUILIBRIA
3606       IF (HI.LT.OHI) THEN
3607          CALL CALCAMAQ22p1 (-GG, NH4I, OHI, NH3AQ)
3608          HI    = AKW/OHI
3609       ELSE
3610          GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I, ZERO)
3611          GGCL  = MAX(GG-GGNO3, ZERO)
3612          IF (GGCL .GT.TINY) CALL CALCCLAQ22p1 (GGCL, CLI, HI, CLAQ) ! HCl
3613          IF (GGNO3.GT.TINY) THEN
3614             IF (GGCL.LE.TINY) HI = ZERO
3615             CALL CALCNIAQ22p1 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
3616          ENDIF
3618 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
3620          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
3621          SO4I  = SO4I  - DEL
3622          HI    = HI    - DEL
3623          HSO4I = DEL
3624          OHI   = AKW/HI
3625       ENDIF
3627 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
3629       MOLAL(1) = HI
3630       MOLAL(2) = NAI
3631       MOLAL(3) = NH4I
3632       MOLAL(4) = CLI
3633       MOLAL(5) = SO4I
3634       MOLAL(6) = HSO4I
3635       MOLAL(7) = NO3I
3637 !C *** CALCULATE WATER **************************************************
3639       CALL CALCMR2p1
3641 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
3643       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
3644          CALL CALCACT2p1
3645       ELSE
3646          IF (PSCONV1.AND.PSCONV2.AND.PSCONV3.AND.PSCONV4) GOTO 20
3647       ENDIF      
3648 10    CONTINUE
3649 !ccc      CALL PUSHERR (0002, 'CALCR2A')    ! WARNING ERROR: NO CONVERGENCE
3650 !C 
3651 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
3653 20    IF (CLI.LE.TINY .AND. WAER(5).GT.TINY) THEN !No disslv Cl-;solid only
3654          DO 30 I=1,NIONS
3655             MOLAL(I) = ZERO
3656 30       CONTINUE
3657          DO 40 I=1,NGASAQ
3658             GASAQ(I) = ZERO
3659 40       CONTINUE
3660          CALL CALCR1A2p1
3661       ELSE                                     ! OK, aqueous phase present
3662          A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
3663          A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
3664          A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
3666          GNH3    = NH4I/HI/A2
3667          GHNO3   = HI*NO3I/A3
3668          GHCL    = HI*CLI /A4
3670          GASAQ(1)= NH3AQ
3671          GASAQ(2)= CLAQ
3672          GASAQ(3)= NO3AQ
3674          CNH42S4 = ZERO
3675          CNH4NO3 = ZERO
3676          CNH4CL  = CHI4 - PSI4
3677          CNACL   = CHI3 - PSI3
3678          CNANO3  = CHI2 - PSI2
3679          CNA2SO4 = CHI1 - PSI1
3680       ENDIF
3682       RETURN
3684 !C *** END OF SUBROUTINE CALCR2A *****************************************
3686       END
3687 !C=======================================================================
3689 !C *** ISORROPIA CODE
3690 !C *** SUBROUTINE CALCR1
3691 !C *** CASE R1
3693 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3694 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
3695 !C     2. SOLID AEROSOL ONLY
3696 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, NA2SO4, NANO3, NACL
3698 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3699 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3700 !C *** WRITTEN BY ATHANASIOS NENES
3702 !C=======================================================================
3704       SUBROUTINE CALCR12p1
3705       INCLUDE 'module_isrpia_inc.F'
3706       LOGICAL  EXAN, EXAC, EXSN, EXSC
3707       EXTERNAL CALCR1A2p1, CALCR2A2p1, CALCR3A2p1, CALCR4A2p1, CALCR52p1
3709 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
3711       SCASE = 'R1 ; SUBCASE 1'  
3712       CALL CALCR1A2p1              ! SOLID
3713       SCASE = 'R1 ; SUBCASE 1'
3714 !C     
3715       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
3716       EXAC = CNH4CL .GT.TINY    ! NH4CL
3717       EXSN = CNANO3 .GT.TINY    ! NANO3
3718       EXSC = CNACL  .GT.TINY    ! NACL
3720 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
3722       IF (EXAN.AND.EXAC.AND.EXSC.AND.EXSN) THEN  ! *** ALL EXIST
3723          IF (RH.GE.DRMH1) THEN    
3724             SCASE = 'R1 ; SUBCASE 2'  ! MDRH
3725             CALL CALCMDRP2p1 (RH, DRMH1, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3726             SCASE = 'R1 ; SUBCASE 2'
3727          ENDIF
3729       ELSE IF (.NOT.EXAN) THEN                   ! *** NH4NO3 = 0
3730          IF      (     EXAC .AND.      EXSN .AND.      EXSC) THEN
3731             IF (RH.GE.DRMH2) THEN    
3732                SCASE = 'R1 ; SUBCASE 3'  
3733                CALL CALCMDRP2p1 (RH, DRMH2, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3734                SCASE = 'R1 ; SUBCASE 3'
3735             ENDIF
3737          ELSE IF (.NOT.EXAC .AND.      EXSN .AND.      EXSC) THEN
3738             IF (RH.GE.DRMR1) THEN    
3739                SCASE = 'R1 ; SUBCASE 4'  
3740                CALL CALCMDRP2p1 (RH, DRMR1, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3741                SCASE = 'R1 ; SUBCASE 4'
3742             ENDIF
3744          ELSE IF (.NOT.EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
3745             IF (RH.GE.DRMR2) THEN    
3746                SCASE = 'R1 ; SUBCASE 5'  
3747                CALL CALCMDRP2p1 (RH, DRMR2, DRNACL, CALCR1A2p1, CALCR3A2p1) !, CALCR4A)
3748                SCASE = 'R1 ; SUBCASE 5'
3749             ENDIF
3751          ELSE IF (.NOT.EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
3752             IF (RH.GE.DRMR3) THEN    
3753                SCASE = 'R1 ; SUBCASE 6'  
3754                CALL CALCMDRP2p1 (RH, DRMR3, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3755                SCASE = 'R1 ; SUBCASE 6'
3756             ENDIF
3758          ELSE IF (     EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
3759             IF (RH.GE.DRMR4) THEN    
3760                SCASE = 'R1 ; SUBCASE 7'  
3761                CALL CALCMDRP2p1 (RH, DRMR4, DRNACL, CALCR1A2p1, CALCR3A2p1) !, CALCR4A)
3762                SCASE = 'R1 ; SUBCASE 7'
3763             ENDIF
3765          ELSE IF (     EXAC .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
3766             IF (RH.GE.DRMR5) THEN    
3767                SCASE = 'R1 ; SUBCASE 8'  
3768                CALL CALCMDRP2p1 (RH, DRMR5, DRNH4CL, CALCR1A2p1, CALCR3A2p1) !, CALCR5)
3769                SCASE = 'R1 ; SUBCASE 8'
3770             ENDIF
3772          ELSE IF (     EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
3773             IF (RH.GE.DRMR6) THEN    
3774                SCASE = 'R1 ; SUBCASE 9'  
3775                CALL CALCMDRP2p1 (RH, DRMR6, DRNANO3, CALCR1A2p1, CALCR3A2p1)
3776                SCASE = 'R1 ; SUBCASE 9'
3777             ENDIF
3778          ENDIF
3780       ELSE IF (.NOT.EXAC) THEN                   ! *** NH4CL  = 0
3781          IF      (     EXAN .AND.      EXSN .AND.      EXSC) THEN
3782             IF (RH.GE.DRMR7) THEN    
3783                SCASE = 'R1 ; SUBCASE 10'  
3784                CALL CALCMDRP2p1 (RH, DRMR7, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3785                SCASE = 'R1 ; SUBCASE 10'
3786             ENDIF
3788          ELSE IF (     EXAN .AND. .NOT.EXSN .AND.      EXSC) THEN
3789             IF (RH.GE.DRMR8) THEN    
3790                SCASE = 'R1 ; SUBCASE 11'  
3791                CALL CALCMDRP2p1 (RH, DRMR8, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3792                SCASE = 'R1 ; SUBCASE 11'
3793             ENDIF
3795          ELSE IF (     EXAN .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
3796             IF (RH.GE.DRMR9) THEN    
3797                SCASE = 'R1 ; SUBCASE 12'  
3798                CALL CALCMDRP2p1 (RH, DRMR9, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3799                SCASE = 'R1 ; SUBCASE 12'
3800             ENDIF
3802          ELSE IF (     EXAN .AND.      EXSN .AND. .NOT.EXSC) THEN
3803             IF (RH.GE.DRMR10) THEN    
3804                SCASE = 'R1 ; SUBCASE 13'  
3805                CALL CALCMDRP2p1 (RH, DRMR10, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3806                SCASE = 'R1 ; SUBCASE 13'
3807             ENDIF
3808          ENDIF
3810       ELSE IF (.NOT.EXSN) THEN                  ! *** NANO3  = 0
3811          IF      (     EXAN .AND.      EXAC .AND.      EXSC) THEN
3812             IF (RH.GE.DRMR11) THEN    
3813                SCASE = 'R1 ; SUBCASE 14'  
3814                CALL CALCMDRP2p1 (RH, DRMR11, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3815                SCASE = 'R1 ; SUBCASE 14'
3816             ENDIF
3818          ELSE IF (     EXAN .AND.      EXAC .AND. .NOT.EXSC) THEN
3819             IF (RH.GE.DRMR12) THEN    
3820                SCASE = 'R1 ; SUBCASE 15'  
3821                CALL CALCMDRP2p1 (RH, DRMR12, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3822                SCASE = 'R1 ; SUBCASE 15'
3823             ENDIF
3824          ENDIF
3826       ELSE IF (.NOT.EXSC) THEN                  ! *** NACL   = 0
3827          IF      (     EXAN .AND.      EXAC .AND.      EXSN) THEN
3828             IF (RH.GE.DRMR13) THEN    
3829                SCASE = 'R1 ; SUBCASE 16'  
3830                CALL CALCMDRP2p1 (RH, DRMR13, DRNH4NO3, CALCR1A2p1, CALCR2A2p1)
3831                SCASE = 'R1 ; SUBCASE 16'
3832             ENDIF
3833          ENDIF
3834       ENDIF
3835 !C 
3836       RETURN
3838 !C *** END OF SUBROUTINE CALCR1 ******************************************
3840       END
3843 !C=======================================================================
3845 !C *** ISORROPIA CODE
3846 !C *** SUBROUTINE CALCR1A
3847 !C *** CASE R1 ; SUBCASE 1
3849 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3850 !C     1. SULFATE POOR (SULRAT > 2.0) ; SODIUM RICH (SODRAT >= 2.0)
3851 !C     2. SOLID AEROSOL ONLY
3852 !C     3. SOLIDS POSSIBLE : NH4NO3, NH4CL, NANO3, NA2SO4, NANO3, NACL
3854 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3855 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3856 !C *** WRITTEN BY ATHANASIOS NENES
3858 !C=======================================================================
3860       SUBROUTINE CALCR1A2p1
3861       INCLUDE 'module_isrpia_inc.F'
3863 !C *** CALCULATE SOLIDS **************************************************
3865       CNA2SO4 = WAER(2)
3866       FRNA    = MAX (WAER(1)-2*CNA2SO4, ZERO)
3868       CNH42S4 = ZERO
3870       CNANO3  = MIN (FRNA, WAER(4))
3871       FRNO3   = MAX (WAER(4)-CNANO3, ZERO)
3872       FRNA    = MAX (FRNA-CNANO3, ZERO)
3874       CNACL   = MIN (FRNA, WAER(5))
3875       FRCL    = MAX (WAER(5)-CNACL, ZERO)
3876       FRNA    = MAX (FRNA-CNACL, ZERO)
3878       CNH4NO3 = MIN (FRNO3, WAER(3))
3879       FRNO3   = MAX (FRNO3-CNH4NO3, ZERO)
3880       FRNH3   = MAX (WAER(3)-CNH4NO3, ZERO)
3882       CNH4CL  = MIN (FRCL, FRNH3)
3883       FRCL    = MAX (FRCL-CNH4CL, ZERO)
3884       FRNH3   = MAX (FRNH3-CNH4CL, ZERO)
3886 !C *** OTHER PHASES ******************************************************
3888       WATER   = ZERO
3890       GNH3    = ZERO
3891       GHNO3   = ZERO
3892       GHCL    = ZERO
3894       RETURN
3896 !C *** END OF SUBROUTINE CALCR1A *****************************************
3898       END
3899 !C=======================================================================
3901 !C *** ISORROPIA CODE II
3902 !C *** SUBROUTINE CALCV7
3903 !C *** CASE V7
3905 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
3906 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
3908 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
3909 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
3910 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
3912 !C=======================================================================
3914       SUBROUTINE CALCV72p1
3915       INCLUDE 'module_isrpia_inc.F'
3917       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
3919       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,       &
3920                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,       &
3921                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,     &
3922                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,         &
3923                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,   &
3924                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
3926 !C *** SETUP PARAMETERS ************************************************
3928       FRST    =.TRUE.
3929       CALAIN  =.TRUE.
3930       CALAOU  =.TRUE.
3932 !C *** CALCULATE INITIAL SOLUTION ***************************************
3934       CALL CALCV1A2p1
3936       CHI9   = CCASO4
3938       PSI1   = CNA2SO4      ! SALTS DISSOLVED
3939       PSI4   = CNH4CL
3940       PSI5   = CNH4NO3
3941       PSI6   = CNH42S4
3942       PSI7   = CK2SO4
3943       PSI8   = CMGSO4
3944       PSI9   = CCASO4
3946       CALL CALCMR2p1           ! WATER
3948       NH3AQ  = ZERO
3949       NO3AQ  = ZERO
3950       CLAQ   = ZERO
3952 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
3954       DO 10 I=1,NSWEEP
3956       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
3958 !C ION CONCENTRATIONS
3960       NAI    = WAER(1)
3961       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
3962       NH4I   = WAER(3)
3963       NO3I   = WAER(4)
3964       CLI    = WAER(5)
3965       CAI    = ZERO
3966       KI     = WAER(7)
3967       MGI    = WAER(8)
3969 !C SOLUTION ACIDIC OR BASIC?
3971       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
3972              - 2.D0*CAI - KI - 2.D0*MGI
3973       IF (GG.GT.TINY) THEN                    ! H+ in excess
3974          BB =-GG
3975          CC =-AKW
3976          DD = BB*BB - 4.D0*CC
3977          HI = 0.5D0*(-BB + SQRT(DD))
3978          OHI= AKW/HI
3979       ELSE                                     ! OH- in excess
3980          BB = GG
3981          CC =-AKW
3982          DD = BB*BB - 4.D0*CC
3983          OHI= 0.5D0*(-BB + SQRT(DD))
3984          HI = AKW/OHI
3985       ENDIF
3988 !C UNDISSOCIATED SPECIES EQUILIBRIA
3990       IF (HI.GT.OHI) THEN
3991 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
3992 !C         HI    = AKW/OHI
3993 !C         HSO4I = ZERO
3994 !C      ELSE
3995 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
3996 !C     &           - KI - 2.D0*MGI, ZERO)
3997 !C         GGCL  = MAX(GG-GGNO3, ZERO)
3998 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
3999 !C         IF (GGNO3.GT.TINY) THEN
4000 !C            IF (GGCL.LE.TINY) HI = ZERO
4001 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
4002 !C         ENDIF
4004 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
4006          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
4007       else
4008         del= zero
4009       ENDIF
4010       SO4I  = SO4I  - DEL
4011       HI    = HI    - DEL
4012       HSO4I = DEL
4013 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
4014       OHI   = AKW/HI
4016       IF (HI.LE.TINY) THEN
4017       HI = SQRT(AKW)
4018       OHI   = AKW/HI
4019       ENDIF
4021 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
4023       MOLAL(1) = HI
4024       MOLAL(2) = NAI
4025       MOLAL(3) = NH4I
4026       MOLAL(4) = CLI
4027       MOLAL(5) = SO4I
4028       MOLAL(6) = HSO4I
4029       MOLAL(7) = NO3I
4030       MOLAL(8) = CAI
4031       MOLAL(9) = KI
4032       MOLAL(10)= MGI
4034 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
4036       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
4037          CALL CALCACT2p1
4038       ELSE
4039          GOTO 20
4040       ENDIF
4041 10    CONTINUE
4042 !ccc      CALL PUSHERR (0002, 'CALCV7')    ! WARNING ERROR: NO CONVERGENCE
4044 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
4046 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
4047       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
4048       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
4050       GNH3    = NH4I/HI/A2
4051       GHNO3   = HI*NO3I/A3
4052       GHCL    = HI*CLI /A4
4054       GASAQ(1)= NH3AQ
4055       GASAQ(2)= CLAQ
4056       GASAQ(3)= NO3AQ
4058       CNH42S4 = ZERO
4059       CNH4NO3 = ZERO
4060       CNH4CL  = ZERO
4061       CNA2SO4 = ZERO
4062       CMGSO4  = ZERO
4063       CK2SO4  = ZERO
4064       CCASO4  = MIN (WAER(6), WAER(2))
4066       RETURN
4068 !C *** END OF SUBROUTINE CALCV7 ******************************************
4070       END
4072 !C=======================================================================
4074 !C *** ISORROPIA CODE II
4075 !C *** SUBROUTINE CALCV6
4076 !C *** CASE V6
4078 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
4079 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
4080 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
4081 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4
4082 !C     4. Completely dissolved: NH4NO3, NH4CL, (NH4)2SO4, MGSO4, NA2SO4
4084 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
4085 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
4086 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
4088 !C=======================================================================
4090       SUBROUTINE CALCV62p1
4091       INCLUDE 'module_isrpia_inc.F'
4093       LOGICAL PSCONV7
4094       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
4096       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
4097                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
4098                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
4099                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
4100                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
4101                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
4103 !C *** SETUP PARAMETERS ************************************************
4105       FRST    =.TRUE.
4106       CALAIN  =.TRUE.
4107       CALAOU  =.TRUE.
4109       PSCONV7 =.TRUE.
4110       PSI70   =-GREAT                                 ! GREAT = 1.D10
4111       ROOT7   = ZERO
4113 !C *** CALCULATE INITIAL SOLUTION ***************************************
4115       CALL CALCV1A2p1
4117       CHI9   = CCASO4
4118       CHI7   = CK2SO4       ! SALTS
4120       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
4121       PSI4   = CNH4CL
4122       PSI5   = CNH4NO3
4123       PSI6   = CNH42S4
4124       PSI7   = CK2SO4
4125       PSI8   = CMGSO4
4126       PSI9   = CCASO4
4128       CALL CALCMR2p1           ! WATER
4130       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
4131       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
4132       NH4I   = WAER(3)
4133       NO3I   = WAER(4)
4134       CLI    = WAER(5)
4135       CAI    = WAER(6)
4136       KI     = WAER(7)
4137       MGI    = WAER(8)
4139       HSO4I  = ZERO
4140       NH3AQ  = ZERO
4141       NO3AQ  = ZERO
4142       CLAQ   = ZERO
4144 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
4146       DO 10 I=1,NSWEEP
4148       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
4149       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
4151 !C POTASSIUM SULFATE
4153       IF (KI*KI*SO4I .GT. A7) THEN
4154          BB =-((WAER(2)-WAER(6)) + WAER(7))
4155          CC = WAER(7)*(WAER(2)-WAER(6)) + 0.25D0*WAER(7)*WAER(7)
4156          DD =-0.25*(WAER(7)*WAER(7)*WAER(2) - A7)
4157          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
4158          IF (ISLV.NE.0) ROOT7 = TINY
4159          ROOT7 = MIN (ROOT7,WAER(7)/2.0,MAX(WAER(2)-WAER(6),ZERO),CHI7)
4160          ROOT7 = MAX (ROOT7, ZERO)
4161          PSI7  = CHI7-ROOT7
4162       ENDIF
4163       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
4164       PSI70   = PSI7
4166 !C ION CONCENTRATIONS ; CORRECTIONS
4168       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
4169       SO4I   = MAX (WAER(2)-WAER(6) - ROOT7, ZERO)
4170       NH4I   = WAER(3)
4171       NO3I   = WAER(4)
4172       CLI    = WAER(5)
4173       CAI    = ZERO
4174       NAI    = WAER(1)
4175       MGI    = WAER(8)
4177 !C SOLUTION ACIDIC OR BASIC?
4179       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
4180              - 2.D0*CAI - KI - 2.D0*MGI
4181       IF (GG.GT.TINY) THEN                        ! H+ in excess
4182          BB =-GG
4183          CC =-AKW
4184          DD = BB*BB - 4.D0*CC
4185          HI = 0.5D0*(-BB + SQRT(DD))
4186          OHI= AKW/HI
4187       ELSE                                        ! OH- in excess
4188          BB = GG
4189          CC =-AKW
4190          DD = BB*BB - 4.D0*CC
4191          OHI= 0.5D0*(-BB + SQRT(DD))
4192          HI = AKW/OHI
4193       ENDIF
4195 !C UNDISSOCIATED SPECIES EQUILIBRIA
4197       IF (HI.GT.OHI) THEN
4198 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
4199 !C         HI    = AKW/OHI
4200 !C         HSO4I = ZERO
4201 !C      ELSE
4202 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
4203 !C     &           - KI - 2.D0*MGI, ZERO)
4204 !C         GGCL  = MAX(GG-GGNO3, ZERO)
4205 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
4206 !C         IF (GGNO3.GT.TINY) THEN
4207 !C            IF (GGCL.LE.TINY) HI = ZERO
4208 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
4209 !C         ENDIF
4211 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
4213          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
4214       else
4215         del= zero
4216       ENDIF
4217       SO4I  = SO4I  - DEL
4218       HI    = HI    - DEL
4219       HSO4I = DEL
4220 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
4221       OHI   = AKW/HI
4223       IF (HI.LE.TINY) THEN
4224       HI = SQRT(AKW)
4225       OHI   = AKW/HI
4226       ENDIF
4228 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
4230       MOLAL(1) = HI
4231       MOLAL(2) = NAI
4232       MOLAL(3) = NH4I
4233       MOLAL(4) = CLI
4234       MOLAL(5) = SO4I
4235       MOLAL(6) = HSO4I
4236       MOLAL(7) = NO3I
4237       MOLAL(8) = CAI
4238       MOLAL(9) = KI
4239       MOLAL(10)= MGI
4241 !C *** CALCULATE WATER **************************************************
4243       CALL CALCMR2p1
4245 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
4247       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
4248          CALL CALCACT2p1
4249       ELSE
4250          IF (PSCONV7) GOTO 20
4251       ENDIF
4252 10    CONTINUE
4253 !ccc      CALL PUSHERR (0002, 'CALCV6')    ! WARNING ERROR: NO CONVERGENCE
4255 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
4257 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
4258       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
4259       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
4261       GNH3    = NH4I/HI/A2
4262       GHNO3   = HI*NO3I/A3
4263       GHCL    = HI*CLI /A4
4265       GASAQ(1)= NH3AQ
4266       GASAQ(2)= CLAQ
4267       GASAQ(3)= NO3AQ
4269       CNH42S4 = ZERO
4270       CNH4NO3 = ZERO
4271       CNH4CL  = ZERO
4272       CNA2SO4 = ZERO
4273       CMGSO4  = ZERO
4274       CK2SO4  = CHI7 - PSI7
4275       CCASO4  = MIN (WAER(6), WAER(2))
4277       RETURN
4279 !C *** END OF SUBROUTINE CALCV6 ******************************************
4281       END
4282 !C=======================================================================
4284 !C *** ISORROPIA CODE II
4285 !C *** SUBROUTINE CALCV5
4286 !C *** CASE V5
4288 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
4289 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
4290 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
4291 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4
4292 !C     4. Completely dissolved: NH4NO3, NH4CL, (NH4)2SO4, MGSO4
4294 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
4295 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
4296 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
4298 !C=======================================================================
4300       SUBROUTINE CALCV52p1
4301       INCLUDE 'module_isrpia_inc.F'
4303       LOGICAL PSCONV7, PSCONV1
4304       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
4306       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
4307                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
4308                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
4309                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
4310                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
4311                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
4313 !C *** SETUP PARAMETERS ************************************************
4315       FRST    =.TRUE.
4316       CALAIN  =.TRUE.
4317       CALAOU  =.TRUE.
4319       PSCONV7 =.TRUE.
4320       PSCONV1 =.TRUE.
4322       PSI70   =-GREAT                                 ! GREAT = 1.D10
4323       PSI1O   =-GREAT
4325       ROOT7   = ZERO
4326       ROOT1   = ZERO
4328 !C *** CALCULATE INITIAL SOLUTION ***************************************
4330       CALL CALCV1A2p1
4332       CHI9   = CCASO4
4333       CHI7   = CK2SO4       ! SALTS
4334       CHI1   = CNA2SO4
4336       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
4337       PSI4   = CNH4CL
4338       PSI5   = CNH4NO3
4339       PSI6   = CNH42S4
4340       PSI7   = CK2SO4
4341       PSI8   = CMGSO4
4342       PSI9   = CCASO4
4344       CALL CALCMR2p1           ! WATER
4346       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
4347       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
4348       NH4I   = WAER(3)
4349       NO3I   = WAER(4)
4350       CLI    = WAER(5)
4351       CAI    = WAER(6)
4352       KI     = WAER(7)
4353       MGI    = WAER(8)
4355       HSO4I  = ZERO
4356       NH3AQ  = ZERO
4357       NO3AQ  = ZERO
4358       CLAQ   = ZERO
4360 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
4362       DO 10 I=1,NSWEEP
4364       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
4365       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
4366       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
4368 !C POTASSIUM SULFATE
4370       IF (KI*KI*SO4I .GT. A7) THEN
4371          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
4372          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
4373          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
4374          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
4375          IF (ISLV.NE.0) ROOT7 = TINY
4376          ROOT7 = MAX (ROOT7, ZERO)
4377          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
4378                       MAX(WAER(2)-WAER(6) - ROOT1, ZERO), CHI7)
4379          PSI7  = CHI7-ROOT7
4380       ENDIF
4381       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
4382       PSI70   = PSI7
4384 !C SODIUM SULFATE
4386       IF (NAI*NAI*SO4I .GT. A1) THEN
4387          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7)
4388          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7) + 0.25*WAER(1)*WAER(1)
4389          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6)) - ROOT7) - A1)
4390          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
4391          IF (ISLV.NE.0) ROOT1 = TINY
4392          ROOT1 = MAX (ROOT1, ZERO)
4393          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
4394                  MAX ((WAER(2)-WAER(6)) - ROOT7, ZERO), CHI1)
4395          PSI1  = CHI1-ROOT1
4396       ENDIF
4397       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
4398       PSI1O   = PSI1
4400 !C ION CONCENTRATIONS ; CORRECTIONS
4402       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
4403       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
4404       SO4I   = MAX ((WAER(2)-WAER(6)) - ROOT7 - ROOT1, ZERO)
4405       NH4I   = WAER(3)
4406       NO3I   = WAER(4)
4407       CLI    = WAER(5)
4408       CAI    = ZERO
4409       MGI    = WAER(8)
4411 !C SOLUTION ACIDIC OR BASIC?
4413       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
4414              - 2.D0*CAI - KI - 2.D0*MGI
4415       IF (GG.GT.TINY) THEN                        ! H+ in excess
4416          BB =-GG
4417          CC =-AKW
4418          DD = BB*BB - 4.D0*CC
4419          HI = 0.5D0*(-BB + SQRT(DD))
4420          OHI= AKW/HI
4421       ELSE                                        ! OH- in excess
4422          BB = GG
4423          CC =-AKW
4424          DD = BB*BB - 4.D0*CC
4425          OHI= 0.5D0*(-BB + SQRT(DD))
4426          HI = AKW/OHI
4427       ENDIF
4429 !C UNDISSOCIATED SPECIES EQUILIBRIA
4431       IF (HI.GT.OHI) THEN
4432 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
4433 !C         HI    = AKW/OHI
4434 !C         HSO4I = ZERO
4435 !C      ELSE
4436 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
4437 !C     &           - KI - 2.D0*MGI, ZERO)
4438 !C         GGCL  = MAX(GG-GGNO3, ZERO)
4439 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
4440 !C         IF (GGNO3.GT.TINY) THEN
4441 !C            IF (GGCL.LE.TINY) HI = ZERO
4442 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
4443 !C         ENDIF
4445 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
4447          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
4448       else
4449         del= zero
4450       ENDIF
4451       SO4I  = SO4I  - DEL
4452       HI    = HI    - DEL
4453       HSO4I = DEL
4454 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
4455       OHI   = AKW/HI
4457       IF (HI.LE.TINY) THEN
4458       HI = SQRT(AKW)
4459       OHI   = AKW/HI
4460       ENDIF
4462 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
4464       MOLAL(1) = HI
4465       MOLAL(2) = NAI
4466       MOLAL(3) = NH4I
4467       MOLAL(4) = CLI
4468       MOLAL(5) = SO4I
4469       MOLAL(6) = HSO4I
4470       MOLAL(7) = NO3I
4471       MOLAL(8) = CAI
4472       MOLAL(9) = KI
4473       MOLAL(10)= MGI
4475 !C *** CALCULATE WATER **************************************************
4477       CALL CALCMR2p1
4479 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
4481       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
4482          CALL CALCACT2p1
4483       ELSE
4484          IF (PSCONV7 .AND. PSCONV1) GOTO 20
4485       ENDIF
4486 10    CONTINUE
4487 !ccc      CALL PUSHERR (0002, 'CALCV5')    ! WARNING ERROR: NO CONVERGENCE
4489 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
4491 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
4492       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
4493       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
4495       GNH3    = NH4I/HI/A2
4496       GHNO3   = HI*NO3I/A3
4497       GHCL    = HI*CLI /A4
4499       GASAQ(1)= NH3AQ
4500       GASAQ(2)= CLAQ
4501       GASAQ(3)= NO3AQ
4503       CNH42S4 = ZERO
4504       CNH4NO3 = ZERO
4505       CNH4CL  = ZERO
4506       CNA2SO4 = CHI1 - PSI1
4507       CMGSO4  = ZERO
4508       CK2SO4  = CHI7 - PSI7
4509       CCASO4  = MIN (WAER(6), WAER(2))
4511       RETURN
4513 !C *** END OF SUBROUTINE CALCV5******************************************
4515       END
4517 !C=======================================================================
4519 !C *** ISORROPIA CODE II
4520 !C *** SUBROUTINE CALCV4
4521 !C *** CASE V4
4523 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
4524 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
4525 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
4526 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4
4527 !C     4. Completely dissolved: NH4NO3, NH4CL, (NH4)2SO4
4529 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
4530 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
4531 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
4533 !C=======================================================================
4535       SUBROUTINE CALCV42p1
4536       INCLUDE 'module_isrpia_inc.F'
4538       LOGICAL PSCONV7, PSCONV1
4539       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
4541       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
4542                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
4543                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
4544                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
4545                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
4546                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
4548 !C *** SETUP PARAMETERS ************************************************
4550       FRST    =.TRUE.
4551       CALAIN  =.TRUE.
4552       CALAOU  =.TRUE.
4554       PSCONV7 =.TRUE.
4555       PSCONV1 =.TRUE.
4557       PSI70   =-GREAT                                 ! GREAT = 1.D10
4558       PSI1O   =-GREAT
4560       ROOT7   = ZERO
4561       ROOT1   = ZERO
4563 !C *** CALCULATE INITIAL SOLUTION ***************************************
4565       CALL CALCV1A2p1
4567       CHI9   = CCASO4
4568       CHI7   = CK2SO4       ! SALTS
4569       CHI1   = CNA2SO4
4570       CHI8   = CMGSO4
4572       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
4573       PSI4   = CNH4CL
4574       PSI5   = CNH4NO3
4575       PSI6   = CNH42S4
4576       PSI7   = CK2SO4
4577       PSI8   = CMGSO4
4578       PSI9   = CCASO4
4580       CALL CALCMR2p1           ! WATER
4582       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
4583       SO4I   = WAER(2)
4584       NH4I   = WAER(3)
4585       NO3I   = WAER(4)
4586       CLI    = WAER(5)
4587       CAI    = WAER(6)
4588       KI     = WAER(7)
4589       MGI    = WAER(8)
4591       HSO4I  = ZERO
4592       NH3AQ  = ZERO
4593       NO3AQ  = ZERO
4594       CLAQ   = ZERO
4596 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
4598       DO 10 I=1,NSWEEP
4600       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
4601       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
4602       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
4604 !C POTASSIUM SULFATE
4606       IF (KI*KI*SO4I .GT. A7) THEN
4607          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
4608          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
4609          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
4610          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
4611          IF (ISLV.NE.0) ROOT7 = TINY
4612          ROOT7 = MAX (ROOT7, ZERO)
4613          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
4614                       MAX((WAER(2)-WAER(6)) - ROOT1, ZERO), CHI7)
4615          PSI7  = CHI7-ROOT7
4616       ENDIF
4617       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
4618       PSI70   = PSI7
4620 !C SODIUM SULFATE
4622       IF (NAI*NAI*SO4I .GT. A1) THEN
4623          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7)
4624          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7) + 0.25*WAER(1)*WAER(1)
4625          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6)) - ROOT7) - A1)
4626          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
4627          IF (ISLV.NE.0) ROOT1 = TINY
4628          ROOT1 = MAX (ROOT1, ZERO)
4629          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
4630                  MAX ((WAER(2)-WAER(6)) - ROOT7, ZERO), CHI1)
4631          PSI1  = CHI1-ROOT1
4632       ENDIF
4633       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
4634       PSI1O   = PSI1
4636 !C ION CONCENTRATIONS ; CORRECTIONS
4638       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
4639       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
4640       SO4I   = MAX ((WAER(2)-WAER(6)) - ROOT7 - ROOT1, ZERO)
4641       NH4I   = WAER(3)
4642       NO3I   = WAER(4)
4643       CLI    = WAER(5)
4644       CAI    = ZERO
4645       MGI    = WAER(8)
4647 !C SOLUTION ACIDIC OR BASIC?
4649       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
4650              - 2.D0*CAI - KI - 2.D0*MGI
4651       IF (GG.GT.TINY) THEN                        ! H+ in excess
4652          BB =-GG
4653          CC =-AKW
4654          DD = BB*BB - 4.D0*CC
4655          HI = 0.5D0*(-BB + SQRT(DD))
4656          OHI= AKW/HI
4657       ELSE                                        ! OH- in excess
4658          BB = GG
4659          CC =-AKW
4660          DD = BB*BB - 4.D0*CC
4661          OHI= 0.5D0*(-BB + SQRT(DD))
4662          HI = AKW/OHI
4663       ENDIF
4665 !C UNDISSOCIATED SPECIES EQUILIBRIA
4667       IF (HI.GT.OHI) THEN
4668 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
4669 !C         HI    = AKW/OHI
4670 !C         HSO4I = ZERO
4671 !C      ELSE
4672 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
4673 !C     &           - KI - 2.D0*MGI, ZERO)
4674 !C         GGCL  = MAX(GG-GGNO3, ZERO)
4675 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
4676 !C         IF (GGNO3.GT.TINY) THEN
4677 !C            IF (GGCL.LE.TINY) HI = ZERO
4678 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
4679 !C         ENDIF
4681 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
4683          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
4684       else
4685         del= zero
4686       ENDIF
4687       SO4I  = SO4I  - DEL
4688       HI    = HI    - DEL
4689       HSO4I = DEL
4690 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
4691       OHI   = AKW/HI
4693       IF (HI.LE.TINY) THEN
4694       HI = SQRT(AKW)
4695       OHI   = AKW/HI
4696       ENDIF
4698 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
4700       MOLAL(1) = HI
4701       MOLAL(2) = NAI
4702       MOLAL(3) = NH4I
4703       MOLAL(4) = CLI
4704       MOLAL(5) = SO4I
4705       MOLAL(6) = HSO4I
4706       MOLAL(7) = NO3I
4707       MOLAL(8) = CAI
4708       MOLAL(9) = KI
4709       MOLAL(10)= MGI
4711 !C *** CALCULATE WATER **************************************************
4713       CALL CALCMR2p1
4715 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
4717       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
4718          CALL CALCACT2p1
4719       ELSE
4720          IF (PSCONV7 .AND. PSCONV1) GOTO 20
4721       ENDIF
4722 10    CONTINUE
4723 !ccc      CALL PUSHERR (0002, 'CALCV4')    ! WARNING ERROR: NO CONVERGENCE
4725 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
4727 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
4728       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
4729       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
4731       GNH3    = NH4I/HI/A2
4732       GHNO3   = HI*NO3I/A3
4733       GHCL    = HI*CLI /A4
4735       GASAQ(1)= NH3AQ
4736       GASAQ(2)= CLAQ
4737       GASAQ(3)= NO3AQ
4739       CNH42S4 = ZERO
4740       CNH4NO3 = ZERO
4741       CNH4CL  = ZERO
4742       CNA2SO4 = CHI1 - PSI1
4743       CMGSO4  = ZERO
4744       CK2SO4  = CHI7 - PSI7
4745       CCASO4  = MIN (WAER(6), WAER(2))
4747       RETURN
4749 !C *** END OF SUBROUTINE CALCV4******************************************
4751       END
4753 !C=======================================================================
4755 !C *** ISORROPIA CODE II
4756 !C *** SUBROUTINE CALCV3
4757 !C *** CASE V3
4759 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
4760 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
4761 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
4762 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, (NH4)2SO4
4764 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
4765 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
4766 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS AND ATHANASIOS NENES
4768 !C=======================================================================
4770       SUBROUTINE CALCV32p1
4771       INCLUDE 'module_isrpia_inc.F'
4772       LOGICAL EXNO, EXCL
4773       EXTERNAL CALCV1A2p1, CALCV42p1
4775 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
4777       EXNO = WAER(4).GT.TINY
4778       EXCL = WAER(5).GT.TINY
4780       IF (EXNO .OR. EXCL) THEN             ! *** NITRATE OR CHLORIDE EXISTS
4781          SCASE = 'V3 ; SUBCASE 1'
4782          CALL CALCV3A2p1
4783          SCASE = 'V3 ; SUBCASE 1'
4785       ELSE                                 ! *** NO CHLORIDE AND NITRATE
4786          IF (RH.LT.DRMO3) THEN
4787             SCASE = 'V3 ; SUBCASE 2'
4788             CALL CALCV1A2p1             ! SOLID
4789             SCASE = 'V3 ; SUBCASE 2'
4790          ELSE
4791             SCASE = 'V3 ; SUBCASE 3' ! MDRH (CaSO4, (NH4)2SO4, MGSO4, NA2SO4, K2SO4)
4792             CALL CALCMDRPII2p1 (RH, DRMO3, DRNH42S4, CALCV1A2p1, CALCV42p1)
4793             SCASE = 'V3 ; SUBCASE 3'
4794          ENDIF
4795       ENDIF
4797       RETURN
4799 !C *** END OF SUBROUTINE CALCV3 ******************************************
4801       END
4803 !C=======================================================================
4805 !C *** ISORROPIA CODE II
4806 !C *** SUBROUTINE CALCV3A
4807 !C *** CASE V3A
4809 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
4810 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
4811 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
4812 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, (NH4)2SO4
4813 !C     4. Completely dissolved: NH4NO3, NH4CL
4815 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
4816 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
4817 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
4819 !C=======================================================================
4821       SUBROUTINE CALCV3A2p1
4822       INCLUDE 'module_isrpia_inc.F'
4824       LOGICAL PSCONV7, PSCONV1, PSCONV6
4825       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
4827       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
4828                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
4829                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
4830                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
4831                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
4832                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
4834 !C *** SETUP PARAMETERS ************************************************
4836       FRST    =.TRUE.
4837       CALAIN  =.TRUE.
4838       CALAOU  =.TRUE.
4840       PSCONV7 =.TRUE.
4841       PSCONV1 =.TRUE.
4842       PSCONV6 =.TRUE.
4844       PSI70   =-GREAT                                 ! GREAT = 1.D10
4845       PSI1O   =-GREAT
4846       PSI60   =-GREAT
4848       ROOT7   = ZERO
4849       ROOT1   = ZERO
4850       ROOT6   = ZERO
4852 !C *** CALCULATE INITIAL SOLUTION ***************************************
4854       CALL CALCV1A2p1
4856       CHI9   = CCASO4
4857       CHI7   = CK2SO4       ! SALTS
4858       CHI1   = CNA2SO4
4859       CHI8   = CMGSO4
4860       CHI6   = CNH42S4
4862       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
4863       PSI4   = CNH4CL
4864       PSI5   = CNH4NO3
4865       PSI6   = CNH42S4
4866       PSI7   = CK2SO4
4867       PSI8   = CMGSO4
4868       PSI9   = CCASO4
4870       CALL CALCMR2p1           ! WATER
4872       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
4873       SO4I   = WAER(2)
4874       NH4I   = WAER(3)
4875       NO3I   = WAER(4)
4876       CLI    = WAER(5)
4877       CAI    = WAER(6)
4878       KI     = WAER(7)
4879       MGI    = WAER(8)
4881       HSO4I  = ZERO
4882       NH3AQ  = ZERO
4883       NO3AQ  = ZERO
4884       CLAQ   = ZERO
4886 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
4888       DO 10 I=1,NSWEEP
4890       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
4891       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
4892       A6  = XK7 *(WATER/GAMA(4))**3.0        !(NH4)2SO4  <==> NH4+
4893       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
4895 !C POTASSIUM SULFATE
4897       IF (KI*KI*SO4I .GT. A7) THEN
4898          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1 - ROOT6)
4899          CC = WAER(7)*((WAER(2) - WAER(6)) - ROOT1 - ROOT6) + &
4900               0.25*WAER(7)*WAER(7)
4901          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6))-ROOT1-ROOT6)-A7)
4902          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
4903          IF (ISLV.NE.0) ROOT7 = TINY
4904          ROOT7 = MAX (ROOT7, ZERO)
4905          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
4906                       MAX (WAER(2)-WAER(6)-ROOT1-ROOT6, ZERO), CHI7)
4907          PSI7  = CHI7-ROOT7
4908       ENDIF
4909       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
4910       PSI70   = PSI7
4912 !C SODIUM SULFATE
4914       IF (NAI*NAI*SO4I .GT. A1) THEN
4915          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7 - ROOT6)
4916          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7 - ROOT6) + &
4917               0.25*WAER(1)*WAER(1)
4918          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6))-ROOT7-ROOT6)-A1)
4919          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
4920          IF (ISLV.NE.0) ROOT1 = TINY
4921          ROOT1 = MAX (ROOT1, ZERO)
4922          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
4923                       MAX (WAER(2)-WAER(6)-ROOT7-ROOT6, ZERO), CHI1)
4924          PSI1  = CHI1-ROOT1
4925       ENDIF
4926       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
4927       PSI1O   = PSI1
4929 !C AMMONIUM SULFATE
4931       IF (NH4I*NH4I*SO4I .GT. A6) THEN
4932          BB =-((WAER(2)-WAER(6)) + WAER(3) - ROOT7 - ROOT1)
4933          CC = WAER(3)*((WAER(2)-WAER(6)) - ROOT7 - ROOT1) + &
4934               0.25*WAER(3)*WAER(3)
4935          DD =-0.25*(WAER(3)*WAER(3)*((WAER(2)-WAER(6))-ROOT7-ROOT1)-A6)
4936          CALL POLY32p1(BB, CC, DD, ROOT6, ISLV)
4937          IF (ISLV.NE.0) ROOT6 = TINY
4938          ROOT6 = MAX (ROOT6, ZERO)
4939          ROOT6 = MIN (ROOT6, WAER(3)/2.0, &
4940                       MAX (WAER(2)-WAER(6)-ROOT7-ROOT1, ZERO), CHI6)
4941          PSI6  = CHI6-ROOT6
4942       ENDIF
4943       PSCONV6 = ABS(PSI6-PSI60) .LE. EPS*PSI60
4944       PSI60   = PSI6
4945 !C ION CONCENTRATIONS ; CORRECTIONS
4947       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
4948       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
4949       SO4I   = MAX (WAER(2)-WAER(6) - ROOT7 - ROOT1 - ROOT6, ZERO)
4950       NH4I   = MAX (WAER(3) - 2.D0*ROOT6, ZERO)
4951       NO3I   = WAER(4)
4952       CLI    = WAER(5)
4953       CAI    = ZERO
4954       MGI    = WAER(8)
4956 !C SOLUTION ACIDIC OR BASIC?
4958       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
4959              - 2.D0*CAI - KI - 2.D0*MGI
4960       IF (GG.GT.TINY) THEN                        ! H+ in excess
4961          BB =-GG
4962          CC =-AKW
4963          DD = BB*BB - 4.D0*CC
4964          HI = 0.5D0*(-BB + SQRT(DD))
4965          OHI= AKW/HI
4966       ELSE                                        ! OH- in excess
4967          BB = GG
4968          CC =-AKW
4969          DD = BB*BB - 4.D0*CC
4970          OHI= 0.5D0*(-BB + SQRT(DD))
4971          HI = AKW/OHI
4972       ENDIF
4974 !C UNDISSOCIATED SPECIES EQUILIBRIA
4976       IF (HI.GT.OHI) THEN
4977 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
4978 !C         HI    = AKW/OHI
4979 !C         HSO4I = ZERO
4980 !C      ELSE
4981 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
4982 !C     &           - KI - 2.D0*MGI, ZERO)
4983 !C         GGCL  = MAX(GG-GGNO3, ZERO)
4984 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
4985 !C         IF (GGNO3.GT.TINY) THEN
4986 !C            IF (GGCL.LE.TINY) HI = ZERO
4987 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
4988 !C         ENDIF
4990 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
4992          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
4993       else
4994         del= zero
4995       ENDIF
4996       SO4I  = SO4I  - DEL
4997       HI    = HI    - DEL
4998       HSO4I = DEL
4999 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
5000       OHI   = AKW/HI
5002       IF (HI.LE.TINY) THEN
5003       HI = SQRT(AKW)
5004       OHI   = AKW/HI
5005       ENDIF
5007 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
5009       MOLAL(1) = HI
5010       MOLAL(2) = NAI
5011       MOLAL(3) = NH4I
5012       MOLAL(4) = CLI
5013       MOLAL(5) = SO4I
5014       MOLAL(6) = HSO4I
5015       MOLAL(7) = NO3I
5016       MOLAL(8) = CAI
5017       MOLAL(9) = KI
5018       MOLAL(10)= MGI
5020 !C *** CALCULATE WATER **************************************************
5022       CALL CALCMR2p1
5024 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
5026       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
5027          CALL CALCACT2p1
5028       ELSE
5029          IF (PSCONV7 .AND. PSCONV1 .AND. PSCONV6) GOTO 20
5030       ENDIF
5031 10    CONTINUE
5032 !ccc      CALL PUSHERR (0002, 'CALCV3')    ! WARNING ERROR: NO CONVERGENCE
5034 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
5036 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
5037       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
5038       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
5040       GNH3    = NH4I/HI/A2
5041       GHNO3   = HI*NO3I/A3
5042       GHCL    = HI*CLI /A4
5044       GASAQ(1)= NH3AQ
5045       GASAQ(2)= CLAQ
5046       GASAQ(3)= NO3AQ
5048       CNH42S4 = CHI6 - PSI6
5049       CNH4NO3 = ZERO
5050       CNH4CL  = ZERO
5051       CNA2SO4 = CHI1 - PSI1
5052       CMGSO4  = ZERO
5053       CK2SO4  = CHI7 - PSI7
5054       CCASO4  = MIN (WAER(6), WAER(2))
5056       RETURN
5058 !C *** END OF SUBROUTINE CALCV3A******************************************
5060       END
5062 !C=======================================================================
5064 !C *** ISORROPIA CODE
5065 !C *** SUBROUTINE CALCV2
5066 !C *** CASE V2
5068 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5069 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
5070 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
5071 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, (NH4)2SO4, NH4CL
5073 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5074 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5075 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5077 !C=======================================================================
5079       SUBROUTINE CALCV22p1
5080       INCLUDE 'module_isrpia_inc.F'
5081       LOGICAL EXNO, EXCL
5082       EXTERNAL CALCV1A2p1, CALCV3A2p1, CALCV42p1
5084 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
5086       EXNO = WAER(4).GT.TINY
5087       EXCL = WAER(5).GT.TINY
5089       IF (EXNO) THEN                       ! *** NITRATE EXISTS
5090          SCASE = 'V2 ; SUBCASE 1'
5091          CALL CALCV2A2p1
5092          SCASE = 'V2 ; SUBCASE 1'
5094       ELSEIF (.NOT.EXNO .AND. EXCL) THEN   ! *** ONLY CHLORIDE EXISTS
5095          IF (RH.LT.DRMO2) THEN
5096             SCASE = 'V2 ; SUBCASE 2'
5097             CALL CALCV1A2p1             ! SOLID
5098             SCASE = 'V2 ; SUBCASE 2'
5099          ELSE
5100             SCASE = 'V2 ; SUBCASE 3' ! MDRH CaSO4, NH4CL, (NH4)2SO4, MGSO4, NA2SO4, K2SO4
5101             CALL CALCMDRPII2p1 (RH, DRMO2, DRNH4CL, CALCV1A2p1, CALCV3A2p1)
5102             SCASE = 'V2 ; SUBCASE 3'
5103          ENDIF
5105       ELSE                                 ! *** NO CHLORIDE AND NITRATE
5106          IF (RH.LT.DRMO3) THEN
5107             SCASE = 'V2 ; SUBCASE 2'
5108             CALL CALCV1A2p1             ! SOLID
5109             SCASE = 'V2 ; SUBCASE 2'
5110          ELSE
5111             SCASE = 'V2 ; SUBCASE 4' ! MDRH CaSO4, (NH4)2SO4, MGSO4, NA2SO4, K2SO4
5112             CALL CALCMDRPII2p1 (RH, DRMO3, DRNH42S4, CALCV1A2p1, CALCV42p1)
5113             SCASE = 'V2 ; SUBCASE 4'
5114          ENDIF
5115       ENDIF
5117       RETURN
5119 !C *** END OF SUBROUTINE CALCV2 ******************************************
5121       END
5123 !C=======================================================================
5125 !C *** ISORROPIA CODE II
5126 !C *** SUBROUTINE CALCV2A
5127 !C *** CASE V2A
5129 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5130 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
5131 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
5132 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, (NH4)2SO4, NH4CL
5133 !C     4. Completely dissolved: NH4NO3
5135 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5136 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5137 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5139 !C=======================================================================
5141       SUBROUTINE CALCV2A2p1
5142       INCLUDE 'module_isrpia_inc.F'
5144       LOGICAL PSCONV7, PSCONV1, PSCONV6, PSCONV4
5145       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
5147       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
5148                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
5149                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
5150                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
5151                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
5152                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
5154 !C *** SETUP PARAMETERS ************************************************
5156       FRST    =.TRUE.
5157       CALAIN  =.TRUE.
5158       CALAOU  =.TRUE.
5160       PSCONV7 =.TRUE.
5161       PSCONV1 =.TRUE.
5162       PSCONV6 =.TRUE.
5163       PSCONV4 =.TRUE.
5165       PSI70   =-GREAT                                 ! GREAT = 1.D10
5166       PSI1O   =-GREAT
5167       PSI60   =-GREAT
5168       PSI40   =-GREAT
5170       ROOT7   = ZERO
5171       ROOT1   = ZERO
5172       ROOT6   = ZERO
5173       ROOT4   = ZERO
5175 !C *** CALCULATE INITIAL SOLUTION ***************************************
5177       CALL CALCV1A2p1
5179       CHI9   = CCASO4
5180       CHI7   = CK2SO4       ! SALTS
5181       CHI1   = CNA2SO4
5182       CHI8   = CMGSO4
5183       CHI6   = CNH42S4
5184       CHI4   = CNH4CL
5186       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
5187       PSI4   = CNH4CL
5188       PSI5   = CNH4NO3
5189       PSI6   = CNH42S4
5190       PSI7   = CK2SO4
5191       PSI8   = CMGSO4
5192       PSI9   = CCASO4
5194       CALL CALCMR2p1           ! WATER
5196       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
5197       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
5198       NH4I   = WAER(3)
5199       NO3I   = WAER(4)
5200       CLI    = WAER(5)
5201       CAI    = WAER(6)
5202       KI     = WAER(7)
5203       MGI    = WAER(8)
5205       HSO4I  = ZERO
5206       NH3AQ  = ZERO
5207       NO3AQ  = ZERO
5208       CLAQ   = ZERO
5210 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
5212       DO 10 I=1,NSWEEP
5214       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
5215       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
5216       A6  = XK7 *(WATER/GAMA(4))**3.0        ! (NH4)2SO4 <==> NH4+
5217       A14 = XK14*(WATER/GAMA(6))**2.         ! NH4Cl     <==> NH4+
5218       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
5220 !C AMMONIUM CHLORIDE
5222       IF (NH4I*CLI .GT. A14) THEN
5223          BB    =-(WAER(3) + WAER(5) - 2.D0*ROOT6)
5224          CC    = WAER(5)*(WAER(3) - 2.D0*ROOT6) - A14
5225          DD    = BB*BB - 4.D0*CC
5226          IF (DD.LT.ZERO) THEN
5227             ROOT4 = ZERO
5228          ELSE
5229             DD    = SQRT(DD)
5230             ROOT4A= 0.5D0*(-BB+DD)
5231             ROOT4B= 0.5D0*(-BB-DD)
5232             IF (ZERO.LE.ROOT4A) THEN
5233                ROOT4 = ROOT4A
5234             ELSE
5235                ROOT4 = ROOT4B
5236             ENDIF
5237             ROOT4 = MAX(ROOT4, ZERO)
5238             ROOT4 = MIN(ROOT4, WAER(5), &
5239                         MAX (WAER(3) - 2.D0*ROOT6, ZERO), CHI4)
5240             PSI4  = CHI4 - ROOT4
5241          ENDIF
5242       ENDIF
5243       PSCONV4 = ABS(PSI4-PSI40) .LE. EPS*PSI40
5244       PSI40   = PSI4
5246 !C POTASSIUM SULFATE
5248       IF (KI*KI*SO4I .GT. A7) THEN
5249          BB =-((WAER(2) - WAER(6)) + WAER(7) - ROOT1 - ROOT6)
5250          CC = WAER(7)*((WAER(2) - WAER(6)) - ROOT1 - ROOT6) &
5251               + 0.25*WAER(7)*WAER(7)
5252          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6))-ROOT1-ROOT6)-A7)
5253          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
5254          IF (ISLV.NE.0) ROOT7 = TINY
5255          ROOT7 = MAX (ROOT7, ZERO)
5256          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
5257                       MAX (WAER(2)-WAER(6)-ROOT1-ROOT6, ZERO), CHI7)
5258          PSI7  = CHI7-ROOT7
5259       ENDIF
5260       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
5261       PSI70   = PSI7
5263 !C SODIUM SULFATE
5265       IF (NAI*NAI*SO4I .GT. A1) THEN
5266          BB =-((WAER(2) - WAER(6)) + WAER(1) - ROOT7 - ROOT6)
5267          CC = WAER(1)*((WAER(2) - WAER(6)) - ROOT7 - ROOT6) + &
5268               0.25*WAER(1)*WAER(1)
5269          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6))-ROOT7-ROOT6)-A1)
5270          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
5271          IF (ISLV.NE.0) ROOT1 = TINY
5272          ROOT1 = MAX (ROOT1, ZERO)
5273          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
5274                       MAX (WAER(2)-WAER(6)-ROOT7-ROOT6, ZERO), CHI1)
5275          PSI1  = CHI1-ROOT1
5276       ENDIF
5277       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
5278       PSI1O   = PSI1
5280 !C AMMONIUM SULFATE
5282       IF (NH4I*NH4I*SO4I .GT. A6) THEN
5283          BB =-((WAER(2)-WAER(6)) + WAER(3) - ROOT7 - ROOT1 - ROOT4)
5284          CC = WAER(3)*((WAER(2)-WAER(6)) - ROOT7 - ROOT1) + 0.25* &
5285             (WAER(3)-ROOT4)**2.0 + ROOT4*(ROOT1+ROOT7-(WAER(2)-WAER(6)))
5286          DD =-0.25*((WAER(3)-ROOT4)**2.0 * &
5287                     ((WAER(2)-WAER(6))-ROOT7-ROOT1) - A6)
5288          CALL POLY32p1(BB, CC, DD, ROOT6, ISLV)
5289          IF (ISLV.NE.0) ROOT6 = TINY
5290          ROOT6 = MAX (ROOT6, ZERO)
5291          ROOT6 = MIN (ROOT6, WAER(3)/2.0, &
5292                       MAX (WAER(2)-WAER(6) - ROOT7 - ROOT1, ZERO), CHI6)
5293          PSI6  = CHI6-ROOT6
5294       ENDIF
5295       PSCONV6 = ABS(PSI6-PSI60) .LE. EPS*PSI60
5296       PSI60   = PSI6
5298 !C ION CONCENTRATIONS ; CORRECTIONS
5300       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
5301       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
5302       SO4I   = MAX (WAER(2)-WAER(6) - ROOT7 - ROOT1 - ROOT6, ZERO)
5303       NH4I   = MAX (WAER(3) - 2.D0*ROOT6, ZERO)
5304       NO3I   = WAER(4)
5305       CLI    = WAER(5)
5306       CAI    = ZERO
5307       MGI    = WAER(8)
5309 !C SOLUTION ACIDIC OR BASIC?
5311       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
5312              - 2.D0*CAI - KI - 2.D0*MGI
5313       IF (GG.GT.TINY) THEN                        ! H+ in excess
5314          BB =-GG
5315          CC =-AKW
5316          DD = BB*BB - 4.D0*CC
5317          HI = 0.5D0*(-BB + SQRT(DD))
5318          OHI= AKW/HI
5319       ELSE                                        ! OH- in excess
5320          BB = GG
5321          CC =-AKW
5322          DD = BB*BB - 4.D0*CC
5323          OHI= 0.5D0*(-BB + SQRT(DD))
5324          HI = AKW/OHI
5325       ENDIF
5327 !C UNDISSOCIATED SPECIES EQUILIBRIA
5329       IF (HI.GT.OHI) THEN
5330 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
5331 !C         HI    = AKW/OHI
5332 !C         HSO4I = ZERO
5333 !C      ELSE
5334 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
5335 !C     &           - KI - 2.D0*MGI, ZERO)
5336 !C         GGCL  = MAX(GG-GGNO3, ZERO)
5337 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
5338 !C         IF (GGNO3.GT.TINY) THEN
5339 !C            IF (GGCL.LE.TINY) HI = ZERO
5340 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
5341 !C         ENDIF
5343 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
5345          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
5346       else
5347         del= zero
5348       ENDIF
5349       SO4I  = SO4I  - DEL
5350       HI    = HI    - DEL
5351       HSO4I = DEL
5352 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
5353       OHI   = AKW/HI
5355       IF (HI.LE.TINY) THEN
5356       HI = SQRT(AKW)
5357       OHI   = AKW/HI
5358       ENDIF
5360 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
5362       MOLAL(1) = HI
5363       MOLAL(2) = NAI
5364       MOLAL(3) = NH4I
5365       MOLAL(4) = CLI
5366       MOLAL(5) = SO4I
5367       MOLAL(6) = HSO4I
5368       MOLAL(7) = NO3I
5369       MOLAL(8) = CAI
5370       MOLAL(9) = KI
5371       MOLAL(10)= MGI
5373 !C *** CALCULATE WATER **************************************************
5375       CALL CALCMR2p1
5377 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
5379       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
5380          CALL CALCACT2p1
5381       ELSE
5382          IF (PSCONV7 .AND. PSCONV1 .AND. PSCONV6 .AND. PSCONV4) GOTO 20
5383       ENDIF
5384 10    CONTINUE
5385 !ccc      CALL PUSHERR (0002, 'CALCV2')    ! WARNING ERROR: NO CONVERGENCE
5387 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
5389 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
5390       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
5391       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
5393       GNH3    = NH4I/HI/A2
5394       GHNO3   = HI*NO3I/A3
5395       GHCL    = HI*CLI /A4
5397       GASAQ(1)= NH3AQ
5398       GASAQ(2)= CLAQ
5399       GASAQ(3)= NO3AQ
5401       CNH42S4 = CHI6 - PSI6
5402       CNH4NO3 = ZERO
5403       CNH4CL  = CHI4 - PSI4
5404       CNA2SO4 = CHI1 - PSI1
5405       CMGSO4  = ZERO
5406       CK2SO4  = CHI7 - PSI7
5407       CCASO4  = MIN (WAER(6), WAER(2))
5409       RETURN
5411 !C *** END OF SUBROUTINE CALCV2A******************************************
5413       END
5415 !C=======================================================================
5417 !C *** ISORROPIA CODE II
5418 !C *** SUBROUTINE CALCV1
5419 !C *** CASE V1
5421 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5422 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
5423 !C     2. SOLID AEROSOL ONLY
5424 !C     3. SOLIDS POSSIBLE : (NH4)2SO4, NH4NO3, NH4Cl, NA2SO4, K2SO4, MGSO4, CASO4
5426 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5427 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5428 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5430 !C=======================================================================
5432       SUBROUTINE CALCV12p1
5433       INCLUDE 'module_isrpia_inc.F'
5434       LOGICAL EXNO, EXCL
5435       EXTERNAL CALCV1A2p1, CALCV2A2p1, CALCV3A2p1, CALCV42p1
5437 !C *** REGIME DEPENDS ON AMBIENT RELATIVE HUMIDITY & POSSIBLE SPECIES ***
5439       EXNO = WAER(4).GT.TINY
5440       EXCL = WAER(5).GT.TINY
5442       IF (EXNO .AND. EXCL) THEN           ! *** NITRATE & CHLORIDE EXIST
5443          IF (RH.LT.DRMO1) THEN
5444             SCASE = 'V1 ; SUBCASE 1'
5445             CALL CALCV1A2p1             ! SOLID
5446             SCASE = 'V1 ; SUBCASE 1'
5447          ELSE
5448             SCASE = 'V1 ; SUBCASE 2' ! MDRH (NH4)2SO4, NH4NO3, NH4Cl, NA2SO4, K2SO4, MGSO4, CASO4
5449             CALL CALCMDRPII2p1 (RH, DRMO1, DRNH4NO3, CALCV1A2p1, CALCV2A2p1)
5450             SCASE = 'V1 ; SUBCASE 2'
5451          ENDIF
5453       ELSE IF (EXNO .AND. .NOT.EXCL) THEN ! *** ONLY NITRATE EXISTS
5454          IF (RH.LT.DRMV1) THEN
5455             SCASE = 'V1 ; SUBCASE 1'
5456             CALL CALCV1A2p1             ! SOLID
5457             SCASE = 'V1 ; SUBCASE 1'
5458          ELSE
5459             SCASE = 'V1 ; SUBCASE 3' ! MDRH (NH4)2SO4, NH4NO3, NA2SO4, K2SO4, MGSO4, CASO4
5460             CALL CALCMDRPII2p1 (RH, DRMV1, DRNH4NO3, CALCV1A2p1, CALCV2A2p1)
5461             SCASE = 'V1 ; SUBCASE 3'
5462          ENDIF
5464       ELSE IF (.NOT.EXNO .AND. EXCL) THEN ! *** ONLY CHLORIDE EXISTS
5465          IF (RH.LT.DRMO2) THEN
5466             SCASE = 'V1 ; SUBCASE 1'
5467             CALL CALCV1A2p1             ! SOLID
5468             SCASE = 'V1 ; SUBCASE 1'
5469          ELSE
5470             SCASE = 'V1 ; SUBCASE 4' ! MDRH (NH4)2SO4, NH4Cl, NA2SO4, K2SO4, MGSO4, CASO4
5471             CALL CALCMDRPII2p1 (RH, DRMO2, DRNH4CL, CALCV1A2p1, CALCV3A2p1)
5472             SCASE = 'V1 ; SUBCASE 4'
5473          ENDIF
5475       ELSE                                ! *** NO CHLORIDE AND NITRATE
5476          IF (RH.LT.DRMO3) THEN
5477             SCASE = 'V1 ; SUBCASE 1'
5478             CALL CALCV1A2p1             ! SOLID
5479             SCASE = 'V1 ; SUBCASE 1'
5480          ELSE
5481             SCASE = 'V1 ; SUBCASE 5' ! MDRH (NH4)2SO4, NA2SO4, K2SO4, MGSO4, CASO4
5482             CALL CALCMDRPII2p1 (RH, DRMO3, DRNH42S4, CALCV1A2p1, CALCV42p1)
5483             SCASE = 'V1 ; SUBCASE 5'
5484          ENDIF
5485       ENDIF
5487       RETURN
5489 !C      IF (RH.LT.DRMO1) THEN
5490 !C         SCASE = 'V1 ; SUBCASE 1'
5491 !C         CALL CALCV1A              ! SOLID PHASE ONLY POSSIBLE
5492 !C         SCASE = 'V1 ; SUBCASE 1'
5493 !C      ELSE
5494 !C         SCASE = 'V1 ; SUBCASE 2'  ! LIQUID & SOLID PHASE POSSIBLE
5495 !C         CALL CALCMDRPII (RH, DRMO1, DRNH4NO3, CALCV1A, CALCV2A)
5496 !C         SCASE = 'V1 ; SUBCASE 2'
5497 !C         ENDIF
5499 !C      RETURN
5501 !C *** END OF SUBROUTINE CALCV1 ******************************************
5503       END
5505 !C=======================================================================
5507 !C *** ISORROPIA CODE II
5508 !C *** SUBROUTINE CALCV1A
5509 !C *** CASE V1A
5511 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5512 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
5513 !C     2. SOLID AEROSOL ONLY
5514 !C     3. SOLIDS POSSIBLE : (NH4)2SO4, NH4NO3, NH4Cl, NA2SO4, K2SO4, MGSO4, CASO4
5516 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5517 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5518 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5520 !C=======================================================================
5522       SUBROUTINE CALCV1A2p1
5523       INCLUDE 'module_isrpia_inc.F'
5525 !C *** CALCULATE SOLIDS **************************************************
5527       CCASO4  = MIN (WAER(6), WAER(2))                     ! CCASO4
5528       SO4FR   = MAX (WAER(2) - CCASO4, ZERO)
5529       CAFR    = MAX (WAER(6) - CCASO4, ZERO)
5530       CK2SO4  = MIN (0.5D0*WAER(7), SO4FR)                 ! CK2SO4
5531       FRK     = MAX (WAER(7) - 2.D0*CK2SO4, ZERO)
5532       SO4FR   = MAX (SO4FR - CK2SO4, ZERO)
5533       CNA2SO4 = MIN (0.5D0*WAER(1), SO4FR)                 ! CNA2SO4
5534       NAFR    = MAX (WAER(1) - 2.D0*CNA2SO4, ZERO)
5535       SO4FR   = MAX (SO4FR - CNA2SO4, ZERO)
5536       CMGSO4  = MIN (WAER(8), SO4FR)                       ! CMGSO4
5537       FRMG    = MAX(WAER(8) - CMGSO4, ZERO)
5538       SO4FR   = MAX(SO4FR - CMGSO4, ZERO)
5539       CNH42S4 = MAX (MIN (SO4FR , 0.5d0*WAER(3)) , TINY)
5540       FRNH3   = MAX (WAER(3) - 2.D0*CNH42S4, ZERO)
5542       CNH4NO3 = MIN (FRNH3, WAER(4))
5543 !CCC      FRNO3   = MAX (WAER(4) - CNH4NO3, ZERO)
5544       FRNH3   = MAX (FRNH3 - CNH4NO3, ZERO)
5546       CNH4CL  = MIN (FRNH3, WAER(5))
5547 !CCC      FRCL    = MAX (WAER(5) - CNH4CL, ZERO)
5548       FRNH3   = MAX (FRNH3 - CNH4CL, ZERO)
5550 !C *** OTHER PHASES ******************************************************
5552       WATER   = ZERO
5554       GNH3    = ZERO
5555       GHNO3   = ZERO
5556       GHCL    = ZERO
5558       RETURN
5560 !C *** END OF SUBROUTINE CALCV1A *****************************************
5562       END
5563 !C=======================================================================
5565 !C *** ISORROPIA CODE
5566 !C *** SUBROUTINE CALCU8
5567 !C *** CASE U8
5569 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5570 !C     1. SULFATE POOR (SULRAT > 2.0); CRUSTAL+SODIUM RICH (CRNARAT >= 2.0); CRUSTAL POOR (CRRAT<2)
5571 !C     2. THERE IS ONLY A LIQUID PHASE
5573 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5574 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5575 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5577 !C=======================================================================
5579       SUBROUTINE CALCU82p1
5580       INCLUDE 'module_isrpia_inc.F'
5582       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
5584       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
5585                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
5586                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
5587                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
5588                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
5589                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
5591 !C *** SETUP PARAMETERS ************************************************
5593       CALL CALCU1A2p1
5595       CHI9   = CCASO4        ! SALTS
5597       PSI1   = CNA2SO4
5598       PSI2   = CNANO3
5599       PSI3   = CNACL
5600       PSI4   = CNH4CL
5601       PSI5   = CNH4NO3
5602       PSI7   = CK2SO4
5603       PSI8   = CMGSO4
5604       PSI9   = CCASO4
5606       FRST   = .TRUE.
5607       CALAIN = .TRUE.
5608       CALAOU = .TRUE.
5610 !C *** CALCULATE WATER **************************************************
5612       CALL CALCMR2p1
5614 !C *** SETUP LIQUID CONCENTRATIONS **************************************
5616       HSO4I  = ZERO
5617       NH3AQ  = ZERO
5618       NO3AQ  = ZERO
5619       CLAQ   = ZERO
5621 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
5623       DO 10 I=1,NSWEEP
5625       AKW = XKW*RH*WATER*WATER                        ! H2O    <==> H+
5627       NAI    = WAER(1)
5628       SO4I   = MAX(WAER(2) - WAER(6), ZERO)
5629       NH4I   = WAER(3)
5630       NO3I   = WAER(4)
5631       CLI    = WAER(5)
5632       CAI    = ZERO
5633       KI     = WAER(7)
5634       MGI    = WAER(8)
5637 !C SOLUTION ACIDIC OR BASIC?
5639       GG  = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
5640              - 2.D0*CAI - KI - 2.D0*MGI
5641       IF (GG.GT.TINY) THEN                        ! H+ in excess
5642          BB =-GG
5643          CC =-AKW
5644          DD = BB*BB - 4.D0*CC
5645          HI = 0.5D0*(-BB + SQRT(DD))
5646          OHI= AKW/HI
5647       ELSE                                        ! OH- in excess
5648          BB = GG
5649          CC =-AKW
5650          DD = BB*BB - 4.D0*CC
5651          OHI= 0.5D0*(-BB + SQRT(DD))
5652          HI = AKW/OHI
5653       ENDIF
5654       IF (HI.LE.TINY) HI = SQRT(AKW)
5655 !C      OHI   = AKW/HI
5657 !C UNDISSOCIATED SPECIES EQUILIBRIA
5659       IF (HI.GT.OHI) THEN
5660 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
5661 !C         HI    = AKW/OHI
5662 !C         HSO4I = ZERO
5663 !C      ELSE
5664 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
5665 !C     &           - KI - 2.D0*MGI, ZERO)
5666 !C         GGCL  = MAX(GG-GGNO3, ZERO)
5667 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
5668 !C         IF (GGNO3.GT.TINY) THEN
5669 !C            IF (GGCL.LE.TINY) HI = ZERO
5670 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
5671 !C         ENDIF
5673 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
5675          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
5676       else
5677         del= zero
5678       ENDIF
5679       SO4I  = SO4I  - DEL
5680       HI    = HI    - DEL
5681       HSO4I = DEL
5682 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
5683       OHI   = AKW/HI
5685       IF (HI.LE.TINY) THEN
5686       HI = SQRT(AKW)
5687       OHI   = AKW/HI
5688       ENDIF
5690 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
5692       MOLAL(1) = HI
5693       MOLAL(2) = NAI
5694       MOLAL(3) = NH4I
5695       MOLAL(4) = CLI
5696       MOLAL(5) = SO4I
5697       MOLAL(6) = HSO4I
5698       MOLAL(7) = NO3I
5699       MOLAL(8) = CAI
5700       MOLAL(9) = KI
5701       MOLAL(10)= MGI
5703 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
5705       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
5706          CALL CALCACT2p1
5707       ELSE
5708          GOTO 20
5709       ENDIF
5710 10    CONTINUE
5711 !ccc      CALL PUSHERR (0002, 'CALCU8')    ! WARNING ERROR: NO CONVERGENCE
5713 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
5715 20    A2       = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
5716       A3       = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
5717       A4       = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
5719       GNH3     = NH4I/HI/A2
5720       GHNO3    = HI*NO3I/A3
5721       GHCL     = HI*CLI /A4
5723       GASAQ(1) = NH3AQ
5724       GASAQ(2) = CLAQ
5725       GASAQ(3) = NO3AQ
5727       CNH42S4  = ZERO
5728       CNH4NO3  = ZERO
5729       CNH4CL   = ZERO
5730       CNACL    = ZERO
5731       CNANO3   = ZERO
5732       CNA2SO4  = ZERO
5733       CMGSO4   = ZERO
5734       CK2SO4   = ZERO
5735       CCASO4   = MIN (WAER(6), WAER(2))
5737       RETURN
5739 !C *** END OF SUBROUTINE CALCU8 ******************************************
5741       END
5743 !C=======================================================================
5745 !C *** ISORROPIA CODE II
5746 !C *** SUBROUTINE CALCU7
5747 !C *** CASE U7
5749 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5750 !C     1. SULFATE POOR (SO4RAT > 2.0), CRUSTAL+SODIUM RICH (CRNARAT >= 2.0); CRUSTAL POOR (CRRAT<2)
5751 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
5752 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4
5753 !C     4. Completely dissolved: NH4NO3, NH4CL, NANO3, NACL, MGSO4, NA2SO4
5755 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5756 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5757 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5759 !C=======================================================================
5761       SUBROUTINE CALCU72p1
5762       INCLUDE 'module_isrpia_inc.F'
5764       LOGICAL PSCONV7
5765       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
5767       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
5768                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
5769                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
5770                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
5771                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
5772                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
5774 !C *** SETUP PARAMETERS ************************************************
5776       FRST    =.TRUE.
5777       CALAIN  =.TRUE.
5778       CALAOU  =.TRUE.
5780       PSCONV7 =.TRUE.
5781       PSI70   =-GREAT                                 ! GREAT = 1.D10
5782       ROOT7   = ZERO
5784 !C *** CALCULATE INITIAL SOLUTION ***************************************
5786       CALL CALCU1A2p1
5788       CHI7   = CK2SO4       ! SALTS
5789       CHI9   = CCASO4
5791       PSI1   = CNA2SO4
5792       PSI2   = CNANO3
5793       PSI3   = CNACL
5794       PSI4   = CNH4CL
5795       PSI5   = CNH4NO3
5796       PSI7   = CK2SO4
5797       PSI8   = CMGSO4
5798       PSI9   = CCASO4
5801       CALL CALCMR2p1           ! WATER
5803       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
5804       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
5805       NH4I   = WAER(3)
5806       NO3I   = WAER(4)
5807       CLI    = WAER(5)
5808       CAI    = WAER(6)
5809       KI     = WAER(7)
5810       MGI    = WAER(8)
5812       HSO4I  = ZERO
5813       NH3AQ  = ZERO
5814       NO3AQ  = ZERO
5815       CLAQ   = ZERO
5817       MOLAL(1) = ZERO
5818       MOLAL(2) = NAI
5819       MOLAL(3) = NH4I
5820       MOLAL(4) = CLI
5821       MOLAL(5) = SO4I
5822       MOLAL(6) = HSO4I
5823       MOLAL(7) = NO3I
5824       MOLAL(8) = CAI
5825       MOLAL(9) = KI
5826       MOLAL(10)= MGI
5828       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
5830 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
5832       DO 10 I=1,NSWEEP
5834       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
5835       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
5837 !C POTASSIUM SULFATE
5839       IF (KI*KI*SO4I .GT. A7) THEN
5840          BB =-((WAER(2)-WAER(6)) + WAER(7))
5841          CC = WAER(7)*(WAER(2)-WAER(6)) + 0.25D0*WAER(7)*WAER(7)
5842          DD =-0.25*(WAER(7)*WAER(7)*(WAER(2)-WAER(6)) - A7)
5843          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
5844          IF (ISLV.NE.0) ROOT7 = TINY
5845          ROOT7 = MAX (ROOT7, ZERO)
5846          ROOT7 = MIN (ROOT7,WAER(7)/2.0,MAX(WAER(2)-WAER(6),ZERO),CHI7)
5847          PSI7  = CHI7-ROOT7
5848       ENDIF
5849       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
5850       PSI70   = PSI7
5852 !C ION CONCENTRATIONS ; CORRECTIONS
5854       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
5855       SO4I   = MAX (WAER(2) - WAER(6) - ROOT7, ZERO)
5856       NH4I   = WAER(3)
5857       NO3I   = WAER(4)
5858       CLI    = WAER(5)
5859       CAI    = ZERO
5860       NAI    = WAER(1)
5861       MGI    = WAER(8)
5863 !C SOLUTION ACIDIC OR BASIC?
5865       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
5866              - 2.D0*CAI - KI - 2.D0*MGI
5867       IF (GG.GT.TINY) THEN                        ! H+ in excess
5868          BB =-GG
5869          CC =-AKW
5870          DD = BB*BB - 4.D0*CC
5871          HI = 0.5D0*(-BB + SQRT(DD))
5872          OHI= AKW/HI
5873       ELSE                                        ! OH- in excess
5874          BB = GG
5875          CC =-AKW
5876          DD = BB*BB - 4.D0*CC
5877          OHI= 0.5D0*(-BB + SQRT(DD))
5878          HI = AKW/OHI
5879       ENDIF
5880 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
5881 !C      OHI   = AKW/HI
5883 !C UNDISSOCIATED SPECIES EQUILIBRIA
5885       IF (HI.GT.OHI) THEN
5886 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
5887 !C         HI    = AKW/OHI
5888 !C         HSO4I = ZERO
5889 !C      ELSE
5890 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
5891 !C     &           - KI - 2.D0*MGI, ZERO)
5892 !C         GGCL  = MAX(GG-GGNO3, ZERO)
5893 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
5894 !C         IF (GGNO3.GT.TINY) THEN
5895 !C            IF (GGCL.LE.TINY) HI = ZERO
5896 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
5897 !C         ENDIF
5899 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
5901          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
5902       else
5903         del= zero
5904       ENDIF
5905       SO4I  = SO4I  - DEL
5906       HI    = HI    - DEL
5907       HSO4I = DEL
5908 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
5909       OHI   = AKW/HI
5911       IF (HI.LE.TINY) THEN
5912       HI = SQRT(AKW)
5913       OHI   = AKW/HI
5914       ENDIF
5916 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
5918       MOLAL(1) = HI
5919       MOLAL(2) = NAI
5920       MOLAL(3) = NH4I
5921       MOLAL(4) = CLI
5922       MOLAL(5) = SO4I
5923       MOLAL(6) = HSO4I
5924       MOLAL(7) = NO3I
5925       MOLAL(8) = CAI
5926       MOLAL(9) = KI
5927       MOLAL(10)= MGI
5929 !C *** CALCULATE WATER **************************************************
5931       CALL CALCMR2p1
5933 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
5935       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
5936          CALL CALCACT2p1
5937       ELSE
5938          IF (PSCONV7) GOTO 20
5939       ENDIF
5940 10    CONTINUE
5941 !ccc      CALL PUSHERR (0002, 'CALCU7')    ! WARNING ERROR: NO CONVERGENCE
5943 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
5945 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
5946       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
5947       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
5949       GNH3    = NH4I/HI/A2
5950       GHNO3   = HI*NO3I/A3
5951       GHCL    = HI*CLI /A4
5953       GASAQ(1)= NH3AQ
5954       GASAQ(2)= CLAQ
5955       GASAQ(3)= NO3AQ
5957       CNH42S4 = ZERO
5958       CNH4NO3 = ZERO
5959       CNH4CL  = ZERO
5960       CNACL   = ZERO
5961       CNANO3  = ZERO
5962       CNA2SO4 = ZERO
5963       CMGSO4  = ZERO
5964       CK2SO4  = CHI7 - PSI7
5965       CCASO4  = MIN (WAER(6), WAER(2))
5967       RETURN
5969 !C *** END OF SUBROUTINE CALCU7 ******************************************
5971       END
5972 !C=======================================================================
5974 !C *** ISORROPIA CODE II
5975 !C *** SUBROUTINE CALCU6
5976 !C *** CASE U6
5978 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
5979 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
5980 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
5981 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4
5982 !C     4. Completely dissolved: NH4NO3, NH4CL, NANO3, NACL, MGSO4
5984 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
5985 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
5986 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
5988 !C=======================================================================
5990       SUBROUTINE CALCU62p1
5991       INCLUDE 'module_isrpia_inc.F'
5993       LOGICAL PSCONV7, PSCONV1
5994       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
5996       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
5997                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
5998                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
5999                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
6000                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
6001                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
6003 !C *** SETUP PARAMETERS ************************************************
6005       FRST    =.TRUE.
6006       CALAIN  =.TRUE.
6007       CALAOU  =.TRUE.
6009       PSCONV7 =.TRUE.
6010       PSCONV1 =.TRUE.
6012       PSI70   =-GREAT                                 ! GREAT = 1.D10
6013       PSI1O   =-GREAT
6015       ROOT7   = ZERO
6016       ROOT1   = ZERO
6018 !C *** CALCULATE INITIAL SOLUTION ***************************************
6020       CALL CALCU1A2p1
6022       CHI1   = CNA2SO4            ! SALTS
6023       CHI7   = CK2SO4
6024       CHI9   = CCASO4
6026       PSI1   = CNA2SO4
6027       PSI2   = CNANO3
6028       PSI3   = CNACL
6029       PSI4   = CNH4CL
6030       PSI5   = CNH4NO3
6031       PSI7   = CK2SO4
6032       PSI8   = CMGSO4
6033       PSI9   = CCASO4
6035       CALL CALCMR2p1           ! WATER
6037       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
6038       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
6039       NH4I   = WAER(3)
6040       NO3I   = WAER(4)
6041       CLI    = WAER(5)
6042       CAI    = WAER(6)
6043       KI     = WAER(7)
6044       MGI    = WAER(8)
6046       HSO4I  = ZERO
6047       NH3AQ  = ZERO
6048       NO3AQ  = ZERO
6049       CLAQ   = ZERO
6051       MOLAL(1) = ZERO
6052       MOLAL(2) = NAI
6053       MOLAL(3) = NH4I
6054       MOLAL(4) = CLI
6055       MOLAL(5) = SO4I
6056       MOLAL(6) = HSO4I
6057       MOLAL(7) = NO3I
6058       MOLAL(8) = CAI
6059       MOLAL(9) = KI
6060       MOLAL(10)= MGI
6062       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
6064 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
6066       DO 10 I=1,NSWEEP
6068       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
6069       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
6070       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
6072 !C POTASSIUM SULFATE
6074       IF (KI*KI*SO4I .GT. A7) THEN
6075          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
6076          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
6077          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
6078          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
6079          IF (ISLV.NE.0) ROOT7 = TINY
6080          ROOT7 = MAX (ROOT7, ZERO)
6081          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
6082                       MAX((WAER(2)-WAER(6)) - ROOT1,ZERO), CHI7)
6083          PSI7  = CHI7-ROOT7
6085       ENDIF
6086       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
6087       PSI70   = PSI7
6089 !C SODIUM SULFATE
6091       IF (NAI*NAI*SO4I .GT. A1) THEN
6092          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7)
6093          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7) + 0.25*WAER(1)*WAER(1)
6094          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6)) - ROOT7) - A1)
6095          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
6096          IF (ISLV.NE.0) ROOT1 = TINY
6097          ROOT1 = MAX (ROOT1, ZERO)
6098          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
6099                       MAX((WAER(2)-WAER(6)) - ROOT7, ZERO) ,CHI1)
6100          PSI1  = CHI1-ROOT1
6101       ENDIF
6102       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
6103       PSI1O   = PSI1
6105 !C ION CONCENTRATIONS ; CORRECTIONS
6107       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
6108       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
6109       SO4I   = MAX (WAER(2) - WAER(6) - ROOT7 - ROOT1, ZERO)
6110       NH4I   = WAER(3)
6111       NO3I   = WAER(4)
6112       CLI    = WAER(5)
6113       CAI    = ZERO
6114       MGI    = WAER(8)
6116 !C SOLUTION ACIDIC OR BASIC?
6118       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
6119              - 2.D0*CAI - KI - 2.D0*MGI
6120       IF (GG.GT.TINY) THEN                        ! H+ in excess
6121          BB =-GG
6122          CC =-AKW
6123          DD = BB*BB - 4.D0*CC
6124          HI = 0.5D0*(-BB + SQRT(DD))
6125          OHI= AKW/HI
6126       ELSE                                        ! OH- in excess
6127          BB = GG
6128          CC =-AKW
6129          DD = BB*BB - 4.D0*CC
6130          OHI= 0.5D0*(-BB + SQRT(DD))
6131          HI = AKW/OHI
6132       ENDIF
6133 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
6134 !C      OHI   = AKW/HI
6136 !C UNDISSOCIATED SPECIES EQUILIBRIA
6138       IF (HI.GT.OHI) THEN
6139 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
6140 !C         HI    = AKW/OHI
6141 !C         HSO4I = ZERO
6142 !C      ELSE
6143 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
6144 !C     &           - KI - 2.D0*MGI, ZERO)
6145 !C         GGCL  = MAX(GG-GGNO3, ZERO)
6146 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
6147 !C         IF (GGNO3.GT.TINY) THEN
6148 !C            IF (GGCL.LE.TINY) HI = ZERO
6149 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
6150 !C         ENDIF
6152 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
6154          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
6155       else
6156         del= zero
6157       ENDIF
6158       SO4I  = SO4I  - DEL
6159       HI    = HI    - DEL
6160       HSO4I = DEL
6161 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
6162       OHI   = AKW/HI
6164       IF (HI.LE.TINY) THEN
6165       HI = SQRT(AKW)
6166       OHI   = AKW/HI
6167       ENDIF
6169 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
6171       MOLAL(1) = HI
6172       MOLAL(2) = NAI
6173       MOLAL(3) = NH4I
6174       MOLAL(4) = CLI
6175       MOLAL(5) = SO4I
6176       MOLAL(6) = HSO4I
6177       MOLAL(7) = NO3I
6178       MOLAL(8) = CAI
6179       MOLAL(9) = KI
6180       MOLAL(10)= MGI
6182 !C *** CALCULATE WATER **************************************************
6184       CALL CALCMR2p1
6186 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
6188       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
6189          CALL CALCACT2p1
6190       ELSE
6191          IF (PSCONV7 .AND. PSCONV1) GOTO 20
6192       ENDIF
6193 10    CONTINUE
6194 !ccc      CALL PUSHERR (0002, 'CALCU6')    ! WARNING ERROR: NO CONVERGENCE
6196 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
6198 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
6199       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
6200       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
6202       GNH3    = NH4I/HI/A2
6203       GHNO3   = HI*NO3I/A3
6204       GHCL    = HI*CLI /A4
6206       GASAQ(1)= NH3AQ
6207       GASAQ(2)= CLAQ
6208       GASAQ(3)= NO3AQ
6210       CNH42S4 = ZERO
6211       CNH4NO3 = ZERO
6212       CNH4CL  = ZERO
6213       CNACL   = ZERO
6214       CNANO3  = ZERO
6215       CNA2SO4 = CHI1 - PSI1
6216       CMGSO4  = ZERO
6217       CK2SO4  = CHI7 - PSI7
6218       CCASO4  = MIN (WAER(6), WAER(2))
6220       RETURN
6222 !C *** END OF SUBROUTINE CALCU6******************************************
6224       END
6225 !C=======================================================================
6227 !C *** ISORROPIA CODE II
6228 !C *** SUBROUTINE CALCU5
6229 !C *** CASE U5
6231 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
6232 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
6233 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
6234 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4
6235 !C     4. Completely dissolved: NH4NO3, NH4CL, NANO3, NACL
6237 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
6238 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
6239 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
6241 !C=======================================================================
6243       SUBROUTINE CALCU52p1
6244       INCLUDE 'module_isrpia_inc.F'
6246       LOGICAL PSCONV7, PSCONV1
6247       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
6249       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
6250                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
6251                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
6252                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
6253                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
6254                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
6256 !C *** SETUP PARAMETERS ************************************************
6258       FRST    =.TRUE.
6259       CALAIN  =.TRUE.
6260       CALAOU  =.TRUE.
6262       PSCONV7 =.TRUE.
6263       PSCONV1 =.TRUE.
6265       PSI70   =-GREAT                                 ! GREAT = 1.D10
6266       PSI1O   =-GREAT
6268       ROOT7   = ZERO
6269       ROOT1   = ZERO
6271 !C *** CALCULATE INITIAL SOLUTION ***************************************
6273       CALL CALCU1A2p1
6275       CHI1   = CNA2SO4            ! SALTS
6276       CHI7   = CK2SO4
6277       CHI8   = CMGSO4
6278       CHI9   = CCASO4
6280       PSI1   = CNA2SO4
6281       PSI2   = CNANO3
6282       PSI3   = CNACL
6283       PSI4   = CNH4CL
6284       PSI5   = CNH4NO3
6285       PSI7   = CK2SO4
6286       PSI8   = CMGSO4
6287       PSI9   = CCASO4
6289       CALL CALCMR2p1           ! WATER
6291       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
6292       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
6293       NH4I   = WAER(3)
6294       NO3I   = WAER(4)
6295       CLI    = WAER(5)
6296       CAI    = WAER(6)
6297       KI     = WAER(7)
6298       MGI    = WAER(8)
6300       HSO4I  = ZERO
6301       NH3AQ  = ZERO
6302       NO3AQ  = ZERO
6303       CLAQ   = ZERO
6305       MOLAL(1) = ZERO
6306       MOLAL(2) = NAI
6307       MOLAL(3) = NH4I
6308       MOLAL(4) = CLI
6309       MOLAL(5) = SO4I
6310       MOLAL(6) = HSO4I
6311       MOLAL(7) = NO3I
6312       MOLAL(8) = CAI
6313       MOLAL(9) = KI
6314       MOLAL(10)= MGI
6316       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
6318 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
6320       DO 10 I=1,NSWEEP
6321       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
6322       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
6323       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
6325 !C POTASSIUM SULFATE
6327       IF (KI*KI*SO4I .GT. A7) THEN
6328          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
6329          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
6330          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
6331          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
6332          IF (ISLV.NE.0) ROOT7 = TINY
6333          ROOT7 = MAX (ROOT7, ZERO)
6334          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
6335                       MAX(WAER(2)-WAER(6)-ROOT1, ZERO),CHI7)
6336          PSI7  = CHI7-ROOT7
6337       ENDIF
6338       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
6339       PSI70   = PSI7
6341 !C SODIUM SULFATE
6343       IF (NAI*NAI*SO4I .GT. A1) THEN
6344          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7)
6345          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7) + 0.25*WAER(1)*WAER(1)
6346          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6)) - ROOT7) - A1)
6347          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
6348          IF (ISLV.NE.0) ROOT1 = TINY
6349          ROOT1 = MAX (ROOT1, ZERO)
6350          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
6351                       MAX(WAER(2)-WAER(6)-ROOT7, ZERO),CHI1)
6352          PSI1  = CHI1-ROOT1
6353       ENDIF
6354       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
6355       PSI1O   = PSI1
6357 !C ION CONCENTRATIONS ; CORRECTIONS
6359       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
6360       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
6361       SO4I   = MAX (WAER(2)-WAER(6) - ROOT7 - ROOT1, ZERO)
6362       NH4I   = WAER(3)
6363       NO3I   = WAER(4)
6364       CLI    = WAER(5)
6365       CAI    = ZERO
6366       MGI    = WAER(8)
6368 !C SOLUTION ACIDIC OR BASIC?
6370       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
6371              - 2.D0*CAI - KI - 2.D0*MGI
6372       IF (GG.GT.TINY) THEN                        ! H+ in excess
6373          BB =-GG
6374          CC =-AKW
6375          DD = BB*BB - 4.D0*CC
6376          HI = 0.5D0*(-BB + SQRT(DD))
6377          OHI= AKW/HI
6378       ELSE                                        ! OH- in excess
6379          BB = GG
6380          CC =-AKW
6381          DD = BB*BB - 4.D0*CC
6382          OHI= 0.5D0*(-BB + SQRT(DD))
6383          HI = AKW/OHI
6384       ENDIF
6385 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
6386 !C      OHI   = AKW/HI
6388 !C UNDISSOCIATED SPECIES EQUILIBRIA
6390       IF (HI.GT.OHI) THEN
6391 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
6392 !C         HI    = AKW/OHI
6393 !C         HSO4I = ZERO
6394 !C      ELSE
6395 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
6396 !C     &           - KI - 2.D0*MGI, ZERO)
6397 !C         GGCL  = MAX(GG-GGNO3, ZERO)
6398 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
6399 !C         IF (GGNO3.GT.TINY) THEN
6400 !C            IF (GGCL.LE.TINY) HI = ZERO
6401 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
6402 !C         ENDIF
6404 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
6406          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
6407       else
6408         del= zero
6409       ENDIF
6410       SO4I  = SO4I  - DEL
6411       HI    = HI    - DEL
6412       HSO4I = DEL
6413 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
6414       OHI   = AKW/HI
6416       IF (HI.LE.TINY) THEN
6417       HI = SQRT(AKW)
6418       OHI   = AKW/HI
6419       ENDIF
6421 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
6423       MOLAL(1) = HI
6424       MOLAL(2) = NAI
6425       MOLAL(3) = NH4I
6426       MOLAL(4) = CLI
6427       MOLAL(5) = SO4I
6428       MOLAL(6) = HSO4I
6429       MOLAL(7) = NO3I
6430       MOLAL(8) = CAI
6431       MOLAL(9) = KI
6432       MOLAL(10)= MGI
6434 !C *** CALCULATE WATER **************************************************
6436       CALL CALCMR2p1
6438 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
6440       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
6441          CALL CALCACT2p1
6442       ELSE
6443          IF (PSCONV7 .AND. PSCONV1) GOTO 20
6444       ENDIF
6445 10    CONTINUE
6446 !ccc      CALL PUSHERR (0002, 'CALCU5')    ! WARNING ERROR: NO CONVERGENCE
6448 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
6450 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
6451       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
6452       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
6454       GNH3    = NH4I/HI/A2
6455       GHNO3   = HI*NO3I/A3
6456       GHCL    = HI*CLI /A4
6458       GASAQ(1)= NH3AQ
6459       GASAQ(2)= CLAQ
6460       GASAQ(3)= NO3AQ
6462       CNH42S4 = ZERO
6463       CNH4NO3 = ZERO
6464       CNH4CL  = ZERO
6465       CNACL   = ZERO
6466       CNANO3  = ZERO
6467       CNA2SO4 = CHI1 - PSI1
6468       CMGSO4  = ZERO
6469       CK2SO4  = CHI7 - PSI7
6470       CCASO4  = MIN (WAER(6), WAER(2))
6472       RETURN
6474 !C *** END OF SUBROUTINE CALCU5******************************************
6476       END
6478 !C=======================================================================
6480 !C *** ISORROPIA CODE II
6481 !C *** SUBROUTINE CALCU4
6482 !C *** CASE U4
6484 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
6485 !C     1. SULFATE POOR (SO4RAT > 2.0), (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
6486 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
6487 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL
6489 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
6490 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
6491 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
6493 !C=======================================================================
6495       SUBROUTINE CALCU42p1
6496       INCLUDE 'module_isrpia_inc.F'
6497       LOGICAL  EXAN, EXAC, EXSN, EXSC
6498       EXTERNAL CALCU1A2p1, CALCU52p1
6500 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
6502       SCASE = 'U4 ; SUBCASE 2'
6503       CALL CALCU1A2p1              ! SOLID
6504       SCASE = 'U4 ; SUBCASE 2'
6506       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
6507       EXAC = CNH4CL .GT.TINY    ! NH4CL
6508       EXSN = CNANO3 .GT.TINY    ! NANO3
6509       EXSC = CNACL  .GT.TINY    ! NACL
6511 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
6513       IF (EXAN .OR. EXSN .OR. EXSC) THEN   ! *** NH4NO3,NANO3 EXIST
6514          IF (RH.GE.DRMM1) THEN
6515             SCASE = 'U4 ; SUBCASE 1'
6516             CALL CALCU4A2p1
6517             SCASE = 'U4 ; SUBCASE 1'
6518          ENDIF
6520       ELSE IF (EXAC) THEN                  ! *** NH4CL EXISTS ONLY
6521          IF (RH.GE.DRMR5) THEN
6522             SCASE = 'U4 ; SUBCASE 3'
6523             CALL CALCMDRPII2p1 (RH, DRMR5, DRNH4CL, CALCU1A2p1, CALCU52p1)
6524             SCASE = 'U4 ; SUBCASE 3'
6525          ENDIF
6526       ENDIF
6528       RETURN
6530 !C *** END OF SUBROUTINE CALCU4 ******************************************
6532       END
6534 !C=======================================================================
6536 !C *** ISORROPIA CODE II
6537 !C *** SUBROUTINE CALCU4A
6538 !C *** CASE U4A
6540 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
6541 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
6542 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
6543 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL
6544 !C     4. Completely dissolved: NH4NO3, NANO3, NACL
6546 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
6547 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
6548 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
6550 !C=======================================================================
6552       SUBROUTINE CALCU4A2p1
6553       INCLUDE 'module_isrpia_inc.F'
6555       LOGICAL PSCONV7, PSCONV1, PSCONV4
6556       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
6558       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
6559                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
6560                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
6561                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
6562                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
6563                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
6565 !C *** SETUP PARAMETERS ************************************************
6567       FRST    =.TRUE.
6568       CALAIN  =.TRUE.
6569       CALAOU  =.TRUE.
6571       PSCONV7 =.FALSE.
6572       PSCONV1 =.FALSE.
6573       PSCONV4 =.FALSE.
6575       PSI70   =-GREAT                                 ! GREAT = 1.D10
6576       PSI1O   =-GREAT
6577       PSI40   =-GREAT
6579       ROOT7   = ZERO
6580       ROOT1   = ZERO
6581       ROOT4   = ZERO
6583 !C *** CALCULATE INITIAL SOLUTION ***************************************
6585       CALL CALCU1A2p1
6587       CHI1   = CNA2SO4            ! SALTS
6588       CHI4   = CNH4CL
6589       CHI7   = CK2SO4
6590       CHI8   = CMGSO4
6591       CHI9   = CCASO4
6593       PSI1   = CNA2SO4
6594       PSI2   = CNANO3
6595       PSI3   = CNACL
6596       PSI4   = CNH4CL
6597       PSI5   = CNH4NO3
6598       PSI7   = CK2SO4
6599       PSI8   = CMGSO4
6600       PSI9   = CCASO4
6602       CALL CALCMR2p1           ! WATER
6604       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
6605       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
6606       NH4I   = WAER(3)
6607       NO3I   = WAER(4)
6608       CLI    = WAER(5)
6609       CAI    = WAER(6)
6610       KI     = WAER(7)
6611       MGI    = WAER(8)
6613       HSO4I  = ZERO
6614       NH3AQ  = ZERO
6615       NO3AQ  = ZERO
6616       CLAQ   = ZERO
6618       MOLAL(1) = ZERO
6619       MOLAL(2) = NAI
6620       MOLAL(3) = NH4I
6621       MOLAL(4) = CLI
6622       MOLAL(5) = SO4I
6623       MOLAL(6) = HSO4I
6624       MOLAL(7) = NO3I
6625       MOLAL(8) = CAI
6626       MOLAL(9) = KI
6627       MOLAL(10)= MGI
6629       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
6631 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
6633       DO 10 I=1,NSWEEP
6635       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
6636       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
6637       A14 = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
6638       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
6640 !C POTASSIUM SULFATE
6642       IF (KI*KI*SO4I .GT. A7) THEN
6643          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
6644          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
6645          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
6646          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
6647          IF (ISLV.NE.0) ROOT7 = TINY
6648          ROOT7 = MAX (ROOT7, ZERO)
6649          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
6650                       MAX(WAER(2)-WAER(6)-ROOT1, ZERO), CHI7)
6651          PSI7  = CHI7-ROOT7
6652       ENDIF
6653       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
6654       PSI70   = PSI7
6656 !C SODIUM SULFATE
6658       IF (NAI*NAI*SO4I .GT. A1) THEN
6659          BB =-((WAER(2)-WAER(6)) + WAER(1) - ROOT7)
6660          CC = WAER(1)*((WAER(2)-WAER(6)) - ROOT7) + 0.25*WAER(1)*WAER(1)
6661          DD =-0.25*(WAER(1)*WAER(1)*((WAER(2)-WAER(6)) - ROOT7) - A1)
6662          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
6663          IF (ISLV.NE.0) ROOT1 = TINY
6664          ROOT1 = MAX (ROOT1, ZERO)
6665          ROOT1 = MIN (ROOT1, WAER(1)/2.0, &
6666                       MAX (WAER(2)-WAER(6)-ROOT7, ZERO), CHI1)
6667          PSI1  = CHI1-ROOT1
6668       ENDIF
6669       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
6670       PSI1O   = PSI1
6672 !C AMMONIUM CHLORIDE
6674       IF (NH4I*CLI .GT. A14) THEN
6675          BB   =-(NH4I + CLI)
6676          CC   =-A14 + NH4I*CLI
6677          DD   = BB*BB - 4.D0*CC
6678          ROOT4 = 0.5D0*(-BB-SQRT(DD))
6679          IF (ROOT4.GT.TINY) THEN
6680             ROOT4    = MIN(MAX (ROOT4, ZERO), CHI4)
6681             PSI4    = CHI4 - ROOT4
6682          ENDIF
6683       ENDIF
6684       PSCONV4 = ABS(PSI4-PSI40) .LE. EPS*PSI40
6685       PSI40   = PSI4
6687 !C ION CONCENTRATIONS ; CORRECTIONS
6689       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
6690       NAI    = MAX (WAER(1) - 2.D0*ROOT1, ZERO)
6691       SO4I   = MAX (WAER(2) - WAER(6) - ROOT7 - ROOT1, ZERO)
6692       NH4I   = MAX (WAER(3) - ROOT4, ZERO)
6693       NO3I   = WAER(4)
6694       CLI    = MAX (WAER(5) - ROOT4, ZERO)
6695       CAI    = ZERO
6696       MGI    = WAER(8)
6698 !C SOLUTION ACIDIC OR BASIC?
6700       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
6701              - 2.D0*CAI - KI - 2.D0*MGI
6702       IF (GG.GT.TINY) THEN                        ! H+ in excess
6703          BB =-GG
6704          CC =-AKW
6705          DD = BB*BB - 4.D0*CC
6706          HI = 0.5D0*(-BB + SQRT(DD))
6707          OHI= AKW/HI
6708       ELSE                                        ! OH- in excess
6709          BB = GG
6710          CC =-AKW
6711          DD = BB*BB - 4.D0*CC
6712          OHI= 0.5D0*(-BB + SQRT(DD))
6713          HI = AKW/OHI
6714       ENDIF
6715 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
6716 !C      OHI   = AKW/HI
6718 !C UNDISSOCIATED SPECIES EQUILIBRIA
6720       IF (HI.GT.OHI) THEN
6721 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
6722 !C         HI    = AKW/OHI
6723 !C         HSO4I = ZERO
6724 !C      ELSE
6725 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
6726 !C     &           - KI - 2.D0*MGI, ZERO)
6727 !C         GGCL  = MAX(GG-GGNO3, ZERO)
6728 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
6729 !C         IF (GGNO3.GT.TINY) THEN
6730 !C            IF (GGCL.LE.TINY) HI = ZERO
6731 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
6732 !C         ENDIF
6734 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
6736          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
6737       else
6738         del= zero
6739       ENDIF
6740       SO4I  = SO4I  - DEL
6741       HI    = HI    - DEL
6742       HSO4I = DEL
6743 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
6744       OHI   = AKW/HI
6746       IF (HI.LE.TINY) THEN
6747       HI = SQRT(AKW)
6748       OHI   = AKW/HI
6749       ENDIF
6751 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
6753       MOLAL(1) = HI
6754       MOLAL(2) = NAI
6755       MOLAL(3) = NH4I
6756       MOLAL(4) = CLI
6757       MOLAL(5) = SO4I
6758       MOLAL(6) = HSO4I
6759       MOLAL(7) = NO3I
6760       MOLAL(8) = CAI
6761       MOLAL(9) = KI
6762       MOLAL(10)= MGI
6764 !C *** CALCULATE WATER **************************************************
6766       CALL CALCMR2p1
6768 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
6770       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
6771          CALL CALCACT2p1
6772       ELSE
6773          IF (PSCONV7 .AND. PSCONV1 .AND. PSCONV4) GOTO 20
6774       ENDIF
6775 10    CONTINUE
6776 !ccc      CALL PUSHERR (0002, 'CALCU4')    ! WARNING ERROR: NO CONVERGENCE
6778 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
6780 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
6781       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
6782       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
6784       GNH3    = NH4I/HI/A2
6785       GHNO3   = HI*NO3I/A3
6786       GHCL    = HI*CLI /A4
6788       GASAQ(1)= NH3AQ
6789       GASAQ(2)= CLAQ
6790       GASAQ(3)= NO3AQ
6792       CNH42S4 = ZERO
6793       CNH4NO3 = ZERO
6794       CNH4CL  = CHI4 - PSI4
6795       CNACL   = ZERO
6796       CNANO3  = ZERO
6797       CNA2SO4 = CHI1 - PSI1
6798       CMGSO4  = ZERO
6799       CK2SO4  = CHI7 - PSI7
6800       CCASO4  = MIN (WAER(6), WAER(2))
6802       RETURN
6804 !C *** END OF SUBROUTINE CALCU4A ****************************************
6806       END
6808 !C=======================================================================
6810 !C *** ISORROPIA CODE II
6811 !C *** SUBROUTINE CALCU3
6812 !C *** CASE U3
6814 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
6815 !C     1. SULFATE POOR (SO4RAT > 2.0), (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
6816 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
6817 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL, NANO3
6819 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
6820 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
6821 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
6823 !C=======================================================================
6825       SUBROUTINE CALCU32p1
6826       INCLUDE 'module_isrpia_inc.F'
6827       LOGICAL  EXAN, EXAC, EXSN, EXSC
6828       EXTERNAL CALCU1A2p1, CALCU4A2p1, CALCU52p1
6830 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
6832       SCASE = 'U3 ; SUBCASE 2'
6833       CALL CALCU1A2p1              ! SOLID
6834       SCASE = 'U3 ; SUBCASE 2'
6836       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
6837       EXAC = CNH4CL .GT.TINY    ! NH4CL
6838       EXSN = CNANO3 .GT.TINY    ! NANO3
6839       EXSC = CNACL  .GT.TINY    ! NACL
6841 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
6843       IF (EXAN .OR. EXSN) THEN                   ! *** NH4NO3,NANO3 EXIST
6844          IF (RH.GE.DRMM1) THEN
6845             SCASE = 'U3 ; SUBCASE 1'
6846             CALL CALCU3A2p1
6847             SCASE = 'U3 ; SUBCASE 1'
6848          ENDIF
6850       ELSE IF (.NOT.EXAN .AND. .NOT.EXSN) THEN   ! *** NH4NO3,NANO3 = 0
6851          IF      (     EXAC .AND.      EXSC) THEN
6852             IF (RH.GE.DRMR4) THEN
6853                SCASE = 'U3 ; SUBCASE 3'
6854                CALL CALCMDRPII2p1 (RH, DRMR4, DRNACL, CALCU1A2p1, CALCU4A2p1)
6855                SCASE = 'U3 ; SUBCASE 3'
6856             ENDIF
6858          ELSE IF (.NOT.EXAC .AND.      EXSC) THEN
6859             IF (RH.GE.DRMR2) THEN
6860                SCASE = 'U3 ; SUBCASE 4'
6861                CALL CALCMDRPII2p1 (RH, DRMR2, DRNACL, CALCU1A2p1, CALCU4A2p1)
6862                SCASE = 'U3 ; SUBCASE 4'
6863             ENDIF
6865          ELSE IF (     EXAC .AND. .NOT.EXSC) THEN
6866             IF (RH.GE.DRMR5) THEN
6867                SCASE = 'U3 ; SUBCASE 5'
6868                CALL CALCMDRPII2p1 (RH, DRMR5, DRNACL, CALCU1A2p1, CALCU52p1)
6869                SCASE = 'U3 ; SUBCASE 5'
6870             ENDIF
6871          ENDIF
6873       ENDIF
6875       RETURN
6877 !C *** END OF SUBROUTINE CALCU3 ******************************************
6879       END
6881 !C=======================================================================
6883 !C *** ISORROPIA CODE II
6884 !C *** SUBROUTINE CALCU3A
6885 !C *** CASE U3A
6887 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
6888 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
6889 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
6890 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL, NACL
6891 !C     4. Completely dissolved: NH4NO3, NANO3
6893 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
6894 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
6895 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
6897 !C=======================================================================
6899       SUBROUTINE CALCU3A2p1
6900       INCLUDE 'module_isrpia_inc.F'
6902       LOGICAL PSCONV7, PSCONV1, PSCONV4, PSCONV3
6903       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
6905       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
6906                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
6907                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
6908                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
6909                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
6910                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
6912 !C *** SETUP PARAMETERS ************************************************
6914       FRST    =.TRUE.
6915       CALAIN  =.TRUE.
6916       CALAOU  =.TRUE.
6918       PSCONV7 =.FALSE.
6919       PSCONV1 =.FALSE.
6920       PSCONV4 =.FALSE.
6921       PSCONV3 =.FALSE.
6923       PSI70   =-GREAT                                 ! GREAT = 1.D10
6924       PSI1O   =-GREAT
6925       PSI40   =-GREAT
6926       PSI30   =-GREAT
6928       ROOT7   = ZERO
6929       ROOT1   = ZERO
6930       ROOT4   = ZERO
6931       ROOT3   = ZERO
6933 !C *** CALCULATE INITIAL SOLUTION ***************************************
6935       CALL CALCU1A2p1
6937       CHI1   = CNA2SO4            ! SALTS
6938       CHI3   = CNACL
6939       CHI4   = CNH4CL
6940       CHI7   = CK2SO4
6941       CHI8   = CMGSO4
6942       CHI9   = CCASO4
6944       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
6945       PSI2   = CNANO3
6946       PSI3   = CNACL
6947       PSI4   = CNH4CL
6948       PSI5   = CNH4NO3
6949       PSI7   = CK2SO4
6950       PSI8   = CMGSO4
6951       PSI9   = CCASO4
6953       CALL CALCMR2p1           ! WATER
6955       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
6956       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
6957       NH4I   = WAER(3)
6958       NO3I   = WAER(4)
6959       CLI    = WAER(5)
6960       CAI    = WAER(6)
6961       KI     = WAER(7)
6962       MGI    = WAER(8)
6964       HSO4I  = ZERO
6965       NH3AQ  = ZERO
6966       NO3AQ  = ZERO
6967       CLAQ   = ZERO
6969       MOLAL(1) = ZERO
6970       MOLAL(2) = NAI
6971       MOLAL(3) = NH4I
6972       MOLAL(4) = CLI
6973       MOLAL(5) = SO4I
6974       MOLAL(6) = HSO4I
6975       MOLAL(7) = NO3I
6976       MOLAL(8) = CAI
6977       MOLAL(9) = KI
6978       MOLAL(10)= MGI
6980       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
6982 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
6984       DO 10 I=1,NSWEEP
6986       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
6987       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
6988       A14 = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
6989       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
6990       A8  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
6992 !C POTASSIUM SULFATE
6994       IF (KI*KI*SO4I .GT. A7) THEN
6995          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
6996          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
6997          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
6998          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
6999          IF (ISLV.NE.0) ROOT7 = TINY
7000          ROOT7 = MAX (ROOT7, ZERO)
7001          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
7002                       MAX(WAER(2)-WAER(6)-ROOT1, ZERO),CHI7)
7003          PSI7  = CHI7-ROOT7
7004       ENDIF
7005       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
7006       PSI70   = PSI7
7008 !C SODIUM SULFATE
7010       IF (NAI*NAI*SO4I .GT. A1) THEN
7011          BB =-(((WAER(2)-WAER(6))-ROOT7)*(WAER(1) - ROOT3))
7012          CC = ((WAER(2) - WAER(6)) - ROOT7)*(WAER(1) - ROOT3) + &
7013                 0.25D0*(WAER(1) - ROOT3)**2.
7014          DD =-0.25D0*(((WAER(2) - WAER(6)) - ROOT7)* &
7015                         (WAER(1) - ROOT3)**2.D0 - A1)
7016          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
7017          IF (ISLV.NE.0) ROOT1 = TINY
7018          ROOT1 = MIN (MAX(ROOT1, ZERO), MAX(WAER(1) - ROOT3, ZERO), &
7019                       CHI1, MAX(WAER(2)-WAER(6), ZERO))
7020          PSI1  = CHI1-ROOT1
7021       ENDIF
7022       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
7023       PSI1O   = PSI1
7025 !C AMMONIUM CHLORIDE
7027       IF (NH4I*CLI .GT. A14) THEN
7028          BB    =-(WAER(3) + WAER(5) - ROOT4)
7029          CC    =-A14 + NH4I*(WAER(5) - ROOT4)
7030          DD    = MAX(BB*BB - 4.D0*CC, ZERO)
7031          ROOT4A= 0.5D0*(-BB+SQRT(DD))
7032          ROOT4B= 0.5D0*(-BB-SQRT(DD))
7033          IF (ZERO.LE.ROOT4A) THEN
7034             ROOT4 = ROOT4A
7035          ELSE
7036             ROOT4 = ROOT4B
7037          ENDIF
7038          ROOT4 = MIN(MAX(ZERO, ROOT4), MAX(WAER(5)-ROOT3,ZERO), &
7039                      CHI4, WAER(3))
7040          PSI4  = CHI4 - ROOT4
7041       ENDIF
7042       PSCONV4 = ABS(PSI4-PSI40) .LE. EPS*PSI40
7043       PSI40   = PSI4
7045 !C SODIUM CHLORIDE  ; To obtain new value for ROOT3
7047       IF (NAI*CLI .GT. A8) THEN
7048          BB    =-((CHI1-2.D0*ROOT1) + (WAER(5) - ROOT4))
7049          CC    = (CHI1-2.D0*ROOT1)*(WAER(5) - ROOT4) - A8
7050          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
7051          ROOT3A= 0.5D0*(-BB-SQRT(DD))
7052          ROOT3B= 0.5D0*(-BB+SQRT(DD))
7053          IF (ZERO.LE.ROOT3A) THEN
7054             ROOT3 = ROOT3A
7055          ELSE
7056             ROOT3 = ROOT3B
7057          ENDIF
7058          ROOT3   = MIN(MAX(ROOT3, ZERO), CHI3)
7059          PSI3    = CHI3-ROOT3
7060       ENDIF
7061       PSCONV3 = ABS(PSI3-PSI30) .LE. EPS*PSI30
7062       PSI30   = PSI3
7064 !C ION CONCENTRATIONS ; CORRECTIONS
7066       KI     = MAX (WAER(7) - 2.D0*ROOT7, ZERO)
7067       NAI    = MAX (WAER(1) - 2.D0*ROOT1 - ROOT3, ZERO)
7068       SO4I   = MAX (WAER(2)-WAER(6) - ROOT7 - ROOT1, ZERO)
7069       NH4I   = MAX (WAER(3) - ROOT4, ZERO)
7070       NO3I   = WAER(4)
7071       CLI    = MAX (WAER(5) - ROOT4 - ROOT3, ZERO)
7072       CAI    = ZERO
7073       MGI    = WAER(8)
7075 !C SOLUTION ACIDIC OR BASIC?
7077       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
7078              - 2.D0*CAI - KI - 2.D0*MGI
7079       IF (GG.GT.TINY) THEN                        ! H+ in excess
7080          BB =-GG
7081          CC =-AKW
7082          DD = BB*BB - 4.D0*CC
7083          HI = 0.5D0*(-BB + SQRT(DD))
7084          OHI= AKW/HI
7085       ELSE                                        ! OH- in excess
7086          BB = GG
7087          CC =-AKW
7088          DD = BB*BB - 4.D0*CC
7089          OHI= 0.5D0*(-BB + SQRT(DD))
7090          HI = AKW/OHI
7091       ENDIF
7092 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
7093 !C      OHI   = AKW/HI
7095 !C UNDISSOCIATED SPECIES EQUILIBRIA
7097       IF (HI.GT.OHI) THEN
7098 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
7099 !C         HI    = AKW/OHI
7100 !C         HSO4I = ZERO
7101 !C      ELSE
7102 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
7103 !C     &           - KI - 2.D0*MGI, ZERO)
7104 !C         GGCL  = MAX(GG-GGNO3, ZERO)
7105 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
7106 !C         IF (GGNO3.GT.TINY) THEN
7107 !C            IF (GGCL.LE.TINY) HI = ZERO
7108 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
7109 !C         ENDIF
7111 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
7113          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
7114       else
7115         del= zero
7116       ENDIF
7117       SO4I  = SO4I  - DEL
7118       HI    = HI    - DEL
7119       HSO4I = DEL
7120 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
7121       OHI   = AKW/HI
7123       IF (HI.LE.TINY) THEN
7124       HI = SQRT(AKW)
7125       OHI   = AKW/HI
7126       ENDIF
7128 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
7130       MOLAL(1) = HI
7131       MOLAL(2) = NAI
7132       MOLAL(3) = NH4I
7133       MOLAL(4) = CLI
7134       MOLAL(5) = SO4I
7135       MOLAL(6) = HSO4I
7136       MOLAL(7) = NO3I
7137       MOLAL(8) = CAI
7138       MOLAL(9) = KI
7139       MOLAL(10)= MGI
7141 !C *** CALCULATE WATER **************************************************
7143       CALL CALCMR2p1
7145 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
7147       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
7148          CALL CALCACT2p1
7149       ELSE
7150          IF (PSCONV7 .AND. PSCONV1 .AND. PSCONV4 .AND. PSCONV3) GOTO 20
7151       ENDIF
7152 10    CONTINUE
7153 !ccc      CALL PUSHERR (0002, 'CALCU3A')    ! WARNING ERROR: NO CONVERGENCE
7155 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
7157 20    IF (CLI.LE.TINY .AND. WAER(5).GT.TINY) THEN !No disslv Cl-;solid only
7158          DO 30 I=1,NIONS
7159             MOLAL(I) = ZERO
7160 30       CONTINUE
7161          DO 40 I=1,NGASAQ
7162             GASAQ(I) = ZERO
7163 40       CONTINUE
7164          CALL CALCU1A2p1
7165       ELSE
7166       A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
7167       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
7168       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
7170       GNH3    = NH4I/HI/A2
7171       GHNO3   = HI*NO3I/A3
7172       GHCL    = HI*CLI /A4
7174       GASAQ(1)= NH3AQ
7175       GASAQ(2)= CLAQ
7176       GASAQ(3)= NO3AQ
7178       CNH42S4 = ZERO
7179       CNH4NO3 = ZERO
7180       CNH4CL  = CHI4 - PSI4
7181       CNACL   = CHI3 - PSI3
7182       CNANO3  = ZERO
7183       CNA2SO4 = CHI1 - PSI1
7184       CMGSO4  = ZERO
7185       CK2SO4  = CHI7 - PSI7
7186       CCASO4  = MIN (WAER(6), WAER(2))
7187       ENDIF
7189       RETURN
7191 !C *** END OF SUBROUTINE CALCU3A*****************************************
7193       END
7195 !C=======================================================================
7197 !C *** ISORROPIA CODE II
7198 !C *** SUBROUTINE CALCU2
7199 !C *** CASE U2
7201 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
7202 !C     1. SULFATE POOR (SO4RAT > 2.0), (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
7203 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
7204 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL, NANO3, NACL
7206 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
7207 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
7208 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
7210 !C=======================================================================
7212       SUBROUTINE CALCU22p1
7213       INCLUDE 'module_isrpia_inc.F'
7214       LOGICAL  EXAN, EXAC, EXSN, EXSC
7215       EXTERNAL CALCU1A2p1, CALCU3A2p1, CALCU4A2p1, CALCU52p1
7217 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
7219       SCASE = 'U2 ; SUBCASE 2'
7220       CALL CALCU1A2p1              ! SOLID
7221       SCASE = 'U2 ; SUBCASE 2'
7223       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
7224       EXAC = CNH4CL .GT.TINY    ! NH4CL
7225       EXSN = CNANO3 .GT.TINY    ! NANO3
7226       EXSC = CNACL  .GT.TINY    ! NACL
7228 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
7230       IF (EXAN) THEN                             ! *** NH4NO3 EXISTS
7231         IF (RH.GE.DRMM1) THEN
7232            SCASE = 'U2 ; SUBCASE 1'
7233            CALL CALCU2A2p1
7234            SCASE = 'U2 ; SUBCASE 1'
7235         ENDIF
7237       ELSE IF (.NOT.EXAN) THEN                   ! *** NH4NO3 = 0
7238         IF      (     EXAC .AND.      EXSN .AND.      EXSC) THEN
7239            IF (RH.GE.DRMM2) THEN
7240               SCASE = 'U2 ; SUBCASE 3'
7241                CALL CALCMDRPII2p1 (RH, DRMM2, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7242                SCASE = 'U2 ; SUBCASE 3'
7243             ENDIF
7245          ELSE IF (.NOT.EXAC .AND.      EXSN .AND.      EXSC) THEN
7246             IF (RH.GE.DRMR1) THEN
7247                SCASE = 'U2 ; SUBCASE 4'
7248                CALL CALCMDRPII2p1 (RH, DRMR1, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7249                SCASE = 'U2 ; SUBCASE 4'
7250             ENDIF
7252          ELSE IF (.NOT.EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
7253             IF (RH.GE.DRMR2) THEN
7254                SCASE = 'U2 ; SUBCASE 5'
7255                CALL CALCMDRPII2p1 (RH, DRMR2, DRNACL, CALCU1A2p1, CALCU4A2p1)
7256                SCASE = 'U2 ; SUBCASE 5'
7257             ENDIF
7259          ELSE IF (.NOT.EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
7260             IF (RH.GE.DRMR3) THEN
7261                SCASE = 'U2 ; SUBCASE 6'
7262                CALL CALCMDRPII2p1 (RH, DRMR3, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7263                SCASE = 'U2 ; SUBCASE 6'
7264             ENDIF
7266          ELSE IF (     EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
7267             IF (RH.GE.DRMR4) THEN
7268                SCASE = 'U2 ; SUBCASE 7'
7269                CALL CALCMDRPII2p1 (RH, DRMR4, DRNACL, CALCU1A2p1, CALCU4A2p1)
7270                SCASE = 'U2 ; SUBCASE 7'
7271             ENDIF
7273          ELSE IF (     EXAC .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
7274             IF (RH.GE.DRMR5) THEN
7275                SCASE = 'U2 ; SUBCASE 8'
7276                CALL CALCMDRPII2p1 (RH, DRMR5, DRNH4CL, CALCU1A2p1, CALCU52p1)
7277                SCASE = 'U2 ; SUBCASE 8'
7278             ENDIF
7280          ELSE IF (     EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
7281            IF (RH.GE.DRMR6) THEN
7282               SCASE = 'U2 ; SUBCASE 9'
7283                CALL CALCMDRPII2p1 (RH, DRMR6, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7284                SCASE = 'U2 ; SUBCASE 9'
7285             ENDIF
7286          ENDIF
7288       ENDIF
7290       RETURN
7292 !C      IF (W(4).GT.TINY) THEN        ! NO3 EXISTS, WATER POSSIBLE
7293 !C         SCASE = 'U2 ; SUBCASE 1'
7294 !C         CALL CALCU2A
7295 !C         SCASE = 'U2 ; SUBCASE 1'
7296 !C      ELSE                          ! NO3 NON EXISTANT, WATER NOT POSSIBLE
7297 !C         SCASE = 'U2 ; SUBCASE 1'
7298 !C         CALL CALCU1A
7299 !C         SCASE = 'U2 ; SUBCASE 1'
7300 !C      ENDIF
7302 !C      IF (WATER.LE.TINY .AND. RH.LT.DRMM2) THEN      ! DRY AEROSOL
7303 !C         SCASE = 'U2 ; SUBCASE 2'
7304 !C         CALL CALCU2A
7305 !C         SCASE = 'U2 ; SUBCASE 1'
7307 !C      ELSEIF (WATER.LE.TINY .AND. RH.GE.DRMM2) THEN  ! MDRH OF M2
7308 !C         SCASE = 'U2 ; SUBCASE 3'
7309 !C         CALL CALCMDRPII (RH, DRMM2, DRNANO3, CALCU1A, CALCU3A)
7310 !C         SCASE = 'U2 ; SUBCASE 3'
7311 !C      ENDIF
7313 !C      RETURN
7315 !C *** END OF SUBROUTINE CALCU2 ******************************************
7317       END
7319 !C=======================================================================
7321 !C *** ISORROPIA CODE II
7322 !C *** SUBROUTINE CALCU2A
7323 !C *** CASE U2A
7325 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
7326 !C     1. SULFATE POOR (SO4RAT > 2.0), Cr+NA poor (CRNARAT < 2)
7327 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
7328 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL, NACL, NANO3
7329 !C     4. Completely dissolved: NH4NO3
7331 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
7332 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
7333 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
7335 !C=======================================================================
7337       SUBROUTINE CALCU2A2p1
7338       INCLUDE 'module_isrpia_inc.F'
7340       LOGICAL PSCONV7, PSCONV1, PSCONV4, PSCONV3, PSCONV5
7341       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
7343       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
7344                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
7345                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
7346                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
7347                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
7348                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
7350 !C *** SETUP PARAMETERS ************************************************
7352       FRST    =.TRUE.
7353       CALAIN  =.TRUE.
7354       CALAOU  =.TRUE.
7356       PSCONV7 =.FALSE.
7357       PSCONV1 =.FALSE.
7358       PSCONV4 =.FALSE.
7359       PSCONV3 =.FALSE.
7360       PSCONV5 =.FALSE.
7362       PSI70   =-GREAT                                 ! GREAT = 1.D10
7363       PSI1O   =-GREAT
7364       PSI40   =-GREAT
7365       PSI30   =-GREAT
7366       PSI50   =-GREAT
7368       ROOT7   = ZERO
7369       ROOT1   = ZERO
7370       ROOT4   = ZERO
7371       ROOT3   = ZERO
7372       ROOT5   = ZERO
7374 !C *** CALCULATE INITIAL SOLUTION ***************************************
7376       CALL CALCU1A2p1
7378       CHI1   = CNA2SO4            ! SALTS
7379       CHI2   = CNANO3
7380       CHI3   = CNACL
7381       CHI4   = CNH4CL
7382       CHI7   = CK2SO4
7383       CHI8   = CMGSO4
7384       CHI9   = CCASO4
7386       PSI1   = CNA2SO4      ! AMOUNT DISSOLVED
7387       PSI2   = CNANO3
7388       PSI3   = CNACL
7389       PSI4   = CNH4CL
7390       PSI5   = CNH4NO3
7391       PSI7   = CK2SO4
7392       PSI8   = CMGSO4
7393       PSI9   = CCASO4
7395       CALL CALCMR2p1           ! WATER
7397       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
7398       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
7399       NH4I   = WAER(3)
7400       NO3I   = WAER(4)
7401       CLI    = WAER(5)
7402       CAI    = WAER(6)
7403       KI     = WAER(7)
7404       MGI    = WAER(8)
7406       HSO4I  = ZERO
7407       NH3AQ  = ZERO
7408       NO3AQ  = ZERO
7409       CLAQ   = ZERO
7411       MOLAL(1) = ZERO
7412       MOLAL(2) = NAI
7413       MOLAL(3) = NH4I
7414       MOLAL(4) = CLI
7415       MOLAL(5) = SO4I
7416       MOLAL(6) = HSO4I
7417       MOLAL(7) = NO3I
7418       MOLAL(8) = CAI
7419       MOLAL(9) = KI
7420       MOLAL(10)= MGI
7422       CALL CALCACT2p1          ! CALCULATE ACTIVITY COEFFICIENTS
7424 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
7426       DO 10 I=1,NSWEEP
7428       A7  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
7429       A1  = XK5 *(WATER/GAMA(2))**3.0        ! NA2S04    <==> Na+
7430       A14 = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
7431       A8  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
7432       A9  = XK9 *(WATER/GAMA(3))**2.0        ! NaNO3     <==> Na+
7433       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
7435 !C POTASSIUM SULFATE
7437       IF (KI*KI*SO4I .GT. A7) THEN
7438          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT1)
7439          CC = WAER(7)*((WAER(2)-WAER(6)) - ROOT1) + 0.25*WAER(7)*WAER(7)
7440          DD =-0.25*(WAER(7)*WAER(7)*((WAER(2)-WAER(6)) - ROOT1) - A7)
7441          CALL POLY32p1(BB, CC, DD, ROOT7, ISLV)
7442          IF (ISLV.NE.0) ROOT7 = TINY
7443          ROOT7 = MAX (ROOT7, ZERO)
7444          ROOT7 = MIN (ROOT7, WAER(7)/2.0, &
7445                       MAX(WAER(2)-WAER(6)-ROOT1, ZERO),CHI7)
7446          PSI7  = CHI7-ROOT7
7447       ENDIF
7448       PSCONV7 = ABS(PSI7-PSI70) .LE. EPS*PSI70
7449       PSI70   = PSI7
7451 !C SODIUM SULFATE
7453       IF (NAI*NAI*SO4I .GT. A1) THEN
7454          BB =-(((WAER(2)-WAER(6))-ROOT7)*(WAER(1) - ROOT3 - ROOT5))
7455          CC = ((WAER(2)-WAER(6)) - ROOT7)*(WAER(1) - ROOT3 - ROOT5) + &
7456                0.25D0*(WAER(1) - ROOT3 - ROOT5)**2.0
7457          DD =-0.25D0*(((WAER(2) - WAER(6)) - ROOT7)* &
7458                       (WAER(1) - ROOT3 - ROOT5)**2.D0 - A1)
7459          CALL POLY32p1(BB, CC, DD, ROOT1, ISLV)
7460          IF (ISLV.NE.0) ROOT1 = TINY
7461          ROOT1 = MIN (MAX(ROOT1,ZERO), MAX(WAER(1)-ROOT3-ROOT5,ZERO), &
7462                       CHI1, MAX(WAER(2)-WAER(6),ZERO))
7463          PSI1  = CHI1-ROOT1
7464       ENDIF
7465       PSCONV1 = ABS(PSI1-PSI1O) .LE. EPS*PSI1O
7466       PSI1O   = PSI1
7468 !C AMMONIUM CHLORIDE
7470       IF (NH4I*CLI .GT. A14) THEN
7471          BB    =-(WAER(3) + WAER(5) - ROOT4)
7472          CC    =-A14 + NH4I*(WAER(5) - ROOT4)
7473          DD    = MAX(BB*BB - 4.D0*CC, ZERO)
7474          ROOT4A= 0.5D0*(-BB+SQRT(DD))
7475          ROOT4B= 0.5D0*(-BB-SQRT(DD))
7476          IF (ZERO.LE.ROOT4A) THEN
7477             ROOT4 = ROOT4A
7478          ELSE
7479             ROOT4 = ROOT4B
7480          ENDIF
7481          ROOT4 = MIN(MAX(ZERO, ROOT4), MAX(WAER(5)-ROOT3,ZERO), &
7482                      CHI4, WAER(3))
7483          PSI4  = CHI4 - ROOT4
7484       ENDIF
7485       PSCONV4 = ABS(PSI4-PSI40) .LE. EPS*PSI40
7486       PSI40   = PSI4
7488 !C SODIUM CHLORIDE  ; To obtain new value for ROOT3
7490       IF (NAI*CLI .GT. A8) THEN
7491          BB    =-((CHI1-2.D0*ROOT1-ROOT5) + (WAER(5) - ROOT4))
7492          CC    = (CHI1-2.D0*ROOT1-ROOT5)*(WAER(5) - ROOT4) - A8
7493          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
7494          ROOT3A= 0.5D0*(-BB-SQRT(DD))
7495          ROOT3B= 0.5D0*(-BB+SQRT(DD))
7496          IF (ZERO.LE.ROOT3A) THEN
7497             ROOT3 = ROOT3A
7498          ELSE
7499             ROOT3 = ROOT3B
7500          ENDIF
7501          ROOT3   = MIN(MAX(ROOT3, ZERO), CHI3)
7502          PSI3    = CHI3-ROOT3
7503       ENDIF
7504       PSCONV3 = ABS(PSI3-PSI30) .LE. EPS*PSI30
7505       PSI30   = PSI3
7507 !C SODIUM NITRATE
7509       IF (NAI*NO3I .GT. A9) THEN
7510          BB    =-(WAER(4) + WAER(1) - 2.D0*ROOT1 - ROOT3)
7511          CC    = WAER(4)*(WAER(1) - 2.D0*ROOT1 - ROOT3) - A9
7512          DD    = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
7513          ROOT5A= 0.5D0*(-BB-DD)
7514          ROOT5B= 0.5D0*(-BB+DD)
7515          IF (ZERO.LE.ROOT5A) THEN
7516             ROOT5 = ROOT5A
7517          ELSE
7518             ROOT5 = ROOT5B
7519          ENDIF
7520          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI2)
7521          PSI2  = CHI2-ROOT5
7522       ENDIF
7524       PSCONV5 = ABS(PSI2-PSI20) .LE. EPS*PSI20
7525       PSI20   = PSI2
7527 !C ION CONCENTRATIONS ; CORRECTIONS
7529       KI     = MAX (WAER(7) - 2.0D0*ROOT7, ZERO)
7530       NAI    = MAX (WAER(1) - 2.0D0*ROOT1 - ROOT3 - ROOT5, ZERO)
7531       SO4I   = MAX (WAER(2) - WAER(6) - ROOT7 - ROOT1, ZERO)
7532       NH4I   = MAX (WAER(3) - ROOT4, ZERO)
7533       NO3I   = MAX (WAER(4) - ROOT5, ZERO)
7534       CLI    = MAX (WAER(5) - ROOT4 - ROOT3, ZERO)
7535       CAI    = ZERO
7536       MGI    = WAER(8)
7538 !C SOLUTION ACIDIC OR BASIC?
7540       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
7541              - 2.D0*CAI - KI - 2.D0*MGI
7542       IF (GG.GT.TINY) THEN                        ! H+ in excess
7543          BB =-GG
7544          CC =-AKW
7545          DD = BB*BB - 4.D0*CC
7546          HI = 0.5D0*(-BB + SQRT(DD))
7547          OHI= AKW/HI
7548       ELSE                                        ! OH- in excess
7549          BB = GG
7550          CC =-AKW
7551          DD = BB*BB - 4.D0*CC
7552          OHI= 0.5D0*(-BB + SQRT(DD))
7553          HI = AKW/OHI
7554       ENDIF
7555 !C      IF (HI.LE.TINY) HI = SQRT(AKW)
7556 !C      OHI   = AKW/HI
7558 !C UNDISSOCIATED SPECIES EQUILIBRIA
7560       IF (HI.GT.OHI) THEN
7561 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
7562 !C         HI    = AKW/OHI
7563 !C         HSO4I = ZERO
7564 !C      ELSE
7565 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
7566 !C     &           - KI - 2.D0*MGI, ZERO)
7567 !C         GGCL  = MAX(GG-GGNO3, ZERO)
7568 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
7569 !C         IF (GGNO3.GT.TINY) THEN
7570 !C            IF (GGCL.LE.TINY) HI = ZERO
7571 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
7572 !C         ENDIF
7574 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
7576          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
7577       else
7578         del= zero
7579       ENDIF
7580       SO4I  = SO4I  - DEL
7581       HI    = HI    - DEL
7582       HSO4I = DEL
7583 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
7584       OHI   = AKW/HI
7586       IF (HI.LE.TINY) THEN
7587       HI = SQRT(AKW)
7588       OHI   = AKW/HI
7589       ENDIF
7591 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
7593       MOLAL(1) = HI
7594       MOLAL(2) = NAI
7595       MOLAL(3) = NH4I
7596       MOLAL(4) = CLI
7597       MOLAL(5) = SO4I
7598       MOLAL(6) = HSO4I
7599       MOLAL(7) = NO3I
7600       MOLAL(8) = CAI
7601       MOLAL(9) = KI
7602       MOLAL(10)= MGI
7604 !C *** CALCULATE WATER **************************************************
7606       CALL CALCMR2p1
7608 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
7610       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
7611          CALL CALCACT2p1
7612       ELSE
7613          IF (PSCONV7 .AND. PSCONV1 .AND. PSCONV4 .AND. PSCONV3 &
7614               .AND. PSCONV5) GOTO 20
7615       ENDIF
7616 10    CONTINUE
7617 !ccc      CALL PUSHERR (0002, 'CALCU2A')    ! WARNING ERROR: NO CONVERGENCE
7619 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
7621 20    IF (CLI.LE.TINY .AND. WAER(5).GT.TINY) THEN !No disslv Cl-;solid only
7622          DO 30 I=1,NIONS
7623             MOLAL(I) = ZERO
7624 30       CONTINUE
7625          DO 40 I=1,NGASAQ
7626             GASAQ(I) = ZERO
7627 40       CONTINUE
7628          CALL CALCU1A2p1
7629       ELSE                                     ! OK, aqueous phase present
7630       A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
7631       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
7632       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
7634       GNH3    = NH4I/HI/A2
7635       GHNO3   = HI*NO3I/A3
7636       GHCL    = HI*CLI /A4
7638       GASAQ(1)= NH3AQ
7639       GASAQ(2)= CLAQ
7640       GASAQ(3)= NO3AQ
7642       CNH42S4 = ZERO
7643       CNH4NO3 = ZERO
7644       CNH4CL  = CHI4 - PSI4
7645       CNACL   = CHI3 - PSI3
7646       CNANO3  = CHI2 - PSI2
7647       CNA2SO4 = CHI1 - PSI1
7648       CMGSO4  = ZERO
7649       CK2SO4  = CHI7 - PSI7
7650       CCASO4  = MIN (WAER(6), WAER(2))
7651       ENDIF
7653       RETURN
7655 !C *** END OF SUBROUTINE CALCU2A*****************************************
7657       END
7659 !C=======================================================================
7661 !C *** ISORROPIA CODE II
7662 !C *** SUBROUTINE CALCU1
7663 !C *** CASE U1
7665 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
7666 !C     1. SULFATE POOR (SO4RAT > 2.0), (DUST + SODIUM) RICH: R(Cr+Na)>2; DUST POOR: Rcr<2.
7667 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
7668 !C     3. SOLIDS POSSIBLE : K2SO4, CASO4, NA2SO4, MGSO4, NH4CL, NANO3, NACL, NH4NO3
7670 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
7671 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
7672 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
7674 !C=======================================================================
7676       SUBROUTINE CALCU12p1
7677       INCLUDE 'module_isrpia_inc.F'
7678       LOGICAL  EXAN, EXAC, EXSN, EXSC
7679       EXTERNAL CALCU1A2p1, CALCU2A2p1, CALCU3A2p1, CALCU4A2p1, CALCU52p1
7681 !C *** SOLVE FOR DRY CASE AND SEE WHICH SOLIDS ARE POSSIBLE **************
7683       SCASE = 'U1 ; SUBCASE 1'
7684       CALL CALCU1A2p1              ! SOLID
7685       SCASE = 'U1 ; SUBCASE 1'
7687       EXAN = CNH4NO3.GT.TINY    ! NH4NO3
7688       EXAC = CNH4CL .GT.TINY    ! NH4CL
7689       EXSN = CNANO3 .GT.TINY    ! NANO3
7690       EXSC = CNACL  .GT.TINY    ! NACL
7692 !C *** REGIME DEPENDS ON RELATIVE HUMIDITY AND POSSIBLE SPECIES **********
7694       IF (EXAN.OR.EXAC.OR.EXSC.OR.EXSN) THEN  ! *** WATER POSSIBLE
7695          IF (RH.GE.DRMM1) THEN
7696             SCASE = 'U1 ; SUBCASE 2'  ! MDRH
7697             CALL CALCMDRPII2p1 (RH, DRMM1, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7698             SCASE = 'U1 ; SUBCASE 2'
7699          ENDIF
7701       ELSE IF (.NOT.EXAN) THEN                   ! *** NH4NO3 = 0
7702          IF      (     EXAC .AND.      EXSN .AND.      EXSC) THEN
7703             IF (RH.GE.DRMM2) THEN
7704                SCASE = 'U1 ; SUBCASE 3'
7705                CALL CALCMDRPII2p1 (RH, DRMM2, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7706                SCASE = 'U1 ; SUBCASE 3'
7707             ENDIF
7709          ELSE IF (.NOT.EXAC .AND.      EXSN .AND.      EXSC) THEN
7710             IF (RH.GE.DRMR1) THEN
7711               SCASE = 'U1 ; SUBCASE 4'
7712                CALL CALCMDRPII2p1 (RH, DRMR1, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7713                SCASE = 'U1 ; SUBCASE 4'
7714             ENDIF
7716          ELSE IF (.NOT.EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
7717             IF (RH.GE.DRMR2) THEN
7718                SCASE = 'U1 ; SUBCASE 5'
7719                CALL CALCMDRPII2p1 (RH, DRMR2, DRNACL, CALCU1A2p1, CALCU3A2p1) !, CALCR4A)
7720                SCASE = 'U1 ; SUBCASE 5'
7721             ENDIF
7723          ELSE IF (.NOT.EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
7724             IF (RH.GE.DRMR3) THEN
7725                SCASE = 'U1 ; SUBCASE 6'
7726                CALL CALCMDRPII2p1 (RH, DRMR3, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7727                SCASE = 'U1 ; SUBCASE 6'
7728             ENDIF
7730          ELSE IF (     EXAC .AND. .NOT.EXSN .AND.      EXSC) THEN
7731             IF (RH.GE.DRMR4) THEN
7732                SCASE = 'U1 ; SUBCASE 7'
7733                CALL CALCMDRPII2p1 (RH, DRMR4, DRNACL, CALCU1A2p1, CALCU3A2p1) !, CALCR4A)
7734                SCASE = 'U1 ; SUBCASE 7'
7735             ENDIF
7737          ELSE IF (     EXAC .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
7738             IF (RH.GE.DRMR5) THEN
7739                SCASE = 'U1 ; SUBCASE 8'
7740                CALL CALCMDRPII2p1 (RH, DRMR5, DRNH4CL, CALCU1A2p1, CALCU3A2p1) !, CALCR5)
7741                SCASE = 'U1 ; SUBCASE 8'
7742             ENDIF
7744          ELSE IF (     EXAC .AND.      EXSN .AND. .NOT.EXSC) THEN
7745             IF (RH.GE.DRMR6) THEN
7746                SCASE = 'U1 ; SUBCASE 9'
7747                CALL CALCMDRPII2p1 (RH, DRMR6, DRNANO3, CALCU1A2p1, CALCU3A2p1)
7748                SCASE = 'U1 ; SUBCASE 9'
7749             ENDIF
7750          ENDIF
7752       ELSE IF (.NOT.EXAC) THEN                   ! *** NH4CL  = 0
7753          IF      (     EXAN .AND.      EXSN .AND.      EXSC) THEN
7754             IF (RH.GE.DRMR7) THEN
7755                SCASE = 'U1 ; SUBCASE 10'
7756                CALL CALCMDRPII2p1 (RH, DRMR7, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7757                SCASE = 'U1 ; SUBCASE 10'
7758             ENDIF
7760          ELSE IF (     EXAN .AND. .NOT.EXSN .AND.      EXSC) THEN
7761             IF (RH.GE.DRMR8) THEN
7762               SCASE = 'U1 ; SUBCASE 11'
7763               CALL CALCMDRPII2p1 (RH, DRMR8, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7764                SCASE = 'U1 ; SUBCASE 11'
7765             ENDIF
7767          ELSE IF (     EXAN .AND. .NOT.EXSN .AND. .NOT.EXSC) THEN
7768             IF (RH.GE.DRMR9) THEN
7769                SCASE = 'U1 ; SUBCASE 12'
7770                CALL CALCMDRPII2p1 (RH, DRMR9, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7771                SCASE = 'U1 ; SUBCASE 12'
7772             ENDIF
7774          ELSE IF (     EXAN .AND.      EXSN .AND. .NOT.EXSC) THEN
7775             IF (RH.GE.DRMR10) THEN
7776                SCASE = 'U1 ; SUBCASE 13'
7777                CALL CALCMDRPII2p1 (RH, DRMR10, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7778                SCASE = 'U1 ; SUBCASE 13'
7779            ENDIF
7780         ENDIF
7782       ELSE IF (.NOT.EXSN) THEN                  ! *** NANO3  = 0
7783          IF      (     EXAN .AND.      EXAC .AND.      EXSC) THEN
7784             IF (RH.GE.DRMR11) THEN
7785                SCASE = 'U1 ; SUBCASE 14'
7786                CALL CALCMDRPII2p1 (RH, DRMR11, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7787               SCASE = 'U1 ; SUBCASE 14'
7788            ENDIF
7790         ELSE IF (     EXAN .AND.      EXAC .AND. .NOT.EXSC) THEN
7791             IF (RH.GE.DRMR12) THEN
7792                SCASE = 'U1 ; SUBCASE 15'
7793                CALL CALCMDRPII2p1 (RH, DRMR12, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7794                SCASE = 'U1 ; SUBCASE 15'
7795             ENDIF
7796          ENDIF
7798       ELSE IF (.NOT.EXSC) THEN                  ! *** NACL   = 0
7799          IF      (     EXAN .AND.      EXAC .AND.      EXSN) THEN
7800             IF (RH.GE.DRMR13) THEN
7801                SCASE = 'U1 ; SUBCASE 16'
7802                CALL CALCMDRPII2p1 (RH, DRMR13, DRNH4NO3, CALCU1A2p1, CALCU2A2p1)
7803                SCASE = 'U1 ; SUBCASE 16'
7804             ENDIF
7805          ENDIF
7806       ENDIF
7808       RETURN
7811 !C      IF (RH.LT.DRMM1) THEN
7812 !C         SCASE = 'U1 ; SUBCASE 1'
7813 !C         CALL CALCU1A              ! SOLID PHASE ONLY POSSIBLE
7814 !C         SCASE = 'U1 ; SUBCASE 1'
7815 !C      ELSE
7816 !C         SCASE = 'U1 ; SUBCASE 2'  ! LIQUID & SOLID PHASE POSSIBLE
7817 !C         CALL CALCMDRPII (RH, DRMM1, DRNH4NO3, CALCU1A, CALCU2A)
7818 !C         SCASE = 'U1 ; SUBCASE 2'
7819 !C         ENDIF
7821 !C      RETURN
7823 !C *** END OF SUBROUTINE CALCU1 ******************************************
7825       END
7827 !C=======================================================================
7829 !C *** ISORROPIA CODE
7830 !C *** SUBROUTINE CALCU1A
7831 !C *** CASE U1A
7833 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
7834 !C     1. SULFATE POOR (SULRAT > 2.0); CRUSTAL+SODIUM RICH (CRNARAT >= 2.0); CRUSTAL POOR (CRRAT<2)
7835 !C     2. THERE IS ONLY A SOLID PHASE
7837 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
7838 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
7839 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
7841 !C=======================================================================
7843       SUBROUTINE CALCU1A2p1
7844       INCLUDE 'module_isrpia_inc.F'
7846 !C *** CALCULATE SOLIDS *************************************************
7848       CCASO4  = MIN (WAER(6), WAER(2))                 ! CCASO4
7849       SO4FR   = MAX(WAER(2) - CCASO4, ZERO)
7850       CAFR    = MAX(WAER(6) - CCASO4, ZERO)
7851       CK2SO4  = MIN (0.5D0*WAER(7), SO4FR)             ! CK2SO4
7852       FRK     = MAX(WAER(7) - 2.D0*CK2SO4, ZERO)
7853       SO4FR   = MAX(SO4FR - CK2SO4, ZERO)
7854       CMGSO4  = MIN (WAER(8), SO4FR)                   ! CMGSO4
7855       FRMG    = MAX(WAER(8) - CMGSO4, ZERO)
7856       SO4FR   = MAX(SO4FR - CMGSO4, ZERO)
7857       CNA2SO4 = MAX (SO4FR, ZERO)                      ! CNA2SO4
7858       FRNA    = MAX (WAER(1) - 2.D0*CNA2SO4, ZERO)
7860       CNH42S4 = ZERO
7862       CNANO3  = MIN (FRNA, WAER(4))
7863       FRNO3   = MAX (WAER(4)-CNANO3, ZERO)
7864       FRNA    = MAX (FRNA-CNANO3, ZERO)
7866       CNACL   = MIN (FRNA, WAER(5))
7867       FRCL    = MAX (WAER(5)-CNACL, ZERO)
7868       FRNA    = MAX (FRNA-CNACL, ZERO)
7870       CNH4NO3 = MIN (FRNO3, WAER(3))
7871       FRNO3   = MAX (FRNO3-CNH4NO3, ZERO)
7872       FRNH3   = MAX (WAER(3)-CNH4NO3, ZERO)
7874       CNH4CL  = MIN (FRCL, FRNH3)
7875       FRCL    = MAX (FRCL-CNH4CL, ZERO)
7876       FRNH3   = MAX (FRNH3-CNH4CL, ZERO)
7878 !C *** OTHER PHASES ******************************************************
7880       WATER   = ZERO
7882       GNH3    = ZERO
7883       GHNO3   = ZERO
7884       GHCL    = ZERO
7886       RETURN
7888 !C *** END OF SUBROUTINE CALCU1A *****************************************
7890       END
7892 !C=======================================================================
7894 !C *** ISORROPIA CODE II
7895 !C *** SUBROUTINE CALCW13
7896 !C *** CASE W13
7898 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
7899 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
7900 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
7901 !C     3. SOLIDS POSSIBLE : CaSO4
7902 !C     4. Completely dissolved: CA(NO3)2, CACL2, K2SO4, KNO3, KCL, MGSO4,
7903 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
7905 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY
7906 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
7907 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS AND ATHANASIOS NENES
7909 !C=======================================================================
7911       SUBROUTINE CALCW132p1
7912       INCLUDE 'module_isrpia_inc.F'
7914       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
7916       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
7917                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
7918                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
7919                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
7920                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
7921                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
7923 !C *** SETUP PARAMETERS ************************************************
7925       FRST    =.TRUE.
7926       CALAIN  =.TRUE.
7927       CALAOU  =.TRUE.
7929 !C *** CALCULATE INITIAL SOLUTION ***************************************
7931       CALL CALCW1A2p1
7933       CHI11   = CCASO4
7935       PSI1   = CNA2SO4      ! SALTS DISSOLVED
7936       PSI5   = CNH4CL
7937       PSI6   = CNH4NO3
7938       PSI7   = CNACL
7939       PSI8   = CNANO3
7940       PSI9   = CK2SO4
7941       PSI10  = CMGSO4
7942       PSI11  = CCASO4
7943       PSI12  = CCANO32
7944       PSI13  = CKNO3
7945       PSI14  = CKCL
7946       PSI15  = CMGNO32
7947       PSI16  = CMGCL2
7948       PSI17  = CCACL2
7950       CALL CALCMR2p1           ! WATER
7952       NH3AQ  = ZERO
7953       NO3AQ  = ZERO
7954       CLAQ   = ZERO
7956 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
7958       DO 10 I=1,NSWEEP
7960       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
7962 !C ION CONCENTRATIONS
7964       NAI    = WAER(1)
7965       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
7966       NH4I   = WAER(3)
7967       NO3I   = WAER(4)
7968       CLI    = WAER(5)
7969       CAI    = ZERO
7970       KI     = WAER(7)
7971       MGI    = WAER(8)
7973 !C SOLUTION ACIDIC OR BASIC?
7975       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
7976              - 2.D0*CAI - KI - 2.D0*MGI
7977       IF (GG.GT.TINY) THEN                        ! H+ in excess
7978          BB =-GG
7979          CC =-AKW
7980          DD = BB*BB - 4.D0*CC
7981          HI = 0.5D0*(-BB + SQRT(DD))
7982          OHI= AKW/HI
7983       ELSE                                        ! OH- in excess
7984          BB = GG
7985          CC =-AKW
7986          DD = BB*BB - 4.D0*CC
7987          OHI= 0.5D0*(-BB + SQRT(DD))
7988          HI = AKW/OHI
7989       ENDIF
7991 !C UNDISSOCIATED SPECIES EQUILIBRIA
7993       IF (HI.GT.OHI) THEN
7994 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
7995 !C         HI    = AKW/OHI
7996 !C         HSO4I = ZERO
7997 !C      ELSE
7998 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
7999 !C     &           - KI - 2.D0*MGI, ZERO)
8000 !C         GGCL  = MAX(GG-GGNO3, ZERO)
8001 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
8002 !C         IF (GGNO3.GT.TINY) THEN
8003 !C            IF (GGCL.LE.TINY) HI = ZERO
8004 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
8005 !C         ENDIF
8007 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
8009          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
8010       else
8011         del= zero
8012       ENDIF
8013       SO4I  = SO4I  - DEL
8014       HI    = HI    - DEL
8015       HSO4I = DEL
8016 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
8017       OHI   = AKW/HI
8019       IF (HI.LE.TINY) THEN
8020       HI = SQRT(AKW)
8021       OHI   = AKW/HI
8022       ENDIF
8024 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
8026       MOLAL(1) = HI
8027       MOLAL(2) = NAI
8028       MOLAL(3) = NH4I
8029       MOLAL(4) = CLI
8030       MOLAL(5) = SO4I
8031       MOLAL(6) = HSO4I
8032       MOLAL(7) = NO3I
8033       MOLAL(8) = CAI
8034       MOLAL(9) = KI
8035       MOLAL(10)= MGI
8037 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
8039       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
8040          CALL CALCACT2p1
8041       ELSE
8042          GOTO 20
8043       ENDIF
8044 10    CONTINUE
8045 !ccc      CALL PUSHERR (0002, 'CALCW13')    ! WARNING ERROR: NO CONVERGENCE
8047 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
8049 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
8050       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
8051       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
8053       GNH3    = NH4I/HI/A2
8054       GHNO3   = HI*NO3I/A3
8055       GHCL    = HI*CLI /A4
8057       GASAQ(1)= NH3AQ
8058       GASAQ(2)= CLAQ
8059       GASAQ(3)= NO3AQ
8061       CNH42S4 = ZERO
8062       CNH4NO3 = ZERO
8063       CNH4CL  = ZERO
8064       CNACL   = ZERO
8065       CNANO3  = ZERO
8066       CMGSO4  = ZERO
8067       CK2SO4  = ZERO
8068       CCASO4  = MIN (WAER(6), WAER(2))
8069       CCANO32 = ZERO
8070       CKNO3   = ZERO
8071       KCL     = ZERO
8072       CMGNO32 = ZERO
8073       CMGCL2  = ZERO
8074       CCACL2  = ZERO
8076       RETURN
8078 !C *** END OF SUBROUTINE CALCW13 ******************************************
8080       END
8081 !C=======================================================================
8083 !C *** ISORROPIA CODE II
8084 !C *** SUBROUTINE CALCW12
8085 !C *** CASE W12
8087 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
8088 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
8089 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
8090 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4
8091 !C     4. Completely dissolved: CA(NO3)2, CACL2, KNO3, KCL, MGSO4,
8092 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
8094 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
8095 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
8096 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
8098 !C=======================================================================
8100       SUBROUTINE CALCW122p1
8101       INCLUDE 'module_isrpia_inc.F'
8103       LOGICAL PSCONV9
8104       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
8106       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
8107                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
8108                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
8109                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
8110                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
8111                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
8113 !C *** SETUP PARAMETERS ************************************************
8115       FRST    =.TRUE.
8116       CALAIN  =.TRUE.
8117       CALAOU  =.TRUE.
8119       PSCONV9 =.TRUE.
8120       PSI9O   =-GREAT                                 ! GREAT = 1.D10
8121       ROOT9   = ZERO
8123 !C *** CALCULATE INITIAL SOLUTION ***************************************
8125       CALL CALCW1A2p1
8127       CHI9   = CK2SO4       ! SALTS
8128       CHI11   = CCASO4
8130       PSI1   = CNA2SO4      ! SALTS DISSOLVED
8131       PSI5   = CNH4CL
8132       PSI6   = CNH4NO3
8133       PSI7   = CNACL
8134       PSI8   = CNANO3
8135       PSI9   = CK2SO4
8136       PSI10  = CMGSO4
8137       PSI11  = CCASO4
8138       PSI12  = CCANO32
8139       PSI13  = CKNO3
8140       PSI14  = CKCL
8141       PSI15  = CMGNO32
8142       PSI16  = CMGCL2
8143       PSI17  = CCACL2
8145       CALL CALCMR2p1           ! WATER
8147       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
8148       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
8149       NH4I   = WAER(3)
8150       NO3I   = WAER(4)
8151       CLI    = WAER(5)
8152       CAI    = WAER(6)
8153       KI     = WAER(7)
8154       MGI    = WAER(8)
8156       HSO4I  = ZERO
8157       NH3AQ  = ZERO
8158       NO3AQ  = ZERO
8159       CLAQ   = ZERO
8161 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
8163       DO 10 I=1,NSWEEP
8165       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
8166       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
8168 !C POTASSIUM SULFATE
8170       IF (KI*KI*SO4I .GT. A9) THEN
8171          BB =-((WAER(2)-WAER(6)) + WAER(7))
8172          CC = WAER(7)*(WAER(2)-WAER(6)) + 0.25D0*WAER(7)*WAER(7)
8173          DD =-0.25*(WAER(7)*WAER(7)*(WAER(2)-WAER(6)) - A9)
8174          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
8175          IF (ISLV.NE.0) ROOT9 = TINY
8176          ROOT9 = MIN (ROOT9, WAER(7)/2.0, (WAER(2)-WAER(6)), CHI9)
8177          ROOT9 = MAX (ROOT9, ZERO)
8178          PSI9  = CHI9 - ROOT9
8179       ENDIF
8180       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
8181       PSI9O   = PSI9
8183 !C ION CONCENTRATIONS ; CORRECTIONS
8185       KI     = MAX (WAER(7) - 2.D0*ROOT9, ZERO)
8186       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
8187       NH4I   = WAER(3)
8188       NO3I   = WAER(4)
8189       CLI    = WAER(5)
8190       CAI    = ZERO
8191       NAI    = WAER(1)
8192       MGI    = WAER(8)
8194 !C SOLUTION ACIDIC OR BASIC?
8196       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
8197              - 2.D0*CAI - KI - 2.D0*MGI
8198       IF (GG.GT.TINY) THEN                        ! H+ in excess
8199          BB =-GG
8200          CC =-AKW
8201          DD = BB*BB - 4.D0*CC
8202          HI = 0.5D0*(-BB + SQRT(DD))
8203          OHI= AKW/HI
8204       ELSE                                        ! OH- in excess
8205          BB = GG
8206          CC =-AKW
8207          DD = BB*BB - 4.D0*CC
8208          OHI= 0.5D0*(-BB + SQRT(DD))
8209          HI = AKW/OHI
8210       ENDIF
8212 !C UNDISSOCIATED SPECIES EQUILIBRIA
8214       IF (HI.GT.OHI) THEN
8215 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
8216 !C         HI    = AKW/OHI
8217 !C         HSO4I = ZERO
8218 !C      ELSE
8219 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
8220 !C     &           - KI - 2.D0*MGI, ZERO)
8221 !C         GGCL  = MAX(GG-GGNO3, ZERO)
8222 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
8223 !C         IF (GGNO3.GT.TINY) THEN
8224 !C            IF (GGCL.LE.TINY) HI = ZERO
8225 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
8226 !C         ENDIF
8228 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
8230          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
8231       else
8232         del= zero
8233       ENDIF
8234       SO4I  = SO4I  - DEL
8235       HI    = HI    - DEL
8236       HSO4I = DEL
8237 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
8238       OHI   = AKW/HI
8240       IF (HI.LE.TINY) THEN
8241       HI = SQRT(AKW)
8242       OHI   = AKW/HI
8243       ENDIF
8245 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
8247       MOLAL(1) = HI
8248       MOLAL(2) = NAI
8249       MOLAL(3) = NH4I
8250       MOLAL(4) = CLI
8251       MOLAL(5) = SO4I
8252       MOLAL(6) = HSO4I
8253       MOLAL(7) = NO3I
8254       MOLAL(8) = CAI
8255       MOLAL(9) = KI
8256       MOLAL(10)= MGI
8258 !C *** CALCULATE WATER **************************************************
8260       CALL CALCMR2p1
8262 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
8264       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
8265          CALL CALCACT2p1
8266       ELSE
8267          IF (PSCONV9) GOTO 20
8268       ENDIF
8269 10    CONTINUE
8270 !ccc      CALL PUSHERR (0002, 'CALCW12')    ! WARNING ERROR: NO CONVERGENCE
8272 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
8274 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
8275       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
8276       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
8278       GNH3    = NH4I/HI/A2
8279       GHNO3   = HI*NO3I/A3
8280       GHCL    = HI*CLI /A4
8282       GASAQ(1)= NH3AQ
8283       GASAQ(2)= CLAQ
8284       GASAQ(3)= NO3AQ
8286       CNH42S4 = ZERO
8287       CNH4NO3 = ZERO
8288       CNH4CL  = ZERO
8289       CNACL   = ZERO
8290       CNANO3  = ZERO
8291       CMGSO4  = ZERO
8292       CK2SO4  = CHI9 - PSI9
8293       CCASO4  = MIN (WAER(6), WAER(2))
8294       CCANO32 = ZERO
8295       CKNO3   = ZERO
8296       KCL     = ZERO
8297       CMGNO32 = ZERO
8298       CMGCL2  = ZERO
8299       CCACL2  = ZERO
8301       RETURN
8303 !C *** END OF SUBROUTINE CALCW12 ******************************************
8305       END
8306 !C=======================================================================
8308 !C *** ISORROPIA CODE II
8309 !C *** SUBROUTINE CALCW11
8310 !C *** CASE W11
8312 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
8313 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
8314 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
8315 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3
8316 !C     4. Completely dissolved: CA(NO3)2, CACL2, KCL, MGSO4,
8317 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
8319 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
8320 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
8321 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
8323 !C=======================================================================
8325       SUBROUTINE CALCW112p1
8326       INCLUDE 'module_isrpia_inc.F'
8328       LOGICAL PSCONV9, PSCONV13
8329       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
8331       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
8332                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
8333                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
8334                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
8335                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
8336                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
8338 !C *** SETUP PARAMETERS ************************************************
8340       FRST    =.TRUE.
8341       CALAIN  =.TRUE.
8342       CALAOU  =.TRUE.
8344       PSCONV9 =.TRUE.
8345       PSCONV13=.TRUE.
8347       PSI9O   =-GREAT
8348       PSI13O  =-GREAT                                ! GREAT = 1.D10
8350       ROOT9   = ZERO
8351       ROOT13  = ZERO
8353 !C *** CALCULATE INITIAL SOLUTION ***************************************
8355       CALL CALCW1A2p1
8357       CHI9   = CK2SO4       ! SALTS
8358       CHI13  = CKNO3
8359       CHI11   = CCASO4
8361       PSI1   = CNA2SO4      ! SALTS DISSOLVED
8362       PSI5   = CNH4CL
8363       PSI6   = CNH4NO3
8364       PSI7   = CNACL
8365       PSI8   = CNANO3
8366       PSI9   = CK2SO4
8367       PSI10  = CMGSO4
8368       PSI11  = CCASO4
8369       PSI12  = CCANO32
8370       PSI13  = CKNO3
8371       PSI14  = CKCL
8372       PSI15  = CMGNO32
8373       PSI16  = CMGCL2
8374       PSI17  = CCACL2
8376       CALL CALCMR2p1           ! WATER
8378       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
8379       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
8380       NH4I   = WAER(3)
8381       NO3I   = WAER(4)
8382       CLI    = WAER(5)
8383       CAI    = WAER(6)
8384       KI     = WAER(7)
8385       MGI    = WAER(8)
8387       HSO4I  = ZERO
8388       NH3AQ  = ZERO
8389       NO3AQ  = ZERO
8390       CLAQ   = ZERO
8392 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
8394       DO 10 I=1,NSWEEP
8396       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
8397       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
8398       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
8400 !C POTASSIUM SULFATE
8402       IF (KI*KI*SO4I .GT. A9) THEN
8403          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13)
8404          CC = (WAER(7)-ROOT13)*(WAER(2)-WAER(6)) + &
8405                0.25D0*(WAER(7)-ROOT13)**2.0
8406          DD =-0.25*((WAER(7)-ROOT13)**2.0*(WAER(2)-WAER(6)) - A9)
8407          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
8408          IF (ISLV.NE.0) ROOT9 = TINY
8409          ROOT9 = MIN (ROOT9,WAER(7)/2.0-ROOT13,(WAER(2)-WAER(6)),CHI9)
8410          ROOT9 = MAX (ROOT9, ZERO)
8411          PSI9  = CHI9 - ROOT9
8412       ENDIF
8413       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
8414       PSI9O   = PSI9
8416 !C POTASSIUM NITRATE
8418       IF (KI*NO3I .GT. A13) THEN
8419          BB     =-(WAER(4) + WAER(7) - 2.D0*ROOT9)
8420          CC     = WAER(4)*(WAER(7) - 2.D0*ROOT9) - A13
8421          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
8422          ROOT13A= 0.5D0*(-BB-DD)
8423          ROOT13B= 0.5D0*(-BB+DD)
8424          IF (ZERO.LE.ROOT13A) THEN
8425             ROOT13 = ROOT13A
8426          ELSE
8427             ROOT13 = ROOT13B
8428          ENDIF
8429          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
8430          PSI13  = CHI13-ROOT13
8431       ENDIF
8432       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
8433       PSI13O   = PSI13
8435 !C ION CONCENTRATIONS ; CORRECTIONS
8437       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13, ZERO)
8438       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
8439       NH4I   = WAER(3)
8440       NO3I   = MAX (WAER(4) - ROOT13, ZERO)
8441       CLI    = WAER(5)
8442       CAI    = ZERO
8443       NAI    = WAER(1)
8444       MGI    = WAER(8)
8446 !C SOLUTION ACIDIC OR BASIC?
8448       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
8449              - 2.D0*CAI - KI - 2.D0*MGI
8450       IF (GG.GT.TINY) THEN                        ! H+ in excess
8451          BB =-GG
8452          CC =-AKW
8453          DD = BB*BB - 4.D0*CC
8454          HI = 0.5D0*(-BB + SQRT(DD))
8455          OHI= AKW/HI
8456       ELSE                                        ! OH- in excess
8457          BB = GG
8458          CC =-AKW
8459          DD = BB*BB - 4.D0*CC
8460          OHI= 0.5D0*(-BB + SQRT(DD))
8461          HI = AKW/OHI
8462       ENDIF
8464 !C UNDISSOCIATED SPECIES EQUILIBRIA
8466       IF (HI.GT.OHI) THEN
8467 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
8468 !C         HI    = AKW/OHI
8469 !C         HSO4I = ZERO
8470 !C      ELSE
8471 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
8472 !C     &           - KI - 2.D0*MGI, ZERO)
8473 !C         GGCL  = MAX(GG-GGNO3, ZERO)
8474 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
8475 !C         IF (GGNO3.GT.TINY) THEN
8476 !C            IF (GGCL.LE.TINY) HI = ZERO
8477 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
8478 !C         ENDIF
8480 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
8482          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
8483       else
8484         del= zero
8485       ENDIF
8486       SO4I  = SO4I  - DEL
8487       HI    = HI    - DEL
8488       HSO4I = DEL
8489 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
8490       OHI   = AKW/HI
8492       IF (HI.LE.TINY) THEN
8493       HI = SQRT(AKW)
8494       OHI   = AKW/HI
8495       ENDIF
8497 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
8499       MOLAL(1) = HI
8500       MOLAL(2) = NAI
8501       MOLAL(3) = NH4I
8502       MOLAL(4) = CLI
8503       MOLAL(5) = SO4I
8504       MOLAL(6) = HSO4I
8505       MOLAL(7) = NO3I
8506       MOLAL(8) = CAI
8507       MOLAL(9) = KI
8508       MOLAL(10)= MGI
8510 !C *** CALCULATE WATER **************************************************
8512       CALL CALCMR2p1
8514 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
8516       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
8517          CALL CALCACT2p1
8518       ELSE
8519          IF (PSCONV9 .AND. PSCONV13) GOTO 20
8520       ENDIF
8521 10    CONTINUE
8522 !ccc      CALL PUSHERR (0002, 'CALCW11')    ! WARNING ERROR: NO CONVERGENCE
8524 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
8526 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
8527       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
8528       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
8530       GNH3    = NH4I/HI/A2
8531       GHNO3   = HI*NO3I/A3
8532       GHCL    = HI*CLI /A4
8534       GASAQ(1)= NH3AQ
8535       GASAQ(2)= CLAQ
8536       GASAQ(3)= NO3AQ
8538       CNH42S4 = ZERO
8539       CNH4NO3 = ZERO
8540       CNH4CL  = ZERO
8541       CNACL   = ZERO
8542       CNANO3  = ZERO
8543       CMGSO4  = ZERO
8544       CK2SO4  = CHI9 - PSI9
8545       CCASO4  = MIN (WAER(6), WAER(2))
8546       CCANO32 = ZERO
8547       CKNO3   = CHI13 - PSI13
8548       KCL     = ZERO
8549       CMGNO32 = ZERO
8550       CMGCL2  = ZERO
8551       CCACL2  = ZERO
8553       RETURN
8555 !C *** END OF SUBROUTINE CALCW11 ******************************************
8557       END
8558 !C=======================================================================
8560 !C *** ISORROPIA CODE II
8561 !C *** SUBROUTINE CALCW10
8562 !C *** CASE W10
8564 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
8565 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
8566 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
8567 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4
8568 !C     4. Completely dissolved: CA(NO3)2, CACL2, KCL,
8569 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
8571 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
8572 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
8573 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
8575 !C=======================================================================
8577       SUBROUTINE CALCW102p1
8578       INCLUDE 'module_isrpia_inc.F'
8580       LOGICAL PSCONV9, PSCONV13
8581       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
8583       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
8584                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
8585                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
8586                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
8587                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
8588                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
8590 !C *** SETUP PARAMETERS ************************************************
8592       FRST    =.TRUE.
8593       CALAIN  =.TRUE.
8594       CALAOU  =.TRUE.
8596       PSCONV9 =.TRUE.
8597       PSCONV13=.TRUE.
8599       PSI9O   =-GREAT
8600       PSI13O  =-GREAT                                ! GREAT = 1.D10
8602       ROOT9   = ZERO
8603       ROOT13  = ZERO
8605 !C *** CALCULATE INITIAL SOLUTION ***************************************
8607       CALL CALCW1A2p1
8610       CHI9   = CK2SO4       ! SALTS
8611       CHI13  = CKNO3
8612       CHI10  = CMGSO4
8613       CHI11   = CCASO4
8615       PSI1   = CNA2SO4      ! SALTS DISSOLVED
8616       PSI5   = CNH4CL
8617       PSI6   = CNH4NO3
8618       PSI7   = CNACL
8619       PSI8   = CNANO3
8620       PSI9   = CK2SO4
8621       PSI10  = CMGSO4
8622       PSI11  = CCASO4
8623       PSI12  = CCANO32
8624       PSI13  = CKNO3
8625       PSI14  = CKCL
8626       PSI15  = CMGNO32
8627       PSI16  = CMGCL2
8628       PSI17  = CCACL2
8630       CALL CALCMR2p1           ! WATER
8632       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
8633       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
8634       NH4I   = WAER(3)
8635       NO3I   = WAER(4)
8636       CLI    = WAER(5)
8637       CAI    = WAER(6)
8638       KI     = WAER(7)
8639       MGI    = WAER(8)
8641       HSO4I  = ZERO
8642       NH3AQ  = ZERO
8643       NO3AQ  = ZERO
8644       CLAQ   = ZERO
8646 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
8648       DO 10 I=1,NSWEEP
8650       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
8651       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
8652       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
8654 !C POTASSIUM SULFATE
8656       IF (KI*KI*SO4I .GT. A9) THEN
8657          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13)
8658          CC = (WAER(7)-ROOT13)*(WAER(2)-WAER(6)) + &
8659                0.25D0*(WAER(7)-ROOT13)**2.0
8660          DD =-0.25*((WAER(7)-ROOT13)**2.0*(WAER(2)-WAER(6)) - A9)
8661          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
8662          IF (ISLV.NE.0) ROOT9 = TINY
8663          ROOT9 = MIN (ROOT9,WAER(7)/2.0-ROOT13,(WAER(2)-WAER(6)),CHI9)
8664          ROOT9 = MAX (ROOT9, ZERO)
8665          PSI9  = CHI9 - ROOT9
8666       ENDIF
8667       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
8668       PSI9O   = PSI9
8670 !C POTASSIUM NITRATE
8672       IF (KI*NO3I .GT. A13) THEN
8673          BB     =-(WAER(4) + WAER(7) - 2.D0*ROOT9)
8674          CC     = WAER(4)*(WAER(7) - 2.D0*ROOT9) - A13
8675          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
8676          ROOT13A= 0.5D0*(-BB-DD)
8677          ROOT13B= 0.5D0*(-BB+DD)
8678          IF (ZERO.LE.ROOT13A) THEN
8679             ROOT13 = ROOT13A
8680          ELSE
8681             ROOT13 = ROOT13B
8682          ENDIF
8683          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
8684          PSI13  = CHI13-ROOT13
8685       ENDIF
8686       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
8687       PSI13O   = PSI13
8689 !C ION CONCENTRATIONS ; CORRECTIONS
8691       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13, ZERO)
8692       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
8693       NH4I   = WAER(3)
8694       NO3I   = MAX (WAER(4) - ROOT13, ZERO)
8695       CLI    = WAER(5)
8696       CAI    = ZERO
8697       NAI    = WAER(1)
8698       MGI    = WAER(8)
8700 !C SOLUTION ACIDIC OR BASIC?
8702       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
8703              - 2.D0*CAI - KI - 2.D0*MGI
8704       IF (GG.GT.TINY) THEN                        ! H+ in excess
8705          BB =-GG
8706          CC =-AKW
8707          DD = BB*BB - 4.D0*CC
8708          HI = 0.5D0*(-BB + SQRT(DD))
8709          OHI= AKW/HI
8710       ELSE                                        ! OH- in excess
8711          BB = GG
8712          CC =-AKW
8713          DD = BB*BB - 4.D0*CC
8714          OHI= 0.5D0*(-BB + SQRT(DD))
8715          HI = AKW/OHI
8716       ENDIF
8718 !C UNDISSOCIATED SPECIES EQUILIBRIA
8720       IF (HI.GT.OHI) THEN
8721 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
8722 !C         HI    = AKW/OHI
8723 !C         HSO4I = ZERO
8724 !C      ELSE
8725 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
8726 !C     &           - KI - 2.D0*MGI, ZERO)
8727 !C         GGCL  = MAX(GG-GGNO3, ZERO)
8728 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
8729 !C         IF (GGNO3.GT.TINY) THEN
8730 !C            IF (GGCL.LE.TINY) HI = ZERO
8731 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
8732 !C         ENDIF
8734 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
8736          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
8737       else
8738         del= zero
8739       ENDIF
8740       SO4I  = SO4I  - DEL
8741       HI    = HI    - DEL
8742       HSO4I = DEL
8743 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
8744       OHI   = AKW/HI
8746       IF (HI.LE.TINY) THEN
8747       HI = SQRT(AKW)
8748       OHI   = AKW/HI
8749       ENDIF
8751 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
8753       MOLAL(1) = HI
8754       MOLAL(2) = NAI
8755       MOLAL(3) = NH4I
8756       MOLAL(4) = CLI
8757       MOLAL(5) = SO4I
8758       MOLAL(6) = HSO4I
8759       MOLAL(7) = NO3I
8760       MOLAL(8) = CAI
8761       MOLAL(9) = KI
8762       MOLAL(10)= MGI
8764 !C *** CALCULATE WATER **************************************************
8766       CALL CALCMR2p1
8768 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
8770       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
8771          CALL CALCACT2p1
8772       ELSE
8773          IF (PSCONV9 .AND. PSCONV13) GOTO 20
8774       ENDIF
8775 10    CONTINUE
8776 !ccc      CALL PUSHERR (0002, 'CALCW10')    ! WARNING ERROR: NO CONVERGENCE
8778 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
8780 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
8781       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
8782       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
8784       GNH3    = NH4I/HI/A2
8785       GHNO3   = HI*NO3I/A3
8786       GHCL    = HI*CLI /A4
8788       GASAQ(1)= NH3AQ
8789       GASAQ(2)= CLAQ
8790       GASAQ(3)= NO3AQ
8792       CNH42S4 = ZERO
8793       CNH4NO3 = ZERO
8794       CNH4CL  = ZERO
8795       CNACL   = ZERO
8796       CNANO3  = ZERO
8797       CMGSO4  = ZERO
8798       CK2SO4  = CHI9 - PSI9
8799       CCASO4  = MIN (WAER(6), WAER(2))
8800       CCANO32 = ZERO
8801       CKNO3   = CHI13 - PSI13
8802       KCL     = ZERO
8803       CMGNO32 = ZERO
8804       CMGCL2  = ZERO
8805       CCACL2  = ZERO
8807       RETURN
8809 !C *** END OF SUBROUTINE CALCW10 ******************************************
8811       END
8812 !C=======================================================================
8814 !C *** ISORROPIA CODE II
8815 !C *** SUBROUTINE CALCW9
8816 !C *** CASE W9
8818 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
8819 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
8820 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
8821 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL
8822 !C     4. Completely dissolved: CA(NO3)2, CACL2,
8823 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
8825 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
8826 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
8827 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
8829 !C=======================================================================
8831       SUBROUTINE CALCW92p1
8832       INCLUDE 'module_isrpia_inc.F'
8834       LOGICAL PSCONV9, PSCONV13, PSCONV14
8835       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
8837       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
8838                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
8839                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
8840                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
8841                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
8842                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
8844 !C *** SETUP PARAMETERS ************************************************
8846       FRST    =.TRUE.
8847       CALAIN  =.TRUE.
8848       CALAOU  =.TRUE.
8850       PSCONV9 =.TRUE.
8851       PSCONV13=.TRUE.
8852       PSCONV14=.TRUE.
8854       PSI9O   =-GREAT
8855       PSI13O  =-GREAT
8856       PSI14O  =-GREAT                              ! GREAT = 1.D10
8858       ROOT9   = ZERO
8859       ROOT13  = ZERO
8860       ROOT14  = ZERO
8862 !C *** CALCULATE INITIAL SOLUTION ***************************************
8864       CALL CALCW1A2p1
8866       CHI9   = CK2SO4       ! SALTS
8867       CHI13  = CKNO3
8868       CHI10  = CMGSO4
8869       CHI14  = CKCL
8870       CHI11   = CCASO4
8872       PSI1   = CNA2SO4      ! SALTS DISSOLVED
8873       PSI5   = CNH4CL
8874       PSI6   = CNH4NO3
8875       PSI7   = CNACL
8876       PSI8   = CNANO3
8877       PSI9   = CK2SO4
8878       PSI10  = CMGSO4
8879       PSI11  = CCASO4
8880       PSI12  = CCANO32
8881       PSI13  = CKNO3
8882       PSI14  = CKCL
8883       PSI15  = CMGNO32
8884       PSI16  = CMGCL2
8885       PSI17  = CCACL2
8887       CALL CALCMR2p1           ! WATER
8889       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
8890       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
8891       NH4I   = WAER(3)
8892       NO3I   = WAER(4)
8893       CLI    = WAER(5)
8894       CAI    = WAER(6)
8895       KI     = WAER(7)
8896       MGI    = WAER(8)
8898       HSO4I  = ZERO
8899       NH3AQ  = ZERO
8900       NO3AQ  = ZERO
8901       CLAQ   = ZERO
8903 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
8905       DO 10 I=1,NSWEEP
8907       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
8908       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
8909       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
8910       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
8912 !C POTASSIUM SULFATE
8914       IF (KI*KI*SO4I .GT. A9) THEN
8915          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
8916          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
8917                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
8918          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
8919          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
8920          IF (ISLV.NE.0) ROOT9 = TINY
8921          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
8922                       (WAER(2)-WAER(6)), CHI9)
8923          ROOT9 = MAX (ROOT9, ZERO)
8924          PSI9  = CHI9 - ROOT9
8925       ENDIF
8926       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
8927       PSI9O   = PSI9
8929 !C POTASSIUM NITRATE
8931       IF (KI*NO3I .GT. A13) THEN
8932          BB     =-(WAER(4) + WAER(7) - 2.D0*ROOT9 - ROOT14)
8933          CC     = WAER(4)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
8934          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
8935          ROOT13A= 0.5D0*(-BB-DD)
8936          ROOT13B= 0.5D0*(-BB+DD)
8937          IF (ZERO.LE.ROOT13A) THEN
8938             ROOT13 = ROOT13A
8939          ELSE
8940             ROOT13 = ROOT13B
8941          ENDIF
8942          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
8943          PSI13  = CHI13-ROOT13
8944       ENDIF
8945       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
8946       PSI13O   = PSI13
8948 !C POTASSIUM CLORIDE
8950       IF (KI*CLI .GT. A14) THEN
8951          BB     =-(WAER(5) + WAER(7) - 2.D0*ROOT9 - ROOT13)
8952          CC     = WAER(5)*(WAER(7) - 2.D0*ROOT9 - ROOT13) - A14
8953          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
8954          ROOT14A= 0.5D0*(-BB-DD)
8955          ROOT14B= 0.5D0*(-BB+DD)
8956          IF (ZERO.LE.ROOT14A) THEN
8957             ROOT14 = ROOT14A
8958          ELSE
8959             ROOT14 = ROOT14B
8960          ENDIF
8961          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
8962          PSI14  = CHI14-ROOT14
8963       ENDIF
8964       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
8965       PSI14O   = PSI14
8967 !C ION CONCENTRATIONS ; CORRECTIONS
8969       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
8970       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
8971       NH4I   = WAER(3)
8972       NO3I   = MAX (WAER(4) - ROOT13, ZERO)
8973       CLI    = MAX (WAER(5) - ROOT14, ZERO)
8974       CAI    = ZERO
8975       NAI    = WAER(1)
8976       MGI    = WAER(8)
8978 !C SOLUTION ACIDIC OR BASIC?
8980       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
8981              - 2.D0*CAI - KI - 2.D0*MGI
8982       IF (GG.GT.TINY) THEN                        ! H+ in excess
8983          BB =-GG
8984          CC =-AKW
8985          DD = BB*BB - 4.D0*CC
8986          HI = 0.5D0*(-BB + SQRT(DD))
8987          OHI= AKW/HI
8988       ELSE                                        ! OH- in excess
8989          BB = GG
8990          CC =-AKW
8991          DD = BB*BB - 4.D0*CC
8992          OHI= 0.5D0*(-BB + SQRT(DD))
8993          HI = AKW/OHI
8994       ENDIF
8996 !C UNDISSOCIATED SPECIES EQUILIBRIA
8998       IF (HI.GT.OHI) THEN
8999 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
9000 !C         HI    = AKW/OHI
9001 !C         HSO4I = ZERO
9002 !C      ELSE
9003 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
9004 !C     &           - KI - 2.D0*MGI, ZERO)
9005 !C         GGCL  = MAX(GG-GGNO3, ZERO)
9006 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
9007 !C         IF (GGNO3.GT.TINY) THEN
9008 !C            IF (GGCL.LE.TINY) HI = ZERO
9009 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
9010 !C         ENDIF
9012 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
9014          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
9015       else
9016         del= zero
9017       ENDIF
9018       SO4I  = SO4I  - DEL
9019       HI    = HI    - DEL
9020       HSO4I = DEL
9021 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
9022       OHI   = AKW/HI
9024       IF (HI.LE.TINY) THEN
9025       HI = SQRT(AKW)
9026       OHI   = AKW/HI
9027       ENDIF
9029 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
9031       MOLAL(1) = HI
9032       MOLAL(2) = NAI
9033       MOLAL(3) = NH4I
9034       MOLAL(4) = CLI
9035       MOLAL(5) = SO4I
9036       MOLAL(6) = HSO4I
9037       MOLAL(7) = NO3I
9038       MOLAL(8) = CAI
9039       MOLAL(9) = KI
9040       MOLAL(10)= MGI
9042 !C *** CALCULATE WATER **************************************************
9044       CALL CALCMR2p1
9046 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
9048       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
9049          CALL CALCACT2p1
9050       ELSE
9051          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14) GOTO 20
9052       ENDIF
9053 10    CONTINUE
9054 !ccc      CALL PUSHERR (0002, 'CALCW9')    ! WARNING ERROR: NO CONVERGENCE
9056 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
9058 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
9059       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
9060       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
9062       GNH3    = NH4I/HI/A2
9063       GHNO3   = HI*NO3I/A3
9064       GHCL    = HI*CLI /A4
9066       GASAQ(1)= NH3AQ
9067       GASAQ(2)= CLAQ
9068       GASAQ(3)= NO3AQ
9070       CNH42S4 = ZERO
9071       CNH4NO3 = ZERO
9072       CNH4CL  = ZERO
9073       CNACL   = ZERO
9074       CNANO3  = ZERO
9075       CMGSO4  = ZERO
9076       CK2SO4  = CHI9 - PSI9
9077       CCASO4  = MIN (WAER(6), WAER(2))
9078       CCANO32 = ZERO
9079       CKNO3   = CHI13 - PSI13
9080       KCL     = CHI14 - PSI14
9081       CMGNO32 = ZERO
9082       CMGCL2  = ZERO
9083       CCACL2  = ZERO
9085       RETURN
9087 !C *** END OF SUBROUTINE CALCW9 ******************************************
9089       END
9090 !C=======================================================================
9092 !C *** ISORROPIA CODE II
9093 !C *** SUBROUTINE CALCW8
9094 !C *** CASE W8
9096 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
9097 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
9098 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
9099 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL
9100 !C     4. Completely dissolved: CA(NO3)2, CACL2,
9101 !C                              MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3
9103 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
9104 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
9105 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
9107 !C=======================================================================
9109       SUBROUTINE CALCW82p1
9110       INCLUDE 'module_isrpia_inc.F'
9112       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5
9113       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
9115       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
9116                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
9117                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
9118                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
9119                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
9120                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
9122 !C *** SETUP PARAMETERS ************************************************
9124       FRST    =.TRUE.
9125       CALAIN  =.TRUE.
9126       CALAOU  =.TRUE.
9128       PSCONV9 =.TRUE.
9129       PSCONV13=.TRUE.
9130       PSCONV14=.TRUE.
9131       PSCONV5 =.TRUE.
9133       PSI9O   =-GREAT
9134       PSI13O  =-GREAT
9135       PSI14O  =-GREAT
9136       PSI5O   =-GREAT                              ! GREAT = 1.D10
9138       ROOT9   = ZERO
9139       ROOT13  = ZERO
9140       ROOT14  = ZERO
9141       ROOT5   = ZERO
9143 !C *** CALCULATE INITIAL SOLUTION ***************************************
9145       CALL CALCW1A2p1
9147       CHI9   = CK2SO4       ! SALTS
9148       CHI13  = CKNO3
9149       CHI10  = CMGSO4
9150       CHI14  = CKCL
9151       CHI5   = CNH4CL
9152       CHI11  = CCASO4
9154       PSI1   = CNA2SO4      ! SALTS DISSOLVED
9155       PSI5   = CNH4CL
9156       PSI6   = CNH4NO3
9157       PSI7   = CNACL
9158       PSI8   = CNANO3
9159       PSI9   = CK2SO4
9160       PSI10  = CMGSO4
9161       PSI11  = CCASO4
9162       PSI12  = CCANO32
9163       PSI13  = CKNO3
9164       PSI14  = CKCL
9165       PSI15  = CMGNO32
9166       PSI16  = CMGCL2
9167       PSI17  = CCACL2
9169       CALL CALCMR2p1           ! WATER
9171       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
9172       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
9173       NH4I   = WAER(3)
9174       NO3I   = WAER(4)
9175       CLI    = WAER(5)
9176       CAI    = WAER(6)
9177       KI     = WAER(7)
9178       MGI    = WAER(8)
9180       HSO4I  = ZERO
9181       NH3AQ  = ZERO
9182       NO3AQ  = ZERO
9183       CLAQ   = ZERO
9185 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
9187       DO 10 I=1,NSWEEP
9189       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
9190       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
9191       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
9192       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
9193       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
9195 !C POTASSIUM SULFATE
9197       IF (KI*KI*SO4I .GT. A9) THEN
9198          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
9199          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
9200                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
9201          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
9202          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
9203          IF (ISLV.NE.0) ROOT9 = TINY
9204          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
9205                       (WAER(2)-WAER(6)), CHI9)
9206          ROOT9 = MAX (ROOT9, ZERO)
9207          PSI9  = CHI9 - ROOT9
9208       ENDIF
9209       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
9210       PSI9O   = PSI9
9212 !C POTASSIUM NITRATE
9214       IF (KI*NO3I .GT. A13) THEN
9215          BB     =-(WAER(4) + WAER(7) - 2.D0*ROOT9 - ROOT14)
9216          CC     = WAER(4)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
9217          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
9218          ROOT13A= 0.5D0*(-BB-DD)
9219          ROOT13B= 0.5D0*(-BB+DD)
9220          IF (ZERO.LE.ROOT13A) THEN
9221             ROOT13 = ROOT13A
9222          ELSE
9223             ROOT13 = ROOT13B
9224          ENDIF
9225          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
9226          PSI13  = CHI13-ROOT13
9227       ENDIF
9228       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
9229       PSI13O   = PSI13
9231 !C POTASSIUM CLORIDE
9233       IF (KI*CLI .GT. A14) THEN
9234          BB     =-(WAER(5) - ROOT5 + WAER(7) - 2.D0*ROOT9 - ROOT13)
9235          CC     = (WAER(5)-ROOT5)*(WAER(7) - 2.D0*ROOT9 - ROOT13) - A14
9236          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9237          ROOT14A= 0.5D0*(-BB-DD)
9238          ROOT14B= 0.5D0*(-BB+DD)
9239          IF (ZERO.LE.ROOT14A) THEN
9240             ROOT14 = ROOT14A
9241          ELSE
9242             ROOT14 = ROOT14B
9243          ENDIF
9244          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
9245          PSI14  = CHI14-ROOT14
9246       ENDIF
9247       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
9248       PSI14O   = PSI14
9250 !C AMMONIUM CLORIDE
9252       IF (NH4I*CLI .GT. A5) THEN
9253          BB     =-(WAER(5) + WAER(3) - ROOT14)
9254          CC     = (WAER(5)-ROOT14)*WAER(3) - A5
9255          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9256          ROOT5A = 0.5D0*(-BB-DD)
9257          ROOT5B = 0.5D0*(-BB+DD)
9258          IF (ZERO.LE.ROOT5A) THEN
9259             ROOT5 = ROOT5A
9260          ELSE
9261             ROOT5 = ROOT5B
9262          ENDIF
9263          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
9264          PSI5  = CHI5-ROOT5
9265       ENDIF
9266       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
9267       PSI5O   = PSI5
9269 !C ION CONCENTRATIONS ; CORRECTIONS
9271       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
9272       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
9273       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
9274       NO3I   = MAX (WAER(4) - ROOT13, ZERO)
9275       CLI    = MAX (WAER(5) - ROOT14 - ROOT5, ZERO)
9276       CAI    = ZERO
9277       NAI    = WAER(1)
9278       MGI    = WAER(8)
9280 !C SOLUTION ACIDIC OR BASIC?
9282       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
9283              - 2.D0*CAI - KI - 2.D0*MGI
9284       IF (GG.GT.TINY) THEN                        ! H+ in excess
9285          BB =-GG
9286          CC =-AKW
9287          DD = BB*BB - 4.D0*CC
9288          HI = 0.5D0*(-BB + SQRT(DD))
9289          OHI= AKW/HI
9290       ELSE                                        ! OH- in excess
9291          BB = GG
9292          CC =-AKW
9293          DD = BB*BB - 4.D0*CC
9294          OHI= 0.5D0*(-BB + SQRT(DD))
9295          HI = AKW/OHI
9296       ENDIF
9298 !C UNDISSOCIATED SPECIES EQUILIBRIA
9300       IF (HI.GT.OHI) THEN
9301 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
9302 !C         HI    = AKW/OHI
9303 !C         HSO4I = ZERO
9304 !C      ELSE
9305 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
9306 !C     &           - KI - 2.D0*MGI, ZERO)
9307 !C         GGCL  = MAX(GG-GGNO3, ZERO)
9308 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
9309 !C         IF (GGNO3.GT.TINY) THEN
9310 !C            IF (GGCL.LE.TINY) HI = ZERO
9311 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
9312 !C         ENDIF
9314 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
9316          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
9317       else
9318         del= zero
9319       ENDIF
9320       SO4I  = SO4I  - DEL
9321       HI    = HI    - DEL
9322       HSO4I = DEL
9323 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
9324       OHI   = AKW/HI
9326       IF (HI.LE.TINY) THEN
9327       HI = SQRT(AKW)
9328       OHI   = AKW/HI
9329       ENDIF
9331 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
9333       MOLAL(1) = HI
9334       MOLAL(2) = NAI
9335       MOLAL(3) = NH4I
9336       MOLAL(4) = CLI
9337       MOLAL(5) = SO4I
9338       MOLAL(6) = HSO4I
9339       MOLAL(7) = NO3I
9340       MOLAL(8) = CAI
9341       MOLAL(9) = KI
9342       MOLAL(10)= MGI
9344 !C *** CALCULATE WATER **************************************************
9346       CALL CALCMR2p1
9348 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
9350       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
9351          CALL CALCACT2p1
9352       ELSE
9353          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND.PSCONV5) GOTO 20
9354       ENDIF
9355 10    CONTINUE
9356 !ccc      CALL PUSHERR (0002, 'CALCW8')    ! WARNING ERROR: NO CONVERGENCE
9358 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
9360 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
9361       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
9362       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
9364       GNH3    = NH4I/HI/A2
9365       GHNO3   = HI*NO3I/A3
9366       GHCL    = HI*CLI /A4
9368       GASAQ(1)= NH3AQ
9369       GASAQ(2)= CLAQ
9370       GASAQ(3)= NO3AQ
9372       CNH42S4 = ZERO
9373       CNH4NO3 = ZERO
9374       CNH4CL  = CHI5 - PSI5
9375       CNACL   = ZERO
9376       CNANO3  = ZERO
9377       CMGSO4  = ZERO
9378       CK2SO4  = CHI9 - PSI9
9379       CCASO4  = MIN (WAER(6), WAER(2))
9380       CCANO32 = ZERO
9381       CKNO3   = CHI13 - PSI13
9382       KCL     = CHI14 - PSI14
9383       CMGNO32 = ZERO
9384       CMGCL2  = ZERO
9385       CCACL2  = ZERO
9387       RETURN
9389 !C *** END OF SUBROUTINE CALCW8 ******************************************
9391       END
9392 !C=======================================================================
9394 !C *** ISORROPIA CODE II
9395 !C *** SUBROUTINE CALCW7
9396 !C *** CASE W7
9398 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
9399 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
9400 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
9401 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL
9402 !C     4. Completely dissolved: CA(NO3)2, CACL2,
9403 !C                              MG(NO3)2, MGCL2, NANO3, NH4NO3
9405 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
9406 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
9407 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
9409 !C=======================================================================
9411       SUBROUTINE CALCW72p1
9412       INCLUDE 'module_isrpia_inc.F'
9414       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7
9415       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
9417       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
9418                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
9419                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
9420                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
9421                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
9422                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
9424 !C *** SETUP PARAMETERS ************************************************
9426       FRST    =.TRUE.
9427       CALAIN  =.TRUE.
9428       CALAOU  =.TRUE.
9430       PSCONV9 =.TRUE.
9431       PSCONV13=.TRUE.
9432       PSCONV14=.TRUE.
9433       PSCONV5 =.TRUE.
9434       PSCONV7 =.TRUE.
9436       PSI9O   =-GREAT
9437       PSI13O  =-GREAT
9438       PSI14O  =-GREAT
9439       PSI5O  =-GREAT
9440       PSI7O  =-GREAT                            ! GREAT = 1.D10
9442       ROOT9   = ZERO
9443       ROOT13  = ZERO
9444       ROOT14  = ZERO
9445       ROOT5   = ZERO
9446       ROOT7   = ZERO
9448 !C *** CALCULATE INITIAL SOLUTION ***************************************
9450       CALL CALCW1A2p1
9452       CHI9   = CK2SO4       ! SALTS
9453       CHI13  = CKNO3
9454       CHI10  = CMGSO4
9455       CHI14  = CKCL
9456       CHI5   = CNH4CL
9457       CHI7   = CNACL
9458       CHI11  = CCASO4
9460       PSI1   = CNA2SO4      ! SALTS DISSOLVED
9461       PSI5   = CNH4CL
9462       PSI6   = CNH4NO3
9463       PSI7   = CNACL
9464       PSI8   = CNANO3
9465       PSI9   = CK2SO4
9466       PSI10  = CMGSO4
9467       PSI11  = CCASO4
9468       PSI12  = CCANO32
9469       PSI13  = CKNO3
9470       PSI14  = CKCL
9471       PSI15  = CMGNO32
9472       PSI16  = CMGCL2
9473       PSI17  = CCACL2
9475       CALL CALCMR2p1           ! WATER
9477       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
9478       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
9479       NH4I   = WAER(3)
9480       NO3I   = WAER(4)
9481       CLI    = WAER(5)
9482       CAI    = WAER(6)
9483       KI     = WAER(7)
9484       MGI    = WAER(8)
9486       HSO4I  = ZERO
9487       NH3AQ  = ZERO
9488       NO3AQ  = ZERO
9489       CLAQ   = ZERO
9491 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
9493       DO 10 I=1,NSWEEP
9495       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
9496       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
9497       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
9498       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
9499       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
9500       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
9502 !C POTASSIUM SULFATE
9504       IF (KI*KI*SO4I .GT. A9) THEN
9505          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
9506          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
9507                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
9508          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
9509          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
9510          IF (ISLV.NE.0) ROOT9 = TINY
9511          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
9512                       (WAER(2)-WAER(6)), CHI9)
9513          ROOT9 = MAX (ROOT9, ZERO)
9514          PSI9  = CHI9 - ROOT9
9515       ENDIF
9516       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
9517       PSI9O   = PSI9
9519 !C POTASSIUM NITRATE
9521       IF (KI*NO3I .GT. A13) THEN
9522          BB     =-(WAER(4) + WAER(7) - 2.D0*ROOT9 - ROOT14)
9523          CC     = WAER(4)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
9524          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
9525          ROOT13A= 0.5D0*(-BB-DD)
9526          ROOT13B= 0.5D0*(-BB+DD)
9527          IF (ZERO.LE.ROOT13A) THEN
9528             ROOT13 = ROOT13A
9529          ELSE
9530             ROOT13 = ROOT13B
9531          ENDIF
9532          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
9533          PSI13  = CHI13-ROOT13
9534       ENDIF
9535       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
9536       PSI13O   = PSI13
9538 !C POTASSIUM CLORIDE
9540       IF (KI*CLI .GT. A14) THEN
9541          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
9542          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
9543          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9544          ROOT14A= 0.5D0*(-BB-DD)
9545          ROOT14B= 0.5D0*(-BB+DD)
9546          IF (ZERO.LE.ROOT14A) THEN
9547             ROOT14 = ROOT14A
9548          ELSE
9549             ROOT14 = ROOT14B
9550          ENDIF
9551          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
9552          PSI14  = CHI14-ROOT14
9553       ENDIF
9554       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
9555       PSI14O   = PSI14
9557 !C AMMONIUM CLORIDE
9559       IF (NH4I*CLI .GT. A5) THEN
9560          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
9561          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
9562          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9563          ROOT5A = 0.5D0*(-BB-DD)
9564          ROOT5B = 0.5D0*(-BB+DD)
9565          IF (ZERO.LE.ROOT5A) THEN
9566             ROOT5 = ROOT5A
9567          ELSE
9568             ROOT5 = ROOT5B
9569          ENDIF
9570          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
9571          PSI5  = CHI5-ROOT5
9572       ENDIF
9573       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
9574       PSI5O   = PSI5
9576 !C SODIUM CLORIDE
9578       IF (NAI*CLI .GT. A7) THEN
9579          BB     =-(WAER(5) + WAER(1) - ROOT14 - ROOT5)
9580          CC     = (WAER(5) - ROOT14 - ROOT5)*WAER(1) - A7
9581          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9582          ROOT7A = 0.5D0*(-BB-DD)
9583          ROOT7B = 0.5D0*(-BB+DD)
9584          IF (ZERO.LE.ROOT7A) THEN
9585             ROOT7 = ROOT7A
9586          ELSE
9587             ROOT7 = ROOT7B
9588          ENDIF
9589          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
9590          PSI7  = CHI7-ROOT7
9591       ENDIF
9592       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
9593       PSI7O   = PSI7
9595 !C ION CONCENTRATIONS ; CORRECTIONS
9597       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
9598       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
9599       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
9600       NO3I   = MAX (WAER(4) - ROOT13, ZERO)
9601       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
9602       CAI    = ZERO
9603       NAI    = MAX (WAER(1) - ROOT7, ZERO)
9604       MGI    = WAER(8)
9606 !C SOLUTION ACIDIC OR BASIC?
9608       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
9609              - 2.D0*CAI - KI - 2.D0*MGI
9610       IF (GG.GT.TINY) THEN                        ! H+ in excess
9611          BB =-GG
9612          CC =-AKW
9613          DD = BB*BB - 4.D0*CC
9614          HI = 0.5D0*(-BB + SQRT(DD))
9615          OHI= AKW/HI
9616       ELSE                                        ! OH- in excess
9617          BB = GG
9618          CC =-AKW
9619          DD = BB*BB - 4.D0*CC
9620          OHI= 0.5D0*(-BB + SQRT(DD))
9621          HI = AKW/OHI
9622       ENDIF
9624 !C UNDISSOCIATED SPECIES EQUILIBRIA
9626       IF (HI.GT.OHI) THEN
9627 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
9628 !C         HI    = AKW/OHI
9629 !C         HSO4I = ZERO
9630 !C      ELSE
9631 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
9632 !C     &           - KI - 2.D0*MGI, ZERO)
9633 !C         GGCL  = MAX(GG-GGNO3, ZERO)
9634 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
9635 !C         IF (GGNO3.GT.TINY) THEN
9636 !C            IF (GGCL.LE.TINY) HI = ZERO
9637 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
9638 !C         ENDIF
9640 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
9642          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
9643       else
9644         del= zero
9645       ENDIF
9646       SO4I  = SO4I  - DEL
9647       HI    = HI    - DEL
9648       HSO4I = DEL
9649 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
9650       OHI   = AKW/HI
9652       IF (HI.LE.TINY) THEN
9653       HI = SQRT(AKW)
9654       OHI   = AKW/HI
9655       ENDIF
9657 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
9659       MOLAL(1) = HI
9660       MOLAL(2) = NAI
9661       MOLAL(3) = NH4I
9662       MOLAL(4) = CLI
9663       MOLAL(5) = SO4I
9664       MOLAL(6) = HSO4I
9665       MOLAL(7) = NO3I
9666       MOLAL(8) = CAI
9667       MOLAL(9) = KI
9668       MOLAL(10)= MGI
9670 !C *** CALCULATE WATER **************************************************
9672       CALL CALCMR2p1
9674 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
9676       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
9677          CALL CALCACT2p1
9678       ELSE
9679          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
9680              .AND. PSCONV7) GOTO 20
9681       ENDIF
9682 10    CONTINUE
9683 !ccc      CALL PUSHERR (0002, 'CALCW7')    ! WARNING ERROR: NO CONVERGENCE
9685 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
9687 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
9688       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
9689       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
9691       GNH3    = NH4I/HI/A2
9692       GHNO3   = HI*NO3I/A3
9693       GHCL    = HI*CLI /A4
9695       GASAQ(1)= NH3AQ
9696       GASAQ(2)= CLAQ
9697       GASAQ(3)= NO3AQ
9699       CNH42S4 = ZERO
9700       CNH4NO3 = ZERO
9701       CNH4CL  = CHI5 - PSI5
9702       CNACL   = CHI7 - PSI7
9703       CNANO3  = ZERO
9704       CMGSO4  = ZERO
9705       CK2SO4  = CHI9 - PSI9
9706       CCASO4  = MIN (WAER(6), WAER(2))
9707       CCANO32 = ZERO
9708       CKNO3   = CHI13 - PSI13
9709       KCL     = CHI14 - PSI14
9710       CMGNO32 = ZERO
9711       CMGCL2  = ZERO
9712       CCACL2  = ZERO
9714       RETURN
9716 !C *** END OF SUBROUTINE CALCW7 ******************************************
9718       END
9720 !C=======================================================================
9722 !C *** ISORROPIA CODE II
9723 !C *** SUBROUTINE CALCW6
9724 !C *** CASE W6
9726 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
9727 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
9728 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
9729 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL, NANO3
9730 !C     4. Completely dissolved: CA(NO3)2, CACL2,
9731 !C                              MG(NO3)2, MGCL2, NH4NO3
9733 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
9734 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
9735 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
9737 !C=======================================================================
9739       SUBROUTINE CALCW62p1
9740       INCLUDE 'module_isrpia_inc.F'
9742       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7, PSCONV8
9743       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
9745       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,      &
9746                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,      &
9747                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,    &
9748                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,        &
9749                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6,  &
9750                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
9752 !C *** SETUP PARAMETERS ************************************************
9754       FRST    =.TRUE.
9755       CALAIN  =.TRUE.
9756       CALAOU  =.TRUE.
9758       PSCONV9 =.TRUE.
9759       PSCONV13=.TRUE.
9760       PSCONV14=.TRUE.
9761       PSCONV5 =.TRUE.
9762       PSCONV7 =.TRUE.
9763       PSCONV8 =.TRUE.
9765       PSI9O   =-GREAT
9766       PSI13O  =-GREAT
9767       PSI14O  =-GREAT
9768       PSI5O   =-GREAT
9769       PSI7O   =-GREAT
9770       PSI8O   =-GREAT                     ! GREAT = 1.D10
9772       ROOT9   = ZERO
9773       ROOT13  = ZERO
9774       ROOT14  = ZERO
9775       ROOT5   = ZERO
9776       ROOT7   = ZERO
9777       ROOT8   = ZERO
9779 !C *** CALCULATE INITIAL SOLUTION ***************************************
9781       CALL CALCW1A2p1
9783       CHI9   = CK2SO4       ! SALTS
9784       CHI13  = CKNO3
9785       CHI10  = CMGSO4
9786       CHI14  = CKCL
9787       CHI5   = CNH4CL
9788       CHI7   = CNACL
9789       CHI8   = CNANO3
9790       CHI11  = CCASO4
9792       PSI1   = CNA2SO4      ! SALTS DISSOLVED
9793       PSI5   = CNH4CL
9794       PSI6   = CNH4NO3
9795       PSI7   = CNACL
9796       PSI8   = CNANO3
9797       PSI9   = CK2SO4
9798       PSI10  = CMGSO4
9799       PSI11  = CCASO4
9800       PSI12  = CCANO32
9801       PSI13  = CKNO3
9802       PSI14  = CKCL
9803       PSI15  = CMGNO32
9804       PSI16  = CMGCL2
9805       PSI17  = CCACL2
9807       CALL CALCMR2p1           ! WATER
9809       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
9810       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
9811       NH4I   = WAER(3)
9812       NO3I   = WAER(4)
9813       CLI    = WAER(5)
9814       CAI    = WAER(6)
9815       KI     = WAER(7)
9816       MGI    = WAER(8)
9818       HSO4I  = ZERO
9819       NH3AQ  = ZERO
9820       NO3AQ  = ZERO
9821       CLAQ   = ZERO
9823 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
9825       DO 10 I=1,NSWEEP
9827       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
9828       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
9829       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
9830       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
9831       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
9832       A8  = XK9 *(WATER/GAMA(3))**2.         ! NaNO3     <==> Na+
9833       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
9835 !C POTASSIUM SULFATE
9837       IF (KI*KI*SO4I .GT. A9) THEN
9838          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
9839          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
9840                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
9841          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
9842          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
9843          IF (ISLV.NE.0) ROOT9 = TINY
9844          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
9845                      (WAER(2)-WAER(6)), CHI9)
9846          ROOT9 = MAX (ROOT9, ZERO)
9847          PSI9  = CHI9 - ROOT9
9848       ENDIF
9849       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
9850       PSI9O   = PSI9
9852 !C POTASSIUM NITRATE
9854       IF (KI*NO3I .GT. A13) THEN
9855          BB     =-(WAER(4) - ROOT8 + WAER(7) - 2.D0*ROOT9 - ROOT14)
9856          CC     = (WAER(4)-ROOT8)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
9857          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
9858          ROOT13A= 0.5D0*(-BB-DD)
9859          ROOT13B= 0.5D0*(-BB+DD)
9860          IF (ZERO.LE.ROOT13A) THEN
9861             ROOT13 = ROOT13A
9862          ELSE
9863             ROOT13 = ROOT13B
9864          ENDIF
9865          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
9866          PSI13  = CHI13-ROOT13
9867       ENDIF
9868       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
9869       PSI13O   = PSI13
9871 !C POTASSIUM CLORIDE
9873       IF (KI*CLI .GT. A14) THEN
9874          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
9875          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
9876          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9877          ROOT14A= 0.5D0*(-BB-DD)
9878          ROOT14B= 0.5D0*(-BB+DD)
9879          IF (ZERO.LE.ROOT14A) THEN
9880             ROOT14 = ROOT14A
9881          ELSE
9882             ROOT14 = ROOT14B
9883          ENDIF
9884          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
9885          PSI14  = CHI14-ROOT14
9886       ENDIF
9887       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
9888       PSI14O   = PSI14
9890 !C AMMONIUM CLORIDE
9892       IF (NH4I*CLI .GT. A5) THEN
9893          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
9894          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
9895          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9896          ROOT5A = 0.5D0*(-BB-DD)
9897          ROOT5B = 0.5D0*(-BB+DD)
9898          IF (ZERO.LE.ROOT5A) THEN
9899             ROOT5 = ROOT5A
9900          ELSE
9901             ROOT5 = ROOT5B
9902          ENDIF
9903          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
9904          PSI5  = CHI5-ROOT5
9905       ENDIF
9906       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
9907       PSI5O   = PSI5
9909 !C SODIUM CLORIDE
9911       IF (NAI*CLI .GT. A7) THEN
9912          BB     =-(WAER(5) + WAER(1) - ROOT8 - ROOT14 - ROOT5)
9913          CC     = (WAER(5) - ROOT14 - ROOT5)*(WAER(1)-ROOT8) - A7
9914          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9915          ROOT7A = 0.5D0*(-BB-DD)
9916          ROOT7B = 0.5D0*(-BB+DD)
9917          IF (ZERO.LE.ROOT7A) THEN
9918             ROOT7 = ROOT7A
9919          ELSE
9920             ROOT7 = ROOT7B
9921          ENDIF
9922          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
9923          PSI7  = CHI7-ROOT7
9924       ENDIF
9925       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
9926       PSI7O   = PSI7
9928 !C SODIUM NITRATE
9930       IF (NAI*NO3I .GT. A8) THEN
9931          BB     =-(WAER(4) - ROOT13 + WAER(1) - ROOT7)
9932          CC     = (WAER(4) - ROOT13)*(WAER(1)-ROOT7) - A8
9933          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
9934          ROOT8A = 0.5D0*(-BB-DD)
9935          ROOT8B = 0.5D0*(-BB+DD)
9936          IF (ZERO.LE.ROOT8A) THEN
9937             ROOT8 = ROOT8A
9938          ELSE
9939             ROOT8 = ROOT8B
9940          ENDIF
9941          ROOT8 = MIN(MAX(ROOT8, ZERO), CHI8)
9942          PSI8  = CHI8-ROOT8
9943       ENDIF
9944       PSCONV8 = ABS(PSI8-PSI8O) .LE. EPS*PSI8O
9945       PSI8O   = PSI8
9947 !C ION CONCENTRATIONS ; CORRECTIONS
9949       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
9950       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
9951       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
9952       NO3I   = MAX (WAER(4) - ROOT13 - ROOT8, ZERO)
9953       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
9954       CAI    = ZERO
9955       NAI    = MAX (WAER(1) - ROOT7 - ROOT8, ZERO)
9956       MGI    = WAER(8)
9958 !C SOLUTION ACIDIC OR BASIC?
9960       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
9961              - 2.D0*CAI - KI - 2.D0*MGI
9962       IF (GG.GT.TINY) THEN                        ! H+ in excess
9963          BB =-GG
9964          CC =-AKW
9965          DD = BB*BB - 4.D0*CC
9966          HI = 0.5D0*(-BB + SQRT(DD))
9967          OHI= AKW/HI
9968       ELSE                                        ! OH- in excess
9969          BB = GG
9970          CC =-AKW
9971          DD = BB*BB - 4.D0*CC
9972          OHI= 0.5D0*(-BB + SQRT(DD))
9973          HI = AKW/OHI
9974       ENDIF
9976 !C UNDISSOCIATED SPECIES EQUILIBRIA
9978       IF (HI.GT.OHI) THEN
9979 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
9980 !C         HI    = AKW/OHI
9981 !C         HSO4I = ZERO
9982 !C      ELSE
9983 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
9984 !C     &           - KI - 2.D0*MGI, ZERO)
9985 !C         GGCL  = MAX(GG-GGNO3, ZERO)
9986 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
9987 !C         IF (GGNO3.GT.TINY) THEN
9988 !C            IF (GGCL.LE.TINY) HI = ZERO
9989 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
9990 !C         ENDIF
9992 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
9994          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
9995       else
9996         del= zero
9997       ENDIF
9998       SO4I  = SO4I  - DEL
9999       HI    = HI    - DEL
10000       HSO4I = DEL
10001 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
10002       OHI   = AKW/HI
10004       IF (HI.LE.TINY) THEN
10005       HI = SQRT(AKW)
10006       OHI   = AKW/HI
10007       ENDIF
10009 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
10011       MOLAL(1) = HI
10012       MOLAL(2) = NAI
10013       MOLAL(3) = NH4I
10014       MOLAL(4) = CLI
10015       MOLAL(5) = SO4I
10016       MOLAL(6) = HSO4I
10017       MOLAL(7) = NO3I
10018       MOLAL(8) = CAI
10019       MOLAL(9) = KI
10020       MOLAL(10)= MGI
10022 !C *** CALCULATE WATER **************************************************
10024       CALL CALCMR2p1
10026 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
10028       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
10029          CALL CALCACT2p1
10030       ELSE
10031          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
10032              .AND. PSCONV7 .AND. PSCONV8) GOTO 20
10033       ENDIF
10034 10    CONTINUE
10035 !ccc      CALL PUSHERR (0002, 'CALCW6')    ! WARNING ERROR: NO CONVERGENCE
10037 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
10039 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
10040       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
10041       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
10043       GNH3    = NH4I/HI/A2
10044       GHNO3   = HI*NO3I/A3
10045       GHCL    = HI*CLI /A4
10047       GASAQ(1)= NH3AQ
10048       GASAQ(2)= CLAQ
10049       GASAQ(3)= NO3AQ
10051       CNH42S4 = ZERO
10052       CNH4NO3 = ZERO
10053       CNH4CL  = CHI5 - PSI5
10054       CNACL   = CHI7 - PSI7
10055       CNANO3  = CHI8 - PSI8
10056       CMGSO4  = ZERO
10057       CK2SO4  = CHI9 - PSI9
10058       CCASO4  = MIN (WAER(6), WAER(2))
10059       CCANO32 = ZERO
10060       CKNO3   = CHI13 - PSI13
10061       KCL     = CHI14 - PSI14
10062       CMGNO32 = ZERO
10063       CMGCL2  = ZERO
10064       CCACL2  = ZERO
10066       RETURN
10068 !C *** END OF SUBROUTINE CALCW6 ******************************************
10070       END
10072 !C=======================================================================
10074 !C *** ISORROPIA CODE II
10075 !C *** SUBROUTINE CALCW5
10076 !C *** CASE W5
10078 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10079 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10080 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
10081 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL, NANO3, NH4NO3
10082 !C     4. Completely dissolved: CA(NO3)2, CACL2,
10083 !C                              MG(NO3)2, MGCL2
10085 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10086 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10087 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10089 !C=======================================================================
10091       SUBROUTINE CALCW52p1
10092       INCLUDE 'module_isrpia_inc.F'
10094       EXTERNAL CALCW1A2p1, CALCW62p1
10096 !C *** REGIME DEPENDS ON THE EXISTANCE OF WATER AND OF THE RH ************
10098       IF (WAER(4).GT.TINY)   THEN ! NO3 EXIST, WATER POSSIBLE
10099          SCASE = 'W5 ; SUBCASE 1'
10100          CALL CALCW5A2p1
10101          SCASE = 'W5 ; SUBCASE 1'
10102       ELSE                                      ! NO3, CL NON EXISTANT
10103          SCASE = 'W1 ; SUBCASE 1'
10104          CALL CALCW1A2p1
10105          SCASE = 'W1 ; SUBCASE 1'
10106       ENDIF
10108       IF (WATER.LE.TINY) THEN
10109          IF (RH.LT.DRMP5) THEN        ! ONLY SOLIDS
10110             WATER = TINY
10111             DO 10 I=1,NIONS
10112                MOLAL(I) = ZERO
10113 10          CONTINUE
10114             CALL CALCW1A2p1
10115             SCASE = 'W5 ; SUBCASE 2'
10116             RETURN
10117          ELSE
10118             SCASE = 'W5 ; SUBCASE 3'  ! MDRH REGION (CaSO4, K2SO4, KNO3, KCL, MGSO4,
10119 !C                                                    NANO3, NACL, NH4NO3, NH4CL)
10120             CALL CALCMDRPII2p1 (RH, DRMP5, DRNH4NO3, CALCW1A2p1, CALCW62p1)
10121             SCASE = 'W5 ; SUBCASE 3'
10122          ENDIF
10123       ENDIF
10125       RETURN
10127 !C *** END OF SUBROUTINE CALCW5 ******************************************
10129       END
10131 !C=======================================================================
10133 !C *** ISORROPIA CODE II
10134 !C *** SUBROUTINE CALCW5A
10135 !C *** CASE W5A
10137 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10138 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10139 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
10140 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL,
10141 !C                          NANO3, NH4NO3
10142 !C     4. Completely dissolved: CA(NO3)2, CACL2, MG(NO3)2, MGCL2
10144 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10145 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10146 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10148 !C=======================================================================
10150       SUBROUTINE CALCW5A2p1
10151       INCLUDE 'module_isrpia_inc.F'
10153       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7, PSCONV8
10154       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
10156       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
10157                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
10158                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
10159                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
10160                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
10161                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
10163 !C *** SETUP PARAMETERS ************************************************
10165       FRST    =.TRUE.
10166       CALAIN  =.TRUE.
10167       CALAOU  =.TRUE.
10169       PSCONV9 =.TRUE.
10170       PSCONV13=.TRUE.
10171       PSCONV14=.TRUE.
10172       PSCONV5 =.TRUE.
10173       PSCONV7 =.TRUE.
10174       PSCONV8 =.TRUE.
10176       PSI9O   =-GREAT
10177       PSI13O  =-GREAT
10178       PSI14O  =-GREAT
10179       PSI5O   =-GREAT
10180       PSI7O   =-GREAT
10181       PSI8O   =-GREAT                ! GREAT = 1.D10
10183       ROOT9   = ZERO
10184       ROOT13  = ZERO
10185       ROOT14  = ZERO
10186       ROOT5   = ZERO
10187       ROOT7   = ZERO
10188       ROOT8   = ZERO
10190 !C *** CALCULATE INITIAL SOLUTION ***************************************
10192       CALL CALCW1A2p1
10194       CHI9   = CK2SO4       ! SALTS
10195       CHI13  = CKNO3
10196       CHI10  = CMGSO4
10197       CHI14  = CKCL
10198       CHI5   = CNH4CL
10199       CHI7   = CNACL
10200       CHI8   = CNANO3
10201       CHI6   = CNH4NO3
10202       CHI11   = CCASO4
10204       PSI1   = CNA2SO4      ! SALTS DISSOLVED
10205       PSI5   = CNH4CL
10206       PSI6   = CNH4NO3
10207       PSI7   = CNACL
10208       PSI8   = CNANO3
10209       PSI9   = CK2SO4
10210       PSI10  = CMGSO4
10211       PSI11  = CCASO4
10212       PSI12  = CCANO32
10213       PSI13  = CKNO3
10214       PSI14  = CKCL
10215       PSI15  = CMGNO32
10216       PSI16  = CMGCL2
10217       PSI17  = CCACL2
10219       CALL CALCMR2p1           ! WATER
10221       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
10222       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
10223       NH4I   = WAER(3)
10224       NO3I   = WAER(4)
10225       CLI    = WAER(5)
10226       CAI    = WAER(6)
10227       KI     = WAER(7)
10228       MGI    = WAER(8)
10230       HSO4I  = ZERO
10231       NH3AQ  = ZERO
10232       NO3AQ  = ZERO
10233       CLAQ   = ZERO
10235 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
10237       DO 10 I=1,NSWEEP
10239       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
10240       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
10241       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
10242       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
10243       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
10244       A8  = XK9 *(WATER/GAMA(3))**2.         ! NaNO3     <==> Na+
10245       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
10247 !C POTASSIUM SULFATE
10249       IF (KI*KI*SO4I .GT. A9) THEN
10250          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
10251          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
10252                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
10253          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
10254          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
10255          IF (ISLV.NE.0) ROOT9 = TINY
10256          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
10257                       (WAER(2)-WAER(6)), CHI9)
10258          ROOT9 = MAX (ROOT9, ZERO)
10259          PSI9  = CHI9 - ROOT9
10260       ENDIF
10261       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
10262       PSI9O   = PSI9
10264 !C POTASSIUM NITRATE
10266       IF (KI*NO3I .GT. A13) THEN
10267          BB     =-(WAER(4) - ROOT8 + WAER(7) - 2.D0*ROOT9 - ROOT14)
10268          CC     = (WAER(4)-ROOT8)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
10269          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
10270          ROOT13A= 0.5D0*(-BB-DD)
10271          ROOT13B= 0.5D0*(-BB+DD)
10272          IF (ZERO.LE.ROOT13A) THEN
10273             ROOT13 = ROOT13A
10274          ELSE
10275             ROOT13 = ROOT13B
10276          ENDIF
10277          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
10278          PSI13  = CHI13-ROOT13
10279       ENDIF
10280       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
10281       PSI13O   = PSI13
10283 !C POTASSIUM CLORIDE
10285       IF (KI*CLI .GT. A14) THEN
10286          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
10287          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
10288          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10289          ROOT14A= 0.5D0*(-BB-DD)
10290          ROOT14B= 0.5D0*(-BB+DD)
10291          IF (ZERO.LE.ROOT14A) THEN
10292             ROOT14 = ROOT14A
10293          ELSE
10294             ROOT14 = ROOT14B
10295          ENDIF
10296          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
10297          PSI14  = CHI14-ROOT14
10298       ENDIF
10299       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
10300       PSI14O   = PSI14
10302 !C AMMONIUM CLORIDE
10304       IF (NH4I*CLI .GT. A5) THEN
10305          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
10306          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
10307          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10308          ROOT5A = 0.5D0*(-BB-DD)
10309          ROOT5B = 0.5D0*(-BB+DD)
10310          IF (ZERO.LE.ROOT5A) THEN
10311             ROOT5 = ROOT5A
10312          ELSE
10313             ROOT5 = ROOT5B
10314          ENDIF
10315          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
10316          PSI5  = CHI5-ROOT5
10317       ENDIF
10318       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
10319       PSI5O   = PSI5
10321 !C SODIUM CLORIDE
10323       IF (NAI*CLI .GT. A7) THEN
10324          BB     =-(WAER(5) + WAER(1) - ROOT8 - ROOT14 - ROOT5)
10325          CC     = (WAER(5) - ROOT14 - ROOT5)*(WAER(1)-ROOT8) - A7
10326          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10327          ROOT7A = 0.5D0*(-BB-DD)
10328          ROOT7B = 0.5D0*(-BB+DD)
10329          IF (ZERO.LE.ROOT7A) THEN
10330             ROOT7 = ROOT7A
10331          ELSE
10332             ROOT7 = ROOT7B
10333          ENDIF
10334          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
10335          PSI7  = CHI7-ROOT7
10336       ENDIF
10337       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
10338       PSI7O   = PSI7
10340 !C SODIUM NITRATE
10342       IF (NAI*NO3I .GT. A8) THEN
10343          BB     =-(WAER(4) - ROOT13 + WAER(1) - ROOT7)
10344          CC     = (WAER(4) - ROOT13)*(WAER(1)-ROOT7) - A8
10345          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10346          ROOT8A = 0.5D0*(-BB-DD)
10347          ROOT8B = 0.5D0*(-BB+DD)
10348          IF (ZERO.LE.ROOT8A) THEN
10349             ROOT8 = ROOT8A
10350          ELSE
10351             ROOT8 = ROOT8B
10352          ENDIF
10353          ROOT8 = MIN(MAX(ROOT8, ZERO), CHI8)
10354          PSI8  = CHI8-ROOT8
10355       ENDIF
10356       PSCONV8 = ABS(PSI8-PSI8O) .LE. EPS*PSI8O
10357       PSI8O   = PSI8
10359 !C ION CONCENTRATIONS ; CORRECTIONS
10361       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
10362       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
10363       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
10364       NO3I   = MAX (WAER(4) - ROOT13 - ROOT8, ZERO)
10365       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
10366       CAI    = ZERO
10367       NAI    = MAX (WAER(1) - ROOT7 - ROOT8, ZERO)
10368       MGI    = WAER(8)
10370 !C SOLUTION ACIDIC OR BASIC?
10372       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
10373              - 2.D0*CAI - KI - 2.D0*MGI
10374       IF (GG.GT.TINY) THEN                        ! H+ in excess
10375          BB =-GG
10376          CC =-AKW
10377          DD = BB*BB - 4.D0*CC
10378          HI = 0.5D0*(-BB + SQRT(DD))
10379          OHI= AKW/HI
10380       ELSE                                        ! OH- in excess
10381          BB = GG
10382          CC =-AKW
10383          DD = BB*BB - 4.D0*CC
10384          OHI= 0.5D0*(-BB + SQRT(DD))
10385          HI = AKW/OHI
10386       ENDIF
10388 !C UNDISSOCIATED SPECIES EQUILIBRIA
10390       IF (HI.GT.OHI) THEN
10391 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
10392 !C         HI    = AKW/OHI
10393 !C         HSO4I = ZERO
10394 !C      ELSE
10395 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
10396 !C     &           - KI - 2.D0*MGI, ZERO)
10397 !C         GGCL  = MAX(GG-GGNO3, ZERO)
10398 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
10399 !C         IF (GGNO3.GT.TINY) THEN
10400 !C            IF (GGCL.LE.TINY) HI = ZERO
10401 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
10402 !C         ENDIF
10404 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
10406          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
10407       else
10408         del= zero
10409       ENDIF
10410       SO4I  = SO4I  - DEL
10411       HI    = HI    - DEL
10412       HSO4I = DEL
10413 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
10414       OHI   = AKW/HI
10416       IF (HI.LE.TINY) THEN
10417       HI = SQRT(AKW)
10418       OHI   = AKW/HI
10419       ENDIF
10421 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
10423       MOLAL(1) = HI
10424       MOLAL(2) = NAI
10425       MOLAL(3) = NH4I
10426       MOLAL(4) = CLI
10427       MOLAL(5) = SO4I
10428       MOLAL(6) = HSO4I
10429       MOLAL(7) = NO3I
10430       MOLAL(8) = CAI
10431       MOLAL(9) = KI
10432       MOLAL(10)= MGI
10434 !C *** CALCULATE WATER **************************************************
10436       CALL CALCMR2p1
10438 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
10440       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
10441          CALL CALCACT2p1
10442       ELSE
10443          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
10444              .AND. PSCONV7 .AND. PSCONV8) GOTO 20
10445       ENDIF
10446 10    CONTINUE
10447 !ccc      CALL PUSHERR (0002, 'CALCW5')    ! WARNING ERROR: NO CONVERGENCE
10449 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
10451 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
10452       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
10453       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
10455       GNH3    = NH4I/HI/A2
10456       GHNO3   = HI*NO3I/A3
10457       GHCL    = HI*CLI /A4
10459       GASAQ(1)= NH3AQ
10460       GASAQ(2)= CLAQ
10461       GASAQ(3)= NO3AQ
10463       CNH42S4 = ZERO
10464       CNH4NO3 = ZERO
10465       CNH4CL  = CHI5 - PSI5
10466       CNACL   = CHI7 - PSI7
10467       CNANO3  = CHI8 - PSI8
10468       CMGSO4  = ZERO
10469       CK2SO4  = CHI9 - PSI9
10470       CCASO4  = MIN (WAER(6), WAER(2))
10471       CCANO32 = ZERO
10472       CKNO3   = CHI13 - PSI13
10473       KCL     = CHI14 - PSI14
10474       CMGNO32 = ZERO
10475       CMGCL2  = ZERO
10476       CCACL2  = ZERO
10478       RETURN
10480 !C *** END OF SUBROUTINE CALCW5 ******************************************
10482       END
10484 !C=======================================================================
10486 !C *** ISORROPIA CODE II
10487 !C *** SUBROUTINE CALCW4
10488 !C *** CASE W4
10490 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10491 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10492 !C     2. SOLID AEROSOL ONLY
10493 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, KCL, MGSO4,
10494 !C                          MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL
10496 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10497 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10498 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10500 !C=======================================================================
10502       SUBROUTINE CALCW42p1
10503       INCLUDE 'module_isrpia_inc.F'
10504       EXTERNAL CALCW1A2p1, CALCW5A2p1
10506 !C *** REGIME DEPENDS ON THE EXISTANCE OF WATER AND OF THE RH ************
10508       IF (WAER(4).GT.TINY)   THEN ! NO3 EXIST, WATER POSSIBLE
10509          SCASE = 'W4 ; SUBCASE 1'
10510          CALL CALCW4A2p1
10511          SCASE = 'W4 ; SUBCASE 1'
10512       ELSE                                      ! NO3, CL NON EXISTANT
10513          SCASE = 'W1 ; SUBCASE 1'
10514          CALL CALCW1A2p1
10515          SCASE = 'W1 ; SUBCASE 1'
10516       ENDIF
10518       IF (WATER.LE.TINY) THEN
10519          IF (RH.LT.DRMP4) THEN        ! ONLY SOLIDS
10520             WATER = TINY
10521             DO 10 I=1,NIONS
10522                MOLAL(I) = ZERO
10523 10          CONTINUE
10524             CALL CALCW1A2p1
10525             SCASE = 'W4 ; SUBCASE 2'
10526             RETURN
10527          ELSE
10528             SCASE = 'W4 ; SUBCASE 3'  ! MDRH REGION (CaSO4, K2SO4, KNO3, KCL, MGSO4,
10529 !C                                                    MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL)
10530             CALL CALCMDRPII2p1 (RH, DRMP4, DRMGNO32, CALCW1A2p1, CALCW5A2p1)
10531             SCASE = 'W4 ; SUBCASE 3'
10532          ENDIF
10533       ENDIF
10535       RETURN
10537 !C *** END OF SUBROUTINE CALCW4 ******************************************
10539       END
10541 !C=======================================================================
10543 !C *** ISORROPIA CODE II
10544 !C *** SUBROUTINE CALCW4A
10545 !C *** CASE W4A
10547 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10548 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10549 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
10550 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL,
10551 !C                          NANO3, NH4NO3, MG(NO3)2
10552 !C     4. Completely dissolved: CA(NO3)2, CACL2, MGCL2
10554 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10555 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10556 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10558 !C=======================================================================
10560       SUBROUTINE CALCW4A2p1
10561       INCLUDE 'module_isrpia_inc.F'
10563       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7, PSCONV8
10564       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
10566       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
10567                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
10568                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
10569                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
10570                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
10571                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
10573 !C *** SETUP PARAMETERS ************************************************
10575       FRST    =.TRUE.
10576       CALAIN  =.TRUE.
10577       CALAOU  =.TRUE.
10579       PSCONV9 =.TRUE.
10580       PSCONV13=.TRUE.
10581       PSCONV14=.TRUE.
10582       PSCONV5 =.TRUE.
10583       PSCONV7 =.TRUE.
10584       PSCONV8 =.TRUE.
10586       PSI9O   =-GREAT
10587       PSI13O  =-GREAT
10588       PSI14O  =-GREAT
10589       PSI5O   =-GREAT
10590       PSI7O   =-GREAT
10591       PSI8O   =-GREAT                ! GREAT = 1.D10
10593       ROOT9   = ZERO
10594       ROOT13  = ZERO
10595       ROOT14  = ZERO
10596       ROOT5   = ZERO
10597       ROOT7   = ZERO
10598       ROOT8   = ZERO
10600 !C *** CALCULATE INITIAL SOLUTION ***************************************
10602       CALL CALCW1A2p1
10604       CHI9   = CK2SO4       ! SALTS
10605       CHI13  = CKNO3
10606       CHI10  = CMGSO4
10607       CHI14  = CKCL
10608       CHI5   = CNH4CL
10609       CHI7   = CNACL
10610       CHI8   = CNANO3
10611       CHI6   = CNH4NO3
10612       CHI15  = CMGNO32
10613       CHI11   = CCASO4
10615       PSI1   = CNA2SO4      ! SALTS DISSOLVED
10616       PSI5   = CNH4CL
10617       PSI6   = CNH4NO3
10618       PSI7   = CNACL
10619       PSI8   = CNANO3
10620       PSI9   = CK2SO4
10621       PSI10  = CMGSO4
10622       PSI11  = CCASO4
10623       PSI12  = CCANO32
10624       PSI13  = CKNO3
10625       PSI14  = CKCL
10626       PSI15  = CMGNO32
10627       PSI16  = CMGCL2
10628       PSI17  = CCACL2
10630       CALL CALCMR2p1           ! WATER
10632       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
10633       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
10634       NH4I   = WAER(3)
10635       NO3I   = WAER(4)
10636       CLI    = WAER(5)
10637       CAI    = WAER(6)
10638       KI     = WAER(7)
10639       MGI    = WAER(8)
10641       HSO4I  = ZERO
10642       NH3AQ  = ZERO
10643       NO3AQ  = ZERO
10644       CLAQ   = ZERO
10646 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
10648       DO 10 I=1,NSWEEP
10650       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
10651       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
10652       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
10653       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
10654       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
10655       A8  = XK9 *(WATER/GAMA(3))**2.         ! NaNO3     <==> Na+
10656       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
10658 !C POTASSIUM SULFATE
10660       IF (KI*KI*SO4I .GT. A9) THEN
10661          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
10662          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
10663                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
10664          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
10665          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
10666          IF (ISLV.NE.0) ROOT9 = TINY
10667          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
10668                       (WAER(2)-WAER(6)), CHI9)
10669          ROOT9 = MAX (ROOT9, ZERO)
10670          PSI9  = CHI9 - ROOT9
10671       ENDIF
10672       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
10673       PSI9O   = PSI9
10675 !C POTASSIUM NITRATE
10677       IF (KI*NO3I .GT. A13) THEN
10678          BB     =-(WAER(4) - ROOT8 + WAER(7) - 2.D0*ROOT9 - ROOT14)
10679          CC     = (WAER(4)-ROOT8)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
10680          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
10681          ROOT13A= 0.5D0*(-BB-DD)
10682          ROOT13B= 0.5D0*(-BB+DD)
10683          IF (ZERO.LE.ROOT13A) THEN
10684             ROOT13 = ROOT13A
10685          ELSE
10686             ROOT13 = ROOT13B
10687          ENDIF
10688          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
10689          PSI13  = CHI13-ROOT13
10690       ENDIF
10691       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
10692       PSI13O   = PSI13
10694 !C POTASSIUM CLORIDE
10696       IF (KI*CLI .GT. A14) THEN
10697          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
10698          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
10699          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10700          ROOT14A= 0.5D0*(-BB-DD)
10701          ROOT14B= 0.5D0*(-BB+DD)
10702          IF (ZERO.LE.ROOT14A) THEN
10703             ROOT14 = ROOT14A
10704          ELSE
10705             ROOT14 = ROOT14B
10706          ENDIF
10707          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
10708          PSI14  = CHI14-ROOT14
10709       ENDIF
10710       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
10711       PSI14O   = PSI14
10713 !C AMMONIUM CLORIDE
10715       IF (NH4I*CLI .GT. A5) THEN
10716          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
10717          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
10718          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10719          ROOT5A = 0.5D0*(-BB-DD)
10720          ROOT5B = 0.5D0*(-BB+DD)
10721          IF (ZERO.LE.ROOT5A) THEN
10722             ROOT5 = ROOT5A
10723          ELSE
10724             ROOT5 = ROOT5B
10725          ENDIF
10726          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
10727          PSI5  = CHI5-ROOT5
10728       ENDIF
10729       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
10730       PSI5O   = PSI5
10732 !C SODIUM CLORIDE
10734       IF (NAI*CLI .GT. A7) THEN
10735          BB     =-(WAER(5) + WAER(1) - ROOT8 - ROOT14 - ROOT5)
10736          CC     = (WAER(5) - ROOT14 - ROOT5)*(WAER(1)-ROOT8) - A7
10737          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10738          ROOT7A = 0.5D0*(-BB-DD)
10739          ROOT7B = 0.5D0*(-BB+DD)
10740          IF (ZERO.LE.ROOT7A) THEN
10741             ROOT7 = ROOT7A
10742          ELSE
10743             ROOT7 = ROOT7B
10744          ENDIF
10745          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
10746          PSI7  = CHI7-ROOT7
10747       ENDIF
10748       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
10749       PSI7O   = PSI7
10751 !C SODIUM NITRATE
10753       IF (NAI*NO3I .GT. A8) THEN
10754          BB     =-(WAER(4) - ROOT13 + WAER(1) - ROOT7)
10755          CC     = (WAER(4) - ROOT13)*(WAER(1)-ROOT7) - A8
10756          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
10757          ROOT8A = 0.5D0*(-BB-DD)
10758          ROOT8B = 0.5D0*(-BB+DD)
10759          IF (ZERO.LE.ROOT8A) THEN
10760             ROOT8 = ROOT8A
10761          ELSE
10762             ROOT8 = ROOT8B
10763          ENDIF
10764          ROOT8 = MIN(MAX(ROOT8, ZERO), CHI8)
10765          PSI8  = CHI8-ROOT8
10766       ENDIF
10767       PSCONV8 = ABS(PSI8-PSI8O) .LE. EPS*PSI8O
10768       PSI8O   = PSI8
10770 !C ION CONCENTRATIONS ; CORRECTIONS
10772       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
10773       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
10774       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
10775       NO3I   = MAX (WAER(4) - ROOT13 - ROOT8, ZERO)
10776       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
10777       CAI    = ZERO
10778       NAI    = MAX (WAER(1) - ROOT7 - ROOT8, ZERO)
10779       MGI    = WAER(8)
10781 !C SOLUTION ACIDIC OR BASIC?
10783       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
10784              - 2.D0*CAI - KI - 2.D0*MGI
10785       IF (GG.GT.TINY) THEN                        ! H+ in excess
10786          BB =-GG
10787          CC =-AKW
10788          DD = BB*BB - 4.D0*CC
10789          HI = 0.5D0*(-BB + SQRT(DD))
10790          OHI= AKW/HI
10791       ELSE                                        ! OH- in excess
10792          BB = GG
10793          CC =-AKW
10794          DD = BB*BB - 4.D0*CC
10795          OHI= 0.5D0*(-BB + SQRT(DD))
10796          HI = AKW/OHI
10797       ENDIF
10799 !C UNDISSOCIATED SPECIES EQUILIBRIA
10801       IF (HI.GT.OHI) THEN
10802 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
10803 !C         HI    = AKW/OHI
10804 !C         HSO4I = ZERO
10805 !C      ELSE
10806 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
10807 !C     &           - KI - 2.D0*MGI, ZERO)
10808 !C         GGCL  = MAX(GG-GGNO3, ZERO)
10809 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
10810 !C         IF (GGNO3.GT.TINY) THEN
10811 !C            IF (GGCL.LE.TINY) HI = ZERO
10812 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
10813 !C         ENDIF
10815 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
10817          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
10818       else
10819         del= zero
10820       ENDIF
10821       SO4I  = SO4I  - DEL
10822       HI    = HI    - DEL
10823       HSO4I = DEL
10824 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
10825       OHI   = AKW/HI
10827       IF (HI.LE.TINY) THEN
10828       HI = SQRT(AKW)
10829       OHI   = AKW/HI
10830       ENDIF
10832 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
10834       MOLAL(1) = HI
10835       MOLAL(2) = NAI
10836       MOLAL(3) = NH4I
10837       MOLAL(4) = CLI
10838       MOLAL(5) = SO4I
10839       MOLAL(6) = HSO4I
10840       MOLAL(7) = NO3I
10841       MOLAL(8) = CAI
10842       MOLAL(9) = KI
10843       MOLAL(10)= MGI
10845 !C *** CALCULATE WATER **************************************************
10847       CALL CALCMR2p1
10849 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
10851       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
10852          CALL CALCACT2p1
10853       ELSE
10854          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
10855              .AND. PSCONV7 .AND. PSCONV8) GOTO 20
10856       ENDIF
10857 10    CONTINUE
10858 !ccc      CALL PUSHERR (0002, 'CALCW4')    ! WARNING ERROR: NO CONVERGENCE
10860 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
10862 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
10863       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
10864       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
10866       GNH3    = NH4I/HI/A2
10867       GHNO3   = HI*NO3I/A3
10868       GHCL    = HI*CLI /A4
10870       GASAQ(1)= NH3AQ
10871       GASAQ(2)= CLAQ
10872       GASAQ(3)= NO3AQ
10874       CNH42S4 = ZERO
10875       CNH4NO3 = ZERO
10876       CNH4CL  = CHI5 - PSI5
10877       CNACL   = CHI7 - PSI7
10878       CNANO3  = CHI8 - PSI8
10879       CMGSO4  = ZERO
10880       CK2SO4  = CHI9 - PSI9
10881       CCASO4  = MIN (WAER(6), WAER(2))
10882       CCANO32 = ZERO
10883       CKNO3   = CHI13 - PSI13
10884       KCL     = CHI14 - PSI14
10885       CMGNO32 = ZERO
10886       CMGCL2  = ZERO
10887       CCACL2  = ZERO
10889       RETURN
10891 !C *** END OF SUBROUTINE CALCW4A ******************************************
10893       END
10895 !C=======================================================================
10897 !C *** ISORROPIA CODE II
10898 !C *** SUBROUTINE CALCW3
10899 !C *** CASE W3
10901 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10902 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10903 !C     2. SOLID AEROSOL ONLY
10904 !C     3. SOLIDS POSSIBLE : CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4,
10905 !C                          MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL
10907 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10908 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10909 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10911 !C=======================================================================
10913       SUBROUTINE CALCW32p1
10914       INCLUDE 'module_isrpia_inc.F'
10915       EXTERNAL CALCW1A2p1, CALCW4A2p1
10917 !C *** REGIME DEPENDS ON THE EXISTANCE OF WATER AND OF THE RH ************
10919 !C      IF (WAER(4).GT.TINY .AND. WAER(5).GT.TINY) THEN ! NO3,CL EXIST, WATER POSSIBLE
10920 !C         SCASE = 'W3 ; SUBCASE 1'
10921 !C         CALL CALCW3A
10922 !C         SCASE = 'W3 ; SUBCASE 1'
10923 !C      ELSE                                      ! NO3, CL NON EXISTANT
10924 !C         SCASE = 'W1 ; SUBCASE 1'
10925 !C         CALL CALCW1A
10926 !C         SCASE = 'W1 ; SUBCASE 1'
10927 !C      ENDIF
10929       CALL CALCW1A2p1
10930       
10931       IF (WATER.LE.TINY) THEN
10932          IF (RH.LT.DRMP3) THEN        ! ONLY SOLIDS
10933             WATER = TINY
10934             DO 10 I=1,NIONS
10935                MOLAL(I) = ZERO
10936 10          CONTINUE
10937             CALL CALCW1A2p1
10938             SCASE = 'W3 ; SUBCASE 2'
10939             RETURN
10940          ELSE
10941             SCASE = 'W3 ; SUBCASE 3'  ! MDRH REGION (CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4,
10942 !C                                                    MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL)
10943             CALL CALCMDRPII2p1 (RH, DRMP3, DRCANO32, CALCW1A2p1, CALCW4A2p1)
10944             SCASE = 'W3 ; SUBCASE 3'
10945          ENDIF
10946       ELSE                                      ! NO3, CL NON EXISTANT
10947          SCASE = 'W3 ; SUBCASE 1'
10948          CALL CALCW3A2p1
10949          SCASE = 'W3 ; SUBCASE 1'
10950       ENDIF
10952       RETURN
10954 !C *** END OF SUBROUTINE CALCW3 ******************************************
10956       END
10958 !C=======================================================================
10960 !C *** ISORROPIA CODE II
10961 !C *** SUBROUTINE CALCW3A
10962 !C *** CASE W3A
10964 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
10965 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
10966 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
10967 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL,
10968 !C                          NANO3, NH4NO3, CA(NO3)2, MG(NO3)2
10969 !C     4. Completely dissolved: CACL2, MGCL2
10971 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
10972 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
10973 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
10975 !C=======================================================================
10977       SUBROUTINE CALCW3A2p1
10978       INCLUDE 'module_isrpia_inc.F'
10980       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7, PSCONV8
10981       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
10983       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
10984                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
10985                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
10986                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
10987                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
10988                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
10990 !C *** SETUP PARAMETERS ************************************************
10992       FRST    =.TRUE.
10993       CALAIN  =.TRUE.
10994       CALAOU  =.TRUE.
10996       PSCONV9 =.TRUE.
10997       PSCONV13=.TRUE.
10998       PSCONV14=.TRUE.
10999       PSCONV5 =.TRUE.
11000       PSCONV7 =.TRUE.
11001       PSCONV8 =.TRUE.
11003       PSI9O   =-GREAT
11004       PSI13O  =-GREAT
11005       PSI14O  =-GREAT
11006       PSI5O   =-GREAT
11007       PSI7O   =-GREAT
11008       PSI8O   =-GREAT                ! GREAT = 1.D10
11010       ROOT9   = ZERO
11011       ROOT13  = ZERO
11012       ROOT14  = ZERO
11013       ROOT5   = ZERO
11014       ROOT7   = ZERO
11015       ROOT8   = ZERO
11017 !C *** CALCULATE INITIAL SOLUTION ***************************************
11019       CALL CALCW1A2p1
11021       CHI9   = CK2SO4       ! SALTS
11022       CHI13  = CKNO3
11023       CHI10  = CMGSO4
11024       CHI14  = CKCL
11025       CHI5   = CNH4CL
11026       CHI7   = CNACL
11027       CHI8   = CNANO3
11028       CHI6   = CNH4NO3
11029       CHI15  = CMGNO32
11030       CHI12  = CCANO32
11031       CHI11   = CCASO4
11033       PSI1   = CNA2SO4      ! SALTS DISSOLVED
11034       PSI5   = CNH4CL
11035       PSI6   = CNH4NO3
11036       PSI7   = CNACL
11037       PSI8   = CNANO3
11038       PSI9   = CK2SO4
11039       PSI10  = CMGSO4
11040       PSI11  = CCASO4
11041       PSI12  = CCANO32
11042       PSI13  = CKNO3
11043       PSI14  = CKCL
11044       PSI15  = CMGNO32
11045       PSI16  = CMGCL2
11046       PSI17  = CCACL2
11048       CALL CALCMR2p1           ! WATER
11050       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
11051       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
11052       NH4I   = WAER(3)
11053       NO3I   = WAER(4)
11054       CLI    = WAER(5)
11055       CAI    = WAER(6)
11056       KI     = WAER(7)
11057       MGI    = WAER(8)
11059       HSO4I  = ZERO
11060       NH3AQ  = ZERO
11061       NO3AQ  = ZERO
11062       CLAQ   = ZERO
11064 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
11066       DO 10 I=1,NSWEEP
11068       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
11069       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
11070       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
11071       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
11072       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
11073       A8  = XK9 *(WATER/GAMA(3))**2.         ! NaNO3     <==> Na+
11074       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
11076 !C POTASSIUM SULFATE
11078       IF (KI*KI*SO4I .GT. A9) THEN
11079          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
11080          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
11081                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
11082          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
11083          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
11084          IF (ISLV.NE.0) ROOT9 = TINY
11085          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
11086                       (WAER(2)-WAER(6)), CHI9)
11087          ROOT9 = MAX (ROOT9, ZERO)
11088          PSI9  = CHI9 - ROOT9
11089       ENDIF
11090       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
11091       PSI9O   = PSI9
11093 !C POTASSIUM NITRATE
11095       IF (KI*NO3I .GT. A13) THEN
11096          BB     =-(WAER(4) - ROOT8 + WAER(7) - 2.D0*ROOT9 - ROOT14)
11097          CC     = (WAER(4)-ROOT8)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
11098          DD     = SQRT(MAX(BB*BB - 4.D0*CC, ZERO))
11099          ROOT13A= 0.5D0*(-BB-DD)
11100          ROOT13B= 0.5D0*(-BB+DD)
11101          IF (ZERO.LE.ROOT13A) THEN
11102             ROOT13 = ROOT13A
11103          ELSE
11104             ROOT13 = ROOT13B
11105          ENDIF
11106          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
11107          PSI13  = CHI13-ROOT13
11108       ENDIF
11109       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
11110       PSI13O   = PSI13
11112 !C POTASSIUM CLORIDE
11114       IF (KI*CLI .GT. A14) THEN
11115          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
11116          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
11117          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11118          ROOT14A= 0.5D0*(-BB-DD)
11119          ROOT14B= 0.5D0*(-BB+DD)
11120          IF (ZERO.LE.ROOT14A) THEN
11121             ROOT14 = ROOT14A
11122          ELSE
11123             ROOT14 = ROOT14B
11124          ENDIF
11125          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
11126          PSI14  = CHI14-ROOT14
11127       ENDIF
11128       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
11129       PSI14O   = PSI14
11131 !C AMMONIUM CLORIDE
11133       IF (NH4I*CLI .GT. A5) THEN
11134          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
11135          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
11136          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11137          ROOT5A = 0.5D0*(-BB-DD)
11138          ROOT5B = 0.5D0*(-BB+DD)
11139          IF (ZERO.LE.ROOT5A) THEN
11140             ROOT5 = ROOT5A
11141          ELSE
11142             ROOT5 = ROOT5B
11143          ENDIF
11144          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
11145          PSI5  = CHI5-ROOT5
11146       ENDIF
11147       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
11148       PSI5O   = PSI5
11150 !C SODIUM CLORIDE
11152       IF (NAI*CLI .GT. A7) THEN
11153          BB     =-(WAER(5) + WAER(1) - ROOT8 - ROOT14 - ROOT5)
11154          CC     = (WAER(5) - ROOT14 - ROOT5)*(WAER(1)-ROOT8) - A7
11155          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11156          ROOT7A = 0.5D0*(-BB-DD)
11157          ROOT7B = 0.5D0*(-BB+DD)
11158          IF (ZERO.LE.ROOT7A) THEN
11159             ROOT7 = ROOT7A
11160          ELSE
11161             ROOT7 = ROOT7B
11162          ENDIF
11163          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
11164          PSI7  = CHI7-ROOT7
11165       ENDIF
11166       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
11167       PSI7O   = PSI7
11169 !C SODIUM NITRATE
11171       IF (NAI*NO3I .GT. A8) THEN
11172          BB     =-(WAER(4) - ROOT13 + WAER(1) - ROOT7)
11173          CC     = (WAER(4) - ROOT13)*(WAER(1)-ROOT7) - A8
11174          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11175          ROOT8A = 0.5D0*(-BB-DD)
11176          ROOT8B = 0.5D0*(-BB+DD)
11177          IF (ZERO.LE.ROOT8A) THEN
11178             ROOT8 = ROOT8A
11179          ELSE
11180             ROOT8 = ROOT8B
11181          ENDIF
11182          ROOT8 = MIN(MAX(ROOT8, ZERO), CHI8)
11183          PSI8  = CHI8-ROOT8
11184       ENDIF
11185       PSCONV8 = ABS(PSI8-PSI8O) .LE. EPS*PSI8O
11186       PSI8O   = PSI8
11188 !C ION CONCENTRATIONS ; CORRECTIONS
11190       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
11191       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
11192       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
11193       NO3I   = MAX (WAER(4) - ROOT13 - ROOT8, ZERO)
11194       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
11195       CAI    = ZERO
11196       NAI    = MAX (WAER(1) - ROOT7 - ROOT8, ZERO)
11197       MGI    = WAER(8)
11199 !C SOLUTION ACIDIC OR BASIC?
11201       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
11202              - 2.D0*CAI - KI - 2.D0*MGI
11203       IF (GG.GT.TINY) THEN                        ! H+ in excess
11204          BB =-GG
11205          CC =-AKW
11206          DD = BB*BB - 4.D0*CC
11207          HI = 0.5D0*(-BB + SQRT(DD))
11208          OHI= AKW/HI
11209       ELSE                                        ! OH- in excess
11210          BB = GG
11211          CC =-AKW
11212          DD = BB*BB - 4.D0*CC
11213          OHI= 0.5D0*(-BB + SQRT(DD))
11214          HI = AKW/OHI
11215       ENDIF
11217 !C UNDISSOCIATED SPECIES EQUILIBRIA
11219       IF (HI.GT.OHI) THEN
11220 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
11221 !C         HI    = AKW/OHI
11222 !C         HSO4I = ZERO
11223 !C      ELSE
11224 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
11225 !C     &           - KI - 2.D0*MGI, ZERO)
11226 !C         GGCL  = MAX(GG-GGNO3, ZERO)
11227 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
11228 !C         IF (GGNO3.GT.TINY) THEN
11229 !C            IF (GGCL.LE.TINY) HI = ZERO
11230 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
11231 !C         ENDIF
11233 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
11235          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
11236       else
11237         del= zero
11238       ENDIF
11239       SO4I  = SO4I  - DEL
11240       HI    = HI    - DEL
11241       HSO4I = DEL
11242 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
11243       OHI   = AKW/HI
11245       IF (HI.LE.TINY) THEN
11246       HI = SQRT(AKW)
11247       OHI   = AKW/HI
11248       ENDIF
11250 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
11252       MOLAL(1) = HI
11253       MOLAL(2) = NAI
11254       MOLAL(3) = NH4I
11255       MOLAL(4) = CLI
11256       MOLAL(5) = SO4I
11257       MOLAL(6) = HSO4I
11258       MOLAL(7) = NO3I
11259       MOLAL(8) = CAI
11260       MOLAL(9) = KI
11261       MOLAL(10)= MGI
11263 !C *** CALCULATE WATER **************************************************
11265       CALL CALCMR2p1
11267 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
11269       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
11270          CALL CALCACT2p1
11271       ELSE
11272          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
11273              .AND. PSCONV7 .AND. PSCONV8) GOTO 20
11274       ENDIF
11275 10    CONTINUE
11276 !ccc      CALL PUSHERR (0002, 'CALCW3')    ! WARNING ERROR: NO CONVERGENCE
11278 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
11280 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
11281       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
11282       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
11284       GNH3    = NH4I/HI/A2
11285       GHNO3   = HI*NO3I/A3
11286       GHCL    = HI*CLI /A4
11288       GASAQ(1)= NH3AQ
11289       GASAQ(2)= CLAQ
11290       GASAQ(3)= NO3AQ
11292       CNH42S4 = ZERO
11293       CNH4NO3 = ZERO
11294       CNH4CL  = CHI5 - PSI5
11295       CNACL   = CHI7 - PSI7
11296       CNANO3  = CHI8 - PSI8
11297       CMGSO4  = ZERO
11298       CK2SO4  = CHI9 - PSI9
11299       CCASO4  = MIN (WAER(6), WAER(2))
11300       CCANO32 = ZERO
11301       CKNO3   = CHI13 - PSI13
11302       KCL     = CHI14 - PSI14
11303       CMGNO32 = ZERO
11304       CMGCL2  = ZERO
11305       CCACL2  = ZERO
11307       RETURN
11309 !C *** END OF SUBROUTINE CALCW3A ******************************************
11311       END
11313 !C=======================================================================
11315 !C *** ISORROPIA CODE II
11316 !C *** SUBROUTINE CALCW2
11317 !C *** CASE W2
11319 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
11320 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
11321 !C     2. SOLID AEROSOL ONLY
11322 !C     3. SOLIDS POSSIBLE : CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4,
11323 !C                          MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
11325 !C     THERE ARE THREE REGIMES IN THIS CASE:
11326 !C     1. CACL2(s) POSSIBLE. LIQUID & SOLID AEROSOL (SUBROUTINE CALCL2A)
11327 !C     2. CACL2(s) NOT POSSIBLE, AND RH < MDRH. SOLID AEROSOL ONLY
11328 !C     3. CACL2(s) NOT POSSIBLE, AND RH >= MDRH. SOLID & LIQUID AEROSOL
11330 !C     REGIMES 2. AND 3. ARE CONSIDERED TO BE THE SAME AS CASES W1A, W2B
11331 !C     RESPECTIVELY
11332 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
11333 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
11334 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
11336 !C=======================================================================
11339       SUBROUTINE CALCW22p1
11340       INCLUDE 'module_isrpia_inc.F'
11341       EXTERNAL CALCW1A2p1, CALCW3A2p1, CALCW4A2p1, CALCW5A2p1, CALCW62p1
11343 !C *** FIND DRY COMPOSITION **********************************************
11345       CALL CALCW1A2p1
11347 !C *** REGIME DEPENDS UPON THE POSSIBLE SOLIDS & RH **********************
11349       IF (CCACL2.GT.TINY) THEN
11350          SCASE = 'W2 ; SUBCASE 1'
11351          CALL CALCW2A2p1
11352          SCASE = 'W2 ; SUBCASE 1'
11353       ENDIF
11355       IF (WATER.LE.TINY) THEN
11356          IF (RH.LT.DRMP2) THEN             ! ONLY SOLIDS
11357             WATER = TINY
11358             DO 10 I=1,NIONS
11359                MOLAL(I) = ZERO
11360 10          CONTINUE
11361             CALL CALCW1A2p1
11362             SCASE = 'W2 ; SUBCASE 2'
11363          ELSE
11364             IF (CMGCL2.GT. TINY) THEN
11365                SCASE = 'W2 ; SUBCASE 3'    ! MDRH (CaSO4, CA(NO3)2, K2SO4, KNO3, KCL, MGSO4, MGCL2,
11366 !C                                                  MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL)
11367                CALL CALCMDRPII2p1 (RH, DRMP2, DRMGCL2, CALCW1A2p1, CALCW3A2p1)
11368                SCASE = 'W2 ; SUBCASE 3'
11369             ENDIF
11370             IF (WATER.LE.TINY .AND. RH.GE.DRMP3 .AND. RH.LT.DRMP4) THEN
11371                SCASE = 'W2 ; SUBCASE 4'    ! MDRH (CaSO4, K2SO4, KNO3, KCL, MGSO4, CANO32,
11372 !C                                                  MG(NO3)2, NANO3, NACL, NH4NO3, NH4CL)
11373                CALL CALCMDRPII2p1 (RH, DRMP3, DRCANO32, CALCW1A2p1, CALCW4A2p1)
11374                SCASE = 'W2 ; SUBCASE 4'
11375             ENDIF
11376             IF (WATER.LE.TINY .AND. RH.GE.DRMP4 .AND. RH.LT.DRMP5) THEN
11377                SCASE = 'W2 ; SUBCASE 5'    ! MDRH (CaSO4, K2SO4, KNO3, KCL, MGSO4,
11378 !C                                                  MGNO32, NANO3, NACL, NH4NO3, NH4CL)
11379                CALL CALCMDRPII2p1 (RH, DRMP4, DRMGNO32, CALCW1A2p1, CALCW5A2p1)
11380                SCASE = 'W2 ; SUBCASE 5'
11381             ENDIF
11382             IF (WATER.LE.TINY .AND. RH.GE.DRMP5) THEN
11383                SCASE = 'W2 ; SUBCASE 6'    ! MDRH (CaSO4, K2SO4, KNO3, KCL, MGSO4,
11384 !C                                                  NANO3, NACL, NH4NO3, NH4CL)
11385                CALL CALCMDRPII2p1 (RH, DRMP5, DRNH4NO3, CALCW1A2p1, CALCW62p1)
11386                SCASE = 'W2 ; SUBCASE 6'
11387             ELSE
11388                WATER = TINY
11389                DO 20 I=1,NIONS
11390                   MOLAL(I) = ZERO
11391 20             CONTINUE
11392                CALL CALCW1A2p1
11393                SCASE = 'W2 ; SUBCASE 2'
11394             ENDIF
11395          ENDIF
11396       ENDIF
11398       RETURN
11400 !C *** END OF SUBROUTINE CALCW2 ******************************************
11402       END
11404 !C=======================================================================
11406 !C *** ISORROPIA CODE II
11407 !C *** SUBROUTINE CALCW2A
11408 !C *** CASE W2A
11410 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
11411 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
11412 !C     2. THERE IS BOTH A LIQUID & SOLID PHASE
11413 !C     3. SOLIDS POSSIBLE : CaSO4, K2SO4, KNO3, MGSO4, KCL, NH4CL, NACL,
11414 !C                          NANO3, NH4NO3, CA(NO3)2, MG(NO3)2, MGCL2
11415 !C     4. Completely dissolved: CACL2
11417 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
11418 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
11419 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
11421 !C=======================================================================
11423       SUBROUTINE CALCW2A2p1
11424       INCLUDE 'module_isrpia_inc.F'
11426       LOGICAL PSCONV9, PSCONV13, PSCONV14, PSCONV5, PSCONV7, PSCONV8
11427       DOUBLE PRECISION NH4I, NAI, NO3I, NH3AQ, NO3AQ, CLAQ, CAI, KI, MGI
11429       COMMON /SOLUT2p1/ CHI1, CHI2, CHI3, CHI4, CHI5, CHI6, CHI7, CHI8,     &
11430                      CHI9, CHI10, CHI11, CHI12, CHI13, CHI14, CHI15,     &
11431                      CHI16, CHI17, PSI1, PSI2, PSI3, PSI4, PSI5, PSI6,   &
11432                      PSI7, PSI8, PSI9, PSI10, PSI11, PSI12, PSI13,       &
11433                      PSI14, PSI15, PSI16, PSI17, A1, A2, A3, A4, A5, A6, &
11434                      A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17
11436 !C *** SETUP PARAMETERS ************************************************
11438       FRST    =.TRUE.
11439       CALAIN  =.TRUE.
11440       CALAOU  =.TRUE.
11442       PSCONV9 =.TRUE.
11443       PSCONV13=.TRUE.
11444       PSCONV14=.TRUE.
11445       PSCONV5 =.TRUE.
11446       PSCONV7 =.TRUE.
11447       PSCONV8 =.TRUE.
11449       PSI9O   =-GREAT
11450       PSI13O  =-GREAT
11451       PSI14O  =-GREAT
11452       PSI5O   =-GREAT
11453       PSI7O   =-GREAT
11454       PSI8O   =-GREAT                ! GREAT = 1.D10
11456       ROOT9   = ZERO
11457       ROOT13  = ZERO
11458       ROOT14  = ZERO
11459       ROOT5   = ZERO
11460       ROOT7   = ZERO
11461       ROOT8   = ZERO
11463 !C *** CALCULATE INITIAL SOLUTION ***************************************
11465       CALL CALCW1A2p1
11467       CHI9   = CK2SO4       ! SALTS
11468       CHI13  = CKNO3
11469       CHI10  = CMGSO4
11470       CHI14  = CKCL
11471       CHI5   = CNH4CL
11472       CHI7   = CNACL
11473       CHI8   = CNANO3
11474       CHI6   = CNH4NO3
11475       CHI15  = CMGNO32
11476       CHI12  = CCANO32
11477       CHI16  = CMGCL2
11478       CHI11   = CCASO4
11480       PSI1   = CNA2SO4      ! SALTS DISSOLVED
11481       PSI5   = CNH4CL
11482       PSI6   = CNH4NO3
11483       PSI7   = CNACL
11484       PSI8   = CNANO3
11485       PSI9   = CK2SO4
11486       PSI10  = CMGSO4
11487       PSI11  = CCASO4
11488       PSI12  = CCANO32
11489       PSI13  = CKNO3
11490       PSI14  = CKCL
11491       PSI15  = CMGNO32
11492       PSI16  = CMGCL2
11493       PSI17  = CCACL2
11495       CALL CALCMR2p1           ! WATER
11497       NAI    = WAER(1)      ! LIQUID CONCENTRATIONS
11498       SO4I   = MAX (WAER(2) - WAER(6), ZERO)
11499       NH4I   = WAER(3)
11500       NO3I   = WAER(4)
11501       CLI    = WAER(5)
11502       CAI    = WAER(6)
11503       KI     = WAER(7)
11504       MGI    = WAER(8)
11506       HSO4I  = ZERO
11507       NH3AQ  = ZERO
11508       NO3AQ  = ZERO
11509       CLAQ   = ZERO
11511 !C *** SOLVE EQUATIONS ; WITH ITERATIONS FOR ACTIVITY COEF. ************
11513       DO 10 I=1,NSWEEP
11515       A9  = XK17 *(WATER/GAMA(17))**3.0      ! K2SO4     <==> K+
11516       A13 = XK19 *(WATER/GAMA(19))**2.0      ! KNO3      <==> K+
11517       A14 = XK20 *(WATER/GAMA(20))**2.0      ! KCL       <==> K+
11518       A5  = XK14*(WATER/GAMA(6))**2.0        ! NH4Cl     <==> NH4+
11519       A7  = XK8 *(WATER/GAMA(1))**2.0        ! NaCl      <==> Na+
11520       A8  = XK9 *(WATER/GAMA(3))**2.         ! NaNO3     <==> Na+
11521       AKW = XKW*RH*WATER*WATER               ! H2O       <==> H+
11523 !C POTASSIUM SULFATE
11525       IF (KI*KI*SO4I .GT. A9) THEN
11526          BB =-((WAER(2)-WAER(6)) + WAER(7) - ROOT13 - ROOT14)
11527          CC = (WAER(7)-ROOT13-ROOT14)*(WAER(2)-WAER(6)) + &
11528                0.25D0*(WAER(7)-ROOT13-ROOT14)**2.0
11529          DD =-0.25*((WAER(7)-ROOT13-ROOT14)**2.0*(WAER(2)-WAER(6)) - A9)
11530          CALL POLY32p1(BB, CC, DD, ROOT9, ISLV)
11531          IF (ISLV.NE.0) ROOT9 = TINY
11532          ROOT9 = MIN (ROOT9, WAER(7)/2.0-ROOT13-ROOT14, &
11533                       (WAER(2)-WAER(6)), CHI9)
11534          ROOT9 = MAX (ROOT9, ZERO)
11535          PSI9  = CHI9 - ROOT9
11536       ENDIF
11537       PSCONV9 = ABS(PSI9-PSI9O) .LE. EPS*PSI9O
11538       PSI9O   = PSI9
11540 !C POTASSIUM NITRATE
11542       IF (KI*NO3I .GT. A13) THEN
11543          BB     =-(WAER(4) - ROOT8 + WAER(7) - 2.D0*ROOT9 - ROOT14)
11544          CC     = (WAER(4)-ROOT8)*(WAER(7) - 2.D0*ROOT9 - ROOT14) - A13
11545          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11546          ROOT13A= 0.5D0*(-BB-DD)
11547          ROOT13B= 0.5D0*(-BB+DD)
11548          IF (ZERO.LE.ROOT13A) THEN
11549             ROOT13 = ROOT13A
11550          ELSE
11551             ROOT13 = ROOT13B
11552          ENDIF
11553          ROOT13 = MIN(MAX(ROOT13, ZERO), CHI13)
11554          PSI13  = CHI13-ROOT13
11555       ENDIF
11556       PSCONV13 = ABS(PSI13-PSI13O) .LE. EPS*PSI13O
11557       PSI13O   = PSI13
11559 !C POTASSIUM CLORIDE
11561       IF (KI*CLI .GT. A14) THEN
11562          BB     =-(WAER(5)-ROOT5-ROOT7 + WAER(7)-2.D0*ROOT9-ROOT13)
11563          CC     = (WAER(5)-ROOT5-ROOT7)*(WAER(7)-2.D0*ROOT9-ROOT13)-A14
11564          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11565          ROOT14A= 0.5D0*(-BB-DD)
11566          ROOT14B= 0.5D0*(-BB+DD)
11567          IF (ZERO.LE.ROOT14A) THEN
11568             ROOT14 = ROOT14A
11569          ELSE
11570             ROOT14 = ROOT14B
11571          ENDIF
11572          ROOT14 = MIN(MAX(ROOT14, ZERO), CHI14)
11573          PSI14  = CHI14-ROOT14
11574       ENDIF
11575       PSCONV14 = ABS(PSI14-PSI14O) .LE. EPS*PSI14O
11576       PSI14O   = PSI14
11578 !C AMMONIUM CLORIDE
11580       IF (NH4I*CLI .GT. A5) THEN
11581          BB     =-(WAER(5) + WAER(3) - ROOT14 - ROOT7)
11582          CC     = (WAER(5) - ROOT14 - ROOT7)*WAER(3) - A5
11583          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11584          ROOT5A = 0.5D0*(-BB-DD)
11585          ROOT5B = 0.5D0*(-BB+DD)
11586          IF (ZERO.LE.ROOT5A) THEN
11587             ROOT5 = ROOT5A
11588          ELSE
11589             ROOT5 = ROOT5B
11590          ENDIF
11591          ROOT5 = MIN(MAX(ROOT5, ZERO), CHI5)
11592          PSI5  = CHI5-ROOT5
11593       ENDIF
11594       PSCONV5 = ABS(PSI5-PSI5O) .LE. EPS*PSI5O
11595       PSI5O   = PSI5
11597 !C SODIUM CLORIDE
11599       IF (NAI*CLI .GT. A7) THEN
11600          BB     =-(WAER(5) + WAER(1) - ROOT8 - ROOT14 - ROOT5)
11601          CC     = (WAER(5) - ROOT14 - ROOT5)*(WAER(1)-ROOT8) - A7
11602          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11603          ROOT7A = 0.5D0*(-BB-DD)
11604          ROOT7B = 0.5D0*(-BB+DD)
11605          IF (ZERO.LE.ROOT7A) THEN
11606             ROOT7 = ROOT7A
11607          ELSE
11608             ROOT7 = ROOT7B
11609          ENDIF
11610          ROOT7 = MIN(MAX(ROOT7, ZERO), CHI7)
11611          PSI7  = CHI7-ROOT7
11612       ENDIF
11613       PSCONV7 = ABS(PSI7-PSI7O) .LE. EPS*PSI7O
11614       PSI7O   = PSI7
11616 !C SODIUM NITRATE
11618       IF (NAI*NO3I .GT. A8) THEN
11619          BB     =-(WAER(4) - ROOT13 + WAER(1) - ROOT7)
11620          CC     = (WAER(4) - ROOT13)*(WAER(1)-ROOT7) - A8
11621          DD     = SQRT(MAX(BB*BB - 4.D0*CC, TINY))
11622          ROOT8A = 0.5D0*(-BB-DD)
11623          ROOT8B = 0.5D0*(-BB+DD)
11624          IF (ZERO.LE.ROOT8A) THEN
11625             ROOT8 = ROOT8A
11626          ELSE
11627             ROOT8 = ROOT8B
11628          ENDIF
11629          ROOT8 = MIN(MAX(ROOT8, ZERO), CHI8)
11630          PSI8  = CHI8-ROOT8
11631       ENDIF
11632       PSCONV8 = ABS(PSI8-PSI8O) .LE. EPS*PSI8O
11633       PSI8O   = PSI8
11635 !C ION CONCENTRATIONS ; CORRECTIONS
11637       KI     = MAX (WAER(7) - 2.D0*ROOT9 - ROOT13 - ROOT14, ZERO)
11638       SO4I   = MAX (WAER(2)-WAER(6) - ROOT9, ZERO)
11639       NH4I   = MAX (WAER(3) - ROOT5, ZERO)
11640       NO3I   = MAX (WAER(4) - ROOT13 - ROOT8, ZERO)
11641       CLI    = MAX (WAER(5) - ROOT14 - ROOT5 - ROOT7, ZERO)
11642       CAI    = ZERO
11643       NAI    = MAX (WAER(1) - ROOT7 - ROOT8, ZERO)
11644       MGI    = WAER(8)
11646 !C SOLUTION ACIDIC OR BASIC?
11648       GG   = 2.D0*SO4I + NO3I + CLI - NAI - NH4I &
11649              - 2.D0*CAI - KI - 2.D0*MGI
11650       IF (GG.GT.TINY) THEN                        ! H+ in excess
11651          BB =-GG
11652          CC =-AKW
11653          DD = BB*BB - 4.D0*CC
11654          HI = 0.5D0*(-BB + SQRT(DD))
11655          OHI= AKW/HI
11656       ELSE                                        ! OH- in excess
11657          BB = GG
11658          CC =-AKW
11659          DD = BB*BB - 4.D0*CC
11660          OHI= 0.5D0*(-BB + SQRT(DD))
11661          HI = AKW/OHI
11662       ENDIF
11664 !C UNDISSOCIATED SPECIES EQUILIBRIA
11666       IF (HI.GT.OHI) THEN
11667 !C         CALL CALCAMAQ2 (-GG, NH4I, OHI, NH3AQ)
11668 !C         HI    = AKW/OHI
11669 !C         HSO4I = ZERO
11670 !C      ELSE
11671 !C         GGNO3 = MAX(2.D0*SO4I + NO3I - NAI - NH4I - 2.D0*CAI
11672 !C     &           - KI - 2.D0*MGI, ZERO)
11673 !C         GGCL  = MAX(GG-GGNO3, ZERO)
11674 !C         IF (GGCL .GT.TINY) CALL CALCCLAQ2 (GGCL, CLI, HI, CLAQ) ! HCl
11675 !C         IF (GGNO3.GT.TINY) THEN
11676 !C            IF (GGCL.LE.TINY) HI = ZERO
11677 !C            CALL CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ)              ! HNO3
11678 !C         ENDIF
11680 !C CONCENTRATION ADJUSTMENTS ; HSO4 minor species.
11682          CALL CALCHS42p1 (HI, SO4I, ZERO, DEL)
11683       else
11684         del= zero
11685       ENDIF
11686       SO4I  = SO4I  - DEL
11687       HI    = HI    - DEL
11688       HSO4I = DEL
11689 !C         IF (HI.LE.TINY) HI = SQRT(AKW)
11690       OHI   = AKW/HI
11692       IF (HI.LE.TINY) THEN
11693       HI = SQRT(AKW)
11694       OHI   = AKW/HI
11695       ENDIF
11697 !C *** SAVE CONCENTRATIONS IN MOLAL ARRAY ******************************
11699       MOLAL(1) = HI
11700       MOLAL(2) = NAI
11701       MOLAL(3) = NH4I
11702       MOLAL(4) = CLI
11703       MOLAL(5) = SO4I
11704       MOLAL(6) = HSO4I
11705       MOLAL(7) = NO3I
11706       MOLAL(8) = CAI
11707       MOLAL(9) = KI
11708       MOLAL(10)= MGI
11710 !C *** CALCULATE WATER **************************************************
11712       CALL CALCMR2p1
11714 !C *** CALCULATE ACTIVITIES OR TERMINATE INTERNAL LOOP *****************
11716       IF (FRST.AND.CALAOU .OR. .NOT.FRST.AND.CALAIN) THEN
11717          CALL CALCACT2p1
11718       ELSE
11719          IF (PSCONV9 .AND. PSCONV13 .AND. PSCONV14 .AND. PSCONV5 &
11720              .AND. PSCONV7 .AND. PSCONV8) GOTO 20
11721       ENDIF
11722 10    CONTINUE
11723 !ccc      CALL PUSHERR (0002, 'CALCW2')    ! WARNING ERROR: NO CONVERGENCE
11725 !C *** CALCULATE GAS / SOLID SPECIES (LIQUID IN MOLAL ALREADY) *********
11727 20    A2      = (XK2/XKW)*R*TEMP*(GAMA(10)/GAMA(5))**2. ! NH3  <==> NH4+
11728       A3      = XK4 *R*TEMP*(WATER/GAMA(10))**2.        ! HNO3 <==> NO3-
11729       A4      = XK3 *R*TEMP*(WATER/GAMA(11))**2.        ! HCL  <==> CL-
11731       GNH3    = NH4I/HI/A2
11732       GHNO3   = HI*NO3I/A3
11733       GHCL    = HI*CLI /A4
11735       GASAQ(1)= NH3AQ
11736       GASAQ(2)= CLAQ
11737       GASAQ(3)= NO3AQ
11739       CNH42S4 = ZERO
11740       CNH4NO3 = ZERO
11741       CNH4CL  = CHI5 - PSI5
11742       CNACL   = CHI7 - PSI7
11743       CNANO3  = CHI8 - PSI8
11744       CMGSO4  = ZERO
11745       CK2SO4  = CHI9 - PSI9
11746       CCASO4  = MIN (WAER(6), WAER(2))
11747       CCANO32 = ZERO
11748       CKNO3   = CHI13 - PSI13
11749       KCL     = CHI14 - PSI14
11750       CMGNO32 = ZERO
11751       CMGCL2  = ZERO
11752       CCACL2  = ZERO
11754       RETURN
11756 !C *** END OF SUBROUTINE CALCW2A ******************************************
11758       END
11760 !C=======================================================================
11762 !C *** ISORROPIA CODE II
11763 !C *** SUBROUTINE CALCW1
11764 !C *** CASE W1
11766 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
11767 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
11768 !C     2. SOLID AEROSOL ONLY
11769 !C     3. SOLIDS POSSIBLE : CaSO4, CA(NO3)2, CACL2, K2SO4, KNO3, KCL, MGSO4,
11770 !C                          MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
11772 !C     THERE ARE TWO POSSIBLE REGIMES HERE, DEPENDING ON RELATIVE HUMIDITY:
11773 !C     1. WHEN RH >= MDRH ; LIQUID PHASE POSSIBLE (MDRH REGION)
11774 !C     2. WHEN RH < MDRH  ; ONLY SOLID PHASE POSSIBLE (SUBROUTINE CALCP1A)
11776 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY,
11777 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
11778 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS & ATHANASIOS NENES
11780 !C=======================================================================
11782       SUBROUTINE CALCW12p1
11783       INCLUDE 'module_isrpia_inc.F'
11784       EXTERNAL CALCW1A2p1, CALCW2A2p1
11786 !C *** REGIME DEPENDS UPON THE AMBIENT RELATIVE HUMIDITY *****************
11788       IF (RH.LT.DRMP1) THEN
11789          SCASE = 'W1 ; SUBCASE 1'
11790          CALL CALCW1A2p1              ! SOLID PHASE ONLY POSSIBLE
11791          SCASE = 'W1 ; SUBCASE 1'
11792       ELSE
11793          SCASE = 'W1 ; SUBCASE 2'  ! LIQUID & SOLID PHASE POSSIBLE
11794          CALL CALCMDRPII2p1 (RH, DRMP1, DRCACL2, CALCW1A2p1, CALCW2A2p1)
11795          SCASE = 'W1 ; SUBCASE 2'
11796       ENDIF
11798       RETURN
11800 !C *** END OF SUBROUTINE CALCW1 ******************************************
11802       END
11804 !C=======================================================================
11806 !C *** ISORROPIA CODE II
11807 !C *** SUBROUTINE CALCW1A
11808 !C *** CASE W1A
11810 !C     THE MAIN CHARACTERISTICS OF THIS REGIME ARE:
11811 !C     1. SULFATE POOR (SULRAT > 2.0) ; Rcr+Na >= 2.0 ; Rcr > 2)
11812 !C     2. SOLID AEROSOL ONLY
11813 !C     3. SOLIDS POSSIBLE : CaSO4, CA(NO3)2, CACL2, K2SO4, KNO3, KCL, MGSO4,
11814 !C                          MG(NO3)2, MGCL2, NANO3, NACL, NH4NO3, NH4CL
11816 !C *** COPYRIGHT 1996-2008, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY
11817 !C *** GEORGIA INSTITUTE OF TECHNOLOGY
11818 !C *** WRITTEN BY CHRISTOS FOUNTOUKIS AND ATHANASIOS NENES
11820 !C=======================================================================
11822       SUBROUTINE CALCW1A2p1
11823       INCLUDE 'module_isrpia_inc.F'
11825 !C *** CALCULATE SOLIDS **************************************************
11827       CCASO4  = MIN (WAER(2), WAER(6))              !SOLID CASO4
11828       CAFR    = MAX (WAER(6) - CCASO4, ZERO)
11829       SO4FR   = MAX (WAER(2) - CCASO4, ZERO)
11830       CK2SO4  = MIN (SO4FR, 0.5D0*WAER(7))          !SOLID K2SO4
11831       FRK     = MAX (WAER(7) - 2.D0*CK2SO4, ZERO)
11832       SO4FR   = MAX (SO4FR - CK2SO4, ZERO)
11833       CMGSO4  = SO4FR                               !SOLID MGSO4
11834       FRMG    = MAX (WAER(8) - CMGSO4, ZERO)
11835       CNACL   = MIN (WAER(1), WAER(5))              !SOLID NACL
11836       FRNA    = MAX (WAER(1) - CNACL, ZERO)
11837       CLFR    = MAX (WAER(5) - CNACL, ZERO)
11838       CCACL2  = MIN (CAFR, 0.5D0*CLFR)              !SOLID CACL2
11839       CAFR    = MAX (CAFR - CCACL2, ZERO)
11840       CLFR    = MAX (WAER(5) - 2.D0*CCACL2, ZERO)
11841       CCANO32 = MIN (CAFR, 0.5D0*WAER(4))           !SOLID CA(NO3)2
11842       CAFR    = MAX (CAFR - CCANO32, ZERO)
11843       FRNO3   = MAX (WAER(4) - 2.D0*CCANO32, ZERO)
11844       CMGCL2  = MIN (FRMG, 0.5D0*CLFR)              !SOLID MGCL2
11845       FRMG    = MAX (FRMG - CMGCL2, ZERO)
11846       CLFR    = MAX (CLFR - 2.D0*CMGCL2, ZERO)
11847       CMGNO32 = MIN (FRMG, 0.5D0*FRNO3)             !SOLID MG(NO3)2
11848       FRMG    = MAX (FRMG - CMGNO32, ZERO)
11849       FRNO3   = MAX (FRNO3 - 2.D0*CMGNO32, ZERO)
11850       CNANO3  = MIN (FRNA, FRNO3)                   !SOLID NANO3
11851       FRNA    = MAX (FRNA - CNANO3, ZERO)
11852       FRNO3   = MAX (FRNO3 - CNANO3, ZERO)
11853       CKCL    = MIN (FRK, CLFR)                     !SOLID KCL
11854       FRK     = MAX (FRK - CKCL, ZERO)
11855       CLFR    = MAX (CLFR - CKCL, ZERO)
11856       CKNO3   = MIN (FRK, FRNO3)                    !SOLID KNO3
11857       FRK     = MAX (FRK - CKNO3, ZERO)
11858       FRNO3   = MAX (FRNO3 - CKNO3, ZERO)
11860 !C *** OTHER PHASES ******************************************************
11862       WATER   = ZERO
11864       GNH3    = ZERO
11865       GHNO3   = ZERO
11866       GHCL    = ZERO
11868       RETURN
11870 !C *** END OF SUBROUTINE CALCW1A *****************************************
11872       END