SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_budget.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE ISBA_BUDGET(HISBA, HSNOW_ISBA, OGLACIER, PTSTEP,    &
00003                        PWG, PWGI, PWR, PSNOWSWE, PDG, PDZG,    &
00004                        PWG_INI, PWGI_INI, PWR_INI, PSWE_INI,   & 
00005                        PRAIN, PSNOW, PEVAP, PDRAIN, PRUNOFF,   &
00006                        PIFLOOD, PPFLOOD, PICEFLUX, PIRRIG_FLUX,&
00007                        PDWG, PDWGI, PDWR, PDSWE, PWATBUD       )
00008 !     ###############################################################################
00009 !
00010 !!****  *ISBA_BUDGET * - water and energy budget for ISBA
00011 !!
00012 !!    PURPOSE
00013 !!    -------
00014 !
00015 !!**  METHOD
00016 !!    ------
00017 !!
00018 !!    REFERENCE
00019 !!    ---------
00020 !!      
00021 !!
00022 !!    AUTHOR
00023 !!    ------
00024 !!     B. Decharme 
00025 !!
00026 !!    MODIFICATIONS
00027 !!    -------------
00028 !!      Original    07/2012
00029 !!
00030 !!------------------------------------------------------------------
00031 !
00032 USE MODD_SURF_PAR,   ONLY : XUNDEF
00033 USE MODD_CSTS,       ONLY : XRHOLW
00034 !     
00035 USE MODD_DIAG_EVAP_ISBA_n, ONLY : LWATER_BUDGET
00036 !
00037 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00038 USE PARKIND1  ,ONLY : JPRB
00039 !
00040 IMPLICIT NONE
00041 !
00042 !*      0.1    declarations of arguments
00043 !
00044  CHARACTER(LEN=*),      INTENT(IN) :: HISBA      ! type of ISBA version:
00045 !                                               ! '2-L' (default)
00046 !                                               ! '3-L'
00047 !                                               ! 'DIF'
00048  CHARACTER(LEN=*),     INTENT(IN)  :: HSNOW_ISBA ! 'DEF' = Default F-R snow scheme
00049 !                                               !         (Douville et al. 1995)
00050 !                                               ! '3-L' = 3-L snow scheme (option)
00051 !                                               !         (Boone and Etchevers 2000)
00052 !                                               ! 'CRO' = Crocus snow scheme
00053 LOGICAL,               INTENT(IN) :: OGLACIER   ! True = glacier over permanent snow and ice
00054                                                 ! False = No specific treatment
00055 REAL,                  INTENT(IN) :: PTSTEP     ! timestep of the integration    (s)
00056 !
00057 REAL, DIMENSION(:,:),  INTENT(IN) :: PWG        ! liquid water content by layer  (m3/m3)
00058 REAL, DIMENSION(:,:),  INTENT(IN) :: PWGI       ! ice content by layer           (m3/m3)
00059 REAL, DIMENSION(:),    INTENT(IN) :: PWR        ! liquid water on veg canopy     (kg m-2)
00060 REAL, DIMENSION(:,:),  INTENT(IN) :: PSNOWSWE   ! snow water equivalent by layer (kg m-2)
00061 REAL, DIMENSION(:,:),  INTENT(IN) :: PDG        ! soil layer depth               (m)
00062 REAL, DIMENSION(:,:),  INTENT(IN) :: PDZG       ! soil layer thickness           (m)
00063 !
00064 REAL, DIMENSION(:),    INTENT(IN) :: PWG_INI    ! total wg at t-1                (kg m-2)
00065 REAL, DIMENSION(:),    INTENT(IN) :: PWGI_INI   ! total wgi at t-1               (kg m-2)
00066 REAL, DIMENSION(:),    INTENT(IN) :: PWR_INI    ! total wr at t-1                (kg m-2)
00067 REAL, DIMENSION(:),    INTENT(IN) :: PSWE_INI   ! total swe at t-1               (kg m-2)
00068 !
00069 REAL, DIMENSION(:),    INTENT(IN)  :: PRAIN     ! Rain rate                      (kg/m2/s)
00070 REAL, DIMENSION(:),    INTENT(IN)  :: PSNOW     ! Snow rate                      (kg/m2/s)
00071 REAL, DIMENSION(:),    INTENT(IN)  :: PEVAP     ! total evaporative flux         (kg/m2/s)
00072 REAL, DIMENSION(:),    INTENT(IN)  :: PDRAIN    ! drainage                       (kg/m2/s)
00073 REAL, DIMENSION(:),    INTENT(IN)  :: PRUNOFF   ! surface runoff                 (kg/m2/s)
00074 REAL, DIMENSION(:),    INTENT(IN)  :: PIFLOOD   ! Floodplain infiltration        (kg/m2/s)
00075 REAL, DIMENSION(:),    INTENT(IN)  :: PPFLOOD   ! Floodplain direct precip runoff(kg/m2/s)
00076 REAL, DIMENSION(:),    INTENT(IN)  :: PICEFLUX  ! Ice flux from Snow reservoir   (kg/m2/s)
00077 REAL ,DIMENSION(:),    INTENT(IN)  :: PIRRIG_FLUX! additional water flux from irrigation (kg/m2/s)
00078 ! 
00079 REAL, DIMENSION(:),    INTENT(OUT) :: PDWG
00080 REAL, DIMENSION(:),    INTENT(OUT) :: PDWGI
00081 REAL, DIMENSION(:),    INTENT(OUT) :: PDWR
00082 REAL, DIMENSION(:),    INTENT(OUT) :: PDSWE
00083 REAL, DIMENSION(:),    INTENT(OUT) :: PWATBUD   ! ISBA water budget              (kg/m2/s)
00084 !
00085 !*      0.2    declarations of local variables
00086 !
00087 REAL, DIMENSION(SIZE(PWR)) :: ZINPUT
00088 REAL, DIMENSION(SIZE(PWR)) :: ZOUTPUT
00089 REAL, DIMENSION(SIZE(PWR)) :: ZTENDENCY
00090 REAL, DIMENSION(SIZE(PWR)) :: ZICEFLUX
00091 REAL, DIMENSION(SIZE(PWR)) :: ZSWE_T
00092 REAL, DIMENSION(SIZE(PWR)) :: ZWG_T
00093 REAL, DIMENSION(SIZE(PWR)) :: ZWGI_T
00094 !
00095 INTEGER :: INI, INL, INLS
00096 INTEGER :: JI, JL
00097 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00098 !
00099 !-------------------------------------------------------------------------------------
00100 !
00101 IF (LHOOK) CALL DR_HOOK('ISBA_BUDGET',0,ZHOOK_HANDLE)
00102 !
00103 !*      1.0    Init
00104 !       -----------
00105 !
00106 INI =SIZE(PWG,1)
00107 INL =SIZE(PWG,2)
00108 INLS=SIZE(PSNOWSWE,2)
00109 !
00110 PDWG (:) = XUNDEF
00111 PDWGI(:) = XUNDEF
00112 PDWR (:) = XUNDEF
00113 PDSWE(:) = XUNDEF
00114 !
00115 !
00116 !*      2.0    Comptut isba water budget in kg/m2/s
00117 !       -------------------------------------------
00118 !
00119 IF(LWATER_BUDGET)THEN
00120 !
00121 ! total swe at t in kg/m2
00122   ZSWE_T(:)=0.0
00123   DO JL=1,INLS
00124      DO JI=1,INI
00125         ZSWE_T(JI)=ZSWE_T(JI)+PSNOWSWE(JI,JL)
00126      ENDDO
00127   ENDDO
00128 !
00129 ! total wg and wgi at t in kg/m2
00130   ZWG_T (:)= 0.0
00131   ZWGI_T(:)= 0.0
00132   IF(HISBA=='DIF')THEN
00133     DO JL=1,INL
00134        DO JI=1,INI
00135           IF(PWG(JI,JL)/=XUNDEF)THEN
00136              ZWG_T (JI)=ZWG_T (JI)+PWG (JI,JL)*PDZG(JI,JL)*XRHOLW
00137              ZWGI_T(JI)=ZWGI_T(JI)+PWGI(JI,JL)*PDZG(JI,JL)*XRHOLW
00138           ENDIF
00139        ENDDO
00140     ENDDO
00141   ELSE
00142     ZWG_T (:)=PWG (:,2)*PDG(:,2)*XRHOLW
00143     ZWGI_T(:)=PWGI(:,2)*PDG(:,2)*XRHOLW
00144     IF(HISBA=='3-L')THEN
00145       ZWG_T(:)=ZWG_T(:)+PWG(:,3)*(PDG(:,3)-PDG(:,2))*XRHOLW
00146     ENDIF
00147   ENDIF
00148 !
00149 ! Comptut reservoir time tendencies in kg/m2/s
00150   PDWG (:) = (ZWG_T (:)-PWG_INI (:))/PTSTEP
00151   PDWGI(:) = (ZWGI_T(:)-PWGI_INI(:))/PTSTEP
00152   PDWR (:) = (PWR   (:)-PWR_INI (:))/PTSTEP
00153   PDSWE(:) = (ZSWE_T(:)-PSWE_INI(:))/PTSTEP
00154 !
00155 ! ice calving flux if used
00156   IF(OGLACIER)THEN
00157     ZICEFLUX(:)=PICEFLUX(:)
00158   ELSE
00159     ZICEFLUX(:)=0.0
00160   ENDIF
00161 !
00162 ! total input water in the system at t
00163   ZINPUT(:)=PRAIN(:)+PSNOW(:)+PIFLOOD(:)+PIRRIG_FLUX(:)
00164 !
00165 ! total output water in the system at t
00166   ZOUTPUT(:) = PEVAP(:)+PDRAIN(:)+PRUNOFF(:)+PPFLOOD(:)+ZICEFLUX(:)
00167 !
00168 ! total reservoir time tendencies at "t - (t-1)"
00169   ZTENDENCY(:) = PDWG(:)+PDWGI(:)+PDWR(:)+PDSWE(:)
00170 !
00171 ! isba water budget (dw/dt=in-out) in kg/m2/s
00172   PWATBUD(:)=ZTENDENCY(:)-(ZINPUT(:)-ZOUTPUT(:))
00173 !
00174 ENDIF
00175 !
00176 !*      3.0    Comptut isba energy budget in W/m2
00177 !       -----------------------------------------
00178 !
00179 ! not yet implemented
00180 !
00181 IF (LHOOK) CALL DR_HOOK('ISBA_BUDGET',1,ZHOOK_HANDLE)
00182 !-------------------------------------------------------------------------------------
00183 !
00184 END SUBROUTINE ISBA_BUDGET