SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/soilstress.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE SOILSTRESS( HISBA, PF2,                                   &
00003                   PROOTFRAC, PWSAT, PWFC, PWWILT,                    &
00004                   PWG, PWGI, KWG_LAYER, PF2WGHT, PF5                 )  
00005 !     ####################################################################
00006 !
00007 !!****  *SOILSTRESS*  
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !
00012 !     Calculates the vegetation stress due to soil water
00013 !         
00014 !     
00015 !!**  METHOD
00016 !!    ------
00017 !
00018 !     Calculates the F2 coefficient.
00019 !     
00020 !
00021 !!    EXTERNAL
00022 !!    --------
00023 !!
00024 !!    none
00025 !!
00026 !!    IMPLICIT ARGUMENTS
00027 !!    ------------------ 
00028 !!
00029 !!    none
00030 !!
00031 !!      
00032 !!    REFERENCE
00033 !!    ---------
00034 !!
00035 !!    Noilhan and Planton (1989)
00036 !!    Belair (1995)
00037 !!      
00038 !!    AUTHOR
00039 !!    ------
00040 !!
00041 !!      S. Belair           * Meteo-France *
00042 !!
00043 !!    MODIFICATIONS
00044 !!    -------------
00045 !!      Original      13/03/95 
00046 !!     (P.Jabouille)  13/11/96    mininum value for ZF1
00047 !!     (V. Masson)    28/08/98    add PF2 for Calvet (1998) CO2 computations
00048 !-------------------------------------------------------------------------------
00049 !
00050 !*       0.     DECLARATIONS
00051 !               ------------
00052 !
00053 !
00054 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00055 USE PARKIND1  ,ONLY : JPRB
00056 !
00057 IMPLICIT NONE
00058 !
00059 !*      0.1    declarations of arguments
00060 !
00061 !
00062  CHARACTER(LEN=*),     INTENT(IN)   :: HISBA   ! type of soil (Force-Restore OR Diffusion)
00063 !                                             ! '2-L'
00064 !                                             ! '3-L'
00065 !                                             ! 'DIF'   ISBA-DF
00066 !
00067 REAL, DIMENSION(:,:), INTENT(IN) :: PROOTFRAC, PWSAT, PWFC, PWWILT,       
00068                                       PWG, PWGI  
00069 !                                     PROOTFRAC = cumulative root fraction (-)
00070 !                                     PWFC      = field capacity profile (m3/m3)
00071 !                                     PWWILT    = wilting point profile (m3/m3)
00072 !                                     PWSAT     = porosity profile (m3/m3)
00073 !                                     PWG       = soil liquid volumetric water content (m3/m3)
00074 !                                     PWGI      = soil frozen volumetric water content (m3/m3)
00075 !
00076 INTEGER, DIMENSION(:), INTENT(IN) :: KWG_LAYER  
00077 !                                    KWG_LAYER = Number of soil moisture layers (DIF option)
00078 !
00079 REAL, DIMENSION(:), INTENT(OUT)  :: PF2      ! water stress coefficient
00080 !
00081 REAL, DIMENSION(:), INTENT(OUT)  :: PF5      ! water stress coefficient for Hv (based on F2):
00082 !                                            ! Verify that Etv=>0 as F2=>0
00083 !
00084 REAL, DIMENSION(:,:), INTENT(OUT):: PF2WGHT  ! water stress coefficient profile (ISBA-DF)
00085 !
00086 !
00087 !*      0.2    declarations of local variables
00088 !
00089 !
00090 REAL, DIMENSION(SIZE(PWFC,1)) ::  ZWFC_AVGZ, ZWSAT_AVGZ, ZWWILT_AVGZ
00091 !                                  ZWFC_AVGZ   = field capacity averaged over entire soil column
00092 !                                  ZWSAT_AVGZ  = porosity averaged over entire soil column
00093 !                                  ZWWILT_AVGZ = wilting point averaged over entire soil column
00094 !
00095 ! ISBA-DF:
00096 !
00097 REAL, DIMENSION(SIZE(PWG,1)) :: ZWSAT, ZWFC, ZWWILT
00098 !                               ZWSAT     = ice-adjusted porosity profile (m3/m3)
00099 !                               ZWFC      = ice-adjusted field capacity profile (m3/m3)
00100 !                               ZWWILT    = ice-adjusted wilting point profile (m3/m3)
00101 !
00102 REAL    :: ZROOTFRACN
00103 !          ZROOTFRACN = Normalized root fraction weights
00104 !
00105 INTEGER :: INI, INL, JJ, JL, IDEPTH
00106 !
00107 !
00108 !*      0.3    declarations of local parameters:
00109 !
00110 REAL, PARAMETER                :: ZDENOM_MIN  = 1.E-6 ! minimum denominator: 
00111 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00112 !                                                     ! numerical factor to prevent division by 0
00113 !-------------------------------------------------------------------------------
00114 !
00115 !*       0.     Initialization of variables:
00116 !               ----------------------------
00117 !
00118 IF (LHOOK) CALL DR_HOOK('SOILSTRESS',0,ZHOOK_HANDLE)
00119 !
00120 INI=SIZE(PWG,1)
00121 INL=MAXVAL(KWG_LAYER(:))
00122 !
00123 PF2    (:)      = 0.0
00124 PF2WGHT(:,:)    = 0.0
00125 !
00126 ZWFC_AVGZ(:)    = 0.
00127 ZWSAT_AVGZ(:)   = 0.
00128 ZWWILT_AVGZ(:)  = 0.
00129 !
00130 !-------------------------------------------------------------------------------
00131 !
00132 !*       2.     THE 'PF2' FACTOR
00133 !               ----------------
00134 !               This factor takes into account the effect
00135 !               of the water stress on the surface
00136 !               resistance
00137 !
00138 ! - For humid soils (> WFC), this factor does not
00139 !   increase the stomatal resistance                                   
00140 ! - The stomatal resistance should be large
00141 !   when the soil is very dry (< WILT)
00142 ! - For intermediate soils it ranges (F2_min =< F2 <= 1):
00143 !   where F2_min is a small numerical threshold
00144 !
00145 IF(HISBA =='DIF')THEN      
00146 !
00147 ! If using the diffusion option, then calculate transpiration weights
00148 ! and the mean root-zone soil water stress factor F2:
00149 !
00150 !---------------------------------------------------------
00151 ! First layer
00152 !---------------------------------------------------------
00153 !
00154 ! Due to the presence of ice, modify soil parameters:
00155   ZWSAT (:) = PWSAT (:,1) - PWGI(:,1)
00156   ZWFC  (:) = PWFC  (:,1) * ZWSAT(:)/PWSAT(:,1)
00157   ZWWILT(:) = PWWILT(:,1) * ZWSAT(:)/PWSAT(:,1)
00158 !
00159 ! Calculate the soil water stress factor for each layer:
00160   PF2WGHT(:,1) = (PWG(:,1)-ZWWILT(:))/(ZWFC(:)-ZWWILT(:))
00161   PF2WGHT(:,1) = MIN( 1.0, MAX( ZDENOM_MIN,PF2WGHT(:,1) ) ) 
00162 !
00163 ! Normalize the transpiration weights by root fraction:
00164   PF2WGHT(:,1) = PROOTFRAC(:,1)*PF2WGHT(:,1)
00165 !
00166 ! Net soil water stress for entire root zone:
00167   PF2(:) = PF2WGHT(:,1)
00168 !
00169 ! Make sure weights stress factor is within limits
00170   PF2WGHT(:,1) = MAX(PF2WGHT(:,1),ZDENOM_MIN*PROOTFRAC(:,1))
00171 !
00172 !---------------------------------------------------------
00173 ! Other layers
00174 !---------------------------------------------------------
00175 !
00176   DO JL=2,INL
00177      DO JJ=1,INI
00178 !
00179       IDEPTH=KWG_LAYER(JJ)
00180       IF(JL<=IDEPTH)THEN
00181 !
00182 !       Due to the presence of ice, modify soil parameters:
00183         ZWSAT (JJ) = PWSAT (JJ,JL) - PWGI(JJ,JL)
00184         ZWFC  (JJ) = PWFC  (JJ,JL) * ZWSAT(JJ)/PWSAT(JJ,JL)
00185         ZWWILT(JJ) = PWWILT(JJ,JL) * ZWSAT(JJ)/PWSAT(JJ,JL)
00186 !
00187 !       Calculate the soil water stress factor for each layer:
00188         PF2WGHT(JJ,JL) = (PWG(JJ,JL)-ZWWILT(JJ))/(ZWFC(JJ)-ZWWILT(JJ))
00189         PF2WGHT(JJ,JL) = MIN( 1.0, MAX( ZDENOM_MIN,PF2WGHT(JJ,JL) ) ) 
00190 !
00191 !       Calculate normalized root fraction weights:
00192         ZROOTFRACN = PROOTFRAC(JJ,JL) - PROOTFRAC(JJ,JL-1)
00193 !
00194 !       Normalize the transpiration weights by root fraction:                                                
00195         PF2WGHT(JJ,JL) = ZROOTFRACN*PF2WGHT(JJ,JL)
00196 !
00197 !       Net soil water stress for entire root zone:
00198         PF2(JJ) = PF2(JJ) + PF2WGHT(JJ,JL)
00199 !
00200 !       Make sure weights stress factor is within limits
00201         PF2WGHT(JJ,JL) = MAX(PF2WGHT(JJ,JL),ZDENOM_MIN*ZROOTFRACN)
00202 !        
00203       ENDIF
00204 !
00205      ENDDO
00206   ENDDO
00207 !
00208 ! Make sure average stress factor is within limits
00209   PF2(:) = MAX(ZDENOM_MIN, MIN(1.0, PF2(:)))
00210 !
00211 ELSE
00212 !
00213 ! When using the Force-Restore (FR) soil option, the soil properties
00214 ! are assumed to be homogeneous in the vertical. Therefore, simply
00215 ! use the properties for the uppermost soil layer when defining
00216 ! soil properties for local computations.
00217 !
00218 ! Due to the presence of ice, modify soil parameters:
00219 !
00220    ZWSAT_AVGZ(:)  = PWSAT(:,1) - PWGI(:,2)
00221    ZWFC_AVGZ(:)   = PWFC(:,1)  *ZWSAT_AVGZ(:)/PWSAT(:,1)
00222    ZWWILT_AVGZ(:) = PWWILT(:,1)*ZWSAT_AVGZ(:)/PWSAT(:,1)
00223 !
00224 ! Compute the water stress factor:
00225 !
00226    PF2(:) = ( PWG(:,2)-ZWWILT_AVGZ(:) ) /  ( ZWFC_AVGZ(:)-ZWWILT_AVGZ(:))
00227    PF2(:) = MAX(ZDENOM_MIN , MIN(1.0, PF2(:)))
00228 !
00229 !
00230 ENDIF
00231 !
00232 ! Function to cause Etv to approach 0 as F2 goes to 0:
00233 !
00234 PF5(:) = MERGE(PF2(:),0.0,PF2(:)>ZDENOM_MIN)
00235 !
00236 IF (LHOOK) CALL DR_HOOK('SOILSTRESS',1,ZHOOK_HANDLE)
00237 !
00238 !-------------------------------------------------------------------------------
00239 !
00240 END SUBROUTINE SOILSTRESS