SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_ver_teb_greenroof.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_VER_TEB_GREENROOF
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_VER_TEB_GREENROOF* - change in ISBA fields due to altitude change
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     V. Masson  + A.Lemonsu & C.deMunck
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!      Modified by B. Decharme  (01/2009), Optional Arpege deep soil temperature initialization
00025 !!------------------------------------------------------------------
00026 !
00027 
00028 !
00029 USE MODD_TEB_n,             ONLY : XZS
00030 USE MODD_TEB_GREENROOF_n,   ONLY : XTG, XWG, XWGI, XWSAT, TSNOW, &
00031                                    XDG, NLAYER_GR
00032 USE MODD_ISBA_PAR,          ONLY : XWGMIN
00033 USE MODD_SURF_PAR,          ONLY : XUNDEF
00034 USE MODD_PREP,              ONLY : XZS_LS, XT_CLIM_GRAD
00035 USE MODD_CSTS,              ONLY : XTT, XDAY, XLMTT, XRHOLW
00036 !
00037 USE MODE_THERMOS
00038 USE MODI_PREP_VER_SNOW
00039 !
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 IMPLICIT NONE
00045 !
00046 !*      0.1    declarations of arguments
00047 !
00048 !
00049 !*      0.2    declarations of local variables
00050 !
00051 INTEGER                         :: JL        ! loop counter on layers
00052 INTEGER                         :: IWORK     ! Work integer
00053 !
00054 REAL, DIMENSION(:), ALLOCATABLE :: ZWGTOT    ! total water content
00055 REAL, DIMENSION(:), ALLOCATABLE :: ZDW       ! variation of water in soil
00056 REAL, DIMENSION(:), ALLOCATABLE :: ZZSFREEZE ! altitude where soil temperature equals XTT
00057 INTEGER                         :: IDEEP_SOIL! layer corresponding to deep soil temperature
00058 !
00059 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWGI_CLIM_GRAD ! ice content vertical gradient
00060 !
00061 REAL, DIMENSION(:,:), ALLOCATABLE :: ZTG_LS! temperature on initial orography
00062 !
00063 REAL                            :: ZGRADX = 5.E-4 ! slope of ice content gradient
00064 REAL                            :: ZH0    = 5.E-1 ! constant used to define ice content gradient
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !-------------------------------------------------------------------------------------
00067 !
00068 !*      1.0    Ice content climatologic gradient
00069 !
00070 IF (LHOOK) CALL DR_HOOK('PREP_VER_TEB_GREENROOF',0,ZHOOK_HANDLE)
00071 ALLOCATE(ZWGI_CLIM_GRAD (SIZE(XWG,1),SIZE(XWG,2)))
00072 !
00073 ZWGI_CLIM_GRAD(:,:) = ZGRADX * EXP( - XDG(:,:) / ZH0 )
00074 !-------------------------------------------------------------------------------------
00075 !
00076 !*      1.1    Temperature profile
00077 !
00078 ALLOCATE(ZTG_LS(SIZE(XTG,1),SIZE(XTG,2)))
00079 ZTG_LS(:,:) = XTG(:,:)
00080 !
00081   DO JL=1,SIZE(XTG,2)
00082     WHERE(XTG(:,JL)/=XUNDEF) &
00083       XTG(:,JL) = XTG(:,JL) + XT_CLIM_GRAD  * (XZS - XZS_LS)  
00084   END DO
00085 !
00086 !-------------------------------------------------------------------------------------
00087 !
00088 !*      1.2    Water and ice in the soil
00089 !
00090 ALLOCATE(ZZSFREEZE      (SIZE(XWG,1)))
00091 ALLOCATE(ZWGTOT         (SIZE(XWG,1)))
00092 ALLOCATE(ZDW            (SIZE(XWG,1)))
00093 !
00094 !* general case
00095 !
00096 IWORK=SIZE(XTG,2)
00097 !
00098   !
00099   DO JL=1,IWORK
00100     !
00101     ZDW(:) = 0.
00102     ! altitude where deep soil freezes (diurnal surface response is not treated)
00103     ZZSFREEZE(:) = XZS + (XTT - XTG(:,JL)) / XT_CLIM_GRAD
00104     !
00105     WHERE(XTG(:,JL)/=XUNDEF) 
00106       !
00107       WHERE (ZTG_LS(:,JL) < XTT)
00108         !
00109         WHERE (XZS <= XZS_LS)
00110           !
00111           WHERE (XZS > ZZSFREEZE) 
00112             ZDW(:) = ZWGI_CLIM_GRAD(:,JL) * (XZS - XZS_LS)
00113           ELSEWHERE
00114             ZDW(:) = ZWGI_CLIM_GRAD(:,JL) * (ZZSFREEZE - XZS_LS) + ZGRADX * (XZS - ZZSFREEZE)
00115           ENDWHERE
00116           !
00117         ELSEWHERE
00118           !
00119           ZDW(:) = ZWGI_CLIM_GRAD(:,JL) * (XZS - XZS_LS)
00120           !
00121         ENDWHERE
00122         !
00123       ELSEWHERE
00124         !
00125         WHERE (XZS <= XZS_LS)
00126           !
00127           ZDW(:) = ZGRADX * (XZS - XZS_LS)
00128           !
00129         ELSEWHERE
00130           !
00131           ZDW(:) = ZWGI_CLIM_GRAD(:,JL) * (XZS - ZZSFREEZE)
00132           !
00133         END WHERE
00134         !
00135       END WHERE
00136       !
00137       ZWGTOT(:) = XUNDEF
00138       !
00139       WHERE(XWG(:,JL)/=XUNDEF)         
00140         ZWGTOT(:) = XWG(:,JL) + XWGI(:,JL)
00141       ENDWHERE 
00142       !
00143       WHERE(XWG(:,JL)/=XUNDEF)      
00144         XWGI(:,JL) = XWGI(:,JL) + ZDW(:)
00145         XWG (:,JL) = XWG (:,JL) - ZDW(:)
00146       ENDWHERE      
00147       !
00148       WHERE (XWGI(:,JL) < 0..AND.XWGI(:,JL)/=XUNDEF) 
00149         XWGI(:,JL) = 0.
00150         XWG (:,JL) = ZWGTOT(:)
00151       END WHERE
00152       !
00153       WHERE (XWG(:,JL) < XWGMIN.AND.XWG(:,JL)/=XUNDEF)
00154         XWG (:,JL) = XWGMIN
00155         XWGI(:,JL) = ZWGTOT(:) - XWGMIN
00156       END WHERE
00157       !
00158       WHERE(XWGI(:,JL) > 0..AND.XWGI(:,JL)/=XUNDEF)
00159         XTG(:,JL) = MIN(XTT,XTG(:,JL))
00160       ELSEWHERE
00161         XTG(:,JL) = MAX(XTT,XTG(:,JL))
00162       ENDWHERE
00163       !
00164     ENDWHERE
00165     !
00166   END DO
00167   !
00168 !
00169 !
00170 DEALLOCATE(ZZSFREEZE     )
00171 DEALLOCATE(ZWGI_CLIM_GRAD)
00172 DEALLOCATE(ZWGTOT        )
00173 DEALLOCATE(ZDW           )
00174 !
00175 !* masks where fields are not defined
00176 WHERE (XTG(:,1:SIZE(XWG,2)) == XUNDEF)
00177   XWG (:,:) = XUNDEF
00178   XWGI(:,:) = XUNDEF
00179 END WHERE
00180 !
00181 !-------------------------------------------------------------------------------------
00182 !
00183 IDEEP_SOIL = NLAYER_GR
00184  CALL PREP_VER_SNOW(TSNOW,XZS_LS,XZS,SPREAD(ZTG_LS,3,1),SPREAD(XTG,3,1),IDEEP_SOIL)
00185 !
00186 !-------------------------------------------------------------------------------------
00187 !
00188 !*      2.     Deallocation of large-scale orography
00189 !
00190 DEALLOCATE(ZTG_LS)
00191 IF (LHOOK) CALL DR_HOOK('PREP_VER_TEB_GREENROOF',1,ZHOOK_HANDLE)
00192 !-------------------------------------------------------------------------------------
00193 !
00194 END SUBROUTINE PREP_VER_TEB_GREENROOF