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