SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/ch_dep_isba.F90
Go to the documentation of this file.
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