eqsam_param__dummy.F90 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. !### macro's #####################################################
  2. !
  3. #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
  4. #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
  5. #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
  6. !
  7. #include "tm5.inc"
  8. !
  9. !#################################################################
  10. module eqsam_param
  11. !
  12. ! use GO, only : gol, goPr, goErr
  13. !
  14. ! implicit none
  15. !
  16. ! private
  17. !
  18. ! public :: eqsam_v03d
  19. !
  20. !contains
  21. !
  22. !
  23. ! subroutine eqsam_v03d(yi,yo,nca,nco,iopt,loop,imax,ipunit,in)
  24. ! !
  25. ! implicit none
  26. ! !___________________________________________________________________________________________________________________________________
  27. ! ! Written by Swen Metzger 3/11/99. Modified 2002, 2003.
  28. ! !
  29. ! ! Department of Atmospheric Chemistry, Max-Planck-Institute for Chemistry.
  30. ! ! email: metzger@mpch-mainz.mpg.de
  31. ! ! http://www.mpch-mainz.mpg.de/~metzger
  32. ! !
  33. ! ! COPYRIGHT 1999-2003
  34. ! !
  35. ! ! purpose
  36. ! ! -------
  37. ! ! EQSAM (EQuilibrium Simplified Aerosol Model) is a new and computationally efficient thermodynamic
  38. ! ! aerosol composition model that allows to calculate the gas/aerosol equilibrium partitioning,
  39. ! ! including aerosol water, sufficiently fast and accurate for global (or even regional) modeling.
  40. ! ! EQSAM is based on a number of parameterizations, including single solute molalities and activity
  41. ! ! coefficients (AC). The thermodynamic framework (domains and subdomains, internally mixed aerosols)
  42. ! ! is the same as of more sophisticated thermodynamic equilibrium models (EQMs), e.g. of ISORROPIA
  43. ! ! (Nenes et al., 1998). Details are given in the references below (and the references therein).
  44. ! !
  45. ! ! The main assumption on which EQSAM/EQMs are based is thermodynamical and chemical equilibrium.
  46. ! ! From this assumption it directly follows that the aerosol water activity (aw) equals the ambient
  47. ! ! relative humidity (RH), if the water vapor pressure is sufficiently larger than the partial vapor
  48. ! ! pressure of the aerosol compounds. This is approximately true for tropospheric aerosols. Given the
  49. ! ! large amount of water vapor present, water vapor and aerosol water equilibrate relatively faster
  50. ! ! compared to all other aerosol compounds. This is subsequently also true for single aerosol compounds.
  51. ! ! The water activity of single solutes must also equal RH under this assumption. Therefore, the so
  52. ! ! called ZSR-relation is (and can be) used to calculate the aerosol associated water mass (simply
  53. ! ! from the sum of all water mass fractions that are derived from measured single solute molalities).
  54. ! !
  55. ! ! In contrast to other EQMs, EQSAM utilizes the fact that the RH fixes the water activity
  56. ! ! (under the above assumptions) and the consequence that any changes in RH also causes changes in
  57. ! ! the aerosol water mass and, hence, aerosol activity (including activity coefficients). Thus, an decrease
  58. ! ! (increase) in RH decrease (increases) the aerosol water mass (and water activity). This can change the
  59. ! ! aerosol composition, e.g. due to condensation (evaporation/crystallization), because the vapor pressure
  60. ! ! above the aerosol reduces (increases). In turn, a vapor pressure reduction (increase) due to changes
  61. ! ! in the aerosol composition is compensated by an associated condensation (evaporation) of water vapor
  62. ! ! to maintain the aerosol molality to remain constant (because aw=RH). Furthermore, the aerosol water
  63. ! ! mainly depends on the aerosol mass and the type of solute, so that parameterizations of single solute
  64. ! ! molalities and activity coefficients can be defined, only depending on the type of solute and RH.
  65. ! ! The advantage of using such parameterizations is that the entire aerosol equilibrium composition
  66. ! ! can be solved analytically, i.e. non-iteratively, which considerably reduces the amount of CPU time
  67. ! ! that is usually need for aerosol thermodynamic calculations (especially if an EQM is incorporated in
  68. ! ! an aerosol dynamical model that is in turn embedded in a high resolution regional or global model).
  69. ! !
  70. ! ! However, EQSAM should still be regarded as a starting point for further developments. There is still
  71. ! ! room for improvements. For instance, this code is not yet numerically optimized (vectorized) and a
  72. ! ! number of improvements with respect to an explicit treatment of additional equilibrium reactions,
  73. ! ! missing (or only implicit) dissociation, and a basic parameterization of the water uptake.
  74. ! !
  75. ! ! Note that EQSAM was originally developed to calculate the gas/aerosol equilibrium partitioning of the
  76. ! ! ammonium-sulfate-nitrate-water system for climate models, excluding solid compounds.
  77. ! ! This version (eqsam_v03d.f90) is extended with respect to sea salt. Solids/hysteresis are treated in a
  78. ! ! simplified manner. Results of a box model comparison with ISORROPIA will be available from the web page.
  79. ! ! Please also note that the water uptake is based on additional (unpublished) parameterizations for single
  80. ! ! solute molalities, which are derived from tabulated measurements used in ISORROPIA. Note further that
  81. ! ! this extended version (eqsam_v03d.f90) is not yet published. A publication is in progress.
  82. ! !
  83. ! ! ToDo:
  84. ! ! Split ion-pairs into ions for water parameterizations (since info is actually available)
  85. ! ! Include uptake/dissociation of NH3, HNO3, HCl (mainly to get pH right at near neutral conditions)
  86. ! ! Extension to K+,Ca++,Mg++, CO2/(CO3)2--/HCO3-,SOA,etc.. (maybe not)
  87. ! ! Vectorization. Translation of hardcoded formulas in array syntax.
  88. ! ! I/O Interface and program structure clean up.
  89. ! ! EQSAM info webpage.
  90. ! !
  91. ! ! Version History:
  92. ! !
  93. ! ! eqsam_v03d.f90 (MPI-CH, June 2003):
  94. ! ! - gama parameterizations now according to Metzger 2002 (JGR Appendix)
  95. ! ! - improved pH calculations (still restricted to strong acids)
  96. ! ! - removed bug that lead to too high nitrate formation at dry and cold regions (UT/LS)
  97. ! ! - removed bug in solid/hysteresis calculations
  98. ! ! (both bugs introduced in eqsam_v03b.f90 by cleaning up eqsam_v02a.f90)
  99. ! !
  100. ! ! eqsam_v03c.f90 (MPI-CH, April 2003):
  101. ! ! - more accurate paramterizations of single solute molalities (Na, Cl species)
  102. ! ! - cleanded up RHD subdomain structure
  103. ! ! - improved water uptake (Na, Cl species)
  104. ! !
  105. ! ! eqsam_v03b.f90 (MPI-CH, March 2003):
  106. ! ! System extended to HCl,Cl-/Na+.
  107. ! ! Parameterization (fit) of additional HNO3 uptake removed.
  108. ! ! Instead, complete analytical solution of equilibrium reactions, based on the AC-RH relationship.
  109. ! ! eqsam_v03.f90 (IMAU, October 1999):
  110. ! ! Test version (included in TM3).
  111. ! ! eqsam_v02a.f90 (IMAU, April 2000):
  112. ! ! Box model version.
  113. ! ! eqsam_v02.f90 (IMAU, October 1999):
  114. ! ! TM3 version.
  115. ! ! Version including solids and additional HNO3 uptake on acidic aerosols (parameterized).
  116. ! ! eqsam_v01b.f90 (MPI-CH, January 2003):
  117. ! ! Same as eqsam_v01a.f90 (additional lines though uncommented for test purposes only).
  118. ! ! eqsam_v01a.f90 (IMAU, April 2000):
  119. ! ! Box model version.
  120. ! ! eqsam_v01.f90 (IMAU, October 1999):
  121. ! ! TM3 version.
  122. ! ! First and most basic version (without solids) for better vectorization (for global modeling).
  123. ! ! System: NH3,NH4+/H2SO4+,HSO4-,SO4--/HNO3,NO3-, H2O
  124. ! ! based on equilibrium / internal mixture assumption / aw=rh / ZSR-relation
  125. ! ! parameterization of activcity coefficients (AC), i.e. an AC-RH relationship
  126. ! !
  127. ! !
  128. ! ! interface
  129. ! ! ---------
  130. ! ! call eqsam_v03d(yi,yo,nca,nco,iopt,loop,imax,ipunit,in)
  131. ! !
  132. ! ! yi = input array (imax, nca)
  133. ! ! yo = output array (imax, nco)
  134. ! ! imax = max loop (e.g. time steps)
  135. ! ! nca >= 11
  136. ! ! nco >= 35
  137. ! ! iopt = 1 metastable
  138. ! ! iopt = 2 solids
  139. ! ! iopt = 3 hysteresis (metastable/solids) for online calculations
  140. ! ! iopt = 31 hysteresis lower branch
  141. ! ! iopt = 32 hysteresis upper branch
  142. ! ! ipunit = I/O unit (can be skipped)
  143. ! ! in = array (can be skipped)
  144. ! !
  145. ! ! method
  146. ! ! ------
  147. ! ! equilibrium / internal mixture assumption / aw=rh
  148. ! ! System: NH3,NH4+/H2SO4+,HSO4-,SO4--/HNO3,NO3-, HCl,Cl-/Na+, H2O
  149. ! ! (K+,Ca++,Mg++)
  150. ! ! external
  151. ! ! --------
  152. ! ! program eqmd.f90 (driver only needed for the box model version)
  153. ! ! subroutine gribio.f90 (provides diagnostics output in grib/binary/ascii format)
  154. ! !
  155. ! ! references
  156. ! ! ---------
  157. ! ! Swen Metzger Ph.D Thesis, University Utrecht, 2000.
  158. ! ! http://www.library.uu.nl/digiarchief/dip/diss/1930853/inhoud.htm
  159. ! !
  160. ! ! Metzger, S. M., F. J. Dentener, J. Lelieveld, and S. N. Pandis,
  161. ! ! GAS/AEROSOL PARTITIONING I: A COMPUTATIONALLY EFFICIENT MODEL,
  162. ! ! J Geophys. Res., 107, D16, 10.1029/2001JD001102, 2002
  163. ! ! http://www.agu.org/journals/jd/jd0216/2001JD001102/index.html
  164. ! ! Metzger, S. M., F. J. Dentener, A. Jeuken, and M. Krol, J. Lelieveld,
  165. ! ! GAS/AEROSOL PARTITIONING II: GLOBAL MODELING RESULTS,
  166. ! ! J Geophys. Res., 107, D16, 10.1029/2001JD001103, 2002.
  167. ! ! http://www.agu.org/journals/jd/jd0216/2001JD001103/index.html
  168. ! !___________________________________________________________________________________________________________________________________
  169. ! real,parameter :: RH_HIST_DW=1.50 ! mean value for mixture of wet (2) and dry (1) gridboxes (needed for HYSTERESIS)
  170. ! real,parameter :: T0=298.15,T1=298.0,AVO=6.03e23,R=82.0567e-6, & ! in cu.m*atm/deg/mole
  171. ! r_kcal = 1.986E-3 ! Ideal gas constant [kcal K-1.mole-1]
  172. ! real,parameter :: RHMAX=0.99,RHMIN=0.0001 ! restrict to max / min RH
  173. ! real,parameter :: MWNH4=18.,MWSO4=96.,MWNO3=62.,MWCl=35.5 ! mole mass of species considered
  174. ! real,parameter :: MWNa=23.0,MWCa=40.1,MWN=14.0, MWS=32.1
  175. ! real,parameter :: MWH20=55.51*18.01,ZERO=0.0
  176. ! real,parameter :: GF1=0.25,GF2=0.50,GF3=0.40,GF4=1.00,K=2. ! exponents of AC-RH functions
  177. ! !______________________________________________
  178. ! integer,parameter :: NPAIR=10
  179. ! !
  180. ! integer :: ii,il,IHYST
  181. ! integer,intent(in) :: nca,nco,imax,loop,ipunit
  182. ! integer,intent(inout) :: iopt
  183. ! !______________________________________________
  184. ! integer,dimension(6),intent(in) :: in
  185. ! !______________________________________________
  186. ! real :: T0T,TT,RH,PX,RHD,KAN,KAC,ZIONIC,RH_HIST,GAMA,GG,GF,GFN
  187. ! real :: X00,X01,X02,X03,X04,X05,X08,X09,X10,X11
  188. ! real :: X0,X1,X2,X3,X4,X5,X6,XK10,XK6
  189. ! real :: ZFLAG,ZKAN,ZKAC,PH,COEF,HPLUS,AKW,XKW,MOLAL
  190. ! real :: TNH4,TSO4,TNO3,TNa,TCl,TPo,TCa,TMg
  191. ! real :: PNH4,PSO4,PNO3,PCl,PNa,GNO3,GNH3,GSO4,GHCl
  192. ! real :: ASO4,ANO3,ANH4,ACl,ANa,SNH4,SSO4,SNO3,SCl,SNa
  193. ! real :: WH2O,PM,PMs,PMt,RINC,DON,RATIONS,GR,NO3P,NH4P
  194. ! !_______________________________________________
  195. ! real,dimension(imax,nca),intent(in) :: yi
  196. ! real,dimension(imax,nco),intent(out) :: yo
  197. ! real,dimension(8) :: w1,w2
  198. ! real,dimension(8) :: RHDA,RHDE,RHDX,RHDZ ! RHD / MRHD arrays for different aerosol types
  199. ! real,dimension(NPAIR) :: M0,MW,NW,ZW ! arrays of ion pairs
  200. ! !
  201. ! ! salt solutes:
  202. ! ! 1 = NACl, 2 = (NA)2SO4, 3 = NANO3, 4 = (NH4)2SO4, 5 = NH4NO3, 6 = NH4CL, 7 = 2H-SO4
  203. ! ! 8 = NH4HSO4, 9 = NAHSO4, 10 = (NH4)3H(SO4)2
  204. ! !
  205. ! DATA MW(1:NPAIR)/ 58.5, 142.0, 88.0, 132.0, 80.0, 53.5, 98.0, 115.0, 120.0, 247.0/ ! mole mass of the salt solute
  206. ! DATA NW(1:NPAIR)/ 2.0, 2.5, 2.5, 2.5, 3.5, 1.0, 4.5, 2.0, 2.0, 2.5/ ! square of max. dissocation number (not consistent)
  207. ! DATA ZW(1:NPAIR)/ 0.67, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0, 1.0/ ! exponents of water activity functions
  208. ! !
  209. ! DATA RHDA(1:8)/0.32840, 0.4906, 0.6183, 0.7997, 0.67500, 0.5000, 0.4000, 0.0000/ ! RHD / MRHD values as of ISORROPIA / SCAPE (T=298.15K)
  210. ! DATA RHDE(1:8)/-1860.0, -431.0, 852.00, 80.000, 262.000, 3951.0, 384.00, 0.0000/ ! Temp. coeff.
  211. ! !___________________________________________________________________________________________________________________________________
  212. ! IHYST=2
  213. ! IF(IOPT.EQ.31) THEN ! SOLID HYSTORY
  214. ! IHYST=1
  215. ! IOPT=3
  216. ! ELSEIF(IOPT.EQ.32) THEN ! WET HISTORY
  217. ! IHYST=2
  218. ! IOPT=3
  219. ! ENDIF
  220. ! !kt write(ipunit,*)'eqsam_v03d ...'
  221. ! !kt print*,' '
  222. ! !kt print*,' EQuilibrium Simplified Aerosol Model (EQSAM)'
  223. ! !kt print*,' for global modeling '
  224. ! !kt print*,' by '
  225. ! !kt print*,' Swen Metzger, MPI-CH '
  226. ! !kt print*,' Copyright 1999-2003 '
  227. ! !kt print*,' >> metzger@mpch-mainz.mpg.de << '
  228. ! !kt print*,' last change: 04. June, 2003 '
  229. ! !kt print*,' (version 3.0d) '
  230. ! !kt print*,' gas/aerosol calculations assuming '
  231. ! !kt print*,' System: NH3,NH4+/H2SO4+,HSO4-,SO4-- '
  232. ! !kt print*,' HNO3,NO3-, HCl,Cl-/Na+, H2O '
  233. ! !kt if(iopt.eq.1) then
  234. ! !kt print*,' metastable aeorsols '
  235. ! !kt elseif(iopt.eq.2) then
  236. ! !kt print*,' solid aeorsols '
  237. ! !kt elseif(iopt.eq.3) then
  238. ! !kt print*,' hysteresis '
  239. ! !kt print*,' (metastable/solids) '
  240. ! !kt if(IHYST.eq.1) then
  241. ! !kt print*,' solid hystory '
  242. ! !kt elseif(IHYST.eq.2) then
  243. ! !kt print*,' wet hystory '
  244. ! !kt endif
  245. ! !kt endif
  246. ! !kt print*,' '
  247. ! !kt print*,'loop over ',loop,' data sets'
  248. ! !kt print*,' '
  249. ! !___________________________________________________________________________________________________________________________________
  250. ! yo=0.;w1=0.;w2=0. ! init/reset
  251. ! !___________________________________________________________________________________________________________________________________
  252. ! do il=1,loop
  253. !
  254. ! ! get old relative humidity to calculate aerosol hysteresis (online only)
  255. !
  256. ! RH_HIST = 2. ! WET HISTORY (DEFAULT)
  257. ! IF(IHYST.EQ.1.OR.IOPT.EQ.2) RH_HIST = 1. ! SET TO SOLIDS
  258. !
  259. ! ! meteorology
  260. ! TT = yi(il,1) ! T [K]
  261. ! RH = yi(il,2) ! RH [0-1]
  262. ! PX = yi(il,11) ! p [hPa]
  263. ! !
  264. ! ! gas+aerosol:
  265. ! w1(1) = yi(il,6) ! Na+ (ss + xsod) (a) [umol/m^3 air]
  266. ! w1(2) = yi(il,4) ! H2SO4 + SO4-- (p) [umol/m^3 air]
  267. ! w1(3) = yi(il,3) ! NH3 (g) + NH4+ (p) [umol/m^3 air]
  268. ! w1(4) = yi(il,5) ! HNO3 (g) + NO3- (p) [umol/m^3 air]
  269. ! w1(5) = yi(il,7) ! HCl (g) + Cl- (p) [umol/m^3 air]
  270. ! w1(6) = yi(il, 8) ! K+ (p) from Dust [umol/m^3 air]
  271. ! w1(7) = yi(il, 9) ! Ca++ (p) from Dust [umol/m^3 air]
  272. ! w1(8) = yi(il,10) ! Mg++ (p) from Dust [umol/m^3 air]
  273. ! !______________________________________________
  274. !
  275. ! zflag=1.
  276. !
  277. ! w1=w1*1.0e-6 ! [mol/m^3 air]
  278. !
  279. ! TNa = w1(1) ! total input sodium (g+p)
  280. ! TSO4 = w1(2) ! total input sulfate (g+p)
  281. ! TNH4 = w1(3) ! total input ammonium (g+p)
  282. ! TNO3 = w1(4) ! total input nitrate (g+p)
  283. ! TCl = w1(5) ! total input chloride (g+p)
  284. ! TPo = w1(6) ! total input potasium (g+p)
  285. ! TCa = w1(7) ! total input calcium (g+p)
  286. ! TMg = w1(8) ! total input magnesium(g+p)
  287. !
  288. ! ! SULFATE RICH
  289. !
  290. ! if((w1(1)+w1(3)+w1(6)+2.*(w1(7)+w1(8))).le.(2.*w1(2))) then
  291. ! zflag=3.
  292. ! endif
  293. !
  294. ! ! SULFATE VERY RICH CASE if (NH4+Na+K+2(Ca+Mg))/SO4 < 1
  295. !
  296. ! if((w1(1)+w1(3)+w1(6)+2.*(w1(7)+w1(8))).le.w1(2)) then
  297. ! zflag=4.
  298. ! endif
  299. !
  300. ! ! SULFATE NEUTRAL CASE
  301. !
  302. ! if((w1(1)+w1(3)+w1(6)+2.*(w1(7)+w1(8))).gt.(2.*w1(2))) then
  303. ! zflag=2.
  304. ! endif
  305. !
  306. ! ! SULFATE POOR AND CATION POOR CASE
  307. !
  308. ! if((w1(1)+w1(6)+2.*(w1(7)+w1(8))).gt.(2.*w1(2))) then
  309. ! zflag=1.
  310. ! endif
  311. !
  312. ! IF ( RH .LT. RHMIN ) RH=RHMIN
  313. ! IF ( RH .GT. RHMAX ) RH=RHMAX
  314. !
  315. ! ! CALCULATE TEMPERATURE DEPENDENCY FOR SOME RHDs
  316. !
  317. ! RHDX(:)=RHDA(:)*exp(RHDE(:)*(1./TT-1./T0))
  318. ! RHDZ(:)=RHDX(:)
  319. !
  320. ! ! ACCOUNT FOR VARIOUS AMMOMIUM/SODIUM SULFATE SALTS ACCORDING TO MEAN VALUE AS OF ISORROPIA
  321. !
  322. ! GG=2.0 ! (Na)2SO4 / (NH4)2SO4 IS THE PREFFERED SPECIES FOR SULFATE DEFICIENT CASES
  323. ! IF(ZFLAG.EQ.3.) THEN
  324. ! IF(RH.LE.RHDZ(7)) THEN ! ACCOUNT FOR MIXTURE OF (NH4)2SO4(s) & NH4HSO4(s) & (NH4)3H(SO4)2(s)
  325. ! GG=1.677 ! (Na)2SO4 & NaHSO4
  326. ! ! GG=1.5
  327. ! ELSEIF(RH.GT.RHDZ(7).AND.RH.LE.RHDZ(5)) THEN ! MAINLY (Na)2SO4 / (NH4)2SO4(s) & (NH4)3H(SO4)2(s)
  328. ! GG=1.75
  329. ! ! GG=1.5
  330. ! ELSEIF(RH.GE.RHDZ(5)) THEN ! (NH4)2SO4(S) & NH4HSO4(S) & SO4-- & HSO4-
  331. ! GG=1.5 ! (Na)2SO4 & NaHSO4
  332. ! ENDIF
  333. ! ENDIF
  334. ! IF(ZFLAG.EQ.4.) GG=1.0 ! IF SO4 NEUTRALIZED, THEN ONLY AS NaHSO4 / NH4HSO4(S) OR HSO4- / H2SO4
  335. !
  336. ! RHD=RH
  337. ! IF(IOPT.EQ.2.OR.RH_HIST.LT.RH_HIST_DW) THEN ! GET RHD FOR SOLIDS / HYSTERESIS
  338. ! !
  339. ! ! GET LOWEST DELIQUESCENCE RELATIVE HUMIDITIES ACCORDING TO THE CONCENTRATION DOMAIN (APROXIMATION)
  340. ! ! BASED ON RHD / MRHD ISORROPIA/SCAPE
  341. ! !
  342. ! w2(:)=1.
  343. ! do ii=1,8
  344. ! if(w1(ii).le.1.e-12) w2(ii)=0. ! skip compound in RHD calculation if value is concentration is zero or rather small
  345. ! enddo
  346. !
  347. ! ! GET LOWEST RHD ACCORDING TO THE CONCENTRATION DOMAIN
  348. !
  349. ! ! zflag=1. (cation rich) ...
  350. ! ! 1. sea salt aerosol : RHDX(1)=MgCl2
  351. ! ! 2. mineral dust aerosol : RHDX(2)=Ca(NO3)2
  352. ! !
  353. ! ! zflag=2. (sulfate neutral) ...
  354. ! ! 3. ammonium + nitrate : RHDX(3)= NH4NO3
  355. ! ! 4. ammonium + sulfate : RHDX(4)=(NH4)2SO4
  356. ! ! 5. ammonium + sulfate mixed salt : RHDX(5)=(NH4)3H(SO4)2, (NH4)2SO4
  357. ! ! 6. ammonium + nitrate + sulfate : RHDX(6)=(NH4)2SO4, NH4NO3, NA2SO4, NH4CL
  358. ! !
  359. ! ! zflag=3. (sulfate poor) ...
  360. ! ! 7. ammonium + sulfate (1:1,1.5) : RHDX(7)= NH4HSO4
  361. ! !
  362. ! ! zflag=4. (sulfate very poor) ...
  363. ! ! 8. sulfuric acid : RHDX(8)= H2SO4
  364. !
  365. ! IF(ZFLAG.EQ.1.)THEN
  366. !
  367. ! RHD=W2(1)+W2(5) ! Na+ dependency
  368. ! IF(RHD.EQ.0.) RHDX(1)=1.
  369. ! RHD=W2(6)+W2(7)+W2(8) ! K+/Ca++/Mg++ dependency (incl. ss)
  370. ! IF(RHD.EQ.0.) RHDX(2)=1.
  371. !
  372. ! RHD=MINVAL(RHDX(1:2))
  373. !
  374. ! ELSEIF(ZFLAG.EQ.2.)THEN
  375. !
  376. ! RHD=W2(3)*W2(4) ! NH4+ & NO3- dependency
  377. ! IF(RHD.EQ.0.) RHDX(3)=1.
  378. ! RHD=W2(2)+W2(3) ! NH4+ & SO4-- dependency
  379. ! IF(GG.NE.2.) RHD=0. ! account only for pure (NH4)2SO4
  380. ! IF(RHD.EQ.0.) RHDX(4)=1.
  381. ! RHD=W2(2)+W2(3) ! NH4+ & SO4-- dependency
  382. ! IF(RHD.EQ.0.) RHDX(5)=1.
  383. ! RHD=W2(2)+W2(3)+W2(4)+W2(5) ! (NH4)2SO4, NH4NO3, NA2SO4, NH4CL dependency
  384. ! IF(RHD.EQ.0.) RHDX(6)=1.
  385. !
  386. ! ! RHD=MINVAL(RHDX(3:4))
  387. ! RHD=MINVAL(RHDX(3:6))
  388. !
  389. ! ELSEIF(ZFLAG.EQ.3.)THEN
  390. !
  391. ! RHD=W2(2)+W2(3) ! NH4+ & SO4-- dependency
  392. ! IF(RHD.EQ.0.) RHDX(7)=1.
  393. ! RHD=RHDX(7)
  394. !
  395. ! ELSEIF(ZFLAG.EQ.4.)THEN
  396. !
  397. ! RHD=W2(2) ! H2SO4 dependency (assume no dry aerosol)
  398. ! IF(RHD.EQ.0.) RHDX(8)=1.
  399. !
  400. ! RHD=RHDX(8)
  401. !
  402. ! ENDIF ! ZFLAG
  403. ! ENDIF ! SOLIDS
  404. !
  405. ! ! GET WATER ACTIVITIES ACCORDING TO METZGER, 2000.
  406. ! ! FUNCTION DERIVED FROM ZSR RELATIONSHIP DATA (AS USED IN ISORROPIA)
  407. !
  408. ! M0(:) = ((NW(:)*MWH20/MW(:)*(1./RH-1.)))**ZW(:)
  409. !
  410. ! ! CALCULATE TEMPERATURE DEPENDENT EQUILIBRIUM CONSTANTS
  411. !
  412. ! T0T=T0/TT
  413. ! COEF=1.0+LOG(T0T)-T0T
  414. !
  415. ! ! EQUILIBRIUM CONSTANT NH4NO3(s) <==> NH3(g) + HNO3(g) [atm^2] (ISORROPIA)
  416. !
  417. ! XK10 = 5.746e-17
  418. ! XK10= XK10 * EXP(-74.38*(T0T-1.0) + 6.120*COEF)
  419. ! KAN = XK10/(R*TT)/(R*TT)
  420. !
  421. ! ! EQUILIBRIUM CONSTANT NH4CL(s) <==> NH3(g) + HCL(g) [atm^2] (ISORROPIA)
  422. !
  423. ! XK6 = 1.086e-16
  424. ! XK6 = XK6 * EXP(-71.00*(T0T-1.0) + 2.400*COEF)
  425. ! KAC = XK6/(R*TT)/(R*TT)
  426. !
  427. ! !
  428. ! ! CALCULATE AUTODISSOCIATION CONSTANT (KW) FOR WATER H2O <==> H(aq) + OH(aq) [mol^2/kg^2] (ISORROPIA)
  429. !
  430. ! XKW = 1.010e-14
  431. ! XKW = XKW *EXP(-22.52*(T0T-1.0) + 26.920*COEF)
  432. !
  433. ! ! GET MEAN MOLAL IONIC ACTIVITY COEFF ACCORDING TO METZGER, 2002.
  434. !
  435. ! GAMA=0.0
  436. ! IF(RH.GE.RHD) GAMA=(RH**ZFLAG/(1000./ZFLAG*(1.-RH)+ZFLAG))
  437. ! GAMA = GAMA**GF1 ! ONLY GAMA TYPE OF NH4NO3, NaCl, etc. NEEDED SO FAR
  438. !
  439. ! GAMA=0.0
  440. ! GFN=K*K ! K=2, i.e. condensation of 2 water molecules per 1 mole ion pair
  441. ! GF=GFN*GF1 ! = GFN[=Nw=4] * GF1[=(1*1^1+1*1^1)/2/Nw=1/4] = 1
  442. ! ! ONLY GAMA TYPE OF NH4NO3, NH4Cl, etc. needed so far
  443. !
  444. ! IF(RH.GE.RHD) GAMA=RH**GF/((GFN*MWH20*(1./RH-1.)))**GF1
  445. !
  446. ! GAMA = min(GAMA,1.0) ! FOCUS ON 0-1 SCALE
  447. ! GAMA = max(GAMA,0.0)
  448. ! GAMA = (1.-GAMA)**K ! transplate into aqueous phase equillibrium and account for
  449. ! ! enhanced uptake of aerosol precursor gases with increasing RH
  450. ! ! (to match the results of ISORROPIA)
  451. !
  452. ! ! CALCULATE RHD DEPENDENT EQ: IF RH < RHD => NH4NO3(s) <==> NH3 (g) + HNO3(g) (ISORROPIA)
  453. ! ! IF RH >> RHD => HNO3 (g) -> NO3 (aq)
  454. !
  455. ! X00 = MAX(ZERO,MIN(TNa,GG*TSO4)) ! MAX SODIUM SULFATE
  456. ! X0 = MAX(ZERO,MIN(TNH4,GG*TSO4-X00)) ! MAX AMMOMIUM SULFATE
  457. ! X01 = MAX(ZERO,MIN(TNa-X00, TNO3)) ! MAX SODIUM NITRATE
  458. ! X1 = MAX(ZERO,MIN(TNH4-X0,TNO3-X01)) ! MAX AMMOMIUM NITRATE
  459. ! !
  460. ! X02 = MAX(ZERO,MIN(TNa-X01-X00,TCl)) ! MAX SODIUM CHLORIDE
  461. ! X03 = MAX(ZERO,MIN(TNH4-X0-X1,TCl-X02))! MAX AMMOMIUM CHLORIDE
  462. !
  463. ! X2 = MAX(TNH4-X1-X0-X03,ZERO) ! INTERIM RESIDUAL NH3
  464. ! X3 = MAX(TNO3-X1-X01,ZERO) ! INTERIM RESIDUAL HNO3
  465. ! X04 = MAX(TSO4-(X0+X00)/GG,ZERO) ! INTERIM RESIDUAL H2SO4
  466. ! X05 = MAX(TCl-X03-X02,ZERO) ! INTERIM RESIDUAL HCl
  467. ! ! X06 = MAX(TNa-X02-X01-X00,ZERO) ! INTERIM RESIDUAL Na (should be zero for electro-neutrality in input data)
  468. ! !
  469. ! ZKAN=2.
  470. ! IF(RH.GE.RHD) ZKAN=ZKAN*GAMA
  471. !
  472. ! X4 = X2 + X3
  473. ! X5 = SQRT(X4*X4+KAN*ZKAN*ZKAN)
  474. ! X6 = 0.5*(-X4+X5)
  475. ! X6 = MIN(X1,X6)
  476. !
  477. ! GHCl = X05 ! INTERIM RESIDUAl HCl
  478. ! GNH3 = X2 + X6 ! INTERIM RESIDUAl NH3
  479. ! GNO3 = X3 + X6 ! RESIDUAl HNO3
  480. ! GSO4 = X04 ! RESIDUAl H2SO4
  481. ! PNa = X02 + X01 + X00 ! RESIDUAl Na (neutralized)
  482. !
  483. ! ZKAC=2.
  484. ! IF(RH.GE.RHD) ZKAC=ZKAC*GAMA
  485. !
  486. ! X08 = GNH3 + GHCl
  487. ! X09 = SQRT(X08*X08+KAC*ZKAC*ZKAC)
  488. ! X10 = 0.5*(-X08+X09)
  489. ! X11 = MIN(X03,X10)
  490. !
  491. ! GHCl = GHCl + X11 ! RESIDUAL HCl
  492. ! GNH3 = GNH3 + X11 ! RESIDUAL NH3
  493. !
  494. ! ! GO SAVE ...
  495. !
  496. ! IF(GHCl.LT.0.) GHCl=0.
  497. ! IF(GSO4.LT.0.) GSO4=0.
  498. ! IF(GNH3.LT.0.) GNH3=0.
  499. ! IF(GNO3.LT.0.) GNO3=0.
  500. ! IF(PNa.LT.0.) PNa=0.
  501. ! IF(GSO4.GT.TSO4) GSO4=TSO4
  502. ! IF(GNH3.GT.TNH4) GNH3=TNH4
  503. ! IF(GNO3.GT.TNO3) GNO3=TNO3
  504. ! IF(GHCl.GT.TCl) GHCl=TCl
  505. ! IF(PNa.GT.TNa) PNa=TNa
  506. ! ! IF(PNa.LT.TNa) print*,il,' PNa.LT.TNa => no electro-neutrality in input data! ',PNa,TNa
  507. !
  508. !
  509. ! ! DEFINE AQUEOUSE PHASE (NO SOLID NH4NO3 IF NO3/SO4>1, TEN BRINK, ET AL., 1996, ATMOS ENV, 24, 4251-4261)
  510. !
  511. ! ! IF(TSO4.EQ.ZERO.AND.TNO3.GT.ZERO.OR.TNO3/TSO4.GE.1.) RHD=RH
  512. !
  513. ! ! IF(IOPT.EQ.2.AND.RH.LT.RHD.OR.IOPT.EQ.2.AND.RH_HIST.LT.RH_HIST_DW) THEN ! SOLIDS / HYSTERESIS
  514. ! IF(RH_HIST.EQ.1.AND.RH.LT.RHD) THEN ! SOLIDS / HYSTERESIS
  515. !
  516. ! ! EVERYTHING DRY, ONLY H2SO4 (GSO4) REMAINS IN THE AQUEOUSE PHASE
  517. !
  518. ! ANH4 = 0.
  519. ! ASO4 = 0.
  520. ! ANO3 = 0.
  521. ! ACl = 0.
  522. ! ANa = 0.
  523. !
  524. ! ELSE ! SUPERSATURATED SOLUTIONS NO SOLID FORMATION
  525. !
  526. ! ASO4 = TSO4 - GSO4
  527. ! ANH4 = TNH4 - GNH3
  528. ! ANO3 = TNO3 - GNO3
  529. ! ACl = TCl - GHCl
  530. ! ANa = PNa
  531. !
  532. ! ENDIF ! SOLIDS / HYSTERESIS
  533. !
  534. ! ! CALCULATE AEROSOL WATER [kg/m^3(air)]
  535. ! !
  536. ! ! salt solutes:
  537. ! ! 1 = NACl, 2 = (NA)2SO4, 3 = NANO3, 4 = (NH4)2SO4, 5 = NH4NO3, 6 = NH4CL, 7 = 2H-SO4
  538. ! ! 8 = NH4HSO4, 9 = NAHSO4, 10 = (NH4)3H(SO4)2
  539. ! !
  540. ! IF(ZFLAG.EQ.1.) WH2O = ASO4/M0( 2) + ANO3/M0(3) + ACl/M0(6)
  541. ! IF(ZFLAG.EQ.2.) WH2O = ASO4/M0( 9) + ANO3/M0(5) + ACl/M0(6)
  542. ! IF(ZFLAG.EQ.3.) WH2O = ASO4/M0( 8) + ANO3/M0(5) + ACl/M0(6)
  543. ! IF(ZFLAG.EQ.4.) WH2O = ASO4/M0( 8) + GSO4/M0(7)
  544. !
  545. ! ! CALCULATE AQUEOUS PHASE PROPERTIES
  546. !
  547. ! ! PH = 9999.
  548. ! PH = 7.
  549. ! MOLAL = 0.
  550. ! HPLUS = 0.
  551. ! ZIONIC= 0.
  552. !
  553. ! IF(WH2O.GT.0.) THEN
  554. !
  555. ! ! CALCULATE AUTODISSOCIATION CONSTANT (KW) FOR WATER
  556. !
  557. ! AKW=XKW*RH*WH2O*WH2O ! H2O <==> H+ + OH- with kw [mol^2/kg^2]
  558. ! AKW=AKW**0.5 ! [OH-] = [H+] [mol]
  559. !
  560. ! ! Calculate hydrogen molality [mol/kg], i.e. H+ of the ions:
  561. ! ! Na+, NH4+, NO3-, Cl-, SO4--, HH-SO4- [mol/kg(water)]
  562. ! ! with [OH-] = kw/[H+]
  563. !
  564. ! HPLUS = (-ANa/WH2O-ANH4/WH2O+ANO3/WH2O+ACl/WH2O+GG*ASO4/WH2O+GG*GSO4/WH2O+ &
  565. ! SQRT(( ANa/WH2O+ANH4/WH2O-ANO3/WH2O-ACl/WH2O-GG*ASO4/WH2O-GG*GSO4/WH2O)**2+XKW/AKW*WH2O))/2.
  566. !
  567. ! ! Calculate pH
  568. !
  569. ! PH=-ALOG10(HPLUS) ! aerosol pH
  570. !
  571. ! ! Calculate ionic strength [mol/kg]
  572. !
  573. ! ZIONIC=0.5*(ANa+ANH4+ANO3+ACl+ASO4*GG*GG+GSO4*GG*GG+XKW/AKW*WH2O*WH2O)
  574. ! ZIONIC=ZIONIC/WH2O ! ionic strength [mol/kg]
  575. ! ! ZIONIC=min(ZIONIC,200.0) ! limit for output
  576. ! ! ZIONIC=max(ZIONIC,0.0)
  577. !
  578. ! ENDIF ! AQUEOUS PHASE
  579. ! !
  580. ! !-------------------------------------------------------
  581. ! ! calculate diagnostic output consistent with other EQMs ...
  582. ! !
  583. ! ASO4 = ASO4 + GSO4 ! assuming H2SO4 remains aqueous
  584. !
  585. ! TNa = TNa * 1.e6 ! total input sodium (g+p) [umol/m^3]
  586. ! TSO4 = TSO4 * 1.e6 ! total input sulfate (g+p) [umol/m^3]
  587. ! TNH4 = TNH4 * 1.e6 ! total input ammonium (g+p) [umol/m^3]
  588. ! TNO3 = TNO3 * 1.e6 ! total input nitrate (g+p) [umol/m^3]
  589. ! TCl = TCl * 1.e6 ! total input chloride (g+p) [umol/m^3]
  590. ! TPo = TPo * 1.e6 ! total input potasium (g+p) [umol/m^3]
  591. ! TCa = TCa * 1.e6 ! total input calcium (g+p) [umol/m^3]
  592. ! TMg = TMg * 1.e6 ! total input magnesium(g+p) [umol/m^3]
  593. ! !
  594. ! ! residual gas:
  595. ! GNH3 = GNH3 * 1.e6 ! residual NH3
  596. ! GSO4 = GSO4 * 1.e6 ! residual H2SO4
  597. ! GNO3 = GNO3 * 1.e6 ! residual HNO3
  598. ! GHCl = GHCl * 1.e6 ! residual HCl
  599. !
  600. ! ! total particulate matter (neutralized)
  601. ! PNH4=TNH4-GNH3 ! particulate ammonium [umol/m^3]
  602. ! !kt PNO3=TNO3-GNO3 ! particulate nitrate [umol/m^3]
  603. ! PNO3=max(0.,TNO3-GNO3) ! particulate nitrate [umol/m^3]
  604. ! PCl =TCl -GHCl ! particulate chloride [umol/m^3]
  605. ! PNa =TNa ! particulate sodium [umol/m^3]
  606. ! PSO4=TSO4 ! particulate sulfate [umol/m^3]
  607. !
  608. ! ! liquid matter
  609. ! ASO4 = ASO4 * 1.e6 ! aqueous phase sulfate [umol/m^3]
  610. ! ANH4 = ANH4 * 1.e6 ! aqueous phase ammonium [umol/m^3]
  611. ! ANO3 = ANO3 * 1.e6 ! aqueous phase nitrate [umol/m^3]
  612. ! ACl = ACl * 1.e6 ! aqueous phase chloride [umol/m^3]
  613. ! ANa = ANa * 1.e6 ! aqueous phase sodium [umol/m^3]
  614. !
  615. ! ! solid matter
  616. ! SNH4=PNH4-ANH4 ! solid phase ammonium [umol/m^3]
  617. ! SSO4=PSO4-ASO4 ! solid phase sulfate [umol/m^3]
  618. ! SNO3=PNO3-ANO3 ! solid phase nitrate [umol/m^3]
  619. ! SCl =PCl -ACl ! solid phase chloride [umol/m^3]
  620. ! SNa =PNa -ANa ! solid phase sodium [umol/m^3]
  621. !
  622. ! ! GO SAVE ...
  623. !
  624. ! IF(SNH4.LT.0.) SNH4=0.
  625. ! IF(SSO4.LT.0.) SSO4=0.
  626. ! IF(SNO3.LT.0.) SNO3=0.
  627. ! IF(SCl.LT.0.) SCl=0.
  628. ! IF(SNa.LT.0.) SNa=0.
  629. !
  630. ! PM=SNH4+SSO4+SNO3+SNH4+SCl+SNa+ANH4+ASO4+ANO3+ACl+ANa ! total PM [umol/m^3]
  631. ! PMs=SNH4*MWNH4+SSO4*MWSO4+SNO3*MWNO3+SCl*MWCl+SNa*MWNa ! dry particulate matter (PM) [ug/m^3]
  632. ! PMt=PMs+ANH4*MWNH4+ASO4*MWSO4+ANO3*MWNO3+ACl*MWCl+ &
  633. ! ANa*MWNa ! total (dry + wet) PM, excl. H20 [ug/m^3]
  634. !
  635. ! WH2O = WH2O * 1.e9 ! convert aerosol water from [kg/m^3] to [ug/m^3]
  636. ! IF(WH2O.LT.1.e-3) WH2O=0.
  637. !
  638. ! ! UPDATE HISTORY RH FOR HYSTERESIS (ONLINE CALCULATIONS ONLY)
  639. !
  640. ! RH_HIST=2. ! wet
  641. ! IF(WH2O.EQ.0.) RH_HIST=1. ! dry
  642. !
  643. ! RINC = 1.
  644. ! IF(PMt.GT.0.) RINC = (WH2O/PMt+1)**(1./3.) ! approx. radius increase due to water uptake
  645. ! IF(RINC.EQ.0.) RINC = 1.
  646. !
  647. ! RATIONS = 0.
  648. ! IF(PSO4.GT.0.) RATIONS = PNO3/PSO4 ! nitrate / sulfate mol ratio
  649. !
  650. ! GR = 0.
  651. ! IF(GNO3.GT.0.) GR = GNH3/GNO3 ! gas ratio = residual NH3 / residual HNO3 [-]
  652. !
  653. ! DON = 0.
  654. ! IF((PNO3+2.*PSO4).GT.0.) DON = 100.*PNH4/(PNO3+2.*PSO4)! degree of neutralization by ammonia : ammonium / total nitrate + sulfate [%]
  655. !
  656. ! NO3P = 0.
  657. ! IF(TNO3.GT.0.) NO3P = 100.*PNO3/TNO3 ! nitrate partitioning = nitrate / total nitrate [%]
  658. !
  659. ! NH4P = 0.
  660. ! IF(TNH4.GT.0.) NH4P = 100.*PNH4/TNH4 ! ammonium partitioning = ammonium / total ammonium [%]
  661. ! !
  662. ! ! store aerosol species for diagnostic output:
  663. ! !______________________________________________________________
  664. ! ! Input values:
  665. ! yo(il, 1) = TT - 273.15 ! T [degC]
  666. ! yo(il, 2) = RH * 100.00 ! RH [%]
  667. ! yo(il, 3) = TNH4 ! total input ammonium (g+p) [umol/m^3]
  668. ! yo(il, 4) = TSO4 ! total input sulfate (g+p) [umol/m^3]
  669. ! yo(il, 5) = TNO3 ! total input nitrate (g+p) [umol/m^3]
  670. ! yo(il, 6) = TNa ! total input sodium (p) [umol/m^3]
  671. ! yo(il,33) = TCl ! total input chloride (g+p) [umol/m^3]
  672. ! yo(il, 7) = TPo ! total input potasium (p) [umol/m^3]
  673. ! yo(il,34) = TCa ! total input calcium (p) [umol/m^3]
  674. ! yo(il,35) = TMg ! total input magnesium(p) [umol/m^3]
  675. ! yo(il,25) = PX ! atmospheric pressure [hPa]
  676. ! ! Output values:
  677. ! yo(il, 8) = GHCL ! residual HCl (g) [umol/m^3]
  678. ! yo(il, 9) = GNO3 ! residual HNO3 (g) [umol/m^3]
  679. ! yo(il,10) = GNH3 ! residual NH3 (g) [umol/m^3]
  680. ! yo(il,11) = GSO4 ! residual H2SO4 (aq) [umol/m^3]
  681. ! yo(il,12) = WH2O ! aerosol Water (aq) [ug/m^3]
  682. ! yo(il,13) = PH ! aerosol pH [log]
  683. ! yo(il,14) = ZFLAG ! concnetration domain [1=SP,2=SN,3=SR,4=SVR]
  684. ! yo(il,15) = PM ! total particulate matter [umol/m^3]
  685. ! yo(il,16) = SNH4 ! solid ammonium (s) [umol/m^3]
  686. ! yo(il,17) = SNO3 ! solid nitrate (s) [umol/m^3]
  687. ! yo(il,18) = SSO4 ! solid sulfate (s) [umol/m^3]
  688. ! yo(il,19) = PNH4 ! particulate ammonium (p=a+s) [umol/m^3]
  689. ! yo(il,20) = PNO3 ! particulate nitrate (p=a+s) [umol/m^3]
  690. ! yo(il,21) = PSO4 ! particulate sulfate (p=a+s) [umol/m^3]
  691. ! yo(il,22) = RATIONS ! mol ratio Nitrate/Sulfate (p) [-]
  692. ! yo(il,23) = GAMA ! activity coefficient (e.g. NH4NO3) [-]
  693. ! yo(il,24) = ZIONIC ! ionic strength (aq) [mol/kg]
  694. ! yo(il,26) = PMt ! total PM (liquids & solids) [ug/m^3]
  695. ! yo(il,27) = PMs ! total PM (solid) [ug/m^3]
  696. ! yo(il,28) = RINC ! radius increase (H2O/PMt+1)**(1/3) [-]
  697. ! yo(il,29) = SCl ! solid chloride (s) [umol/m^3]
  698. ! yo(il,30) = SNa ! solid sodium (s) [umol/m^3]
  699. ! yo(il,31) = PCl ! particulate chloride (p=a+s) [umol/m^3]
  700. ! yo(il,32) = PNa ! particulate sodium (p=a+s) [umol/m^3]
  701. ! yo(il,36) = GG
  702. ! enddo
  703. ! !
  704. ! end subroutine eqsam_v03d
  705. !
  706. !
  707. end module eqsam_param