SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_soc_parameters.F90
Go to the documentation of this file.
00001 !     #########################
00002 SUBROUTINE ISBA_SOC_PARAMETERS (PPATCH,PDG,PSOC,PBCOEF,PMPOTSAT,  &
00003                                 PCONDSAT,PWSAT,PHCAPSOIL,PCONDDRY,&
00004                                 PCONDSLD,PWFC,PWWILT,PFRACSOC     )
00005 !     ########################################################################
00006 !
00007 !!****  *ISBA_SOC_PARAMETERS*  
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !
00012 !    ISBA parameterizations for soil thermal and hydraulic properties 
00013 !    are modified to accommodate both mineral and organic carbon soils
00014 !    according to observations from Boelter (1969).
00015 !     
00016 !!**  METHOD
00017 !!    ------
00018 !
00019 !     Direct calculation
00020 !
00021 !!    EXTERNAL
00022 !!    --------
00023 !
00024 !     None
00025 !!
00026 !!    IMPLICIT ARGUMENTS
00027 !!    ------------------
00028 !!
00029 !!      
00030 !!    REFERENCE
00031 !!    ---------
00032 !!      
00033 !!    AUTHOR
00034 !!    ------
00035 !!      B. Decharme     
00036 !!
00037 !!    MODIFICATIONS
00038 !!    -------------
00039 !!      Original    10/12/11 
00040 !-------------------------------------------------------------------------------
00041 !
00042 USE MODD_SURF_PAR, ONLY : XUNDEF
00043 USE MODD_CSTS,     ONLY : XDAY
00044 !
00045 !*      0.1    declarations of arguments
00046 !
00047 !
00048 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00049 USE PARKIND1  ,ONLY : JPRB
00050 !
00051 IMPLICIT NONE
00052 !
00053 REAL, DIMENSION(:,:,:),INTENT(IN)    :: PDG
00054 !
00055 REAL, DIMENSION(:,:),  INTENT(IN)    :: PPATCH
00056 !
00057 REAL, DIMENSION(:,:),  INTENT(IN)    :: PSOC
00058 !
00059 REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PCONDSAT
00060 !
00061 REAL, DIMENSION(:,:),  INTENT(INOUT) :: PBCOEF,PMPOTSAT,    
00062                                         PHCAPSOIL,PCONDDRY, 
00063                                         PCONDSLD
00064 !
00065 REAL, DIMENSION(:,:),  INTENT(INOUT) :: PWSAT,PWFC,PWWILT
00066 !
00067 REAL, DIMENSION(:,:),  INTENT(OUT)   :: PFRACSOC
00068 !
00069 !*      0.2    declarations of local parameter
00070 !
00071 REAL,               PARAMETER :: ZRHO_PEAT = 130.               !Peat density                           (kg.m-3)
00072 REAL, DIMENSION(2), PARAMETER :: ZCONDSAT = (/2.8*8.64,0.00864/)!Peatland hydraulic conductivity        (m/day)
00073 REAL, DIMENSION(2), PARAMETER :: ZBCOEF   = (/2.7,12./)         !Peatland b coef                        (-)
00074 REAL, DIMENSION(2), PARAMETER :: ZMPOTSAT = (/-1.03,-1.01/)     !Peatland matric potential              (cm)
00075 REAL, DIMENSION(2), PARAMETER :: ZWSAT    = (/0.93,0.83/)       !Peatland porosity                      (-)
00076 REAL, DIMENSION(2), PARAMETER :: ZSY      = (/0.655,0.125/)     !Peatland specific yield                (-)
00077 REAL, DIMENSION(2), PARAMETER :: ZWWILT   = (/0.06,0.24/)       !Peatland wilting point                 (-)
00078 REAL,               PARAMETER :: ZHCAPSOIL= 2.51E+6             !Peatland heat capacity                 (J.m–3.K–1)
00079 REAL,               PARAMETER :: ZCONDDRY = 0.05                !Peatland dry thermal conductivity      (W.m–1.K–1)
00080 REAL,               PARAMETER :: ZCONDSLD = 0.25                !Peatland solid conductivity            (W.m–1.K–1)
00081 !
00082 !HWSD data profile
00083 REAL, PARAMETER :: ZDGHWSD_TOP = 0.3
00084 REAL, PARAMETER :: ZDGHWSD_SUB = 1.0
00085 REAL, PARAMETER :: ZDGHWSD_INF = 100.0
00086 !
00087 !Simple peat profile
00088 REAL, PARAMETER :: ZMOSS_DEPTH = 0.01
00089 REAL, PARAMETER :: ZPEAT_PROFILE = 1.0
00090 !
00091 !*      0.3    declarations of local variables
00092 !
00093 REAL, DIMENSION(SIZE(PDG,1))              :: ZMASK
00094 !
00095 REAL, DIMENSION(SIZE(PDG,1))              :: ZRHO_TOP, ZRHO_SUB, ZRHO_INF
00096 !
00097 REAL, DIMENSION(SIZE(PDG,1),SIZE(PDG,2))  :: ZDG_SOIL, ZDZG_SOIL, ZRHO_SOC, ZMID_SOIL
00098 !
00099 REAL, DIMENSION(SIZE(PDG,1),SIZE(PDG,2))  :: ZPEAT_BCOEF,ZPEAT_MPOTSAT,
00100                                              ZPEAT_WSAT,ZPEAT_WFC,     
00101                                              ZPEAT_WWILT
00102 !
00103 REAL, DIMENSION(SIZE(PDG,1),SIZE(PDG,2),SIZE(PDG,3))  :: ZPEAT_CONDSAT, ZMID_CONDSAT
00104 !
00105 REAL :: ZREFDEPTH,ZF_BCOEF,ZF_MPOTSAT,    
00106         ZF_WSAT,ZF_CONDSAT,ZF_SY,ZF_WWILT,
00107         ZA, ZB, ZLOG1, ZLOG2, ZLOG3,      
00108         ZLOG_MOSS,ZLOG_PEAT_DEPTH,        
00109         ZTOP, ZSUB, ZINF, ZFTOP, ZFSUB                                 
00110 !
00111 REAL, DIMENSION(2) :: ZLOG_CONDSAT,ZLOG_BCOEF,ZLOG_MPOTSAT, 
00112                       ZLOG_WSAT,ZLOG_SY,ZLOG_WWILT
00113 !
00114 INTEGER :: INI, INL, INP, JI, JL, JP
00115 !
00116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00117 !
00118 !-------------------------------------------------------------------------------
00119 !
00120 IF (LHOOK) CALL DR_HOOK('ISBA_SOC_PARAMETERS',0,ZHOOK_HANDLE)
00121 !
00122 INI=SIZE(PDG,1)
00123 INL=SIZE(PDG,2)
00124 INP=SIZE(PDG,3)
00125 !
00126 ZMASK    (:)  =0.0
00127 !
00128 ZDG_SOIL (:,:)=0.0
00129 ZRHO_SOC (:,:)=0.0
00130 !
00131 ZPEAT_BCOEF  (:,:  )=0.0
00132 ZPEAT_MPOTSAT(:,:  )=0.0
00133 ZPEAT_WSAT   (:,:  )=0.0
00134 ZPEAT_WFC    (:,:  )=0.0
00135 ZPEAT_WWILT  (:,:  )=0.0
00136 ZPEAT_CONDSAT(:,:,:)=0.0
00137 !
00138 PFRACSOC (:,:)=XUNDEF
00139 !
00140 !-------------------------------------------------------------------------------
00141 !
00142 DO JP=1,INP
00143   DO JI=1,INI
00144      ZMASK(JI)=ZMASK(JI)+PPATCH(JI,JP)
00145   ENDDO
00146 ENDDO
00147 !  
00148 DO JI=1,INI
00149   DO JL=1,INL
00150      IF(ZMASK(JI)>0.0)THEN
00151        ZDG_SOIL (JI,JL)=SUM(PDG(JI,JL,:)*PPATCH(JI,:),PPATCH(JI,:)>0.0) &
00152                        /SUM(PPATCH(JI,:),PPATCH(JI,:)>0.0)
00153      ENDIF
00154   ENDDO
00155 ENDDO
00156 !
00157 ZDZG_SOIL(:,1)=ZDG_SOIL(:,1)
00158 DO JI=1,INI
00159   DO JL=2,INL
00160      ZDZG_SOIL(JI,JL)=ZDG_SOIL(JI,JL)-ZDG_SOIL(JI,JL-1)
00161   ENDDO
00162 ENDDO
00163 !
00164 ZMID_SOIL(:,1)=0.5*ZDG_SOIL(:,1)
00165 WHERE(PPATCH(:,:)/=XUNDEF)
00166      ZMID_CONDSAT(:,1,:)=0.5*PDG(:,1,:)
00167 ENDWHERE
00168 DO JL=2,INL
00169    ZMID_SOIL(:,JL)=0.5*(ZDG_SOIL(:,JL)+ZDG_SOIL(:,JL-1))
00170    WHERE(PPATCH(:,:)/=XUNDEF)
00171         ZMID_CONDSAT(:,JL,:)=0.5*(PDG(:,JL,:)+PDG(:,JL-1,:))
00172    ENDWHERE   
00173 ENDDO
00174 !
00175 !-------------------------------------------------------------------------------
00176 !
00177 ! Compute the SOC density distribution (kg.m-3)
00178 !
00179 ZLOG1=LOG(ZDGHWSD_TOP)
00180 ZLOG2=LOG(ZDGHWSD_SUB)
00181 ZLOG3=LOG(ZDGHWSD_INF)
00182 DO JI=1,INI
00183    ZRHO_TOP(JI) = PSOC(JI,1)/ZDGHWSD_TOP
00184    ZRHO_SUB(JI) = PSOC(JI,2)/(ZDGHWSD_SUB-ZDGHWSD_TOP)
00185    IF(ZRHO_TOP(JI)>ZRHO_SUB(JI))THEN
00186      ZTOP         = PSOC(JI,1)
00187      ZSUB         = PSOC(JI,1)+PSOC(JI,2)
00188      ZA           = (LOG(ZTOP)-LOG(ZSUB))/(ZLOG1-ZLOG2)
00189      ZB           = ZSUB/EXP(ZA*ZLOG2)
00190      ZINF         = ZB*EXP(ZA*ZLOG3)
00191      ZRHO_INF(JI) = (ZINF-ZSUB)/(ZDGHWSD_INF-ZDGHWSD_SUB)
00192    ELSE
00193      ZRHO_INF(JI) = ZRHO_SUB(JI)
00194    ENDIF
00195 ENDDO
00196 !
00197 ! Compute the SOC density distribution (kg.m-3)
00198 !
00199 !
00200 DO JI=1,INI
00201   ZTOP=0.0
00202   ZSUB=0.0
00203   DO JL=1,INL
00204      ZTOP=ZSUB
00205      ZSUB=ZSUB+ZDZG_SOIL(JI,JL)     
00206      IF(ZSUB<=ZDGHWSD_TOP)THEN
00207        ZRHO_SOC(JI,JL)=ZRHO_TOP(JI)
00208      ELSEIF(ZTOP>=ZDGHWSD_TOP.AND.ZSUB<=ZDGHWSD_SUB)THEN
00209        ZRHO_SOC(JI,JL)=ZRHO_SUB(JI)
00210      ELSEIF(ZTOP>=ZDGHWSD_SUB)THEN
00211        ZRHO_SOC(JI,JL)=ZRHO_INF(JI)       
00212      ELSEIF(ZTOP<ZDGHWSD_TOP.AND.ZSUB>ZDGHWSD_TOP)THEN
00213        ZFTOP=MIN(1.0,MAX(0.0,ZDGHWSD_TOP-ZTOP))/(ZSUB-ZTOP)
00214        ZFSUB=MIN(1.0,MAX(0.0,ZSUB-ZDGHWSD_TOP))/(ZSUB-ZTOP)
00215        ZRHO_SOC(JI,JL)=ZFTOP*ZRHO_TOP(JI)+ZFSUB*ZRHO_SUB(JI)
00216      ELSEIF(ZTOP<ZDGHWSD_SUB.AND.ZSUB>ZDGHWSD_SUB)THEN
00217        ZFTOP=MIN(1.0,MAX(0.0,ZDGHWSD_SUB-ZTOP))/(ZSUB-ZTOP)
00218        ZFSUB=MIN(1.0,MAX(0.0,ZSUB-ZDGHWSD_SUB))/(ZSUB-ZTOP)
00219        ZRHO_SOC(JI,JL)=ZFTOP*ZRHO_SUB(JI)+ZFSUB*ZRHO_INF(JI)
00220      ENDIF
00221   ENDDO
00222 ENDDO 
00223 !
00224 !-------------------------------------------------------------------------------
00225 !
00226 ! Compute the Peatland soil properties profile
00227 !
00228 ZLOG_MOSS       = LOG(ZMOSS_DEPTH)
00229 ZLOG_PEAT_DEPTH = LOG(ZPEAT_PROFILE)
00230 !
00231 ZLOG_CONDSAT(:) = LOG(ZCONDSAT (:))
00232 ZLOG_BCOEF  (:) = LOG(ZBCOEF   (:))
00233 ZLOG_MPOTSAT(:) = LOG(-ZMPOTSAT(:))
00234 ZLOG_WSAT   (:) = LOG(ZWSAT    (:))
00235 ZLOG_SY     (:) = LOG(ZSY      (:))
00236 ZLOG_WWILT  (:) = LOG(ZWWILT   (:))
00237 !
00238 ZF_CONDSAT =(ZLOG_CONDSAT(2)-ZLOG_CONDSAT(1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00239 ZF_BCOEF   =(ZLOG_BCOEF  (2)-ZLOG_BCOEF  (1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00240 ZF_MPOTSAT =(ZLOG_MPOTSAT(2)-ZLOG_MPOTSAT(1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00241 ZF_WSAT    =(ZLOG_WSAT   (2)-ZLOG_WSAT   (1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00242 ZF_SY      =(ZLOG_SY     (2)-ZLOG_SY     (1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00243 ZF_WWILT   =(ZLOG_WWILT  (2)-ZLOG_WWILT  (1))/(ZLOG_PEAT_DEPTH-ZLOG_MOSS)
00244 !
00245 DO JL=1,INL
00246    DO JI=1,INI
00247      IF(ZMASK(JI)>0.0)THEN
00248 !      
00249       ZREFDEPTH=MIN(ZPEAT_PROFILE,MAX(ZMOSS_DEPTH,ZMID_SOIL(JI,JL)))
00250       ZREFDEPTH=LOG(ZREFDEPTH)-ZLOG_MOSS  
00251       ZPEAT_MPOTSAT(JI,JL)=ZMPOTSAT(1)*EXP(ZF_MPOTSAT*ZREFDEPTH)*1.E-2 !cm to m  
00252       ZPEAT_WSAT   (JI,JL)=ZWSAT   (1)*EXP(ZF_WSAT   *ZREFDEPTH)
00253       ZPEAT_BCOEF  (JI,JL)=ZBCOEF  (1)*EXP(ZF_BCOEF  *ZREFDEPTH)
00254       ZPEAT_WWILT  (JI,JL)=ZWWILT  (1)*EXP(ZF_WWILT  *ZREFDEPTH)
00255 !
00256       ZPEAT_WFC    (JI,JL)=ZPEAT_WSAT(JI,JL)-ZSY(1)*EXP(ZF_SY*ZREFDEPTH)
00257 !
00258       DO JP=1,INP
00259          IF(PPATCH(JI,JP)/=XUNDEF)THEN
00260            ZREFDEPTH=MIN(ZPEAT_PROFILE,MAX(ZMOSS_DEPTH,ZMID_CONDSAT(JI,JL,JP)))
00261            ZREFDEPTH=LOG(ZREFDEPTH)-ZLOG_MOSS                       
00262            ZPEAT_CONDSAT(JI,JL,JP)=ZCONDSAT(1)*EXP(ZF_CONDSAT*ZREFDEPTH)/XDAY
00263          ENDIF
00264       ENDDO
00265 !      
00266      ENDIF
00267    ENDDO
00268 ENDDO
00269 !
00270 !-------------------------------------------------------------------------------
00271 !
00272 DO JL=1,INL
00273    DO JI=1,INI
00274      IF(ZMASK(JI)>0.0)THEN
00275 !      Soil organic carbon fraction
00276        PFRACSOC (JI,JL  ) = MIN(1.0,ZRHO_SOC(JI,JL)/ZRHO_PEAT)             
00277 !      New soil thermal properties      
00278        PHCAPSOIL(JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PHCAPSOIL(JI,JL) + PFRACSOC(JI,JL)*ZHCAPSOIL
00279        PCONDDRY (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PCONDDRY (JI,JL) + PFRACSOC(JI,JL)*ZCONDDRY
00280        PCONDSLD (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PCONDSLD (JI,JL) + PFRACSOC(JI,JL)*ZCONDSLD
00281 !      New soil hydraulic properties
00282        PBCOEF   (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PBCOEF   (JI,JL) + PFRACSOC(JI,JL)*ZPEAT_BCOEF  (JI,JL) 
00283        PMPOTSAT (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PMPOTSAT (JI,JL) + PFRACSOC(JI,JL)*ZPEAT_MPOTSAT(JI,JL)
00284        PWSAT    (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PWSAT    (JI,JL) + PFRACSOC(JI,JL)*ZPEAT_WSAT   (JI,JL)  
00285        PWFC     (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PWFC     (JI,JL) + PFRACSOC(JI,JL)*ZPEAT_WFC    (JI,JL)
00286        PWWILT   (JI,JL  ) = (1.0-PFRACSOC(JI,JL))*PWWILT   (JI,JL) + PFRACSOC(JI,JL)*ZPEAT_WWILT  (JI,JL)  
00287        DO JP=1,INP
00288           IF(PPATCH(JI,JP)/=XUNDEF)THEN
00289             PCONDSAT (JI,JL,JP) = (1.0-PFRACSOC(JI,JL))*PCONDSAT(JI,JL,JP)+PFRACSOC(JI,JL)*ZPEAT_CONDSAT(JI,JL,JP)
00290           ENDIF
00291        ENDDO
00292      ENDIF
00293    ENDDO   
00294 ENDDO
00295 !
00296 !-------------------------------------------------------------------------------
00297 !
00298 IF (LHOOK) CALL DR_HOOK('ISBA_SOC_PARAMETERS',1,ZHOOK_HANDLE)
00299 !
00300 END SUBROUTINE ISBA_SOC_PARAMETERS
00301 
00302 
00303 
00304 
00305