SURFEX v7.3
General documentation of Surfex
|
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