1 | SUBROUTINE calc_ysat(nlon,nlay,press,temp,ysat) |
---|
2 | |
---|
3 | ! ============================================================================== |
---|
4 | ! Purpose |
---|
5 | ! ------- |
---|
6 | ! Compute saturation profiles (mol/mol) for chemical tracers |
---|
7 | ! |
---|
8 | ! Authors |
---|
9 | ! ------- |
---|
10 | ! S. Lebonnois |
---|
11 | ! -> inicondens.F in old Titan, with T,P in planetary average |
---|
12 | ! J. Vatant d'Ollone |
---|
13 | ! -> 2017 : Adapt to new physics, move to F90 and compute every grid point |
---|
14 | ! -> 2018 : Update saturation profiles from recent litterature (Vuitton 2019) |
---|
15 | ! Modified |
---|
16 | ! -------- |
---|
17 | ! B. de Batz de Trenquelléon |
---|
18 | ! -> 2022 : Update saturation profiles and correct the pressure unit |
---|
19 | ! ============================================================================== |
---|
20 | |
---|
21 | |
---|
22 | !----------------------------------------------------------------------- |
---|
23 | ! Declarations: |
---|
24 | ! ------------- |
---|
25 | |
---|
26 | USE comchem_h, only: nkim, cnames |
---|
27 | |
---|
28 | IMPLICIT NONE |
---|
29 | |
---|
30 | ! Arguments : |
---|
31 | ! ----------- |
---|
32 | INTEGER, INTENT(IN) :: nlon ! # of grid points in the chunk |
---|
33 | INTEGER, INTENT(IN) :: nlay ! # of vertical layes |
---|
34 | REAL, DIMENSION(nlon,nlay), INTENT(IN) :: press ! Mid-layers pressure (!!! mbar !!!) |
---|
35 | REAL, DIMENSION(nlon,nlay), INTENT(IN) :: temp ! Mid-layers temperature (K) |
---|
36 | REAL, DIMENSION(nlon,nlay,nkim), INTENT(OUT) :: ysat ! Saturation profiles (mol/mol) |
---|
37 | |
---|
38 | ! Local variables : |
---|
39 | ! ----------------- |
---|
40 | INTEGER :: ic |
---|
41 | REAL,DIMENSION(:,:), ALLOCATABLE :: x |
---|
42 | ! ------------------------------------------------------------------------- |
---|
43 | |
---|
44 | ALLOCATE(x(nlon,nlay)) |
---|
45 | |
---|
46 | ! By default, ysat = 1, meaning we do not condense |
---|
47 | ysat(:,:,:) = 1.0 |
---|
48 | |
---|
49 | ! Main loop |
---|
50 | do ic = 1, nkim |
---|
51 | |
---|
52 | ! CH4 : |
---|
53 | !------ |
---|
54 | if(trim(cnames(ic)).eq."CH4") then |
---|
55 | !where (temp(:,:).lt.90.65) |
---|
56 | ! ysat(:,:,ic) = 10.0**(4.42507e0 - ( ( ( 1165560.7e0 / temp(:,:) & |
---|
57 | ! - 115352.19e0 ) / temp(:,:) + 4055.6016e0 ) / temp(:,:) & |
---|
58 | ! + 453.92414e0 ) / temp(:,:) ) / press(:,:) * 1013.25e0 |
---|
59 | !elsewhere |
---|
60 | ! ysat(:,:,ic) = 10.0**(3.901408e0 - ( (154567.02e0 / temp(:,:) - 1598.8512e0) & |
---|
61 | ! / temp(:,:) + 437.54809e0 ) / temp(:,:)) / press(:,:) * 1013.25e0 |
---|
62 | !endwhere |
---|
63 | |
---|
64 | ! Fray and Schmidt (2009) |
---|
65 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp(1.051e1 - 1.110e3/temp(:,:) & |
---|
66 | - 4.341e3/temp(:,:)**2 + 1.035e5/temp(:,:)**3 - 7.910e5/temp(:,:)**4) |
---|
67 | |
---|
68 | ! Forcing CH4 to 1.4% minimum |
---|
69 | where (ysat(:,:,ic).lt.0.014) ysat(:,:,ic) = 0.014 |
---|
70 | |
---|
71 | ! C2H2 : |
---|
72 | !------- |
---|
73 | else if(trim(cnames(ic)).eq."C2H2") then |
---|
74 | !ysat(:,:,ic) = 10.0**(6.09748e0-1644.1e0/temp(:,:)+7.42346e0 & |
---|
75 | ! * alog10(1.0e3/temp(:,:)) ) / press(:,:)*1013.25e0/760.0 |
---|
76 | |
---|
77 | ! Fray and Schmidt (2009) |
---|
78 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp(1.340e1 - 2.536e3/temp(:,:)) |
---|
79 | |
---|
80 | ! C2H4 : |
---|
81 | !------- |
---|
82 | else if(trim(cnames(ic)).eq."C2H4") then |
---|
83 | ! not far from Fray and Schmidt (2009) |
---|
84 | !where (temp(:,:).lt.89.0) |
---|
85 | ! ysat(:,:,ic) = 10.0**(1.5477e0 + (1.0e0/temp(:,:) - 0.011e0) & |
---|
86 | ! * (16537.0e0*(1.0e0/temp(:,:) - 0.011e0) - 1038.1e0)) & |
---|
87 | ! / press(:,:) * 1.01325e0 / 760.0 |
---|
88 | !elsewhere (temp(:,:).lt.104.0) |
---|
89 | ! ysat(:,:,ic) = 10.0**(8.724e0 - 901.6e0/(temp(:,:) - 2.555e0) ) & |
---|
90 | ! / press(:,:) * 1013.25e0 / 760.0 |
---|
91 | !elsewhere (temp(:,:).lt.120.0) |
---|
92 | ! ysat(:,:,ic) = 10.0**(50.79e0 - 1703.0e0/temp(:,:) - 17.141e0 & |
---|
93 | ! * alog10(temp(:,:)) ) / press(:,:) * 1013.25e0 / 760.0 |
---|
94 | !elsewhere (temp(:,:).lt.155.0) |
---|
95 | ! ysat(:,:,ic) = 10.0**(6.74756e0 - 585.0e0/(temp(:,:) - 18.16e0) ) & |
---|
96 | ! / press(:,:) * 1013.25e0 / 760.0 |
---|
97 | !endwhere |
---|
98 | |
---|
99 | ! Fray and Schmidt (2009) |
---|
100 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp(1.540e1 - 2.206e3/temp(:,:) & |
---|
101 | - 1.216e4/temp(:,:)**2 + 2.843e5/temp(:,:)**3 - 2.203e6/temp(:,:)**4) |
---|
102 | |
---|
103 | ! C2H6 : |
---|
104 | !------- |
---|
105 | else if(trim(cnames(ic)).eq."C2H6") then |
---|
106 | where (temp(:,:).lt.90.) |
---|
107 | !ysat(:,:,ic) = 10.0**(10.01e0-1085.0e0/(temp(:,:)-0.561e0) ) & |
---|
108 | ! / press(:,:) * 1013.25e0 / 760.0e0 |
---|
109 | ! Fray and Schmidt (2009) |
---|
110 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp ( 15.11 - 2207./temp(:,:) & |
---|
111 | - 24110./(temp(:,:)**2) + 7.744E5/(temp(:,:)**3) & |
---|
112 | - 1.161E7/(temp(:,:)**4) + 6.763E7/(temp(:,:)**5)) |
---|
113 | elsewhere |
---|
114 | ysat(:,:,ic) = 10.0**(5.9366e0 - 1086.17e0/temp(:,:) + 3.83464e0 & |
---|
115 | * alog10(1.0e3/temp(:,:)) ) / press(:,:)*1013.25e0/760.0 |
---|
116 | endwhere |
---|
117 | |
---|
118 | ! CH3CCH : |
---|
119 | !--------- |
---|
120 | else if((trim(cnames(ic)).eq."CH3CCH") .or. (trim(cnames(ic)).eq."CH2CCH2")) then |
---|
121 | ysat(:,:,ic) = 10.0**(2.8808e0 - 4.5e0*(249.9e0 - temp(:,:)) & |
---|
122 | / (1.15e0*temp(:,:) - 37.485e0) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
123 | |
---|
124 | ! C3H6 : |
---|
125 | !------- |
---|
126 | else if(trim(cnames(ic)).eq."C3H6") then |
---|
127 | ysat(:,:,ic) = 10.0**(7.4463e0 - 1028.5654e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
128 | |
---|
129 | ! C3H8 : |
---|
130 | !------- |
---|
131 | else if(trim(cnames(ic)).eq."C3H8") then |
---|
132 | ysat(:,:,ic) = 10.0**(7.217e0 - 994.30251e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
133 | |
---|
134 | ! C4H2 : |
---|
135 | !------- |
---|
136 | else if((trim(cnames(ic)).eq."C4H2").or.(trim(cnames(ic)).eq."C4H2s")) then |
---|
137 | ysat(:,:,ic) = 10.0**(96.26781e0 - 4651.872e0/temp(:,:) - 31.68595e0 & |
---|
138 | * alog10(temp(:,:)) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
139 | |
---|
140 | ! C4H4 : |
---|
141 | !------- |
---|
142 | else if(trim(cnames(ic)).eq."C4H4") then |
---|
143 | ysat(:,:,ic)= 1.0e3 * exp(9.3898e0 - 2203.57/(temp(:,:)-43.15e0) ) / press(:,:) |
---|
144 | |
---|
145 | ! C4H6 : |
---|
146 | !------- |
---|
147 | else if(trim(cnames(ic)).eq."C4H6") then |
---|
148 | ysat(:,:,ic)= 10.0**(2.8808e0 - 4.6e0*(262.3e0 - temp(:,:)) & |
---|
149 | /(1.15e0*temp(:,:) - 39.345e0) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
150 | |
---|
151 | ! C4H10 : |
---|
152 | !-------- |
---|
153 | else if(trim(cnames(ic)).eq."C4H10") then |
---|
154 | ysat(:,:,ic)= 10.0**(8.446e0 - 1461.2e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
155 | |
---|
156 | ! C6H2 : |
---|
157 | !------- |
---|
158 | else if(trim(cnames(ic)).eq."C6H2") then |
---|
159 | ysat(:,:,ic)= 10.0**(4.666e0 - 4956e0/temp(:,:) + 25.845e0 * & |
---|
160 | alog10(1.0e3/temp(:,:)) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
161 | |
---|
162 | ! C8H2 : |
---|
163 | !------- |
---|
164 | else if(trim(cnames(ic)).eq."C8H2") then |
---|
165 | ysat(:,:,ic)= 10.0**(3.95e0 - 6613e0/temp(:,:) + 35.055e0 * & |
---|
166 | alog10(1.0e3/temp(:,:)) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
167 | |
---|
168 | ! C6H6 : |
---|
169 | !------- |
---|
170 | else if(trim(cnames(ic)).eq."AC6H6") then |
---|
171 | !x = 1.0e0 - temp(:,:) / 562.2e0 |
---|
172 | !ysat(:,:,ic)= 48.9e3 * exp( ( 1.33213 * x**1.5 - 6.98273 * x & |
---|
173 | ! - x**3 * (2.62863 + 3.33399 * x**3) ) * 562.2e0/temp(:,:) ) / press(:,:) |
---|
174 | |
---|
175 | ! Fray and Schmidt (2009) |
---|
176 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp (17.35-5663./temp(:,:)) |
---|
177 | |
---|
178 | ! HCN : |
---|
179 | !------- |
---|
180 | else if(trim(cnames(ic)).eq."HCN") then |
---|
181 | !ysat(:,:,ic)= 10.0**(8.6165e0 - 1516.5e0/(temp(:,:) - 26.2e0) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
182 | |
---|
183 | ! Fray and Schmidt (2009) |
---|
184 | ysat(:,:,ic) = (1.e3 / press(:,:)) * exp (1.393e1 - 3.624e3/temp(:,:) & |
---|
185 | - 1.325e5/temp(:,:)**2 + 6.314e6/temp(:,:)**3 - 1.128e8/temp(:,:)**4) |
---|
186 | |
---|
187 | ! CH3CN : |
---|
188 | !-------- |
---|
189 | else if(trim(cnames(ic)).eq."CH3CN") then |
---|
190 | ysat(:,:,ic)= 10.0**(8.458e0 - 1911.7e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
191 | |
---|
192 | ! C2H3CN : |
---|
193 | !------- |
---|
194 | else if(trim(cnames(ic)).eq."C2H3CN") then |
---|
195 | ysat(:,:,ic)= 10.0**(9.3051e0 - 2782.21/(temp(:,:) - 51.15e0) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
196 | |
---|
197 | ! NCCN : |
---|
198 | !------- |
---|
199 | else if(trim(cnames(ic)).eq."NCCN") then |
---|
200 | ysat(:,:,ic)= 10.0**(7.454e0 - 1832e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
201 | |
---|
202 | ! HC3N : |
---|
203 | !------- |
---|
204 | else if(trim(cnames(ic)).eq."HC3N") then |
---|
205 | ysat(:,:,ic)= 10.0**(7.7446e0 - 1453.5609e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
206 | |
---|
207 | ! C4N2 : |
---|
208 | !------- |
---|
209 | else if(trim(cnames(ic)).eq."C4N2") then |
---|
210 | ysat(:,:,ic)= 10.0**(8.269e0 - 2155.0e0/temp(:,:) ) / press(:,:) * 1013.25e0 / 760.0e0 |
---|
211 | |
---|
212 | endif |
---|
213 | enddo |
---|
214 | |
---|
215 | END SUBROUTINE calc_ysat |
---|