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