source: LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/inscav_spl.f90 @ 5185

Last change on this file since 5185 was 5160, checked in by abarral, 5 months ago

Put .h into modules

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