|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE INIT_ISBA_SBL(HISBA, HCPSURF, KLVL, PPA, PPS, PTA, PQA, PRHOA, PU, PV, & 00003 PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, & 00004 PZREF, PUREF, PTG, PPATCH, PWG, PWGI, PZ0, PSSO_SLOPE, & 00005 PRESA, PVEG, PLAI, PWR, PRGL, PRSMIN, PGAMMA, PWRMAX_CF, & 00006 PZ0_O_Z0H, PWFC, PWSAT, PTSNOW, PZ, PT, PQ, PWIND, PTKE, PP) 00007 ! ################################################################################# 00008 ! 00009 !!**** *INIT_WATER_SBL* - inits water SBL profiles 00010 !! 00011 !! PURPOSE 00012 !! ------- 00013 ! 00014 !!** METHOD 00015 !! ------ 00016 !! 00017 !! REFERENCE 00018 !! --------- 00019 !! 00020 !! 00021 !! AUTHOR 00022 !! ------ 00023 !! S. Riette 00024 !! 00025 !! MODIFICATIONS 00026 !! ------------- 00027 !! Original 03/2010 00028 !!------------------------------------------------------------------ 00029 ! 00030 USE MODD_TYPE_SNOW 00031 ! 00032 USE MODD_CSTS, ONLY : XCPD, XRD, XP00, XG 00033 USE MODD_SURF_ATM, ONLY : LNOSOF 00034 USE MODD_CANOPY_TURB, ONLY : XALPSBL 00035 ! 00036 USE MODI_CLS_TQ 00037 USE MODI_ISBA_SNOW_FRAC 00038 USE MODI_WET_LEAVES_FRAC 00039 USE MODI_VEG 00040 USE MODI_DRAG 00041 USE MODI_CLS_WIND 00042 ! 00043 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00044 USE PARKIND1 ,ONLY : JPRB 00045 ! 00046 IMPLICIT NONE 00047 ! 00048 !* 0.1 declarations of arguments 00049 ! 00050 CHARACTER(LEN=*) , INTENT(IN) :: HISBA ! type of ISBA version 00051 CHARACTER(LEN=*) , INTENT(IN) :: HCPSURF ! specific heat at surface 00052 INTEGER , INTENT(IN) :: KLVL ! number of levels in canopy 00053 REAL, DIMENSION(:), INTENT(IN) :: PPA ! pressure at forcing level (Pa) 00054 REAL, DIMENSION(:), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa) 00055 REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature forcing (K) 00056 REAL, DIMENSION(:), INTENT(IN) :: PQA ! air humidity forcing (kg/m3) 00057 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density (kg/m3) 00058 REAL, DIMENSION(:), INTENT(IN) :: PU ! zonal wind (m/s) 00059 REAL, DIMENSION(:), INTENT(IN) :: PV ! meridian wind (m/s) 00060 REAL, DIMENSION(:,:),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.) 00061 ! ! (W/m2) 00062 REAL, DIMENSION(:,:),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.) 00063 ! ! (W/m2) 00064 REAL, DIMENSION(:), INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m) 00065 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s) 00066 REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s) 00067 REAL, DIMENSION(:), INTENT(IN) :: PZREF ! height of T,q forcing (m) 00068 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! height of wind forcing (m) 00069 REAL, DIMENSION(:,:), INTENT(IN):: PTG ! surface and sub-surface soil temperature profile (K) 00070 REAL, DIMENSION(:,:), INTENT(IN):: PPATCH ! fraction of each tile/patch 00071 REAL, DIMENSION(:,:), INTENT(IN):: PWG ! soil volumetric water content profile (m3/m3) 00072 REAL, DIMENSION(:,:), INTENT(IN):: PWGI ! soil liquid water equivalent volumetric 00073 REAL, DIMENSION(:,:), INTENT(IN):: PZ0 ! roughness length 00074 REAL, DIMENSION(:), INTENT(IN) :: PSSO_SLOPE! slope of S.S.O. (-) 00075 REAL, DIMENSION(:,:), INTENT(IN):: PRESA ! aerodynamic resistance (s/m) 00076 REAL, DIMENSION(:,:), INTENT(IN):: PVEG ! vegetation cover fraction (-) 00077 REAL, DIMENSION(:,:), INTENT(IN):: PLAI ! Leaf Area Index (m2/m2) 00078 REAL, DIMENSION(:,:), INTENT(IN):: PWR ! liquid water retained on the 00079 ! ! foliage of the vegetation 00080 ! ! canopy 00081 REAL, DIMENSION(:,:), INTENT(IN):: PRGL ! maximum solar radiation 00082 ! ! usable in photosynthesis (W/m2) 00083 REAL, DIMENSION(:,:), INTENT(IN):: PRSMIN ! minimum stomatal resistance (s/m) 00084 REAL, DIMENSION(:,:), INTENT(IN):: PGAMMA ! coefficient for the calculation 00085 ! ! of the surface stomatal 00086 ! ! resistance 00087 REAL, DIMENSION(:,:), INTENT(IN):: PWRMAX_CF ! coefficient for maximum water 00088 ! ! interception 00089 ! ! storage capacity on the vegetation (-) 00090 REAL, DIMENSION(:,:), INTENT(IN):: PZ0_O_Z0H ! ratio of surface roughness lengths 00091 ! ! (momentum to heat) (-) 00092 REAL, DIMENSION(:,:), INTENT(IN):: PWFC ! field capacity volumetric water content 00093 ! ! profile (m3/m3) 00094 REAL, DIMENSION(:,:), INTENT(IN):: PWSAT ! porosity profile (m3/m3) 00095 TYPE(SURF_SNOW) , INTENT(IN):: PTSNOW ! snow state 00096 REAL, DIMENSION(:,:), INTENT(IN):: PZ ! height of middle of each level grid (m) 00097 ! 00098 REAL, DIMENSION(:,:), INTENT(OUT) :: PT ! temperature at each level in SBL (m/s) 00099 REAL, DIMENSION(:,:), INTENT(OUT) :: PQ ! humidity at each level in SBL (kg/m3) 00100 REAL, DIMENSION(:,:), INTENT(OUT) :: PWIND! wind at each level in SBL (m/s) 00101 REAL, DIMENSION(:,:), INTENT(OUT) :: PTKE ! Tke at each level in SBL (m2/s2) 00102 REAL, DIMENSION(:,:), INTENT(OUT) :: PP ! pressure at each level in SBL (kg/m3) 00103 ! 00104 !* 0.2 declarations of local variables 00105 ! 00106 !* forcing variables 00107 ! 00108 REAL, DIMENSION(SIZE(PTA)) :: ZWIND ! lowest atmospheric level wind speed (m/s) 00109 REAL, DIMENSION(SIZE(PTA)) :: ZEXNA ! Exner function at lowest SBL scheme level (-) 00110 REAL, DIMENSION(SIZE(PTA)) :: ZQA ! specific humidity (kg/m3) 00111 ! 00112 ! SBL turbulence scheme 00113 ! 00114 REAL, DIMENSION(SIZE(PTA)) ::ZRI 00115 REAL, DIMENSION(SIZE(PTA)) ::ZCD 00116 REAL, DIMENSION(SIZE(PTA)) ::ZCDN 00117 REAL, DIMENSION(SIZE(PTA)) ::ZCH 00118 REAL, DIMENSION(SIZE(PTA)) ::ZTNM 00119 REAL, DIMENSION(SIZE(PTA)) ::ZQNM 00120 REAL, DIMENSION(SIZE(PTA)) ::ZHUNM 00121 REAL, DIMENSION(SIZE(PTA)) ::ZP_SLOPE_COS 00122 REAL, DIMENSION(SIZE(PTA)) ::ZZ0 00123 REAL, DIMENSION(SIZE(PTA)) ::ZZ0H 00124 REAL, DIMENSION(SIZE(PTA)) ::ZEXNS 00125 REAL, DIMENSION(SIZE(PTA)) ::ZTS 00126 REAL, DIMENSION(SIZE(PTA)) ::ZHU 00127 REAL, DIMENSION(SIZE(PTA)) ::ZQS 00128 REAL, DIMENSION(SIZE(PTA)) ::ZZ0EFF 00129 REAL, DIMENSION(SIZE(PTA)) ::ZWG 00130 REAL, DIMENSION(SIZE(PTA)) ::ZWGI 00131 REAL, DIMENSION(SIZE(PTA)) ::ZVEG 00132 REAL, DIMENSION(SIZE(PTA)) ::ZRESA 00133 REAL, DIMENSION(SIZE(PTA)) ::ZHUG 00134 REAL, DIMENSION(SIZE(PTA)) ::ZHUGI 00135 REAL, DIMENSION(SIZE(PTA)) ::ZHV 00136 REAL, DIMENSION(SIZE(PTA)) ::ZCPS 00137 REAL, DIMENSION(SIZE(PTA)) ::ZWRMAX_CF 00138 REAL, DIMENSION(SIZE(PTA)) ::ZWR 00139 REAL, DIMENSION(SIZE(PTA)) ::ZZ0_WITH_SNOW 00140 REAL, DIMENSION(SIZE(PTA)) ::ZPSNG 00141 REAL, DIMENSION(SIZE(PTA)) ::ZPSNV 00142 REAL, DIMENSION(SIZE(PTA)) ::ZPSNV_A 00143 REAL, DIMENSION(SIZE(PTA)) ::ZPSN 00144 REAL, DIMENSION(SIZE(PTA)) ::ZSNOWALB 00145 REAL, DIMENSION(SIZE(PTA),SIZE(PTSNOW%WSNOW,2)) ::ZSNOWSWE 00146 REAL, DIMENSION(SIZE(PTA),SIZE(PTSNOW%WSNOW,2)) ::ZSNOWRHO 00147 REAL, DIMENSION(SIZE(PTA)) ::ZFFG 00148 REAL, DIMENSION(SIZE(PTA)) ::ZFFGNOS 00149 REAL, DIMENSION(SIZE(PTA)) ::ZFFV 00150 REAL, DIMENSION(SIZE(PTA)) ::ZFFVNOS 00151 REAL, DIMENSION(SIZE(PTA)) ::ZFF 00152 REAL, DIMENSION(SIZE(PTA)) ::ZRS 00153 REAL, DIMENSION(SIZE(PTA)) ::ZP_GLOBAL_SW 00154 REAL, DIMENSION(SIZE(PTA)) ::ZF2 00155 REAL, DIMENSION(SIZE(PTA)) ::ZF5 00156 REAL, DIMENSION(SIZE(PTA)) ::ZLAI 00157 REAL, DIMENSION(SIZE(PTA)) ::ZGAMMA 00158 REAL, DIMENSION(SIZE(PTA)) ::ZRGL 00159 REAL, DIMENSION(SIZE(PTA)) ::ZRSMIN 00160 REAL, DIMENSION(SIZE(PTA)) ::ZDELTA 00161 REAL, DIMENSION(SIZE(PTA)) ::ZWRMAX 00162 REAL, DIMENSION(SIZE(PTA)) ::ZCLS_WIND_ZON 00163 REAL, DIMENSION(SIZE(PTA)) ::ZCLS_WIND_MER 00164 REAL, DIMENSION(SIZE(PTA),SIZE(PTSNOW%WSNOW,2)) ::ZSUM_LAYER 00165 REAL, DIMENSION(SIZE(PTA)) ::ZSUM 00166 REAL, DIMENSION(SIZE(PTA)) :: ZLEG_DELTA ! soil evaporation delta fn 00167 REAL, DIMENSION(SIZE(PTA)) :: ZLEGI_DELTA ! soil sublimation delta fn 00168 ! 00169 INTEGER :: JSWB 00170 INTEGER :: JLAYER 00171 INTEGER :: JPATCH 00172 ! 00173 REAL, DIMENSION(SIZE(PTA),SIZE(PPATCH,2)) ::ZWSNOW 00174 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00175 !------------------------------------------------------------------------------------- 00176 ! 00177 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_SBL',0,ZHOOK_HANDLE) 00178 ! 00179 !Means over patches 00180 ZTS = SUM(PTG(:,:)*PPATCH(:,:) ,DIM=2) 00181 ZWG = SUM(PWG(:,:)*PPATCH(:,:) ,DIM=2) 00182 ZWGI = SUM(PWGI(:,:)*PPATCH(:,:),DIM=2) 00183 ZZ0 = SUM(PPATCH(:,:)*PZ0(:,:) ,DIM=2) 00184 ! 00185 !We choose to set ZZ0EFF and ZZ0_WITH_SNOW equal to ZZ0 00186 ZZ0EFF = ZZ0 00187 ZZ0_WITH_SNOW = ZZ0 00188 ZZ0H(:) = SUM(PPATCH(:,:) * PZ0(:,:)/PZ0_O_Z0H(:,:),DIM=2) 00189 ZVEG(:) = SUM(PPATCH(:,:) * PVEG(:,:) ,DIM=2) 00190 ! 00191 ZP_SLOPE_COS(:) = 1./SQRT(1.+PSSO_SLOPE(:)**2) 00192 IF (LNOSOF) ZP_SLOPE_COS(:) = 1.0 00193 ! 00194 ZRESA(:) = SUM(PPATCH(:,:)*PRESA(:,:),DIM=2) 00195 WHERE(ZVEG(:)>0) 00196 ZLAI (:)= SUM(PPATCH(:,:)*PVEG(:,:)*PLAI(:,:) ,DIM=2,MASK=PVEG(:,:)>0) / ZVEG(:) 00197 ZWRMAX_CF(:)= SUM(PPATCH(:,:)*PVEG(:,:)*PWRMAX_CF(:,:),DIM=2,MASK=PVEG(:,:)>0) / ZVEG(:) 00198 ZWR (:)= SUM(PPATCH(:,:)*PVEG(:,:)*PWR(:,:) ,DIM=2,MASK=PVEG(:,:)>0) / ZVEG(:) 00199 ELSEWHERE 00200 ZLAI (:) = PLAI (:,1) 00201 ZWRMAX_CF(:) = PWRMAX_CF(:,1) 00202 ZWR (:) = PWR (:,1) 00203 ENDWHERE 00204 ! 00205 ZSUM_LAYER(:,:) = 0. 00206 ZSUM (:) = 0. 00207 ! 00208 DO JLAYER=1,SIZE(PTSNOW%WSNOW,2) 00209 ZSNOWSWE (:,JLAYER) = SUM(PPATCH(:,:)*PTSNOW%WSNOW(:,JLAYER,:),DIM=2) 00210 ZSUM_LAYER(:,JLAYER) = SUM(PPATCH(:,:),DIM=2,MASK=PTSNOW%WSNOW(:,JLAYER,:)>0) 00211 WHERE(ZSUM_LAYER(:,JLAYER)>0) 00212 ZSNOWRHO(:,JLAYER)= SUM( PPATCH(:,:)*PTSNOW%RHO(:,JLAYER,:), DIM=2, & 00213 MASK=PTSNOW%WSNOW(:,JLAYER,:)>0) / ZSUM_LAYER(:,JLAYER) 00214 ELSEWHERE 00215 ZSNOWRHO(:,JLAYER)=PTSNOW%RHO(:,JLAYER,1) 00216 ENDWHERE 00217 END DO 00218 ! 00219 ZSUM(:)=SUM(ZSUM_LAYER(:,:),DIM=2) 00220 ! 00221 ZWSNOW(:,:) = 0. 00222 DO JPATCH=1,SIZE(PTSNOW%WSNOW,3) 00223 DO JLAYER=1,SIZE(PTSNOW%WSNOW,2) 00224 ZWSNOW(:,JPATCH) = ZWSNOW(:,JPATCH) + PTSNOW%WSNOW(:,JLAYER,JPATCH) 00225 ENDDO 00226 ENDDO 00227 ! 00228 WHERE(ZSUM(:)>0) 00229 ZSNOWALB(:) = SUM(PPATCH(:,:)*PTSNOW%ALB(:,:),DIM=2,MASK=ZWSNOW(:,:)>0) / ZSUM(:) 00230 ELSEWHERE 00231 ZSNOWALB(:) = PTSNOW%ALB(:,1) 00232 ENDWHERE 00233 ! 00234 ZRGL (:) = SUM(PPATCH(:,:) * PRGL (:,:),DIM=2) 00235 ZRSMIN(:) = SUM(PPATCH(:,:) * PRSMIN(:,:),DIM=2) 00236 ZGAMMA(:) = SUM(PPATCH(:,:) * PGAMMA(:,:),DIM=2) 00237 ! 00238 ZEXNA(:) = (PPA(:)/XP00)**(XRD/XCPD) 00239 ZEXNS(:) = (PPS(:)/XP00)**(XRD/XCPD) 00240 ZQA (:) = PQA(:) / PRHOA(:) 00241 ZWIND(:) = SQRT(PU**2+PV**2) 00242 ! 00243 !We compute the snow fractions 00244 CALL ISBA_SNOW_FRAC(PTSNOW%SCHEME, & 00245 ZSNOWSWE, ZSNOWRHO, ZSNOWALB, & 00246 ZVEG, ZLAI, ZZ0, & 00247 ZPSN, ZPSNV_A, ZPSNG, ZPSNV ) 00248 ! 00249 !We compute total shortwave incoming radiation needed by veg 00250 ZP_GLOBAL_SW(:) = 0. 00251 DO JSWB=1,SIZE(PSW_BANDS) 00252 ZP_GLOBAL_SW(:) = ZP_GLOBAL_SW(:) + (PDIR_SW(:,JSWB) + PSCA_SW(:,JSWB)) 00253 END DO 00254 ! 00255 !We choose the case HPHOTO=='NON' and a humid soil (ZF2=1) to compute ZRS 00256 ZF2(:)=1.0 00257 CALL VEG(ZP_GLOBAL_SW, PTA, ZQA, PPS, ZRGL, ZLAI, ZRSMIN, ZGAMMA, ZF2, ZRS) 00258 !Calculation of ZDELTA 00259 CALL WET_LEAVES_FRAC(ZWR, ZVEG, ZWRMAX_CF, ZZ0_WITH_SNOW, ZLAI, ZWRMAX, ZDELTA) 00260 ! 00261 !We choose the case LFLOOD=false 00262 ZFFG (:) = 0.0 00263 ZFFGNOS(:) = 0.0 00264 ZFFV (:) = 0.0 00265 ZFFVNOS(:) = 0.0 00266 ZFF (:) = 0.0 00267 ! 00268 ZF5 (:) = 1.0 00269 !We compute ZCD, ZCH and ZRI 00270 CALL DRAG(HISBA, PTSNOW%SCHEME, HCPSURF, ZTS, ZWG, ZWGI, ZEXNS, ZEXNA, PTA, & 00271 ZWIND, ZQA, PRAIN, PSNOW, PPS, ZRS, & 00272 ZVEG, ZZ0, ZZ0EFF, ZZ0H, PWFC(:,1), PWSAT(:,1), & 00273 ZPSNG, ZPSNV, PZREF, PUREF, ZP_SLOPE_COS, ZDELTA, ZF5, & 00274 ZRESA, ZCH, ZCD, ZCDN, ZRI, ZHUG, ZHUGI, ZHV, ZHU, ZCPS, & 00275 ZQS, ZFFG, ZFFV, ZFF, ZFFGNOS, ZFFVNOS, ZLEG_DELTA, ZLEGI_DELTA ) 00276 ! 00277 !Initialisation of T, Q, Wind and TKE on all canopy levels 00278 DO JLAYER=1,KLVL 00279 ! 00280 CALL CLS_TQ(PTA, ZQA, PPA, PPS, PZREF, ZCD, ZCH, ZRI, ZTS, ZHU, ZZ0H, & 00281 PZ(:,JLAYER), ZTNM, ZQNM, ZHUNM ) 00282 ! 00283 PT(:,JLAYER)=ZTNM 00284 PQ(:,JLAYER)=ZQNM 00285 ! 00286 CALL CLS_WIND(PU, PV, PUREF, ZCD, ZCDN, ZRI, PZ(:,JLAYER), & 00287 ZCLS_WIND_ZON, ZCLS_WIND_MER ) 00288 ! 00289 PWIND(:,JLAYER) = SQRT( ZCLS_WIND_ZON(:)**2 + ZCLS_WIND_MER(:)**2 ) 00290 PTKE (:,JLAYER) = XALPSBL * ZCD(:) * ( PU(:)**2 + PV(:)**2 ) 00291 PP (:,JLAYER) = PPA(:) + XG * PRHOA(:) * (PZ(:,KLVL) - PZ(:,JLAYER)) 00292 ! 00293 ENDDO 00294 ! 00295 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_SBL',1,ZHOOK_HANDLE) 00296 ! 00297 END SUBROUTINE INIT_ISBA_SBL
1.8.0