SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/hydro_soil.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE HYDRO_SOIL(HISBA,                                        &
00003                          PTSTEP,                                            &
00004                          PLETR, PLEG, PPG, PEVAPCOR,                        &
00005                          PWDRAIN,                                           &
00006                          PC1, PC2, PC3, PC4B, PC4REF, PWGEQ,                &
00007                          PD_G2, PD_G3, PWSAT, PWFC,                         &
00008                          PDWGI1, PDWGI2, PLEGI, PD_G1, PCG, PCT,            &
00009                          PTG, PTG2,                                         &
00010                          PWG1, PWG2, PWG3, PWGI1, PWGI2,                    &
00011                          PDRAIN, HKSAT, PWWILT                              )  
00012 !     #####################################################################
00013 !
00014 !!****  *HYDRO_SOIL*  
00015 !!
00016 !!    PURPOSE
00017 !!    -------
00018 !
00019 !     Calculates the evolution of the water variables, i.e., the superficial
00020 !     and deep-soil volumetric water content (wg and w2), the equivalent
00021 !     liquid water retained in the vegetation canopy (Wr), the equivalent
00022 !     water of the snow canopy (Ws), and also of the albedo and density of
00023 !     the snow (i.e., ALBS and RHOS).  Also determine the runoff and drainage
00024 !     into the soil.
00025 !         
00026 !     
00027 !!**  METHOD
00028 !!    ------
00029 !
00030 !!    EXTERNAL
00031 !!    --------
00032 !!
00033 !!    none
00034 !!
00035 !!    IMPLICIT ARGUMENTS
00036 !!    ------------------ 
00037 !!
00038 !!
00039 !!      
00040 !!    REFERENCE
00041 !!    ---------
00042 !!
00043 !!    Noilhan and Planton (1989)
00044 !!    Belair (1995)
00045 !!      
00046 !!    AUTHOR
00047 !!    ------
00048 !!
00049 !!      S. Belair           * Meteo-France *
00050 !!
00051 !!    MODIFICATIONS
00052 !!    -------------
00053 !!
00054 !!      Original    14/03/95 
00055 !!                  31/08/98 (V. Masson and F. Habets) add Dumenil et Todini
00056 !!                           runoff scheme
00057 !!                  31/08/98 (V. Masson and A. Boone) add the third soil-water
00058 !!                           reservoir (WG3,D3)
00059 !!                  15/03/99 A. Boone soil ice modification: advance
00060 !!                           soil ice and liquid water, do budget checks
00061 !!                  25/01/00 A. Boone : fully implicit method for WG2, WG3
00062 !!                  05/03/07 A. Boone : changed drainage diagnostic computation for
00063 !!                                      single bulk-soil option...i.e. for
00064 !!                                      cases when HISBA=2-L or d2>=d3 (HISBA=3-L)
00065 !!                                      for tighter water budget closure 
00066 !!                  07/08/12 B. Decharme : Soil ice energy conservation
00067 !-------------------------------------------------------------------------------
00068 !
00069 !*       0.     DECLARATIONS
00070 !               ------------
00071 !
00072 USE MODD_CSTS,     ONLY : XLVTT, XRHOLW, XLMTT, XLSTT, XDAY
00073 USE MODD_ISBA_PAR, ONLY : XWGMIN
00074 !
00075 !
00076 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00077 USE PARKIND1  ,ONLY : JPRB
00078 !
00079 IMPLICIT NONE
00080 !
00081 !*      0.1    declarations of arguments
00082 !
00083 !
00084  CHARACTER(LEN=*),     INTENT(IN)   :: HISBA   ! type of ISBA version:
00085 !                                             ! '2-L' (default)
00086 !                                             ! '3-L'
00087 !
00088 REAL, INTENT(IN)                  :: PTSTEP
00089 !                                      timestep of the integration (s)
00090 !
00091 REAL, DIMENSION(:), INTENT(IN)    :: PD_G1
00092 !                                      depth of surface ice reservoir (m)
00093 !
00094 REAL, DIMENSION(:), INTENT(IN)    :: PLETR, PLEG, PPG, PEVAPCOR
00095 !                                      PLETR    = evapotranspiration of the vegetation (W m-2)
00096 !                                      PLEG     = latent heat of evaporation over the ground (W m-2)
00097 !                                      PPG      = total water reaching the ground (kg m-2 s-1)
00098 !                                      PEVAPCOR = correction for any excess evaporation 
00099 !                                                from snow as it completely ablates (kg m-2 s-1)
00100 !
00101 REAL, DIMENSION(:), INTENT(IN)    :: PWDRAIN  ! minimum Wg for drainage (m3 m-3)
00102 !
00103 REAL, DIMENSION(:), INTENT(IN)    :: PC1, PC2, PWGEQ, PCG, PCT
00104 REAL, DIMENSION(:,:), INTENT(IN)  :: PC3
00105 !                                      soil coefficients
00106 !                                      C1, C2 = coefficients for the moisture calculations (-)
00107 !                                      C3     = coefficient for drainage calculation (m)
00108 !                                      PWGEQ  = equilibrium surface volumetric moisture (m3 m-3)
00109 !                                      PCG    = soil heat capacity
00110 !                                      PCT    = grid-averaged heat capacity (K m2 J-1)
00111 !
00112 REAL, DIMENSION(:), INTENT(IN)    :: PD_G2, PD_G3, PWSAT, PWFC
00113 !                                      PD_G2 = root depth (m)
00114 !                                      PD_G3 = depth of the soil column (m)
00115 !                                      PWSAT = saturation volumetric water content
00116 !                                              of the soil (m3 m-3)
00117 !                                      PWFC  = field capacity volumetric water
00118 !                                              content (m3 m-3)
00119 !
00120 REAL, DIMENSION(:), INTENT(IN)    :: PC4B, PC4REF
00121 !                                      PC4REF, PC4B = fiiting soil paramter for vertical 
00122 !                                      diffusion (C4) (-)
00123 !
00124 REAL, DIMENSION(:), INTENT(IN)    :: PDWGI1, PDWGI2, PLEGI
00125 !                                      PDWGI1 = surface layer liquid water equivalent 
00126 !                                               volumetric ice content time tendency (m3 m-3)
00127 !                                      PDWGI2 = deep-soil layer liquid water equivalent  
00128 !                                               volumetric ice content time tendency  (m3 m-3)
00129 !                                      PLEGI  = surface soil ice sublimation (W m-2)
00130 !
00131 !
00132 REAL, DIMENSION(:), INTENT(INOUT) :: PTG, PTG2
00133 !                                    PTG  = surface temperature at 't' (K)
00134 !                                    PTG2 = soil temperature at 't' (K)
00135 !
00136 REAL, DIMENSION(:), INTENT(INOUT) :: PWG1, PWG2, PWG3, PWGI1, PWGI2
00137 REAL, DIMENSION(:), INTENT(OUT)   :: PDRAIN
00138 !                                      PWG1   = near-surface soil moisture at 't+dt' (m3 m-3)
00139 !                                      PWG2   = bulk root-soil moisture at 't+dt' (m3 m-3)
00140 !                                      PWG3   = bulk deep-soil moisture at 't+dt' (m3 m-3)
00141 !                                      PWGI1  = bulk surface-soil ice at 't+dt' (m3 m-3)
00142 !                                      PWGI2  = bulk deep-soil ice at 't+dt' (m3 m-3)
00143 !                                      PDRAIN = drainage (kg m-2 s-1)
00144 !
00145  CHARACTER(LEN=*),     INTENT(IN)  :: HKSAT      ! soil hydraulic profil option
00146 !                                               ! 'DEF'  = ISBA homogenous soil
00147 !                                               ! 'SGH'  = ksat exponential decay
00148 !
00149 REAL, DIMENSION(:), INTENT(IN)    :: PWWILT
00150 !                                    PWWILT = wilting point volumetric water
00151 !                                             content (m3 m-3)
00152 !
00153 !*      0.2    declarations of local variables
00154 !
00155 !
00156 REAL, DIMENSION(SIZE(PTG))   :: ZWGI1M, ZWG2M, ZWG3M, ZWGI2M
00157 !                                      Prognostic variables of ISBA at 't-dt'
00158 !                                      ZWG2M = root-soil volumetric water content
00159 !                                      ZWG3M = deep-soil volumetric water content
00160 !                                      ZWGI1M = surface-soil volumetric ice content
00161 !                                      ZWGI2M = deep-soil volumetric ice content
00162 !
00163 REAL, DIMENSION(SIZE(PTG))   :: ZETR, ZEG
00164 !                                             ZETR = evapotranspiration rate
00165 !                                             ZEG = evaporation rate from the ground
00166 !
00167 ! 
00168 REAL, DIMENSION(SIZE(PTG))   :: ZWSAT, ZWFC
00169 !                                             ZWSAT = Wsat  when ice is present
00170 !                                             ZWFC  = Wfc   when ice is present
00171 !
00172 REAL, DIMENSION(SIZE(PWG3))  :: ZC4
00173 REAL, DIMENSION(SIZE(PWG3))  :: ZWAVG, ZSINK2,                                    
00174                                   ZFACTOR, ZDRAINCF2, ZDRAINCF3, ZDRAIN2,           
00175                                   ZDELTA2, ZDELTA3, ZDELTA22, ZDELTA33,             
00176                                   ZWDRAIN2, ZWDRAIN3  
00177 !
00178 REAL, DIMENSION(SIZE(PWG3))  :: ZEXCESSF, ZA2, ZB2, ZC2, ZA3, ZB3, ZC3, ZWDRAIN, ZEXCESSFC
00179 !
00180 REAL, DIMENSION(SIZE(PWG3))  :: ZWLIM2, ZWLIM3, ZWWILT
00181 !
00182 INTEGER                 :: JJ
00183 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00184 !-------------------------------------------------------------------------------
00185 !
00186 !*       0.     Initialization
00187 !               --------------
00188 !
00189 !
00190 IF (LHOOK) CALL DR_HOOK('HYDRO_SOIL',0,ZHOOK_HANDLE)
00191 ZWSAT(:)     = 0.
00192 ZWFC(:)      = 0.
00193 ZWWILT(:)    = 0.
00194 !
00195 PDRAIN(:)    = 0.
00196 !
00197 ZDRAIN2(:)   = 0.
00198 ZDRAINCF2(:) = 0.
00199 ZDRAINCF3(:) = 0.
00200 ZDELTA2(:)   = 0.0
00201 ZDELTA3(:)   = 0.0
00202 ZDELTA22(:)  = 0.0
00203 ZDELTA33(:)  = 0.0
00204 ZSINK2(:)    = 0.
00205 ZWDRAIN(:)   = 0.0
00206 ZWDRAIN2(:)  = 0.0
00207 ZWDRAIN3(:)  = 0.0
00208 ZA2(:)       = 0.0
00209 ZB2(:)       = 0.0
00210 ZC2(:)       = 0.0
00211 ZA3(:)       = 0.0
00212 ZB3(:)       = 0.0
00213 ZC3(:)       = 0.0
00214 !
00215 ZEXCESSF(:)  = 0.0
00216 !
00217 ! Fields at time t-dt
00218 !
00219 ZWG2M(:)     = PWG2(:)
00220 ZWG3M(:)     = PWG3(:)
00221 ZWGI1M(:)    = PWGI1(:)
00222 ZWGI2M(:)    = PWGI2(:)
00223 
00224 !-------------------------------------------------------------------------------
00225 !
00226 DO JJ=1,SIZE(PTG)
00227 !
00228 !*       1.     New Wsat
00229 !               --------
00230 !
00231   ZWSAT (JJ) = PWSAT(JJ) - ZWGI2M(JJ)      ! per definition ZWGI2M<PWSAT-0.001
00232 !                                             ! then ZWSAT>0.001
00233 !
00234   ZWFC(JJ)   = PWFC(JJ)   * ZWSAT(JJ) / PWSAT(JJ)
00235 !
00236   ZWWILT(JJ) = PWWILT(JJ) * ZWSAT(JJ) / PWSAT(JJ)
00237 !
00238 !
00239 !                                           evaporation rates
00240 !
00241   ZETR(JJ) = PLETR(JJ) / XLVTT
00242 !
00243 ! Remove sublimation from total soil evaporation: this is done
00244 ! because ZEG is a liquid water sink term. Sublimation
00245 ! is removed from the surface ice tendency equation (below):
00246 ! PLEG represents the total of sublimation and evaporation.
00247 ! Also, add an additional possible correction which is used if
00248 ! evaporation from the snow surface exceeds the last amount of
00249 ! snow on the surface as the snow completely ablates (this
00250 ! is a very small term and is generally negligible HOWEVER
00251 ! it is retained here for a high order water budget):
00252 !
00253   ZEG(JJ)  = PLEG(JJ) / XLVTT + PEVAPCOR(JJ)
00254 !
00255 !-------------------------------------------------------------------------------
00256 !
00257 !*       4.     EVOLUTION OF THE SUPERFICIAL WATER CONTENT WG1
00258 !               ----------------------------------------------
00259 !
00260 !                                           updated values for wg 
00261 !
00262   PWG1(JJ) = (PWG1(JJ) - PTSTEP * (PC1(JJ) * (ZEG(JJ) - PPG(JJ)) / XRHOLW    &
00263                                 -  PC2(JJ) * PWGEQ(JJ) / XDAY) )            &
00264               / (1. + PTSTEP * PC2(JJ) / XDAY)  
00265 !
00266 !
00267 ENDDO
00268 !
00269 IF(HKSAT=='SGH' .OR. HKSAT=='EXP') THEN
00270   ZWLIM2(:)=ZWWILT(:)
00271   ZWLIM3(:)=PWWILT(:)
00272 ELSE
00273   ZWLIM2(:)=XWGMIN
00274   ZWLIM3(:)=XWGMIN
00275 ENDIF
00276 !
00277 !-------------------------------------------------------------------------------
00278 !
00279 !*       5.     EVOLUTION OF THE DEEP WATER CONTENT WG2 and WG3
00280 !               -----------------------------------------------
00281 !
00282 !*       5.1    2-L ISBA version
00283 !               ----------------
00284 !
00285 IF (HISBA=='2-L') THEN
00286 ! 
00287   DO JJ=1,SIZE(PTG)
00288 
00289 !
00290     PWG2(JJ) = ZWG2M(JJ) - PTSTEP*(ZEG(JJ) + ZETR(JJ) - PPG(JJ))   &
00291                   / (PD_G2(JJ) * XRHOLW)  
00292 !
00293 !*       6.     DRAINAGE FROM THE DEEP SOIL
00294 !               ------------------
00295 !
00296     ZWDRAIN(JJ)   = PWDRAIN(JJ) * MAX(0.0, MIN(ZWFC(JJ),PWG2(JJ))-ZWLIM2(JJ))/(ZWFC(JJ)-ZWLIM2(JJ))
00297 
00298     ZDRAIN2(JJ)   =  MAX( MIN(ZWDRAIN(JJ),PWG2(JJ)) , PWG2(JJ)-ZWFC(JJ) )*PC3(JJ,1)      &
00299                       / (PD_G2(JJ)*XDAY) * PTSTEP  
00300 !
00301 !                                      the deep-soil volumetric water content w2
00302 !                                      is modified consequently
00303 !
00304     PWG2(JJ)    = PWG2(JJ) - ZDRAIN2(JJ)
00305 
00306     PDRAIN(JJ)  = ZDRAIN2(JJ)*PD_G2(JJ)*XRHOLW/PTSTEP  ! Final output units: kg m-2 s-1
00307 !
00308   ENDDO
00309 !
00310 ELSE
00311 !
00312   DO JJ=1,SIZE(PTG)
00313 
00314 !*       5.2    3-L ISBA version (with only 2 active layers)
00315 !               ----------------
00316 !
00317     IF (PD_G2(JJ) >= PD_G3(JJ)) THEN
00318 
00319       PWG2(JJ) = ZWG2M(JJ) - PTSTEP*(ZEG(JJ) + ZETR(JJ) - PPG(JJ))   &
00320                     / (PD_G2(JJ) * XRHOLW)  
00321 
00322 !*       6.     DRAINAGE FROM THE DEEP SOIL
00323 !               ------------------
00324 !                                      when w2 > wfc, there is drainage
00325 !
00326       ZWDRAIN(JJ) = PWDRAIN(JJ) * MAX(0.0, MIN(ZWFC(JJ),PWG2(JJ))-ZWLIM2(JJ))/(ZWFC(JJ)-ZWLIM2(JJ))
00327 
00328       ZDRAIN2(JJ) = MAX( MIN(ZWDRAIN(JJ),PWG2(JJ)) , PWG2(JJ)-ZWFC(JJ) )*PC3(JJ,1)        &
00329                    / (PD_G2(JJ)*XDAY) * PTSTEP  
00330 
00331       PWG2(JJ)    = PWG2(JJ) -  ZDRAIN2(JJ)
00332       PWG3(JJ)    = PWG2(JJ)
00333 
00334       PDRAIN(JJ)  = ZDRAIN2(JJ)*PD_G2(JJ)*XRHOLW/PTSTEP  ! Final output units: kg m-2 s-1
00335 !
00336     ELSE
00337 !
00338 !*       5.3    3-L ISBA version (with 3 active layers)
00339 !               ----------------
00340 !
00341 ! Linear drainage term check (m3 m-3):
00342 ! Use a linear scaling to prevent it from completely drying out the soil. This
00343 ! term will, under most conditions, not result in such a drying. Until a more
00344 ! rhobust (but more complicated) method is developed for maintaining a minimum river
00345 ! flow under dry conditions, this method will be used.
00346 !
00347       ZWDRAIN2(JJ)   = PWDRAIN(JJ)* MAX(0.0, MIN(ZWFC(JJ),ZWG2M(JJ))-ZWLIM2(JJ))/(ZWFC(JJ)-ZWLIM2(JJ))
00348       ZWDRAIN3(JJ)   = PWDRAIN(JJ)* MAX(0.0, MIN(PWFC(JJ),ZWG3M(JJ))-ZWLIM3(JJ))/(PWFC(JJ)-ZWLIM3(JJ))
00349 !
00350 ! Delta functions:
00351 !
00352       ZDELTA2(JJ)    = 0.0
00353       IF ( ZWG2M(JJ) - ZWFC(JJ) > ZWDRAIN2(JJ) ) ZDELTA2(JJ) = 1.0
00354   !
00355       ZDELTA3(JJ)    = 0.0
00356       IF ( ZWG3M(JJ) - PWFC(JJ) > ZWDRAIN3(JJ) ) ZDELTA3(JJ) = 1.0
00357   !
00358   !
00359 
00360 ! evaluate inter-facial water content, grid factor, and diffusion coefficient:
00361 
00362       ZWAVG(JJ)     = ( ( (ZWG2M(JJ)**6)* PD_G2(JJ)          +                       &
00363                            (ZWG3M(JJ)**6)*(PD_G3(JJ)-PD_G2(JJ)) )/PD_G3(JJ) )**(1./6.)  
00364 
00365       ZFACTOR(JJ)   = PD_G2(JJ)/(PD_G3(JJ)-PD_G2(JJ))
00366 
00367       ZC4    (JJ)   = PC4REF(JJ)*(ZWAVG(JJ)**PC4B(JJ))                &
00368                      *(10.**(-PC4B(JJ)*PWGI2(JJ)/(PWSAT(JJ)-XWGMIN)))  
00369 !
00370 ! calculate sources/sinks
00371 !
00372       ZSINK2 (JJ)   = -(ZEG(JJ) + ZETR(JJ) - PPG(JJ) )/(PD_G2(JJ)*XRHOLW)
00373 
00374 ! Compute evolution of water content using linearized equations
00375 ! (see Boone 2000, Appendix F.2 for details)
00376 !
00377 ! sink terms are treated explicitly, other terms are implicit
00378 !
00379       ZDRAINCF2(JJ) = PC3(JJ,1) / (PD_G2(JJ) * XDAY)
00380       ZDELTA22(JJ)  = ZDELTA2(JJ)*ZWFC(JJ) - (1.0-ZDELTA2(JJ))*ZWDRAIN2(JJ)
00381       ZC2(JJ)       = 1.0 + PTSTEP*(ZDELTA2(JJ)*ZDRAINCF2(JJ) + (ZC4(JJ)/XDAY)) 
00382       ZB2(JJ)       = PTSTEP*ZC4(JJ)/(XDAY*ZC2(JJ))
00383       ZA2(JJ)       = ( ZWG2M(JJ) + PTSTEP*(ZSINK2(JJ) + ZDRAINCF2(JJ)*ZDELTA22(JJ)) )/ZC2(JJ)
00384 !
00385       ZDRAINCF3(JJ) = PC3(JJ,2) / ( (PD_G3(JJ)-PD_G2(JJ)) * XDAY)
00386       ZDELTA33(JJ)  = ZDELTA3(JJ)*PWFC(JJ) - (1.0-ZDELTA3(JJ))*ZWDRAIN3(JJ)
00387       ZC3(JJ)       = 1.0 + PTSTEP*(ZDELTA3(JJ)*ZDRAINCF3(JJ) + ZFACTOR(JJ)*(ZC4(JJ)/XDAY)) 
00388       ZB3(JJ)       = PTSTEP*ZFACTOR(JJ)*(ZDELTA2(JJ)*ZDRAINCF2(JJ) + (ZC4(JJ)/XDAY) )/ZC3(JJ)
00389       ZA3(JJ)       = ( ZWG3M(JJ) + PTSTEP*(                                                 &
00390                          - ZFACTOR(JJ)*ZDRAINCF2(JJ)*ZDELTA22(JJ)                               &
00391                          +            ZDRAINCF3(JJ)*ZDELTA33(JJ)) )/ZC3(JJ)  
00392 !
00393 ! Advance volumetric water content values in time:
00394 ! system of 2 linear equations:
00395 !
00396       PWG2(JJ)      = ( ZA2(JJ)+ZB2(JJ)*ZA3(JJ) )/(1.0 - ZB2(JJ)*ZB3(JJ))
00397       PWG3(JJ)      = ZA3(JJ) + ZB3(JJ)*PWG2(JJ)
00398 !
00399 ! Drainage (kg m-2 s-1): this term is implicit and is extracted directly from
00400 !                        the drainage computation in the above equations.
00401 !
00402       ZWDRAIN(JJ)   = (XRHOLW*PC3(JJ,2)/XDAY)*                                                 &
00403                        ( ZDELTA3(JJ)*(PWG3(JJ)-PWFC(JJ)) + (1.0-ZDELTA3(JJ))*ZWDRAIN3(JJ) )  
00404 !
00405 ! As drainage is implicit, perform a check to prevent any negative drainage
00406 ! (can arise rarely and is generally negligible, but to ensure a high order conservation):
00407 !
00408       PDRAIN(JJ)    = MAX(0.0, ZWDRAIN(JJ))
00409       PWG3(JJ)      = PWG3(JJ) + (PDRAIN(JJ) - ZWDRAIN(JJ))*PTSTEP/((PD_G3(JJ)-PD_G2(JJ))*XRHOLW)
00410 !
00411     ENDIF
00412   ENDDO
00413 END IF
00414 !
00415 !-------------------------------------------------------------------------------
00416 !
00417 DO JJ=1,SIZE(PTG)
00418 !*       7.     EFFECT OF THE MELTING/FREEZING ON THE SOIL WATER CONTENT
00419 !               --------------------------------------------------------
00420 !
00421 !*       7.1    Effect on surface water liquid and ice reservoirs
00422 !               -------------------------------------------------
00423 !
00424 ! First, advance the surface layer ice content using the time tendency
00425 ! and sublimation (*heat effect* of sublimation already accounted
00426 ! for in latent heat flux calculation):
00427 !           
00428   PWGI1(JJ) = ZWGI1M(JJ) + PDWGI1(JJ) - PLEGI(JJ)*PTSTEP/(XLSTT*PD_G1(JJ)*XRHOLW)
00429 !
00430 ! Next, update the liquid water content:
00431 !
00432   PWG1(JJ)  = PWG1(JJ)  - PDWGI1(JJ) 
00433 !
00434 ! Make sure that ice has not dropped below
00435 ! zero due to sublimation (the ONLY way
00436 ! it can drop below 0). If it has, then
00437 ! freeze the needed liquid water (thus warming the
00438 ! layer) to ensure sublimation is accomodated,
00439 ! then extract this from liquid water store.
00440 ! This is a correction used ONLY when last traces
00441 ! of soil ice sublimate within a model time step.
00442 !
00443   ZEXCESSFC(JJ)= 0.0
00444 !
00445   ZEXCESSF(JJ) = MAX(0.0, - PWGI1(JJ))
00446   PWG1(JJ)     = PWG1(JJ)  - ZEXCESSF(JJ)
00447   PWGI1(JJ)    = PWGI1(JJ) + ZEXCESSF(JJ)
00448   ZEXCESSFC(JJ)= ZEXCESSFC(JJ) - ZEXCESSF(JJ)
00449 !
00450 ! Modif H.Douville 26/08/03 (global scale)
00451 ! Make sure that ice has not raised above 
00452 ! saturation (minus XWGMIN) due to sublimation.
00453 ! If it has, then melt the needed frozen water 
00454 ! (thus cooling the layer) to ensure sublimation
00455 ! is accomodated, then extract this from frozen water store.
00456 !
00457   ZEXCESSF(JJ) = MIN(0.0, PWSAT(JJ) - XWGMIN - PWGI1(JJ))
00458   PWG1(JJ)     = PWG1(JJ)  - ZEXCESSF(JJ)
00459   PWGI1(JJ)    = PWGI1(JJ) + ZEXCESSF(JJ)
00460   ZEXCESSFC(JJ)= ZEXCESSFC(JJ) - ZEXCESSF(JJ)
00461 !
00462 ! Make sure that liquid has not dropped below
00463 ! minimum threshold: this could arise due to
00464 ! evaporation and ice formation. Melt the needed water.
00465 ! Normally simply a budget check, i.e. usually small but accounted
00466 ! for none-the-less to assure high accuracy.
00467 !
00468   ZEXCESSF(JJ) = MAX(0.0, XWGMIN - PWG1(JJ))
00469   PWGI1(JJ)    = PWGI1(JJ)  - ZEXCESSF(JJ)
00470   PWG1(JJ)     = PWG1(JJ)   + ZEXCESSF(JJ)
00471   ZEXCESSFC(JJ)= ZEXCESSFC(JJ) + ZEXCESSF(JJ)
00472 !
00473 ! removes very small values due to computation precision
00474 !
00475   IF(PWGI1(JJ) < 1.0E-10) THEN
00476     ZEXCESSF(JJ) = PWGI1(JJ)
00477     PWG1(JJ)     = PWG1(JJ) + ZEXCESSF(JJ)
00478     PWGI1(JJ)    = 0.0
00479     ZEXCESSFC(JJ)= ZEXCESSFC(JJ) + ZEXCESSF(JJ)
00480   ENDIF
00481 !
00482 ! Cummulative phase change for the ice/liquid budget corrections:
00483 !
00484   PTG(JJ)        = PTG(JJ) - ZEXCESSFC(JJ)*XLMTT*PCT(JJ)*XRHOLW*PD_G1(JJ)
00485 !
00486 !
00487 !*       7.2    Effect on deep-soil liquid and ice reservoirs
00488 !               ---------------------------------------------
00489 !
00490 ! Update the ice content using the ice tendency:
00491 ! Since this reservoir includes surface reservoir, add
00492 ! any changes in ice content due to sublimation:
00493 !
00494   PWGI2(JJ) = ZWGI2M(JJ) + PDWGI2(JJ) - PLEGI(JJ)*PTSTEP/(XLSTT*PD_G2(JJ)*XRHOLW)
00495 !
00496 ! Update the liquid water content:
00497 !
00498   PWG2(JJ)   = PWG2(JJ)   - PDWGI2(JJ)
00499 !
00500 ! Make sure that ice has not dropped below
00501 ! zero due to sublimation (as above).
00502 !
00503   ZEXCESSFC(JJ)= 0.0
00504 !
00505   ZEXCESSF(JJ) = MAX(0.0, -PWGI2(JJ))
00506   PWG2(JJ)     = PWG2(JJ)  - ZEXCESSF(JJ)
00507   PWGI2(JJ)    = PWGI2(JJ) + ZEXCESSF(JJ)
00508   ZEXCESSFC(JJ)= ZEXCESSFC(JJ) - ZEXCESSF(JJ)
00509 !
00510 ! Budget check of minimum threshold for liquid
00511 ! water as for surface: MUCH LESS likely
00512 ! to be utilized, but retained for accuracy
00513 ! in energy and water balance (as above).
00514 !
00515   ZEXCESSF(JJ) = MAX(0.0, XWGMIN - PWG2(JJ))
00516   PWGI2(JJ)    = PWGI2(JJ)  - ZEXCESSF(JJ)
00517   PWG2(JJ)     = PWG2(JJ)   + ZEXCESSF(JJ)
00518   ZEXCESSFC(JJ)= ZEXCESSFC(JJ) + ZEXCESSF(JJ)
00519 !
00520 ! removes very small values due to computation precision
00521 !
00522   IF (PWGI2(JJ) < 1.0E-10 * PTSTEP) THEN
00523       ZEXCESSF(JJ) = PWGI2(JJ)
00524       PWG2 (JJ)    = PWG2(JJ) + ZEXCESSF(JJ)
00525       PWGI2(JJ)    = 0.
00526       ZEXCESSFC(JJ)= ZEXCESSFC(JJ) + ZEXCESSF(JJ)
00527   ENDIF
00528 !
00529 ! Cummulative phase change for the ice/liquid budget corrections:
00530 !
00531   PTG2(JJ) = PTG2(JJ) - ZEXCESSFC(JJ)*XLMTT*PCG(JJ)*XRHOLW*PD_G2(JJ)
00532 !
00533 !
00534 ENDDO
00535 !
00536 IF (LHOOK) CALL DR_HOOK('HYDRO_SOIL',1,ZHOOK_HANDLE)
00537 !-------------------------------------------------------------------------------
00538 !
00539 END SUBROUTINE HYDRO_SOIL