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