SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE CH_DEP_ISBA (PUSTAR, PHU, PPSN, & 00003 PVEG, PLAI, PSAND, PCLAY, PRESA, & 00004 PRS, PZ0, PTA, PPA, PTRAD, PNO, PROCK, & 00005 HSV, PSOILRC_SO2, PSOILRC_O3, PDEP ) 00006 !########################################################### 00007 ! 00008 !! 00009 !! 00010 !! 00011 !! PURPOSE 00012 !! ------- 00013 !! 00014 !! Compute dry deposition velocity for chemical species on nature area 00015 !! 00016 !! AUTHOR 00017 !! ------ 00018 !! P.Tulet * Laboratoire d'Aerologie* 00019 !! 00020 !! MODIFICATIONS 00021 !! ------------- 00022 !! Original 20/02/97 00023 !! Modification 21/07/00 (Guenais/Tulet) add deposition on town and 00024 !! vegetation class 00025 !! Modification 18/01/01 (Solmon/Tulet) patch dry deposition 00026 !! Modification 18/07/03 (Tulet) surface externalization 00027 !! Modification 01/2004 (Tulet Masson) removes patch calculation 00028 !! Modification 03/2006 (Le Moigne) pb in where test with some 00029 !! compilation options 00030 !! 00031 !------------------------------------------------------------------------------- 00032 ! 00033 !* 0. DECLARATIONS 00034 ! ------------ 00035 ! 00036 USE MODD_ISBA_PAR 00037 USE MODD_DATA_COVER_PAR 00038 USE MODD_CSTS 00039 USE MODD_CH_ISBA, ONLY : XRCCLAYSO2, XRCCLAYO3, XRCSANDSO2, XRCSANDO3, & 00040 XRCSNOWSO2, XRCSNOWO3, XLANDREXT 00041 ! 00042 USE MODD_CH_SURF 00043 USE MODD_SURF_PAR, ONLY: XUNDEF 00044 ! 00045 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00046 USE PARKIND1 ,ONLY : JPRB 00047 ! 00048 IMPLICIT NONE 00049 ! 00050 !* 0.1 Declarations of dummy arguments : 00051 ! 00052 ! 00053 ! 00054 REAL, DIMENSION(:), INTENT(IN) :: PUSTAR ! friction velocity 00055 REAL, DIMENSION(:), INTENT(IN) :: PHU ! soil humidity 00056 REAL, DIMENSION(:), INTENT(IN) :: PPSN ! fraction of the grid covered 00057 ! by snow 00058 REAL, DIMENSION(:), INTENT(IN) :: PRS ! stomatal resistance 00059 REAL, DIMENSION(:), INTENT(IN) :: PZ0 ! vegetation roughness length 00060 REAL, DIMENSION(:), INTENT(IN) :: PVEG ! vegetation fraction 00061 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! Leaf area index 00062 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND ! Sand fraction 00063 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY ! Clay fraction 00064 REAL, DIMENSION(:), INTENT(IN) :: PRESA ! aerodynamical resistance 00065 REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature forcing (K) 00066 REAL, DIMENSION(:), INTENT(IN) :: PPA ! surface atmospheric pressure 00067 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K) 00068 REAL, DIMENSION(:), INTENT(IN) :: PSOILRC_SO2 ! bare soil resistance for SO2 00069 REAL, DIMENSION(:), INTENT(IN) :: PSOILRC_O3 ! bare soil resistance for O3 00070 REAL, DIMENSION(:,:), INTENT(OUT) :: PDEP ! deposition dry velocity (m/s) 00071 REAL, DIMENSION(:), INTENT(IN) :: PNO, PROCK ! fractions of bare soil, rock 00072 CHARACTER(LEN=6), DIMENSION(:), INTENT(IN) :: HSV ! name of chemical 00073 ! species 00074 ! 00075 ! 00076 ! 00077 !* 0.2 Declarations of local variables : 00078 ! 00079 REAL , DIMENSION(SIZE(PTRAD,1)) :: ZLANDEXT 00080 ! computed Rext from Wesely tabulations (89) 00081 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZSCMDT 00082 ! Sc(:)hmidt number 00083 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZDIFFMOLVAL 00084 ! Molecular diffusivity 00085 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZNATRB 00086 ! nature quasi-laminar resistances 00087 00088 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZMESORC 00089 ! mesophyl resistance 00090 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZSTOMRC 00091 ! stomatal surface resistance 00092 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZEXTRC 00093 ! leaf uptake external surface resistance 00094 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZSOILRC 00095 ! bare soil surface resistance 00096 REAL , DIMENSION(SIZE(PTRAD,1)) :: ZINCRC 00097 ! in-canopy transport resistance 00098 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZSNOWRC 00099 ! snow surface resistance 00100 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZCLAYRC 00101 ! clay surface resistance 00102 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZSANDRC 00103 ! sand surface resistance 00104 00105 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZNATRC 00106 ! nature surface resistances where vegetation is 00107 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZBARERC 00108 ! nature surface resistances for bare soils 00109 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZROCKRC 00110 ! nature surface resistances for rocks 00111 00112 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZRES_VEGTYPE 00113 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZRES_SNOWTYPE 00114 ! final nature resistance by vegtype 00115 REAL , DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: ZHENRYVALCOR 00116 REAL , DIMENSION(SIZE(PTRAD,1)) :: ZDIFFMOLH2O 00117 ! final nature resistance 00118 REAL, DIMENSION(SIZE(PTRAD,1)) :: ZTCOR 00119 REAL, DIMENSION(SIZE(PTRAD,1)) :: ZTYPE1 ! Type soil 1 00120 REAL :: ZTYPE2 ! Type soil 2 00121 REAL , DIMENSION(size(HSV,1)) :: ZVAR1, ZVAR2 00122 00123 REAL,DIMENSION(SIZE(PUSTAR,1)) ::ZUSTAR 00124 INTEGER :: JSV, JI 00125 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00126 ! 00127 !============================================================================ 00128 ! 00129 ! Primilary 00130 ! --------- 00131 !Default values 00132 !-------------- 00133 IF (LHOOK) CALL DR_HOOK('CH_DEP_ISBA',0,ZHOOK_HANDLE) 00134 ZEXTRC(:,:) = 9999. 00135 ZINCRC(:) = 1E-4 00136 ZSOILRC(:,:) = 9999. 00137 ZNATRC (:,:) = 9999. 00138 ZBARERC(:,:) = 9999. 00139 ZSNOWRC(:,:) = 9999. 00140 ZRES_VEGTYPE(:,:)= 9999. 00141 ZRES_SNOWTYPE(:,:)= 9999. 00142 ZNATRB(:,:) = 9999. 00143 ZUSTAR(:) = MAX(PUSTAR(:), 1E-9) 00144 ! 00145 DO JI=1,size(HSV,1) 00146 ZHENRYVALCOR(:,JI) = XSREALHENRYVAL(JI,1) * & 00147 EXP(XSREALHENRYVAL(JI,2)* (1./298. - 1./PTA(:))) 00148 ENDDO 00149 ! 00150 ! computed Rext from Wesely tabulations (89) 00151 ! 00152 IF (XLANDREXT .NE. XUNDEF) THEN 00153 ! user value 00154 ZLANDEXT(:) = XLANDREXT 00155 ELSE 00156 ! computed value 00157 WHERE(PLAI(:) /=XUNDEF) 00158 ZLANDEXT(:) = 6000. - 4000. * TANH(1.6*(PLAI(:) - 1.6)) 00159 ELSEWHERE 00160 ZLANDEXT(:) = 9999. 00161 END WHERE 00162 END IF 00163 ! 00164 !============================================================================ 00165 ! 00166 ! 2.0 Quasi-laminar resistance 00167 ! ------------------------ 00168 ! 00169 ! 00170 ! compute molecular diffusivity for each species (Langevin, 1905) 00171 ! ---------------------------------------------- 00172 DO JSV=1,size(HSV,1) 00173 ZDIFFMOLVAL(:,JSV) = 2.22E-05 + 1.46E-07 * (PTA(:) - 273.0) * & 00174 SQRT(18. / XSREALMASSMOLVAL(JSV)) 00175 ZSCMDT(:,JSV)=0.15E-4 / ZDIFFMOLVAL(:,JSV) 00176 ZDIFFMOLH2O(:) = 2.22E-05 + 1.46E-07 * (PTA(:) * & 00177 (PPA(:)/XP00)**(XRD/XCPD) -273.) 00178 ENDDO 00179 ! 00180 ! computation of Rb for each cover type 00181 ! ------------------------------------- 00182 DO JSV=1,size(HSV,1) 00183 WHERE (PLAI(:) /= XUNDEF) 00184 ZNATRB(:,JSV) = 2.* ((ZSCMDT(:,JSV)/0.72)**(2./3.)) & 00185 / (XKARMAN*ZUSTAR(:)) 00186 ELSEWHERE 00187 ZNATRB(:,JSV) = ((ZSCMDT(:,JSV)/0.72)**(2./3.)) & 00188 / (XKARMAN*ZUSTAR(:)) 00189 END WHERE 00190 ENDDO 00191 ! 00192 !============================================================================ 00193 ! 00194 ! 3.0 Surface resistance on NATURE 00195 ! -------------------------------- 00196 ! 00197 ! 3.0.1 Stomatal resistance 00198 ! ------------------- 00199 ! 00200 ZNATRC(:,:) = 1.E-4 00201 00202 !ZEXTRC_O3(:) = 1./(1./(3.*ZLANDEXT(:) + 1./3000.)) 00203 DO JSV=1,size(HSV,1) 00204 ZSTOMRC(:,JSV) = 9999. 00205 ZVAR1(JSV) = XSREALREACTVAL(JSV)/3000. 00206 ZVAR2(JSV) = XSREALREACTVAL(JSV)*100. 00207 WHERE(PRS(:) > 0.) 00208 ZSTOMRC(:,JSV) = PRS(:)*ZDIFFMOLH2O(:)& 00209 / ZDIFFMOLVAL(:,JSV) 00210 ! 00211 ! 3.2.2 Mesophyl resistance 00212 ! ------------------- 00213 ! 00214 ZMESORC(:,JSV) = 1. / (ZHENRYVALCOR(:,JSV)/3000. + ZVAR2(JSV)) 00215 ! 00216 ! 00217 ! 3.2.4 External leaf uptake resistance (Wesely, 1989) 00218 ! ------------------------------- 00219 ! 00220 ! 00221 ZEXTRC(:,JSV) = ZLANDEXT(:) / & 00222 (1E-5 * ZHENRYVALCOR(:,JSV) + XSREALREACTVAL(JSV)) 00223 END WHERE 00224 00225 WHERE(PHU(:) >= 1.) ! for dew-wetted surface 00226 ! compute Rext for any species exept O3 00227 ! taking acount of (Walmsley, Wesely, 95, technical note, Atm Env vol 30) 00228 00229 ZEXTRC(:,JSV) = 1./( 1. / ZLANDEXT(:) + 1.E-7 * ZHENRYVALCOR(:,JSV) + ZVAR1(JSV)) 00230 ENDWHERE 00231 00232 ! IF ((HSV(JSV)=='O3').OR.(HSV(JSV)=='O_3')) & 00233 ! ZEXTRC(:,JSV) = ZEXTRC_O3(:)*ZTCOR(:) 00234 ! IF ((HSV(JSV)=='SO2').OR.(HSV(JSV)=='SO_2')) & 00235 ! ZEXTRC(:,JSV) = ZTCOR(:)* 1./ (1/5000 +1./(3 *ZLANDEXT(:))) 00236 ! 00237 ! 00238 ! Temperature correction 00239 ! ---------------------- 00240 WHERE(PTRAD(:) < 271.) 00241 ZEXTRC(:,JSV) = ZEXTRC(:,JSV) +& 00242 1000 * EXP(-PTRAD(:) + 269.) 00243 END WHERE 00244 ENDDO 00245 ! 00246 ! 3.2.5 In-canopy transport resistance 00247 ! ------------------------------ 00248 ! 00249 WHERE (PVEG(:) > 0.) 00250 ZINCRC(:) = 14. * PLAI(:) * 4. * PZ0(:) / ZUSTAR(:) 00251 END WHERE 00252 ! 00253 ! 3.2.6 Surface resistance on soil under veg 00254 ! ------------------------------------- 00255 ! 00256 DO JSV=1,size(HSV,1) 00257 ZSOILRC(:,JSV) = 1. / & 00258 (ZHENRYVALCOR(:,JSV) / (1E5 * PSOILRC_SO2) + & 00259 XSREALREACTVAL(JSV) / PSOILRC_O3) 00260 ! 00261 WHERE((ZSTOMRC(:,JSV) > 0.).AND.(ZINCRC(:) > 0.).AND. (ZEXTRC(:,JSV) > 0.)) 00262 00263 ! 3.2.7 Compute surface resistance on vegetation 00264 ! ----------------------------------------- 00265 ! 00266 ZNATRC(:,JSV) =1./ ( 1. /( ZSTOMRC(:,JSV) & 00267 + ZMESORC(:,JSV)) + 1. /( ZINCRC(:) + ZSOILRC(:,JSV)) + & 00268 1. /( ZEXTRC(:,JSV))) 00269 END WHERE 00270 ENDDO 00271 ! 00272 ! 3.3 Surface resistance on NATURE with NO VEG (bare soil, rock, snow) 00273 ! ----------------------------------------------------------------- 00274 ! 00275 ! 3.3.1 Surface resistance on clay 00276 ! --------------------------- 00277 ! Default type soil 00278 ! TYPE1 = RCCLAY(SO2) = 1000 00279 ! TYPE2 = RCCLAY(O3) = 100 00280 ! 00281 ZTYPE1(:) = 1000. 00282 ZTYPE2 = 100. 00283 ! 00284 ! 00285 IF (XRCCLAYSO2.NE.XUNDEF) ZTYPE1(:) = XRCCLAYSO2 00286 IF (XRCCLAYO3.NE.XUNDEF) ZTYPE2 = XRCCLAYO3 00287 ! 00288 ! 00289 DO JSV=1,size(HSV,1) 00290 ZCLAYRC(:,JSV) = (1.E5*ZTYPE1(:)*ZTYPE2)/& 00291 ((ZHENRYVALCOR(:,JSV)*ZTYPE2) +& 00292 (ZTYPE1(:) * 1.E5 * XSREALREACTVAL(JSV))) 00293 ENDDO 00294 ! 00295 ! 3.3.2 Surface resistance on sand 00296 ! --------------------------- 00297 ! Default type soil 00298 ! TYPE1 = RCSAND(SO2) = 1000 00299 ! TYPE2 = RCSAND(O3) = 200 00300 ! 00301 ZTYPE1(:) = 1000. 00302 ZTYPE2 = 200. 00303 ! 00304 ! 00305 IF (XRCSANDSO2.NE.XUNDEF) ZTYPE1(:) = XRCSANDSO2 00306 IF (XRCSANDO3.NE.XUNDEF) ZTYPE2 = XRCSANDO3 00307 ! 00308 ! 00309 DO JSV=1,size(HSV,1) 00310 ZSANDRC(:,JSV) = (1.E5*ZTYPE1(:)*ZTYPE2)/ & 00311 (ZHENRYVALCOR(:,JSV)& 00312 * ZTYPE2 + ZTYPE1(:) * 1.E5 * XSREALREACTVAL(JSV)) 00313 ENDDO 00314 ! 00315 ! 3.3.3 Compute surface resistance on bare soil 00316 ! --------------------------------------- 00317 ! 00318 DO JSV=1,size(HSV,1) 00319 ZBARERC(:,JSV) = 1./ ( PSAND(:,1) /ZSANDRC(:,JSV) + & 00320 PCLAY(:,1) / ZCLAYRC(:,JSV) + & 00321 (1.-PCLAY(:,1)-PSAND(:,1))/ZCLAYRC(:,JSV) ) 00322 ENDDO 00323 ! 00324 ! 3.3.4 Surface temperature correction 00325 ! ------------------------------ 00326 ZTCOR(:) = 0. 00327 WHERE ( PTRAD(:) < 271.) 00328 ZTCOR(:) = 1000 * EXP(-PTRAD(:) + 269.) 00329 ZTCOR(:) = MIN(2.5E3, ZTCOR(:)) 00330 END WHERE 00331 DO JSV=1,size(HSV,1) 00332 ZBARERC(:,JSV) = ZBARERC (:,JSV) + ZTCOR(:) 00333 ENDDO 00334 ! 00335 ! 00336 ! 3.3.5 Compute surface resistance on ROCK AREA 00337 ! --------------------------------------- 00338 ! 00339 DO JSV=1,size(HSV,1) 00340 ZROCKRC(:,JSV) = (1.E5 * PSOILRC_SO2 * PSOILRC_O3(:)) / & 00341 (ZHENRYVALCOR(:,JSV) * PSOILRC_O3(:) +& 00342 PSOILRC_SO2 * 1.E5 * XSREALREACTVAL(JSV)) 00343 ENDDO 00344 ! 00345 ! 3.3.6 Surface temperature correction 00346 ! ------------------------------ 00347 ZTCOR(:) = 0. 00348 WHERE (PTRAD(:) < 271.) 00349 ZTCOR(:) = 1000. * EXP(-PTRAD(:) + 269.) 00350 ZTCOR(:) = MIN(2.5E3, ZTCOR(:)) 00351 END WHERE 00352 DO JSV=1,size(HSV,1) 00353 ZROCKRC(:,JSV) = ZROCKRC (:,JSV) + ZTCOR(:) 00354 ENDDO 00355 ! 00356 ! 3.4 Surface resistance on snow 00357 ! ---------------------------------- 00358 ! 00359 ! 00360 ! 3.4.1 Compute surface resistance on snow 00361 ! ---------------------------------- 00362 ! 00363 ! Default type soil 00364 ! TYPE1 = RCSNOW(SO2) 00365 ! TYPE2 = RCSNOW(O3) 00366 ! 00367 WHERE(PTRAD(:) > 275.) 00368 ZTYPE1(:) = 540. 00369 ELSEWHERE 00370 ZTYPE1(:) = 70. * (275. - PTRAD(:)) 00371 END WHERE 00372 ! 00373 ZTYPE2 = 2000. 00374 ! 00375 ! 00376 IF (XRCSNOWSO2/=XUNDEF) ZTYPE1(:) = XRCSNOWSO2 00377 IF (XRCSNOWO3 /=XUNDEF) ZTYPE2 = XRCSNOWO3 00378 ! 00379 DO JSV=1,size(HSV,1) 00380 ZSNOWRC(:,JSV) = (1.E5*ZTYPE1(:)*ZTYPE2)/(ZHENRYVALCOR(:,JSV)& 00381 * ZTYPE2 + ZTYPE1(:) * 1.E5 * XSREALREACTVAL(JSV)) 00382 ENDDO 00383 ! 00384 ! 3.4.2 Surface temperature correction 00385 ! ------------------------------ 00386 ! 00387 ZTCOR(:) = 0. 00388 WHERE (PTRAD(:) < 271.) 00389 ZTCOR(:) = 1000. * EXP(-PTRAD(:)+269.) 00390 ZTCOR(:) = MIN(2.5E3, ZTCOR(:)) 00391 END WHERE 00392 DO JSV=1,size(HSV,1) 00393 ZSNOWRC(:,JSV) = ZSNOWRC (:,JSV) + ZTCOR(:) 00394 ENDDO 00395 ! 00396 ! 3.5 Surface resistance on snow (eternal or explicit) 00397 ! -------------------------------------------- 00398 ! 00399 DO JSV=1,size(HSV,1) 00400 ! add rocks into bare soil resistance computation, when present 00401 WHERE (PROCK(:)>0.) 00402 ZBARERC(:,JSV) = (PNO(:)+PROCK(:)) / (PNO(:)/ZBARERC(:,JSV) + PROCK(:)/ZROCKRC(:,JSV)) 00403 END WHERE 00404 ! computes resistance due to soil and vegetation 00405 ZNATRC(:,JSV) = 1./ ( PVEG(:) / ZNATRC (:,JSV) & 00406 +(1.-PVEG(:)) / ZBARERC(:,JSV) ) 00407 ENDDO 00408 ! 00409 !--------------------------------------------------------------------- 00410 ! 00411 ! 4.0 Compute nature resistance 00412 ! -------------------------- 00413 ! 00414 PDEP(:,:) = 0. 00415 DO JSV=1,size(HSV,1) 00416 ZRES_VEGTYPE(:,JSV) =PRESA(:)+ ZNATRB(:,JSV) + ZNATRC(:,JSV) 00417 ZRES_SNOWTYPE(:,JSV) =PRESA(:)+ ZNATRB(:,JSV) + ZSNOWRC(:,JSV) 00418 PDEP(:,JSV)= (1-PPSN(:)) / ZRES_VEGTYPE(:,JSV) + & 00419 PPSN(:) / ZRES_SNOWTYPE(:,JSV) 00420 ENDDO 00421 IF (LHOOK) CALL DR_HOOK('CH_DEP_ISBA',1,ZHOOK_HANDLE) 00422 ! 00423 !--------------------------------------------------------------------- 00424 ! 00425 END SUBROUTINE CH_DEP_ISBA