SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ch_aer_dep.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE ch_aer_dep (PSVT, PFSVT, PUSTAR, &
7  presa, pta, prhodref)
8 !###########################################################
9  !
10  !!
11  !!
12  !!
13  !! PURPOSE
14  !! -------
15  !!
16  !! Compute dry deposition velocity for aerosol species
17  !!
18  !! AUTHOR
19  !! ------
20  !! P.Tulet * CNRM *
21  !!
22  !! MODIFICATIONS
23  !! -------------
24  !! Original 20/02/05
25  !! J.Escobar 06/2013 for REAL4/8 add EPSILON management
26  !!
27  !-------------------------------------------------------------------------------
28  !
29  !* 0. DECLARATIONS
30  ! ------------
31  !
32  USE mode_aer_surf
33  USE modi_ch_aer_velgrav1d
35  !
36 !
37  USE yomhook ,ONLY : lhook, dr_hook
38  USE parkind1 ,ONLY : jprb
39  USE modd_surf_par , ONLY : xsurf_tiny
40 !
41  IMPLICIT NONE
42  !
43  !* 0.1 Declarations of dummy arguments :
44  !
45  REAL, DIMENSION(:,:), INTENT(IN) :: psvt ! friction velocity
46  REAL, DIMENSION(:,:), INTENT(INOUT) :: pfsvt ! flux
47  REAL, DIMENSION(:), INTENT(IN) :: pustar ! friction velocity
48  REAL, DIMENSION(:), INTENT(IN) :: presa ! aerodynamical resistance
49  REAL, DIMENSION(:), INTENT(IN) :: pta ! ait temperature
50  REAL, DIMENSION(:), INTENT(IN) :: prhodref ! air density
51  !
52  !
53  !* 0.2 Declarations of local variables :
54  !
55  REAL , DIMENSION(SIZE(PSVT,1), JPIN) :: zrd ! surface resistance
56  REAL , DIMENSION(SIZE(PSVT,1), JPIN) :: zvd
57  REAL , DIMENSION(SIZE(PSVT,1), JPIN) :: stn ! Stockes number
58  REAL , DIMENSION(SIZE(PSVT,1), JPIN) :: sc
59  REAL , DIMENSION(SIZE(PSVT,1)) :: wcn
60  REAL , DIMENSION(SIZE(PSVT,1)) :: zustar, zresa
61  REAL , DIMENSION(SIZE(PSVT,1), JPIN):: zwork
62  REAL , DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE):: zctota, zcctot
63  REAL, DIMENSION(SIZE(PSVT,1),JPMODE):: zrhop
64  REAL, DIMENSION(SIZE(PSVT,1)) :: znu
65  REAL, DIMENSION(SIZE(PSVT,1),JPIN) :: dg,zvs,zvsg, zdsg
66  REAL, DIMENSION(SIZE(PSVT,1)) :: zmu
67  REAL, DIMENSION(SIZE(PSVT,1),JPIN) :: zvgk, zdpk
68  REAL, DIMENSION(SIZE(PSVT,1),JPMODE) :: zsig, zrg, zn
69  REAL, DIMENSION(SIZE(PSVT,1),JPMODE) :: zvg, zdg
70  REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: zsvt
71  REAL, DIMENSION(SIZE(PSVT,1)) :: zsum
72  REAL, DIMENSION(NSP+NCARB+NSOA) :: zrhoi
73  INTEGER :: jt, jj, jsv, jn
74  INTEGER :: m6i, m6j
75  REAL :: zden2mol, zg, ztmp1, ztmp2, ztmp3, ztmp4
76  REAL(KIND=JPRB) :: zhook_handle
77 
78 
79  !
80  !============================================================================
81  !
82  ! Primilary
83  ! ---------
84  !Default values
85  !--------------
86 ! Cf Ackermann (all to black carbon except water)
87 IF (lhook) CALL dr_hook('CH_AER_DEP',0,zhook_handle)
88 !
89 zrhoi(:) = 1.8e3
90 zrhoi(jp_aer_h2o) = 1.0e3 ! water
91 
92 zden2mol = 1e-6 * xavogadro / xmd
93 zg = 9.80665
94 zmu(:) = 0.
95 zvgk(:,:) = 0.
96 zvg(:,:) = 0.
97 zdpk(:,:) = 0.
98 zustar(:) = max(pustar(:), 1.e-20)
99 zresa(:) = min(max(presa(:), 1.e-20), 9999.)
100 ! molec./m3 to part/part
101 DO jsv=1,SIZE(psvt,2)
102 zsvt(:,jsv) = psvt(:,jsv) * xmd / (xavogadro * prhodref(:))
103 ENDDO
104 zsvt(:,:) = max(zsvt(:,:),xsurf_tiny)
105  CALL ppp2aero_surf(zsvt, prhodref, psig1d=zsig, prg1d=zrg, pn1d=zn, pctota=zctota)
106 zrhop(:,:) = 0.
107 DO jn=1,jpmode
108  zsum(:)=0.
109  DO jj=1,nsp+ncarb+nsoa
110  zsum(:)=zsum(:)+zctota(:,jj,jn)/zrhoi(jj)
111  END DO
112 
113  DO jj=1,nsp+ncarb+nsoa
114  zcctot(:,jj,jn) = zctota(:,jj,jn)/zrhoi(jj)/zsum(:)
115  zrhop(:,jn)=zrhop(:,jn)+zcctot(:,jj,jn)*zrhoi(jj)
116  ENDDO
117 ENDDO
118  CALL ch_aer_velgrav1d(zsig, zrg, pta, prhodref, zrhop, zmu, zvgk,zdpk, zvg, zdg)
119 dg(:,:) = max(zdpk(:,:),1.e-40)
120 zvs(:,:) = max(zvgk(:,:),1.e-20)
121 znu(:) = zmu(:)/prhodref(:)
122 DO jn=1,jpmode
123 DO jj= 0,2
124 zvsg(:,3*jn+jj-2) = max(zvg(:,jn),1.e-20)
125 zdsg(:,3*jn+jj-2) = max(zdg(:,jn),1.e-40)
126 END DO
127 END DO
128 ! compute Schmidt number
129 ! ----------------------
130  DO jn=1,jpin
131  !Sc(:,JN)= ZNU(:)/Dg(:,JN)
132  sc(:,jn)= znu(:)/zdsg(:,jn)
133  END DO
134 !Scale for convective velocity
135 ! WCn(:) = MAX((PTKE(:) - 4.65* ZUSTAR(:)**2)/0.3, 1.E-20)
136 
137 
138  ! verifier l'echelle convective sinon laisser la formulation de seinfeld
139 ! WHERE (WCn(:,:) /= XUNDEF)
140 ! WCn(:,:) = SQRT(WCn(:,:))
141 ! ELSEWHERE
142  wcn(:) = 0.
143 ! END WHERE
144 !
145 !
146 stn(:,:) =0.
147 zvd(:,:) = 0.
148 zwork(:,:) = 0.
149 DO jt=1,SIZE(psvt,1)
150  IF (zustar(jt).GE.1.e-10) THEN
151  DO jn=1,jpin
152  ztmp1=0.
153  ztmp2=0.
154  ztmp3=0.
155  ztmp4=0.
156  stn(jt,jn)= zvsg(jt,jn)*zustar(jt)**2/(zg*znu(jt))
157  ztmp1=sc(jt,jn)**(-2./3.)
158  ztmp2=(-3./stn(jt,jn))
159  IF (ztmp2.gt.-10) then
160  ztmp3=10.**(ztmp2)
161  ELSE
162  ztmp3=0.
163  ENDIF
164  ztmp4=ztmp1+ztmp3
165 
166  !ZRD(:,JN) = (Sc(:,JN)**(-2./3.)+ 10**(-3./Stn(:,JN)))&
167  ! * (1 + 0.24 * WCn(:)**2 /ZUSTAR(:)**2) &
168  ! * ZUSTAR(:)
169  !ZRD(:,JN) = ZUSTAR(:) * (Sc(:,JN)**(-2./3.)+ &
170  ! 10**(-3./Stn(:,JN)))
171  zrd(jt,jn) = zustar(jt) * ztmp4
172  zrd(jt,jn) = max(zrd(jt,jn),1.e-10)
173  zrd(jt,jn) = 1. / zrd(jt,jn)
174  zwork(jt,jn)= zresa(jt) + zrd(jt,jn) + zresa(jt)*zrd(jt,jn)*zvs(jt,jn)
175  zwork(jt,jn)= max(zwork(jt,jn), 1.e-10)
176  zwork(jt,jn)= zvs(jt,jn) + 1./ zwork(jt,jn)
177  ! deposition velocity for each cover type
178  ! ----------------------------------------
179  zvd(jt,jn) = zvd(jt,jn) + zwork(jt,jn)
180  END DO
181  ELSE
182  zvd(jt,:) = 0.
183  END IF
184 ENDDO
185 
186 m6i=0
187 m6j=0
188 IF (lvarsigi) m6i=1
189 IF (lvarsigj) m6j=1
190 DO jsv=1,SIZE(psvt,2)-1-(jpmode+m6i+m6j),2 ! mass deposition for I mode
191  pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,2)
192 ENDDO
193 DO jsv=2,SIZE(psvt,2)-(jpmode+m6i+m6j),2 ! mass deposition for J mode
194  pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,5)
195 ENDDO
196 ! number particles deposition I
197 jsv = SIZE(psvt,2)-(1+m6i+m6j)
198 pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,1)
199 ! number particles deposition J
200 jsv = SIZE(psvt,2)-(m6i+m6j)
201 pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,4)
202 ! m6 deposition I
203 jsv = SIZE(psvt,2)-m6j
204 IF (lvarsigi) pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,3)
205 ! m6 deposition J
206 jsv = SIZE(psvt,2)
207 IF (lvarsigj) pfsvt(:,jsv) = pfsvt(:,jsv) - psvt(:,jsv) * zvd(:,6)
208 IF (lhook) CALL dr_hook('CH_AER_DEP',1,zhook_handle)
209 !
210 !---------------------------------------------------------------------
211 !
212 END SUBROUTINE ch_aer_dep
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
Definition: ch_aer_dep.F90:6
subroutine ppp2aero_surf(PSVT, PRHODREF, PSIG1D, PRG1D, PN1D, PCTOTA, PM1D)
subroutine ch_aer_velgrav1d(PSIG, PRG, PTA, PRHODREF, PRHOP, PMU, PVGK, PDPK, PVGG, PDPG)