SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/hydro_dt92.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE HYDRO_DT92(PTSTEP,                                 &
00003                               PRUNOFFB, PWWILT,                       &
00004                               PRUNOFFD, PWSAT,                        &
00005                               PWG2, PWGI2,                            &
00006                               PPG, PRUISDT                            )  
00007 !     #####################################################################
00008 !
00009 !!****  *HYDRO_DT92*  
00010 !!
00011 !!    PURPOSE
00012 !!    -------
00013 !
00014 !     Calculates the evolution of the water variables, i.e., the superficial
00015 !     and deep-soil volumetric water content (wg and w2), the equivalent
00016 !     liquid water retained in the vegetation canopy (Wr), the equivalent
00017 !     water of the snow canopy (Ws), and also of the albedo and density of
00018 !     the snow (i.e., ALBS and RHOS).  Also determine the runoff and drainage
00019 !     into the soil.
00020 !         
00021 !     
00022 !!**  METHOD
00023 !!    ------
00024 !
00025 !!    EXTERNAL
00026 !!    --------
00027 !!
00028 !!    none
00029 !!
00030 !!    IMPLICIT ARGUMENTS
00031 !!    ------------------ 
00032 !!
00033 !!
00034 !!      
00035 !!    REFERENCE
00036 !!    ---------
00037 !!
00038 !!    Noilhan and Planton (1989)
00039 !!    Belair (1995)
00040 !!      
00041 !!    AUTHOR
00042 !!    ------
00043 !!
00044 !!      S. Belair           * Meteo-France *
00045 !!
00046 !!    MODIFICATIONS
00047 !!    -------------
00048 !!
00049 !!      Original    14/03/95 
00050 !!                  31/08/98 (V. Masson and F. Habets) add Dumenil et Todini
00051 !!                           runoff scheme
00052 !!                  16/05/02 (A. Boone) comments, F90 code standardization
00053 !-------------------------------------------------------------------------------
00054 !
00055 !*       0.     DECLARATIONS
00056 !               ------------
00057 !
00058 USE MODD_CSTS,ONLY : XRHOLW
00059 !
00060 !
00061 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00062 USE PARKIND1  ,ONLY : JPRB
00063 !
00064 IMPLICIT NONE
00065 !
00066 !*      0.1    declarations of arguments
00067 !
00068 !
00069 !
00070 REAL, INTENT(IN)                  :: PTSTEP
00071 !                                    timestep of the integration (s)
00072 !
00073 REAL, DIMENSION(:), INTENT(IN)    :: PWWILT   ! the wilting point volumetric
00074 !                                             ! water content (m3 m-3)
00075 REAL, DIMENSION(:), INTENT(IN)    :: PRUNOFFB ! slope of the runoff curve (-)
00076 !
00077 !
00078 REAL, DIMENSION(:), INTENT(IN)    :: PRUNOFFD, PWSAT
00079 !                                    PRUNOFFD = soil depth over which degree of saturation
00080 !                                               used for runoff calculation (m)
00081 !                                    PWSAT    = saturation volumetric water content
00082 !                                               of the soil (m3 m-3)
00083 !
00084 REAL, DIMENSION(:), INTENT(IN)    :: PWG2, PWGI2
00085 !                                    PWG2 = bulk root-soil moisture at 't+dt' (m3 m-3)
00086 !                                    PWGI2 = bulk deep-soil ice at 't+dt' (m3 m-3)
00087 !
00088 REAL, DIMENSION(:), INTENT(INOUT) :: PPG       
00089 !                                    PPG = enters as rainfall/Canopy drip/snowmelt 
00090 !                                          throughfall rate, leaves as infiltration
00091 !                                          rate for Force-Restore method, and potential
00092 !                                          infiltration rate for diffusion method (kg m-2 s-1)
00093 REAL, DIMENSION(:), INTENT(OUT)   :: PRUISDT
00094 !                                    PRUISDT = sub-grid surface runoff rate (kg m-2 s-1)
00095 !
00096 !
00097 !*      0.2    declarations of local variables
00098 !
00099 ! 
00100 REAL, DIMENSION(SIZE(PRUNOFFD))    :: ZPAS, ZPG_INI, ZWG2
00101 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00102 !                                     ZWG2   = Total vol. water content
00103 !                                              of layer for calculating runoff (m3 m-3)
00104 !
00105 !-------------------------------------------------------------------------------
00106 !
00107 IF (LHOOK) CALL DR_HOOK('HYDRO_DT92',0,ZHOOK_HANDLE)
00108 ZPAS(:)    = 0.
00109 ZPG_INI(:) = 0.
00110 ZWG2(:)    = 0.
00111 !
00112 PRUISDT(:) = 0.
00113 !
00114 !-------------------------------------------------------------------------------
00115 !
00116 !
00117 !*       1.     Dumenil et Todini (1992)  RUNOFF SCHEME
00118 !               ---------------------------------------
00119 !
00120 ZPG_INI(:)= PPG(:)
00121 !
00122 ZWG2(:)   = MIN(PWSAT(:), PWG2(:) + PWGI2(:)) 
00123 !
00124 ! Setting the expression below to 0 and solving for PG yields the critical throughfall rate:
00125 !
00126 ZPAS(:)   = (1.- (ZWG2(:)-PWWILT(:))/(PWSAT(:)-PWWILT(:)) )**(1./ (1.+PRUNOFFB(:)) ) -   &
00127                 PPG(:)*PTSTEP/(XRHOLW*PRUNOFFD(:) )/( (1. + PRUNOFFB(:))* (PWSAT(:)-PWWILT(:)) )  
00128 !
00129 ZPAS(:)   = MAX(0.0, ZPAS(:))  ! Limit it to within a physical range:
00130 !
00131 ! Surface runoff calculation:
00132 ! If PAS is <= 0 (i.e. throughfall rate is large enough), then method 
00133 ! collapses into a saturated bucket type model.
00134 !
00135 PRUISDT(:)  = PPG(:)*PTSTEP/(XRHOLW*PRUNOFFD(:) ) - ( PWSAT(:)-ZWG2(:) ) &
00136                  + (PWSAT(:)-PWWILT(:))* ( ZPAS(:)**(1.+PRUNOFFB(:)) )  
00137 !
00138 PRUISDT(:) = MAX(0.0, PRUISDT(:))
00139 !
00140 ! Reduce infiltration into the soil by the runoff:
00141 !
00142 PPG(:)     = PPG(:) - PRUISDT(:)/PTSTEP*XRHOLW*PRUNOFFD(:)
00143 !
00144 ! Supress numerical artifacts:
00145 !
00146 WHERE (PPG(:)<=0. .OR. PRUISDT(:)<=0.)
00147   PRUISDT(:) = 0.
00148   PPG(:)     = ZPG_INI(:)
00149 END WHERE
00150 !
00151 ! supress runoff over sufficiently dry soils: HERE chosen to be if the average 
00152 ! water content is less than the wilting point:
00153 !
00154 WHERE (ZWG2(:)<=PWWILT(:)) 
00155   PRUISDT(:) = 0.
00156   PPG(:)     = ZPG_INI(:)
00157 END WHERE
00158 IF (LHOOK) CALL DR_HOOK('HYDRO_DT92',1,ZHOOK_HANDLE)
00159 !
00160 !-------------------------------------------------------------------------------
00161 !
00162 END SUBROUTINE HYDRO_DT92