SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/dslt_dep.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE DSLT_DEP (PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF,             &
00003                      PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, &
00004                      PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3,           &
00005                      OVARSIG, ORGFIX, HVERMOD                               )  
00006 !###########################################################                    
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!      
00011 !!    Compute dry deposition velocity for dust species 
00012 !!
00013 !!    AUTHOR
00014 !!    ------
00015 !!      P.Tulet      * CNRM *
00016 !!
00017 !!    MODIFICATIONS
00018 !!    -------------
00019 !!      Original      20/02/05 
00020 !!
00021 !-------------------------------------------------------------------------------
00022 !
00023 !*       0.    DECLARATIONS
00024 !              ------------
00025 !
00026 USE MODD_CSTS, ONLY : XPI, XAVOGADRO, XG
00027 !
00028 USE MODE_DSLT_SURF
00029 USE MODI_DSLT_VELGRAV1D
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 !
00036 !*       0.1   Declarations of dummy arguments :
00037 !
00038 REAL, DIMENSION(:,:),   INTENT(IN)    :: PSVT       ! friction velocity
00039 REAL, DIMENSION(:,:),   INTENT(INOUT) :: PFSVT      ! flux
00040 REAL, DIMENSION(:),     INTENT(IN)    :: PUSTAR       ! friction velocity
00041 REAL, DIMENSION(:),     INTENT(IN)    :: PRESA        ! aerodynamical resistance
00042 REAL, DIMENSION(:),     INTENT(IN)    :: PTA          ! ait temperature
00043 REAL, DIMENSION(:),     INTENT(IN)    :: PRHODREF     ! air density
00044 REAL, DIMENSION(:),     INTENT(IN)    :: PEMISSIG  
00045 REAL, DIMENSION(:),     INTENT(IN)    :: PEMISRADIUS
00046 INTEGER,                INTENT(IN)    :: KPMODE
00047 REAL,                   INTENT(IN)    :: PDENSITY
00048 REAL,                   INTENT(IN)    :: PMOLARWEIGHT
00049 REAL,                   INTENT(OUT)   :: PCONVERTFACM0
00050 REAL,                   INTENT(OUT)   :: PCONVERTFACM6
00051 REAL,                   INTENT(OUT)   :: PCONVERTFACM3
00052 LOGICAL,                INTENT(IN)    :: OVARSIG
00053 LOGICAL,                INTENT(IN)    :: ORGFIX
00054  CHARACTER(LEN=6),       INTENT(IN)    :: HVERMOD
00055 !
00056 !*       0.2   Declarations of local variables :
00057 !
00058 REAL , DIMENSION(SIZE(PSVT,1), KPMODE) :: ZSIG, ZRG, ZVG, ZDG
00059 REAL , DIMENSION(SIZE(PSVT,1), KPMODE) :: ZSTN ! Stockes number
00060 REAL , DIMENSION(SIZE(PSVT,1), KPMODE) :: ZSC  ! Schmidt number
00061 REAL , DIMENSION(SIZE(PSVT,1), KPMODE) :: ZRD  ! surface  resistance
00062 REAL , DIMENSION(SIZE(PSVT,1), KPMODE*3) :: ZVGK, ZDPK
00063 REAL , DIMENSION(SIZE(PSVT,1), KPMODE*3) :: ZVD  ! [m/s] dry deposition velocity 
00064 REAL , DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: ZSVT
00065 REAL , DIMENSION(SIZE(PSVT,1)) :: ZUSTAR, ZRESA
00066 REAL , DIMENSION(SIZE(PSVT,1)) :: ZNU
00067 REAL , DIMENSION(SIZE(PSVT,1)) :: ZMU
00068 INTEGER,DIMENSION(KPMODE) :: NM0                 ! [idx] index for Mode 0 in passed variables
00069 INTEGER,DIMENSION(KPMODE) :: NM3                 ! [idx] indexes for Mode 3 in passed variables
00070 INTEGER,DIMENSION(KPMODE) :: NM6                 ! [idx] indexes for Mode 6 in passed variables
00071 INTEGER :: JN, J0
00072 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00073 !
00074 !============================================================================
00075 !
00076 !            Primilary
00077 !            ---------
00078 !Default values
00079 !--------------
00080 ! Cf Ackermann (all to black carbon except water)
00081 IF (LHOOK) CALL DR_HOOK('DSLT_DEP',0,ZHOOK_HANDLE)
00082 !
00083 ZUSTAR(:) = MAX(PUSTAR(:), 1.E-20)
00084 ZRESA (:) = MIN(MAX(PRESA(:), 1.E-20), 9999.)
00085 ! Save scalars in local array
00086 ZSVT(:,:) = MAX(PSVT(:,:), 1E-60)
00087 !
00088 ZMU(:)    = 0.
00089 ZVGK(:,:) = 0.
00090 ZVG (:,:) = 0.
00091 ZDPK(:,:) = 0.
00092 !
00093 IF (OVARSIG) THEN
00094   DO JN=1,KPMODE
00095     NM0(JN) = 1+(JN-1)*3
00096     NM3(JN) = 2+(JN-1)*3
00097     NM6(JN) = 3+(JN-1)*3
00098   END DO
00099 ELSE IF (ORGFIX) THEN
00100   DO JN=1,KPMODE
00101     NM3(JN) = JN
00102   END DO
00103 ELSE
00104   DO JN=1,KPMODE
00105     NM0(JN) = 1+(JN-1)*2
00106     NM3(JN) = 2+(JN-1)*2
00107   END DO
00108 END IF
00109 !
00110 PCONVERTFACM0 = PMOLARWEIGHT / XAVOGADRO
00111 PCONVERTFACM6 = PCONVERTFACM0 * 1.d6
00112 PCONVERTFACM3 = 4./3. * XPI * PDENSITY / 1.d18
00113 !
00114  CALL DSLTMOMENT2SIZE(ZSVT, PRHODREF, PEMISRADIUS, PEMISSIG, NM0, NM3, NM6, &
00115                      PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3,          &
00116                      OVARSIG, ORGFIX, PSIG1D=ZSIG, PRG1D=ZRG               )
00117 !
00118  CALL DSLT_VELGRAV1D(ZSIG, ZRG, PTA, PRHODREF, PDENSITY, ZMU, ZVGK, ZDPK, ZVG, ZDG)
00119 !
00120 ZNU (:)   = ZMU(:)/PRHODREF(:)
00121 !
00122 ZVGK(:,:) = MAX(ZVGK(:,:),1.E-20)
00123 ZDPK(:,:) = MAX(ZDPK(:,:),1.E-40)
00124 !
00125 ZVG (:,:) = MAX(ZVG (:,:),1.E-20)
00126 ZDG (:,:) = MAX(ZDG (:,:),1.E-40)
00127 !
00128 ZSTN(:,:) =0.
00129 !
00130 DO  JN = 1,KPMODE        
00131   !
00132   !         deposition velocity for each cover type
00133   !         ----------------------------------------
00134   !Stoke's number, Seinfeld & Pandis, pp 965
00135   ZSTN(:,JN) = ZVG(:,JN)*ZUSTAR(:)**2/(XG*ZNU(:))
00136   ZSTN(:,JN) = MAX(ZSTN(:,JN), 0.05)
00137   !
00138   !     compute Schmidt number
00139   !     ----------------------
00140   ZSC(:,JN) = ZNU(:)/ZDG(:,JN)
00141   !
00142   !Get nominator of equation 19.18 Seinfeld & Pandis==> 1/rd
00143   ZRD(:,JN) = ZUSTAR(:) * (ZSC(:,JN)**(-2./3.)+ 10**(-3./ZSTN(:,JN)))
00144   !
00145   !Limit to reasonable values
00146   !ZRD(:,JN) = MAX(ZRD(:,JN),1.E-10)
00147   !Get rd
00148   ZRD(:,JN) = 1. / ZRD(:,JN)
00149   !
00150 ENDDO
00151 !
00152 DO  JN = 1,KPMODE*3
00153   !
00154   J0 = (JN-1)/3+1
00155   !
00156   !         deposition velocity for each cover type
00157   !         ----------------------------------------
00158   ZVD(:,JN) = 0.
00159   !
00160   !Get ra + rd + ra*rd*vg which is equal to 
00161   !getting nominator of equation 19.7 Seinfeld & Pandis 
00162   ZVD(:,JN)= ZRESA(:) + ZRD(:,J0) + ZRESA(:)*ZRD(:,J0)*ZVGK(:,JN)
00163   !
00164   !Limit to reasonable values
00165   ZVD(:,JN)= MAX(ZVD(:,JN), 1.E-10)
00166   !
00167   !Get the total dry dep velocity (Seinfeld & Pandis, eqn 19.7)
00168   IF (HVERMOD=='CMDVER') THEN 
00169     ZVD(:,JN)= ZVGK(:,JN)         &  ! Gravitation term 
00170                + 1./ZVD(:,JN)        ! turbulence and surface resistance term
00171   ELSE    
00172 !     ZVD(:,JN)=zvs(:,JN)  &  !Gravitation term 
00173 !         + 1./ZVD(:,JN)     !turbulence and surface resistance term
00174       ! The gravitation term as been computed by MesoNH (see sedim_dust.f90)
00175     ZVD(:,JN) =  1./ZVD(:,JN) ! turbulence and surface resistance term
00176   END IF
00177   !
00178 END DO
00179 
00180 ! Only M3 flux (mass) has been used ; flux for over moment has been made after
00181 DO JN = 1,KPMODE
00182   PFSVT(:,NM3(JN)) =  PFSVT(:,NM3(JN)) - PSVT(:,NM3(JN))  * ZVD(:,2+(JN-1)*3)
00183 ENDDO
00184 !
00185 IF (LHOOK) CALL DR_HOOK('DSLT_DEP',1,ZHOOK_HANDLE)
00186 !---------------------------------------------------------------------
00187 !
00188 END SUBROUTINE DSLT_DEP