1 | SUBROUTINE MIECALC_AER(tau_strat, piz_strat, cg_strat, tau_strat_wave, tau_lw_abs_rrtm, paprs, debut) |
---|
2 | |
---|
3 | !-------Mie computations for a size distribution |
---|
4 | ! of homogeneous spheres. |
---|
5 | ! |
---|
6 | !========================================================== |
---|
7 | !--Ref : Toon and Ackerman, Applied Optics, 1981 |
---|
8 | ! Stephens, CSIRO, 1979 |
---|
9 | ! Attention : surdimensionement des tableaux |
---|
10 | ! to be compiled with double precision option (-r8 on Sun) |
---|
11 | ! AUTHOR: Olivier Boucher, Christoph Kleinschmitt |
---|
12 | !-------SIZE distribution properties---------------- |
---|
13 | !--sigma_g : geometric standard deviation |
---|
14 | !--r_0 : geometric number mean radius (um)/modal radius |
---|
15 | !--Ntot : total concentration in m-3 |
---|
16 | |
---|
17 | USE phys_local_var_mod, ONLY: tr_seri, mdw, alpha_bin, piz_bin, cg_bin |
---|
18 | USE aerophys |
---|
19 | USE aero_mod |
---|
20 | USE infotrac, ONLY : nbtr, nbtr_bin, nbtr_sulgas, id_SO2_strat |
---|
21 | USE dimphy |
---|
22 | USE YOMCST , ONLY : RG, RPI |
---|
23 | USE mod_phys_lmdz_para, only: gather, scatter, bcast |
---|
24 | USE mod_grid_phy_lmdz, ONLY : klon_glo |
---|
25 | USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root |
---|
26 | |
---|
27 | IMPLICIT NONE |
---|
28 | |
---|
29 | ! Variable input |
---|
30 | LOGICAL,INTENT(IN) :: debut ! le flag de l'initialisation de la physique |
---|
31 | REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs ! pression pour chaque inter-couche (en Pa) |
---|
32 | |
---|
33 | ! Stratospheric aerosols optical properties |
---|
34 | REAL, DIMENSION(klon,klev,nbands_sw_rrtm) :: tau_strat, piz_strat, cg_strat |
---|
35 | REAL, DIMENSION(klon,klev,nwave_sw+nwave_lw) :: tau_strat_wave |
---|
36 | REAL, DIMENSION(klon,klev,nbands_lw_rrtm) :: tau_lw_abs_rrtm |
---|
37 | |
---|
38 | !! REAL,DIMENSION(klon_glo,klev,nbtr) :: tr_seri_glo ! Concentration Traceur [U/KgA] |
---|
39 | |
---|
40 | ! local variables |
---|
41 | REAL Ntot |
---|
42 | PARAMETER (Ntot=1.0) |
---|
43 | LOGICAL, PARAMETER :: refr_ind_interpol = .TRUE. ! set interpolation of refractive index |
---|
44 | REAL r_0 ! aerosol particle radius [m] |
---|
45 | INTEGER bin_number, ilon, ilev |
---|
46 | REAL masse,volume,surface |
---|
47 | REAL rmin, rmax !----integral bounds in m |
---|
48 | |
---|
49 | !------------------------------------- |
---|
50 | |
---|
51 | COMPLEX m !----refractive index m=n_r-i*n_i |
---|
52 | INTEGER Nmax,Nstart !--number of iterations |
---|
53 | COMPLEX k2, k3, z1, z2 |
---|
54 | COMPLEX u1,u5,u6,u8 |
---|
55 | COMPLEX a(1:21000), b(1:21000) |
---|
56 | COMPLEX I |
---|
57 | INTEGER n !--loop index |
---|
58 | REAL nnn |
---|
59 | COMPLEX nn |
---|
60 | REAL Q_ext, Q_abs, Q_sca, g, omega !--parameters for radius r |
---|
61 | REAL x !--size parameter |
---|
62 | REAL r, r_lower, r_upper !--radius |
---|
63 | REAL sigma_sca, sigma_ext, sigma_abs |
---|
64 | REAL omegatot, gtot !--averaged parameters |
---|
65 | COMPLEX ksiz2(-1:21000), psiz2(1:21000) |
---|
66 | COMPLEX nu1z1(1:21010), nu1z2(1:21010) |
---|
67 | COMPLEX nu3z2(0:21000) |
---|
68 | REAL number, deltar |
---|
69 | INTEGER bin, Nbin, it |
---|
70 | PARAMETER (Nbin=10) |
---|
71 | |
---|
72 | !--has to be consistent with dataset |
---|
73 | INTEGER nb_lambda_h2so4 |
---|
74 | PARAMETER (nb_lambda_h2so4=62) !61, 235 |
---|
75 | |
---|
76 | !---wavelengths STREAMER |
---|
77 | INTEGER Nwv, NwvmaxSW |
---|
78 | PARAMETER (NwvmaxSW=24) |
---|
79 | REAL lambda(1:NwvmaxSW+1) |
---|
80 | DATA lambda/0.28E-6, 0.30E-6, 0.33E-6, 0.36E-6, 0.40E-6, & |
---|
81 | 0.44E-6, 0.48E-6, 0.52E-6, 0.57E-6, 0.64E-6, & |
---|
82 | 0.69E-6, 0.75E-6, 0.78E-6, 0.87E-6, 1.00E-6, & |
---|
83 | 1.10E-6, 1.19E-6, 1.28E-6, 1.53E-6, 1.64E-6, & |
---|
84 | 2.13E-6, 2.38E-6, 2.91E-6, 3.42E-6, 4.00E-6/ |
---|
85 | |
---|
86 | !---wavelengths de references |
---|
87 | !---be careful here the 5th wavelength is 1020 nm |
---|
88 | INTEGER nb |
---|
89 | REAL lambda_ref(nwave_sw+nwave_lw) |
---|
90 | DATA lambda_ref /0.443E-6,0.550E-6,0.670E-6, & |
---|
91 | 0.765E-6,1.020E-6,10.E-6/ |
---|
92 | |
---|
93 | !--LW |
---|
94 | INTEGER NwvmaxLW |
---|
95 | PARAMETER (NwvmaxLW=500) |
---|
96 | REAL Tb, hh, cc, kb |
---|
97 | PARAMETER (Tb=220.0, hh=6.62607e-34) |
---|
98 | PARAMETER (cc=2.99792e8, kb=1.38065e-23) |
---|
99 | |
---|
100 | !---TOA fluxes - Streamer Cs |
---|
101 | REAL weight(1:NwvmaxSW), weightLW |
---|
102 | !c DATA weight/0.839920E1, 0.231208E2, 0.322393E2, 0.465058E2, |
---|
103 | !c . 0.678199E2, 0.798964E2, 0.771359E2, 0.888472E2, |
---|
104 | !c . 0.115281E3, 0.727565E2, 0.816992E2, 0.336172E2, |
---|
105 | !c . 0.914603E2, 0.112706E3, 0.658840E2, 0.524470E2, |
---|
106 | !c . 0.391067E2, 0.883864E2, 0.276672E2, 0.681812E2, |
---|
107 | !c . 0.190966E2, 0.250766E2, 0.128704E2, 0.698720E1/ |
---|
108 | !---TOA fluxes - Tad |
---|
109 | DATA weight/ 4.20, 11.56, 16.12, 23.25, 33.91, 39.95, 38.57, & |
---|
110 | 44.42, 57.64, 29.36, 47.87, 16.81, 45.74, 56.35, & |
---|
111 | 32.94, 26.22, 19.55, 44.19, 13.83, 34.09, 9.55, & |
---|
112 | 12.54, 6.44, 3.49/ |
---|
113 | !C---BOA fluxes - Tad |
---|
114 | !c DATA weight/ 0.01, 4.05, 9.51, 15.99, 26.07, 33.10, 33.07, |
---|
115 | !c . 39.91, 52.67, 27.89, 43.60, 13.67, 42.22, 40.12, |
---|
116 | !c . 32.70, 14.44, 19.48, 14.23, 13.43, 16.42, 8.33, |
---|
117 | !c . 0.95, 0.65, 2.76/ |
---|
118 | |
---|
119 | REAL lambda_int(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW), ll |
---|
120 | REAL dlambda_int(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW), dl |
---|
121 | |
---|
122 | REAL n_r(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW) |
---|
123 | REAL n_i(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW) |
---|
124 | |
---|
125 | REAL ilambda, ilambda_prev, ilambda_max, ilambda_min |
---|
126 | REAL n_r_h2so4, n_i_h2so4 |
---|
127 | REAL n_r_h2so4_prev, n_i_h2so4_prev |
---|
128 | |
---|
129 | REAL final_a(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW) |
---|
130 | REAL final_g(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW) |
---|
131 | REAL final_w(1:NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW) |
---|
132 | |
---|
133 | INTEGER band, bandSW, bandLW |
---|
134 | |
---|
135 | !---wavelengths SW RRTM |
---|
136 | REAL wv_rrtm_SW(nbands_sw_rrtm+1) |
---|
137 | DATA wv_rrtm_SW/ 0.185E-6, 0.25E-6, 0.44E-6, 0.69E-6, & |
---|
138 | 1.19E-6, 2.38E-6, 4.00E-6/ |
---|
139 | |
---|
140 | !---wavenumbers and wavelengths LW RRTM |
---|
141 | REAL wn_rrtm(nbands_lw_rrtm+1), wv_rrtm(nbands_lw_rrtm+1) |
---|
142 | DATA wn_rrtm/ 10., 250., 500., 630., 700., 820., & |
---|
143 | 980., 1080., 1180., 1390., 1480., 1800., & |
---|
144 | 2080., 2250., 2380., 2600., 3000./ |
---|
145 | |
---|
146 | !--GCM results |
---|
147 | REAL gcm_a(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
148 | REAL gcm_g(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
149 | REAL gcm_w(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
150 | REAL gcm_weight_a(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
151 | REAL gcm_weight_g(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
152 | REAL gcm_weight_w(nbands_sw_rrtm+nbands_lw_rrtm) |
---|
153 | |
---|
154 | REAL ss_a(nbands_sw_rrtm+nbands_lw_rrtm+nwave_sw+nwave_lw) |
---|
155 | REAL ss_w(nbands_sw_rrtm+nbands_lw_rrtm+nwave_sw+nwave_lw) |
---|
156 | REAL ss_g(nbands_sw_rrtm+nbands_lw_rrtm+nwave_sw+nwave_lw) |
---|
157 | |
---|
158 | REAL wavenumber |
---|
159 | REAL, DIMENSION(nb_lambda_h2so4,4) :: ref_ind |
---|
160 | |
---|
161 | !--------------------------------------------------------- |
---|
162 | |
---|
163 | IF (debut) THEN |
---|
164 | !--initialising dry diameters to geometrically spaced mass/volume (see Jacobson 1994) |
---|
165 | mdw(1)=mdwmin |
---|
166 | IF (V_rat.LT.1.62) THEN ! compensate for dip in second bin for lower volume ratio |
---|
167 | mdw(2)=mdw(1)*2.**(1./3.) |
---|
168 | DO it=3, nbtr_bin |
---|
169 | mdw(it)=mdw(it-1)*V_rat**(1./3.) |
---|
170 | ENDDO |
---|
171 | ELSE |
---|
172 | DO it=2, nbtr_bin |
---|
173 | mdw(it)=mdw(it-1)*V_rat**(1./3.) |
---|
174 | ENDDO |
---|
175 | ENDIF |
---|
176 | PRINT *,'init mdw=', mdw |
---|
177 | |
---|
178 | !$OMP MASTER |
---|
179 | |
---|
180 | ! CALL gather(tr_seri, tr_seri_glo) |
---|
181 | ! IF (is_mpi_root) THEN |
---|
182 | ! IF (MAXVAL(tr_seri_glo).LT.1e-30) THEN |
---|
183 | |
---|
184 | !--compute particle radius for a composition of 75% H2SO4 / 25% H2O at T=293K |
---|
185 | DO bin_number=1, nbtr_bin |
---|
186 | r_0=(dens_aer_dry/dens_aer_ref/0.75)**(1./3.)*mdw(bin_number)/2. |
---|
187 | !--integral boundaries set to bin boundaries |
---|
188 | rmin=r_0/sqrt(V_rat**(1./3.)) |
---|
189 | rmax=r_0*sqrt(V_rat**(1./3.)) |
---|
190 | |
---|
191 | !--set up SW |
---|
192 | DO Nwv=1, NwvmaxSW |
---|
193 | lambda_int(Nwv)=( lambda(Nwv)+lambda(Nwv+1) ) /2. |
---|
194 | ENDDO |
---|
195 | |
---|
196 | DO nb=1, nwave_sw+nwave_lw |
---|
197 | lambda_int(NwvmaxSW+nb)=lambda_ref(nb) |
---|
198 | ENDDO |
---|
199 | |
---|
200 | !--set up LW |
---|
201 | !--conversion wavenumber in cm-1 to wavelength in m |
---|
202 | DO Nwv=1, nbands_lw_rrtm+1 |
---|
203 | wv_rrtm(Nwv)=10000./wn_rrtm(Nwv)*1.e-6 |
---|
204 | ENDDO |
---|
205 | |
---|
206 | DO Nwv=1, NwvmaxLW |
---|
207 | lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv)= & |
---|
208 | exp( log(wv_rrtm(1))+float(Nwv-1)/float(NwvmaxLW-1)* & |
---|
209 | (log(wv_rrtm(nbands_lw_rrtm+1))-log(wv_rrtm(1))) ) |
---|
210 | ENDDO |
---|
211 | |
---|
212 | !--computing the dlambdas |
---|
213 | Nwv=1 |
---|
214 | dlambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv)= & |
---|
215 | & lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv)- & |
---|
216 | & lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv+1) |
---|
217 | DO Nwv=2, NwvmaxLW-1 |
---|
218 | dlambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv)= & |
---|
219 | & (lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv-1)- & |
---|
220 | & lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv+1))/2. |
---|
221 | ENDDO |
---|
222 | Nwv=NwvmaxLW |
---|
223 | dlambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv)= & |
---|
224 | & lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv-1)- & |
---|
225 | & lambda_int(NwvmaxSW+nwave_sw+nwave_lw+Nwv) |
---|
226 | |
---|
227 | OPEN (unit=11,file='h2so4_0.75_300.00_hummel_1988_p_q.dat') |
---|
228 | |
---|
229 | IF (refr_ind_interpol) THEN |
---|
230 | DO nb=1,nb_lambda_h2so4 |
---|
231 | READ(11,*) ref_ind(nb,:) |
---|
232 | ENDDO |
---|
233 | ilambda_max=ref_ind(1,2)/1.e6 !--in m |
---|
234 | ilambda_min=ref_ind(nb_lambda_h2so4,2)/1.e6 !--in m |
---|
235 | DO Nwv=1, NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW |
---|
236 | IF (lambda_int(Nwv).GT.ilambda_max) THEN |
---|
237 | !for lambda out of data range, take boundary values |
---|
238 | n_r(Nwv)=ref_ind(1,3) |
---|
239 | n_i(Nwv)=ref_ind(1,4) |
---|
240 | ELSEIF (lambda_int(Nwv).LE.ilambda_min) THEN |
---|
241 | n_r(Nwv)=ref_ind(nb_lambda_h2so4,3) |
---|
242 | n_i(Nwv)=ref_ind(nb_lambda_h2so4,4) |
---|
243 | ELSE |
---|
244 | DO nb=2,nb_lambda_h2so4 |
---|
245 | ilambda=ref_ind(nb,2)/1.e6 |
---|
246 | ilambda_prev=ref_ind(nb-1,2)/1.e6 |
---|
247 | n_r_h2so4=ref_ind(nb,3) |
---|
248 | n_r_h2so4_prev=ref_ind(nb-1,3) |
---|
249 | n_i_h2so4=ref_ind(nb,4) |
---|
250 | n_i_h2so4_prev=ref_ind(nb-1,4) |
---|
251 | IF (lambda_int(Nwv).GT.ilambda.AND. & |
---|
252 | lambda_int(Nwv).LE.ilambda_prev) THEN !--- linear interpolation |
---|
253 | n_r(Nwv)=n_r_h2so4+(lambda_int(Nwv)-ilambda)/ & |
---|
254 | (ilambda_prev-ilambda)*(n_r_h2so4_prev-n_r_h2so4) |
---|
255 | n_i(Nwv)=n_i_h2so4+(lambda_int(Nwv)-ilambda)/ & |
---|
256 | (ilambda_prev-ilambda)*(n_i_h2so4_prev-n_i_h2so4) |
---|
257 | ENDIF |
---|
258 | ENDDO |
---|
259 | ENDIF |
---|
260 | ENDDO |
---|
261 | ELSE |
---|
262 | DO nb=1,nb_lambda_h2so4 |
---|
263 | READ(11,*) wavenumber, ilambda, n_r_h2so4, n_i_h2so4 |
---|
264 | ilambda=1000.*ilambda !wavelength in nm |
---|
265 | DO Nwv=1, NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW |
---|
266 | IF (ilambda/1.e9.GT.lambda_int(Nwv)) THEN !--- step function |
---|
267 | n_r(Nwv)=n_r_h2so4 |
---|
268 | n_i(Nwv)=n_i_h2so4 |
---|
269 | ENDIF |
---|
270 | ENDDO |
---|
271 | ENDDO |
---|
272 | ENDIF |
---|
273 | CLOSE(11) |
---|
274 | |
---|
275 | !---Loop on wavelengths |
---|
276 | DO Nwv=1, NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW |
---|
277 | |
---|
278 | m=CMPLX(n_r(Nwv),-n_i(Nwv)) |
---|
279 | |
---|
280 | I=CMPLX(0.,1.) |
---|
281 | |
---|
282 | sigma_sca=0.0 |
---|
283 | sigma_ext=0.0 |
---|
284 | sigma_abs=0.0 |
---|
285 | gtot=0.0 |
---|
286 | omegatot=0.0 |
---|
287 | masse = 0.0 |
---|
288 | volume=0.0 |
---|
289 | surface=0.0 |
---|
290 | |
---|
291 | DO bin=1, Nbin !---loop on size bins |
---|
292 | |
---|
293 | r_lower=exp(log(rmin)+FLOAT(bin-1)/FLOAT(Nbin)*(log(rmax)-log(rmin))) |
---|
294 | r_upper=exp(log(rmin)+FLOAT(bin)/FLOAT(Nbin)*(log(rmax)-log(rmin))) |
---|
295 | r=sqrt(r_lower*r_upper) |
---|
296 | x=2.*RPI*r/lambda_int(Nwv) |
---|
297 | deltar=r_upper-r_lower |
---|
298 | |
---|
299 | number=Ntot*deltar/(rmax-rmin) !dN/dr constant over tracer bin |
---|
300 | ! masse=masse +4./3.*RPI*(r**3)*number*deltar*ropx*1.E3 !--g/m3 |
---|
301 | volume=volume+4./3.*RPI*(r**3)*number*deltar |
---|
302 | surface=surface+4.*RPI*r**2*number*deltar |
---|
303 | |
---|
304 | k2=m |
---|
305 | k3=CMPLX(1.0,0.0) |
---|
306 | |
---|
307 | z2=CMPLX(x,0.0) |
---|
308 | z1=m*z2 |
---|
309 | |
---|
310 | IF (0.0.LE.x.AND.x.LE.8.) THEN |
---|
311 | Nmax=INT(x+4*x**(1./3.)+1.)+2 |
---|
312 | ELSEIF (8..LT.x.AND.x.LT.4200.) THEN |
---|
313 | Nmax=INT(x+4.05*x**(1./3.)+2.)+1 |
---|
314 | ELSEIF (4200..LE.x.AND.x.LE.20000.) THEN |
---|
315 | Nmax=INT(x+4*x**(1./3.)+2.)+1 |
---|
316 | ELSE |
---|
317 | PRINT *, 'x out of bound, x=', x |
---|
318 | STOP |
---|
319 | ENDIF |
---|
320 | |
---|
321 | Nstart=Nmax+10 |
---|
322 | |
---|
323 | !-----------loop for nu1z1, nu1z2 |
---|
324 | |
---|
325 | nu1z1(Nstart)=CMPLX(0.0,0.0) |
---|
326 | nu1z2(Nstart)=CMPLX(0.0,0.0) |
---|
327 | DO n=Nstart-1, 1 , -1 |
---|
328 | nn=CMPLX(FLOAT(n),0.0) |
---|
329 | nu1z1(n)=(nn+1.)/z1 - 1./( (nn+1.)/z1 + nu1z1(n+1) ) |
---|
330 | nu1z2(n)=(nn+1.)/z2 - 1./( (nn+1.)/z2 + nu1z2(n+1) ) |
---|
331 | ENDDO |
---|
332 | |
---|
333 | !------------loop for nu3z2 |
---|
334 | |
---|
335 | nu3z2(0)=-I |
---|
336 | DO n=1, Nmax |
---|
337 | nn=CMPLX(FLOAT(n),0.0) |
---|
338 | nu3z2(n)=-nn/z2 + 1./ (nn/z2 - nu3z2(n-1) ) |
---|
339 | ENDDO |
---|
340 | |
---|
341 | !-----------loop for psiz2 and ksiz2 (z2) |
---|
342 | ksiz2(-1)=COS(REAL(z2))-I*SIN(REAL(z2)) |
---|
343 | ksiz2(0)=SIN(REAL(z2))+I*COS(REAL(z2)) |
---|
344 | DO n=1,Nmax |
---|
345 | nn=CMPLX(FLOAT(n),0.0) |
---|
346 | ksiz2(n)=(2.*nn-1.)/z2 * ksiz2(n-1) - ksiz2(n-2) |
---|
347 | psiz2(n)=CMPLX(REAL(ksiz2(n)),0.0) |
---|
348 | ENDDO |
---|
349 | |
---|
350 | !-----------loop for a(n) and b(n) |
---|
351 | |
---|
352 | DO n=1, Nmax |
---|
353 | u1=k3*nu1z1(n) - k2*nu1z2(n) |
---|
354 | u5=k3*nu1z1(n) - k2*nu3z2(n) |
---|
355 | u6=k2*nu1z1(n) - k3*nu1z2(n) |
---|
356 | u8=k2*nu1z1(n) - k3*nu3z2(n) |
---|
357 | a(n)=psiz2(n)/ksiz2(n) * u1/u5 |
---|
358 | b(n)=psiz2(n)/ksiz2(n) * u6/u8 |
---|
359 | ENDDO |
---|
360 | |
---|
361 | !-----------------final loop-------------- |
---|
362 | Q_ext=0.0 |
---|
363 | Q_sca=0.0 |
---|
364 | g=0.0 |
---|
365 | DO n=Nmax-1,1,-1 |
---|
366 | nnn=FLOAT(n) |
---|
367 | Q_ext=Q_ext+ (2.*nnn+1.) * REAL( a(n)+b(n) ) |
---|
368 | Q_sca=Q_sca+ (2.*nnn+1.) * & |
---|
369 | REAL( a(n)*CONJG(a(n)) + b(n)*CONJG(b(n)) ) |
---|
370 | g=g + nnn*(nnn+2.)/(nnn+1.) * & |
---|
371 | REAL( a(n)*CONJG(a(n+1))+b(n)*CONJG(b(n+1)) ) + & |
---|
372 | (2.*nnn+1.)/nnn/(nnn+1.) * REAL(a(n)*CONJG(b(n))) |
---|
373 | ENDDO |
---|
374 | Q_ext=2./x**2 * Q_ext |
---|
375 | Q_sca=2./x**2 * Q_sca |
---|
376 | Q_abs=Q_ext-Q_sca |
---|
377 | IF (AIMAG(m).EQ.0.0) Q_abs=0.0 |
---|
378 | omega=Q_sca/Q_ext |
---|
379 | g=g*4./x**2/Q_sca |
---|
380 | |
---|
381 | sigma_sca=sigma_sca+r**2*Q_sca*number |
---|
382 | sigma_abs=sigma_abs+r**2*Q_abs*number |
---|
383 | sigma_ext=sigma_ext+r**2*Q_ext*number |
---|
384 | omegatot=omegatot+r**2*Q_ext*omega*number |
---|
385 | gtot =gtot+r**2*Q_sca*g*number |
---|
386 | |
---|
387 | ENDDO !---bin |
---|
388 | !------------------------------------------------------------------ |
---|
389 | |
---|
390 | sigma_sca=RPI*sigma_sca |
---|
391 | sigma_abs=RPI*sigma_abs |
---|
392 | sigma_ext=RPI*sigma_ext |
---|
393 | gtot=RPI*gtot/sigma_sca |
---|
394 | omegatot=RPI*omegatot/sigma_ext |
---|
395 | |
---|
396 | final_g(Nwv)=gtot |
---|
397 | final_w(Nwv)=omegatot |
---|
398 | ! final_a(Nwv)=sigma_ext/masse |
---|
399 | final_a(Nwv)=sigma_ext !extinction/absorption cross section per particle |
---|
400 | |
---|
401 | ENDDO !--loop on wavelength |
---|
402 | |
---|
403 | |
---|
404 | !---averaging over LMDZ wavebands |
---|
405 | |
---|
406 | DO band=1, nbands_sw_rrtm+nbands_lw_rrtm |
---|
407 | gcm_a(band)=0.0 |
---|
408 | gcm_g(band)=0.0 |
---|
409 | gcm_w(band)=0.0 |
---|
410 | gcm_weight_a(band)=0.0 |
---|
411 | gcm_weight_g(band)=0.0 |
---|
412 | gcm_weight_w(band)=0.0 |
---|
413 | ENDDO |
---|
414 | |
---|
415 | !---band 1 is now in the UV, so we take the first wavelength as being representative |
---|
416 | DO Nwv=1,1 |
---|
417 | bandSW=1 |
---|
418 | gcm_a(bandSW)=gcm_a(bandSW)+final_a(Nwv)*weight(Nwv) |
---|
419 | gcm_weight_a(bandSW)=gcm_weight_a(bandSW)+weight(Nwv) |
---|
420 | gcm_w(bandSW)=gcm_w(bandSW)+final_w(Nwv)*final_a(Nwv)*weight(Nwv) |
---|
421 | gcm_weight_w(bandSW)=gcm_weight_w(bandSW)+final_a(Nwv)*weight(Nwv) |
---|
422 | gcm_g(bandSW)=gcm_g(bandSW)+final_g(Nwv)*final_a(Nwv)*final_w(Nwv)*weight(Nwv) |
---|
423 | gcm_weight_g(bandSW)=gcm_weight_g(bandSW)+final_a(Nwv)*final_w(Nwv)*weight(Nwv) |
---|
424 | ENDDO |
---|
425 | |
---|
426 | DO Nwv=1,NwvmaxSW |
---|
427 | |
---|
428 | IF (lambda_int(Nwv).LE.wv_rrtm_SW(3)) THEN !--RRTM spectral interval 2 |
---|
429 | bandSW=2 |
---|
430 | ELSEIF (lambda_int(Nwv).LE.wv_rrtm_SW(4)) THEN !--RRTM spectral interval 3 |
---|
431 | bandSW=3 |
---|
432 | ELSEIF (lambda_int(Nwv).LE.wv_rrtm_SW(5)) THEN !--RRTM spectral interval 4 |
---|
433 | bandSW=4 |
---|
434 | ELSEIF (lambda_int(Nwv).LE.wv_rrtm_SW(6)) THEN !--RRTM spectral interval 5 |
---|
435 | bandSW=5 |
---|
436 | ELSE !--RRTM spectral interval 6 |
---|
437 | bandSW=6 |
---|
438 | ENDIF |
---|
439 | |
---|
440 | gcm_a(bandSW)=gcm_a(bandSW)+final_a(Nwv)*weight(Nwv) |
---|
441 | gcm_weight_a(bandSW)=gcm_weight_a(bandSW)+weight(Nwv) |
---|
442 | gcm_w(bandSW)=gcm_w(bandSW)+final_w(Nwv)*final_a(Nwv)*weight(Nwv) |
---|
443 | gcm_weight_w(bandSW)=gcm_weight_w(bandSW)+final_a(Nwv)*weight(Nwv) |
---|
444 | gcm_g(bandSW)=gcm_g(bandSW)+final_g(Nwv)*final_a(Nwv)*final_w(Nwv)*weight(Nwv) |
---|
445 | gcm_weight_g(bandSW)=gcm_weight_g(bandSW)+final_a(Nwv)*final_w(Nwv)*weight(Nwv) |
---|
446 | |
---|
447 | ENDDO |
---|
448 | |
---|
449 | DO Nwv=NwvmaxSW+nwave_sw+nwave_lw+1,NwvmaxSW+nwave_sw+nwave_lw+NwvmaxLW |
---|
450 | ll=lambda_int(Nwv) |
---|
451 | dl=dlambda_int(Nwv) |
---|
452 | weightLW=1./ll**5./(exp(hh*cc/kb/Tb/ll)-1.)*dl |
---|
453 | bandLW=1 !--default value starting from the highest lambda |
---|
454 | DO band=2, nbands_lw_rrtm |
---|
455 | IF (ll.LT.wv_rrtm(band)) THEN !--as long as |
---|
456 | bandLW=band |
---|
457 | ENDIF |
---|
458 | ENDDO |
---|
459 | gcm_a(nbands_sw_rrtm+bandLW)=gcm_a(nbands_sw_rrtm+bandLW)+final_a(Nwv)* & |
---|
460 | (1.-final_w(Nwv))*weightLW |
---|
461 | gcm_weight_a(nbands_sw_rrtm+bandLW)=gcm_weight_a(nbands_sw_rrtm+bandLW)+weightLW |
---|
462 | |
---|
463 | gcm_w(nbands_sw_rrtm+bandLW)=gcm_w(nbands_sw_rrtm+bandLW)+final_w(Nwv)* & |
---|
464 | final_a(Nwv)*weightLW |
---|
465 | gcm_weight_w(nbands_sw_rrtm+bandLW)=gcm_weight_w(nbands_sw_rrtm+bandLW)+ & |
---|
466 | final_a(Nwv)*weightLW |
---|
467 | |
---|
468 | gcm_g(nbands_sw_rrtm+bandLW)=gcm_g(nbands_sw_rrtm+bandLW)+final_g(Nwv)* & |
---|
469 | final_a(Nwv)*final_w(Nwv)*weightLW |
---|
470 | gcm_weight_g(nbands_sw_rrtm+bandLW)=gcm_weight_g(nbands_sw_rrtm+bandLW)+ & |
---|
471 | final_a(Nwv)*final_w(Nwv)*weightLW |
---|
472 | ENDDO |
---|
473 | |
---|
474 | DO band=1, nbands_sw_rrtm+nbands_lw_rrtm |
---|
475 | gcm_a(band)=gcm_a(band)/gcm_weight_a(band) |
---|
476 | gcm_w(band)=gcm_w(band)/gcm_weight_w(band) |
---|
477 | gcm_g(band)=gcm_g(band)/gcm_weight_g(band) |
---|
478 | ss_a(band)=gcm_a(band) |
---|
479 | ss_w(band)=gcm_w(band) |
---|
480 | ss_g(band)=gcm_g(band) |
---|
481 | ENDDO |
---|
482 | |
---|
483 | DO nb=1, nwave_sw+nwave_lw |
---|
484 | ss_a(nbands_sw_rrtm+nbands_lw_rrtm+nb)=final_a(NwvmaxSW+nb) |
---|
485 | ss_w(nbands_sw_rrtm+nbands_lw_rrtm+nb)=final_w(NwvmaxSW+nb) |
---|
486 | ss_g(nbands_sw_rrtm+nbands_lw_rrtm+nb)=final_g(NwvmaxSW+nb) |
---|
487 | ENDDO |
---|
488 | |
---|
489 | DO nb=1,nbands_sw_rrtm+nbands_lw_rrtm+nwave_sw+nwave_lw |
---|
490 | alpha_bin(nb,bin_number)=ss_a(nb) !extinction/absorption cross section per particle |
---|
491 | piz_bin(nb,bin_number)=ss_w(nb) |
---|
492 | cg_bin(nb,bin_number)=ss_g(nb) |
---|
493 | |
---|
494 | ENDDO |
---|
495 | |
---|
496 | ENDDO !loop over tracer bins |
---|
497 | |
---|
498 | ! ENDIF !mpi_root |
---|
499 | |
---|
500 | !$OMP END MASTER |
---|
501 | CALL bcast(alpha_bin) |
---|
502 | CALL bcast(piz_bin) |
---|
503 | CALL bcast(cg_bin) |
---|
504 | !$OMP BARRIER |
---|
505 | |
---|
506 | ! CALL scatter(alpha_bin, alpha_bin) |
---|
507 | ! CALL scatter(piz_bin, piz_bin) |
---|
508 | ! CALL scatter(cg_bin, cg_bin) |
---|
509 | |
---|
510 | !set to default values at first time step (tr_seri still zero) |
---|
511 | tau_strat(:,:,:)=1.e-15 |
---|
512 | piz_strat(:,:,:)=1.0 |
---|
513 | cg_strat(:,:,:)=0.0 |
---|
514 | tau_lw_abs_rrtm(:,:,:)=1.e-15 |
---|
515 | tau_strat_wave(:,:,:)=1.e-15 |
---|
516 | |
---|
517 | ELSE |
---|
518 | |
---|
519 | ! CALL gather(tr_seri, tr_seri_glo) |
---|
520 | |
---|
521 | !--compute optical properties of actual size distribution (from tr_seri) |
---|
522 | DO ilon=1,klon |
---|
523 | DO ilev=1, klev |
---|
524 | DO nb=1,nbands_sw_rrtm |
---|
525 | tau_strat(ilon,ilev,nb)=0.0 |
---|
526 | DO bin_number=1, nbtr_bin |
---|
527 | tau_strat(ilon,ilev,nb)=tau_strat(ilon,ilev,nb)+alpha_bin(nb,bin_number) & |
---|
528 | *tr_seri(ilon,ilev,bin_number+nbtr_sulgas)*(paprs(ilon,ilev)-paprs(ilon,ilev+1))/RG |
---|
529 | ENDDO |
---|
530 | |
---|
531 | piz_strat(ilon,ilev,nb)=0.0 |
---|
532 | DO bin_number=1, nbtr_bin |
---|
533 | piz_strat(ilon,ilev,nb)=piz_strat(ilon,ilev,nb)+piz_bin(nb,bin_number)*alpha_bin(nb,bin_number) & |
---|
534 | *tr_seri(ilon,ilev,bin_number+nbtr_sulgas)*(paprs(ilon,ilev)-paprs(ilon,ilev+1))/RG |
---|
535 | ENDDO |
---|
536 | piz_strat(ilon,ilev,nb)=piz_strat(ilon,ilev,nb)/MAX(tau_strat(ilon,ilev,nb),1.e-15) |
---|
537 | |
---|
538 | cg_strat(ilon,ilev,nb)=0.0 |
---|
539 | DO bin_number=1, nbtr_bin |
---|
540 | cg_strat(ilon,ilev,nb)=cg_strat(ilon,ilev,nb)+cg_bin(nb,bin_number)*piz_bin(nb,bin_number)*alpha_bin(nb,bin_number) & |
---|
541 | *tr_seri(ilon,ilev,bin_number+nbtr_sulgas)*(paprs(ilon,ilev)-paprs(ilon,ilev+1))/RG |
---|
542 | ENDDO |
---|
543 | cg_strat(ilon,ilev,nb)=cg_strat(ilon,ilev,nb)/MAX(tau_strat(ilon,ilev,nb)*piz_strat(ilon,ilev,nb),1.e-15) |
---|
544 | ENDDO |
---|
545 | DO nb=1,nbands_lw_rrtm |
---|
546 | tau_lw_abs_rrtm(ilon,ilev,nb)=0.0 |
---|
547 | DO bin_number=1, nbtr_bin |
---|
548 | tau_lw_abs_rrtm(ilon,ilev,nb)=tau_lw_abs_rrtm(ilon,ilev,nb)+alpha_bin(nbands_sw_rrtm+nb,bin_number) & |
---|
549 | *tr_seri(ilon,ilev,bin_number+nbtr_sulgas)*(paprs(ilon,ilev)-paprs(ilon,ilev+1))/RG |
---|
550 | ENDDO |
---|
551 | ENDDO |
---|
552 | DO nb=1,nwave_sw+nwave_lw |
---|
553 | tau_strat_wave(ilon,ilev,nb)=0.0 |
---|
554 | DO bin_number=1, nbtr_bin |
---|
555 | tau_strat_wave(ilon,ilev,nb)=tau_strat_wave(ilon,ilev,nb)+alpha_bin(nbands_sw_rrtm+nbands_lw_rrtm+nb,bin_number) & |
---|
556 | *tr_seri(ilon,ilev,bin_number+nbtr_sulgas)*(paprs(ilon,ilev)-paprs(ilon,ilev+1))/RG |
---|
557 | ENDDO |
---|
558 | ENDDO |
---|
559 | ENDDO |
---|
560 | ENDDO |
---|
561 | |
---|
562 | ENDIF !debut |
---|
563 | |
---|
564 | END SUBROUTINE MIECALC_AER |
---|