1 | SUBROUTINE inscav_spl(pdtime,it,masse,henry,kk,qliq, & |
---|
2 | flxr,flxs,zrho,zdz,t,x, & |
---|
3 | his_dh) |
---|
4 | USE dimphy |
---|
5 | USE yomcst_mod_h |
---|
6 | USE yoecumf_mod_h |
---|
7 | USE chem_mod_h |
---|
8 | IMPLICIT NONE |
---|
9 | !===================================================================== |
---|
10 | ! Objet : depot humide de traceurs |
---|
11 | ! Date : mars 1998 |
---|
12 | ! Auteur: O. Boucher (LOA) |
---|
13 | !===================================================================== |
---|
14 | |
---|
15 | ! |
---|
16 | INTEGER :: it |
---|
17 | REAL :: pdtime ! pas de temps (s) |
---|
18 | REAL :: masse ! molar mass (except for BC/OM/IF/DUST=Nav) |
---|
19 | REAL :: henry ! constante de Henry en mol/l/atm |
---|
20 | REAL :: kk ! coefficient de dependence en T (K) |
---|
21 | REAL :: qliq ! contenu en eau liquide dans le nuage (kg/kg) |
---|
22 | ! REAL flxr(klon,klev+1) ! flux precipitant de pluie |
---|
23 | ! REAL flxs(klon,klev+1) ! flux precipitant de neige |
---|
24 | REAL :: flxr(klon,klev) ! flux precipitant de pluie ! Titane |
---|
25 | REAL :: flxs(klon,klev) ! flux precipitant de neige ! Titane |
---|
26 | REAL :: flxr_aux(klon,klev+1) |
---|
27 | REAL :: flxs_aux(klon,klev+1) |
---|
28 | REAL :: zrho(klon,klev) |
---|
29 | REAL :: zdz(klon,klev) |
---|
30 | REAL :: t(klon,klev) |
---|
31 | REAL :: x(klon,klev) ! q de traceur |
---|
32 | REAL :: his_dh(klon) ! tendance de traceur integre verticalement |
---|
33 | ! |
---|
34 | !--variables locales |
---|
35 | INTEGER :: i, k |
---|
36 | ! |
---|
37 | REAL :: dx ! tendance de traceur |
---|
38 | REAL :: f_a !--rapport de la phase aqueuse a la phase gazeuse |
---|
39 | REAL :: beta !--taux de conversion de l'eau en pluie |
---|
40 | REAL :: henry_t !--constante de Henry a T t (mol/l/atm) |
---|
41 | REAL :: scav(klon,klev) !--fraction aqueuse du constituant |
---|
42 | REAL :: K1, K2, ph, frac |
---|
43 | REAL :: frac_gas, frac_aer !-cste pour la reevaporation |
---|
44 | PARAMETER (ph=5., frac_gas=1.0, frac_aer=0.5) |
---|
45 | !---cste de dissolution pour le depot humide |
---|
46 | REAL :: frac_fine_scav,frac_coar_scav |
---|
47 | !---added by nhl |
---|
48 | REAL :: aux_cte |
---|
49 | |
---|
50 | PARAMETER (frac_fine_scav=0.7) |
---|
51 | PARAMETER (frac_coar_scav=0.7) |
---|
52 | |
---|
53 | !--101.325 m3/l x Pa/atm |
---|
54 | !--R Pa.m3/mol/K |
---|
55 | ! |
---|
56 | !------------------------------------------ |
---|
57 | ! |
---|
58 | !nhl IF (it.EQ.2.OR.it.EQ.3) THEN !--aerosol ! AS IT WAS FIRST |
---|
59 | IF (it.EQ.2.OR.it.EQ.3.OR.it.EQ.4) THEN !--aerosol |
---|
60 | frac=frac_aer |
---|
61 | ELSE !--gas |
---|
62 | frac=frac_gas |
---|
63 | ENDIF |
---|
64 | ! |
---|
65 | IF (it.EQ.1) THEN |
---|
66 | DO k=1, klev |
---|
67 | DO i=1, klon |
---|
68 | henry_t=henry*exp(-kk*(1./298.-1./t(i,k))) !--mol/l/atm |
---|
69 | K1=1.2e-2*exp(-2010*(1/298.-1/t(i,k))) |
---|
70 | K2=6.6e-8*exp(-1510*(1/298.-1/t(i,k))) |
---|
71 | henry_t=henry_t*(1 + K1/10.**(-ph) + K1*K2/(10.**(-ph))**2) |
---|
72 | f_a=henry_t/101.325*R*t(i,k)*qliq*zrho(i,k)/rho_water |
---|
73 | scav(i,k)=f_a/(1.+f_a) |
---|
74 | ENDDO |
---|
75 | ENDDO |
---|
76 | ELSEIF (it.EQ.2) THEN |
---|
77 | DO k=1, klev |
---|
78 | DO i=1, klon |
---|
79 | scav(i,k)=frac_fine_scav |
---|
80 | ENDDO |
---|
81 | ENDDO |
---|
82 | ELSEIF (it.EQ.3) THEN |
---|
83 | DO k=1, klev |
---|
84 | DO i=1, klon |
---|
85 | scav(i,k)=frac_coar_scav |
---|
86 | ENDDO |
---|
87 | ENDDO |
---|
88 | ELSEIF (it.EQ.4) THEN |
---|
89 | DO k=1, klev |
---|
90 | DO i=1, klon |
---|
91 | scav(i,k)=frac_coar_scav |
---|
92 | ENDDO |
---|
93 | ENDDO |
---|
94 | ELSE |
---|
95 | PRINT *,'it non pris en compte' |
---|
96 | STOP |
---|
97 | ENDIF |
---|
98 | ! |
---|
99 | ! NHL |
---|
100 | ! Auxiliary variables defined to deal with the fact that precipitation |
---|
101 | ! fluxes are defined on klev levels only. |
---|
102 | ! NHL |
---|
103 | ! |
---|
104 | flxr_aux(:,klev+1)=0.0 |
---|
105 | flxs_aux(:,klev+1)=0.0 |
---|
106 | flxr_aux(:,1:klev)=flxr(:,:) |
---|
107 | flxs_aux(:,1:klev)=flxs(:,:) |
---|
108 | DO k=klev, 1, -1 |
---|
109 | DO i=1, klon |
---|
110 | !--scavenging |
---|
111 | beta=flxr_aux(i,k)-flxr_aux(i,k+1)+flxs_aux(i,k)-flxs_aux(i,k+1) |
---|
112 | beta=beta/zdz(i,k)/qliq/zrho(i,k) |
---|
113 | beta=MAX(0.0,beta) |
---|
114 | dx=x(i,k)*(exp(-scav(i,k)*beta*pdtime)-1.) |
---|
115 | x(i,k)=x(i,k)+dx |
---|
116 | his_dh(i)=his_dh(i)-dx/RNAVO* & |
---|
117 | masse*1.e3*1.e6*zdz(i,k)/pdtime !--mgS/m2/s |
---|
118 | !--reevaporation |
---|
119 | beta=flxr_aux(i,k)-flxr_aux(i,k+1)+flxs_aux(i,k)-flxs_aux(i,k+1) |
---|
120 | IF (beta.LT.0.) beta=beta/(flxr_aux(i,k+1)+flxs_aux(i,k+1)) |
---|
121 | IF (flxr_aux(i,k)+flxs_aux(i,k).EQ.0) THEN !--reevaporation totale |
---|
122 | beta=MIN(MAX(0.0,-beta),1.0) |
---|
123 | ELSE !--reevaporation non totale pour aerosols |
---|
124 | ! !print *,'FRAC USED IN INSCAV_SPL' |
---|
125 | beta=MIN(MAX(0.0,-beta)*frac,1.0) |
---|
126 | ENDIF |
---|
127 | dx=beta*his_dh(i)*RNAVO/masse/1.e3/1.e6/zdz(i,k)*pdtime !ORIG LINE |
---|
128 | ! funny line for TL/AD |
---|
129 | ! AD test works without (x) and for xd = dxd*1.e5 : 2.79051851638 times the 0. |
---|
130 | ! AD test does not work with the line : 754592404.083 times the 0. |
---|
131 | ! problem seems to be linked to the largest dx wrt x |
---|
132 | ! x(i, k) = x(i, k) + dx |
---|
133 | ! x(i, k) = x(i, k) + dx ! THIS LINE WAS COMMENTED OUT ORIGINALY !nhl |
---|
134 | his_dh(i)=(1.-beta)*his_dh(i) |
---|
135 | ENDDO |
---|
136 | ENDDO |
---|
137 | ! |
---|
138 | RETURN |
---|
139 | END SUBROUTINE inscav_spl |
---|