SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 MODULE MODE_SOIL 00003 ! ################ 00004 ! 00005 !!**** *MODE_SOIL * - contains soil characteristics functions 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! All clay and sand proportions are given in FRACTION!!! 00014 !! (not in percentages). 00015 !! 00016 !! 00017 !! EXTERNAL 00018 !! -------- 00019 !! 00020 !! IMPLICIT ARGUMENTS 00021 !! ------------------ 00022 !! 00023 !! REFERENCE 00024 !! --------- 00025 !! Book2 of the documentation (routine READ_GR_FIELD) 00026 !! 00027 !! 00028 !! AUTHOR 00029 !! ------ 00030 !! V. Masson * Meteo France * 00031 !! 00032 !! MODIFICATIONS 00033 !! ------------- 00034 !! Original 3/12/98 00035 !----------------------------------------------------------------------------- 00036 ! 00037 !* 0. DECLARATIONS 00038 ! 00039 ! 00040 ! 00041 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00042 USE PARKIND1 ,ONLY : JPRB 00043 ! 00044 INTERFACE WSAT_FUNC 00045 MODULE PROCEDURE WSAT_FUNC_2D 00046 MODULE PROCEDURE WSAT_FUNC_1D 00047 END INTERFACE 00048 INTERFACE WWILT_FUNC 00049 MODULE PROCEDURE WWILT_FUNC_2D 00050 MODULE PROCEDURE WWILT_FUNC_1D 00051 END INTERFACE 00052 INTERFACE WFC_FUNC 00053 MODULE PROCEDURE WFC_FUNC_2D 00054 MODULE PROCEDURE WFC_FUNC_1D 00055 END INTERFACE 00056 INTERFACE W33_FUNC 00057 MODULE PROCEDURE W33_FUNC_2D 00058 MODULE PROCEDURE W33_FUNC_1D 00059 END INTERFACE 00060 INTERFACE BCOEF_FUNC 00061 MODULE PROCEDURE BCOEF_FUNC_2D 00062 MODULE PROCEDURE BCOEF_FUNC_1D 00063 END INTERFACE 00064 INTERFACE MATPOTSAT_FUNC 00065 MODULE PROCEDURE MATPOTSAT_FUNC_2D 00066 MODULE PROCEDURE MATPOTSAT_FUNC_1D 00067 END INTERFACE 00068 INTERFACE HYDCONDSAT_FUNC 00069 MODULE PROCEDURE HYDCONDSAT_FUNC_2D 00070 MODULE PROCEDURE HYDCONDSAT_FUNC_1D 00071 END INTERFACE 00072 INTERFACE CGSAT_FUNC 00073 MODULE PROCEDURE CGSAT_FUNC_2D 00074 MODULE PROCEDURE CGSAT_FUNC_1D 00075 END INTERFACE 00076 INTERFACE C1SAT_FUNC 00077 MODULE PROCEDURE C1SAT_FUNC_2D 00078 MODULE PROCEDURE C1SAT_FUNC_1D 00079 END INTERFACE 00080 INTERFACE C2REF_FUNC 00081 MODULE PROCEDURE C2REF_FUNC_2D 00082 MODULE PROCEDURE C2REF_FUNC_1D 00083 END INTERFACE 00084 INTERFACE C3_FUNC 00085 MODULE PROCEDURE C3_FUNC_2D 00086 MODULE PROCEDURE C3_FUNC_1D 00087 END INTERFACE 00088 INTERFACE C4B_FUNC 00089 MODULE PROCEDURE C4B_FUNC_2D 00090 MODULE PROCEDURE C4B_FUNC_1D 00091 END INTERFACE 00092 INTERFACE C4REF_FUNC 00093 MODULE PROCEDURE C4REF_FUNC_2D 00094 MODULE PROCEDURE C4REF_FUNC_1D 00095 END INTERFACE 00096 INTERFACE ACOEF_FUNC 00097 MODULE PROCEDURE ACOEF_FUNC_2D 00098 MODULE PROCEDURE ACOEF_FUNC_1D 00099 END INTERFACE 00100 INTERFACE PCOEF_FUNC 00101 MODULE PROCEDURE PCOEF_FUNC_2D 00102 MODULE PROCEDURE PCOEF_FUNC_1D 00103 END INTERFACE 00104 ! 00105 !------------------------------------------------------------------------------- 00106 CONTAINS 00107 ! 00108 FUNCTION WSAT_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00109 USE MODD_SURF_PAR, ONLY : XUNDEF 00110 IMPLICIT NONE 00111 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00112 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00113 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00114 REAL, DIMENSION(SIZE(PSAND,1),SIZE(PSAND,2)) :: WSAT_FUNC_2D 00115 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00116 ! 00117 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WSAT_FUNC_2D',0,ZHOOK_HANDLE) 00118 SELECT CASE (HPEDOTF) 00119 CASE ('CH78') 00120 WHERE(PSAND/=XUNDEF) WSAT_FUNC_2D = 0.001 * (-108.*PSAND+494.305) 00121 CASE ('CO84') 00122 WHERE(PSAND/=XUNDEF) WSAT_FUNC_2D = 0.505-0.142*PSAND-0.037*PCLAY 00123 END SELECT 00124 ! 00125 WHERE (PSAND==XUNDEF) WSAT_FUNC_2D = XUNDEF 00126 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WSAT_FUNC_2D',1,ZHOOK_HANDLE) 00127 ! 00128 END FUNCTION WSAT_FUNC_2D 00129 ! 00130 ! 00131 ! 00132 FUNCTION WWILT_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00133 USE MODD_SURF_PAR, ONLY : XUNDEF 00134 IMPLICIT NONE 00135 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00136 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00137 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00138 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: WWILT_FUNC_2D 00139 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00140 ! 00141 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WWILT_FUNC_2D',0,ZHOOK_HANDLE) 00142 SELECT CASE (HPEDOTF) 00143 CASE ('CH78') 00144 WHERE(PCLAY/=XUNDEF) WWILT_FUNC_2D = 37.1342E-3*(PCLAY*100.)**0.5 00145 CASE ('CO84') 00146 WHERE(PCLAY/=XUNDEF) & 00147 WWILT_FUNC_2D = 0.15333-0.147*PSAND+0.33*PCLAY-0.102*(PCLAY**2) 00148 END SELECT 00149 00150 WHERE (PCLAY==XUNDEF) WWILT_FUNC_2D = XUNDEF 00151 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WWILT_FUNC_2D',1,ZHOOK_HANDLE) 00152 ! 00153 END FUNCTION WWILT_FUNC_2D 00154 ! 00155 ! 00156 ! 00157 FUNCTION WFC_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00158 USE MODD_SURF_PAR, ONLY : XUNDEF 00159 IMPLICIT NONE 00160 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00161 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00162 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00163 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: WFC_FUNC_2D 00164 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00165 ! 00166 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WFC_FUNC_2D',0,ZHOOK_HANDLE) 00167 SELECT CASE (HPEDOTF) 00168 CASE ('CH78') 00169 WHERE(PCLAY/=XUNDEF) WFC_FUNC_2D = 89.0467E-3*(PCLAY*100.)**0.3496 00170 CASE ('CO84') 00171 WHERE(PCLAY/=XUNDEF) & 00172 WFC_FUNC_2D = 0.1537-0.1233*PSAND+0.2685*PCLAY**(1./3.) 00173 END SELECT 00174 00175 WHERE (PCLAY==XUNDEF) WFC_FUNC_2D = XUNDEF 00176 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WFC_FUNC_2D',1,ZHOOK_HANDLE) 00177 ! 00178 END FUNCTION WFC_FUNC_2D 00179 ! 00180 ! 00181 ! 00182 FUNCTION W33_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00183 USE MODD_SURF_PAR, ONLY : XUNDEF 00184 IMPLICIT NONE 00185 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00186 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00187 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00188 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: W33_FUNC_2D 00189 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00190 ! 00191 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:W33_FUNC_2D',0,ZHOOK_HANDLE) 00192 SELECT CASE (HPEDOTF) 00193 CASE ('CH78') 00194 WHERE(PCLAY/=XUNDEF) & 00195 W33_FUNC_2D = 0.3005674207-0.4725429691*PSAND+0.2080416963*PCLAY & 00196 + 0.3055907979*PSAND**(1./3.)-0.1202046909*PCLAY**(1./3.) 00197 CASE ('CO84') 00198 WHERE(PCLAY/=XUNDEF) & 00199 W33_FUNC_2D = 0.2016592588-0.5785747196*PSAND+0.1113006987*PCLAY & 00200 + 0.4305771483*PSAND**(1./3.)-0.0080618093*PCLAY**(1./3.) 00201 END SELECT 00202 00203 WHERE (PCLAY==XUNDEF) W33_FUNC_2D = XUNDEF 00204 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:W33_FUNC_2D',1,ZHOOK_HANDLE) 00205 ! 00206 END FUNCTION W33_FUNC_2D 00207 ! 00208 ! 00209 ! 00210 FUNCTION BCOEF_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00211 USE MODD_SURF_PAR, ONLY : XUNDEF 00212 IMPLICIT NONE 00213 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00214 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00215 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00216 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: BCOEF_FUNC_2D 00217 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00218 ! 00219 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:BCOEF_FUNC_2D',0,ZHOOK_HANDLE) 00220 SELECT CASE (HPEDOTF) 00221 CASE ('CH78') 00222 WHERE (PCLAY/=XUNDEF) BCOEF_FUNC_2D = 13.7*PCLAY + 3.501 00223 CASE ('CO84') 00224 WHERE (PCLAY/=XUNDEF) BCOEF_FUNC_2D = 3.10+15.7*PCLAY-0.3*PSAND 00225 END SELECT 00226 00227 WHERE (PCLAY==XUNDEF) BCOEF_FUNC_2D = XUNDEF 00228 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:BCOEF_FUNC_2D',1,ZHOOK_HANDLE) 00229 ! 00230 END FUNCTION BCOEF_FUNC_2D 00231 ! 00232 ! 00233 ! 00234 FUNCTION MATPOTSAT_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00235 USE MODD_SURF_PAR, ONLY : XUNDEF 00236 IMPLICIT NONE 00237 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00238 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00239 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00240 REAL, DIMENSION(SIZE(PSAND,1),SIZE(PSAND,2)) :: MATPOTSAT_FUNC_2D 00241 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00242 ! 00243 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:MATPOTSAT_FUNC_2D',0,ZHOOK_HANDLE) 00244 SELECT CASE (HPEDOTF) 00245 CASE ('CH78') 00246 WHERE(PSAND/=XUNDEF) MATPOTSAT_FUNC_2D = -0.01*(10.**(1.85 - 0.88*PSAND)) 00247 CASE ('CO84') 00248 WHERE(PSAND/=XUNDEF) & 00249 MATPOTSAT_FUNC_2D = -0.01*(10.0**(1.54-0.95*PSAND+0.63*(1.-PSAND-PCLAY))) 00250 END SELECT 00251 00252 WHERE (PSAND==XUNDEF) MATPOTSAT_FUNC_2D = XUNDEF 00253 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:MATPOTSAT_FUNC_2D',1,ZHOOK_HANDLE) 00254 ! 00255 END FUNCTION MATPOTSAT_FUNC_2D 00256 ! 00257 ! 00258 FUNCTION HYDCONDSAT_FUNC_2D(PCLAY,PSAND,HPEDOTF) 00259 USE MODD_SURF_PAR, ONLY : XUNDEF 00260 IMPLICIT NONE 00261 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00262 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00263 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00264 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: HYDCONDSAT_FUNC_2D 00265 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00266 ! 00267 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:HYDCONDSAT_FUNC_2D',0,ZHOOK_HANDLE) 00268 SELECT CASE (HPEDOTF) 00269 CASE ('CH78') 00270 WHERE(PCLAY/=XUNDEF) 00271 HYDCONDSAT_FUNC_2D = 1.0e-6*(10.0**(0.161874E+01 & 00272 - 0.581989E+01*PCLAY(:,:) - 0.907123E-01*PSAND(:,:) & 00273 + 0.529268E+01*PCLAY(:,:)**2 + 0.120332E+01*PSAND(:,:)**2)) 00274 END WHERE 00275 CASE ('CO84') 00276 WHERE(PCLAY/=XUNDEF) & 00277 HYDCONDSAT_FUNC_2D = 0.0254*(10.0**(-0.6+1.26*PSAND-0.64*PCLAY))/3600. 00278 END SELECT 00279 ! 00280 WHERE(PCLAY==XUNDEF) HYDCONDSAT_FUNC_2D = XUNDEF 00281 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:HYDCONDSAT_FUNC_2D',1,ZHOOK_HANDLE) 00282 ! 00283 END FUNCTION HYDCONDSAT_FUNC_2D 00284 ! 00285 ! 00286 ! 00287 FUNCTION CGSAT_FUNC_2D(PCLAY,PSAND) 00288 USE MODD_SURF_PAR, ONLY : XUNDEF 00289 IMPLICIT NONE 00290 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00291 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00292 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: CGSAT_FUNC_2D 00293 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00294 ! 00295 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:CGSAT_FUNC_2D',0,ZHOOK_HANDLE) 00296 WHERE (PCLAY/=XUNDEF) 00297 CGSAT_FUNC_2D = ( -1.5571*PSAND - 1.441*PCLAY + 4.70217 )*1.E-6 00298 ELSEWHERE 00299 CGSAT_FUNC_2D = XUNDEF 00300 END WHERE 00301 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:CGSAT_FUNC_2D',1,ZHOOK_HANDLE) 00302 ! 00303 END FUNCTION CGSAT_FUNC_2D 00304 ! 00305 ! 00306 ! 00307 FUNCTION C1SAT_FUNC_2D(PCLAY) 00308 USE MODD_SURF_PAR, ONLY : XUNDEF 00309 IMPLICIT NONE 00310 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00311 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: C1SAT_FUNC_2D 00312 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00313 ! 00314 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C1SAT_FUNC_2D',0,ZHOOK_HANDLE) 00315 WHERE (PCLAY/=XUNDEF) 00316 C1SAT_FUNC_2D = 0.01*(558.*PCLAY+84.88) 00317 ELSEWHERE 00318 C1SAT_FUNC_2D = XUNDEF 00319 END WHERE 00320 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C1SAT_FUNC_2D',1,ZHOOK_HANDLE) 00321 ! 00322 END FUNCTION C1SAT_FUNC_2D 00323 ! 00324 ! 00325 ! 00326 FUNCTION C2REF_FUNC_2D(PCLAY) 00327 USE MODD_SURF_PAR, ONLY : XUNDEF 00328 IMPLICIT NONE 00329 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00330 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: C2REF_FUNC_2D 00331 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00332 ! 00333 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C2REF_FUNC_2D',0,ZHOOK_HANDLE) 00334 WHERE (PCLAY/=XUNDEF) 00335 C2REF_FUNC_2D = 13.815*(PCLAY*100.)**(-0.954) 00336 ELSEWHERE 00337 C2REF_FUNC_2D = XUNDEF 00338 END WHERE 00339 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C2REF_FUNC_2D',1,ZHOOK_HANDLE) 00340 ! 00341 END FUNCTION C2REF_FUNC_2D 00342 ! 00343 ! 00344 ! 00345 FUNCTION C3_FUNC_2D(PCLAY) 00346 USE MODD_SURF_PAR, ONLY : XUNDEF 00347 IMPLICIT NONE 00348 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00349 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: C3_FUNC_2D 00350 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00351 ! 00352 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C3_FUNC_2D',0,ZHOOK_HANDLE) 00353 WHERE (PCLAY/=XUNDEF) 00354 C3_FUNC_2D = 5.327*(PCLAY*100.)**(-1.043) 00355 ELSEWHERE 00356 C3_FUNC_2D = XUNDEF 00357 END WHERE 00358 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C3_FUNC_2D',1,ZHOOK_HANDLE) 00359 ! 00360 END FUNCTION C3_FUNC_2D 00361 ! 00362 ! 00363 ! 00364 FUNCTION C4B_FUNC_2D(PCLAY) 00365 USE MODD_SURF_PAR, ONLY : XUNDEF 00366 IMPLICIT NONE 00367 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00368 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: C4B_FUNC_2D 00369 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00370 ! 00371 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4B_FUNC_2D',0,ZHOOK_HANDLE) 00372 WHERE (PCLAY/=XUNDEF) 00373 C4B_FUNC_2D = 5.14+11.47*PCLAY 00374 ELSEWHERE 00375 C4B_FUNC_2D = XUNDEF 00376 END WHERE 00377 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4B_FUNC_2D',1,ZHOOK_HANDLE) 00378 ! 00379 END FUNCTION C4B_FUNC_2D 00380 ! 00381 ! 00382 ! 00383 FUNCTION C4REF_FUNC_2D(PCLAY,PSAND,PD2,PD3) 00384 USE MODD_SURF_PAR, ONLY : XUNDEF 00385 IMPLICIT NONE 00386 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00387 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND 00388 REAL, DIMENSION(:,:), INTENT(IN) :: PD2 00389 REAL, DIMENSION(:,:), INTENT(IN) :: PD3 00390 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: C4REF_FUNC_2D 00391 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00392 ! 00393 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4REF_FUNC_2D',0,ZHOOK_HANDLE) 00394 WHERE (PCLAY/=XUNDEF .AND. PD2/=XUNDEF .AND. PD3/=XUNDEF) 00395 C4REF_FUNC_2D = 10.0**( 4.421 & 00396 + 0.4881 * PSAND - 25.73 * PCLAY & 00397 + 5.927 *(PSAND**2) + 88.63 *(PCLAY**2) & 00398 - 6.085 *(PSAND**3) - 81.33 *(PCLAY**3) ) 00399 ! 00400 ! Scale the C4 coefficient as a function of grid geometry: 00401 ! NOTE that 2.0 represents the value for a coefficient which 00402 ! represents the baseline grid geometry with units of m**2 00403 ! so that the scaling is dimensionless. 00404 ! 00405 C4REF_FUNC_2D = C4REF_FUNC_2D*2.0*(PD3-PD2)/(PD2*PD3*PD3) 00406 ! 00407 ELSEWHERE 00408 C4REF_FUNC_2D = XUNDEF 00409 END WHERE 00410 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4REF_FUNC_2D',1,ZHOOK_HANDLE) 00411 ! 00412 END FUNCTION C4REF_FUNC_2D 00413 ! 00414 ! 00415 ! 00416 FUNCTION ACOEF_FUNC_2D(PCLAY) 00417 USE MODD_SURF_PAR, ONLY : XUNDEF 00418 IMPLICIT NONE 00419 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00420 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: ACOEF_FUNC_2D 00421 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00422 ! 00423 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:ACOEF_FUNC_2D',0,ZHOOK_HANDLE) 00424 WHERE (PCLAY/=XUNDEF) 00425 ACOEF_FUNC_2D = 732.42E-3*(PCLAY*100.)**(-0.539) 00426 ELSEWHERE 00427 ACOEF_FUNC_2D = XUNDEF 00428 END WHERE 00429 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:ACOEF_FUNC_2D',1,ZHOOK_HANDLE) 00430 ! 00431 END FUNCTION ACOEF_FUNC_2D 00432 ! 00433 ! 00434 ! 00435 FUNCTION PCOEF_FUNC_2D(PCLAY) 00436 USE MODD_SURF_PAR, ONLY : XUNDEF 00437 IMPLICIT NONE 00438 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY 00439 REAL, DIMENSION(SIZE(PCLAY,1),SIZE(PCLAY,2)) :: PCOEF_FUNC_2D 00440 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00441 ! 00442 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:PCOEF_FUNC_2D',0,ZHOOK_HANDLE) 00443 WHERE (PCLAY/=XUNDEF) 00444 PCOEF_FUNC_2D = 13.4*PCLAY+3.4 00445 ELSEWHERE 00446 PCOEF_FUNC_2D = XUNDEF 00447 END WHERE 00448 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:PCOEF_FUNC_2D',1,ZHOOK_HANDLE) 00449 ! 00450 END FUNCTION PCOEF_FUNC_2D 00451 00452 ! 00453 ! 00454 !------------------------------------------------------------------------------- 00455 ! 00456 FUNCTION WSAT_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00457 USE MODD_SURF_PAR, ONLY : XUNDEF 00458 IMPLICIT NONE 00459 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00460 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00461 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00462 REAL, DIMENSION(SIZE(PSAND)) :: WSAT_FUNC_1D 00463 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00464 ! 00465 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WSAT_FUNC_1D',0,ZHOOK_HANDLE) 00466 SELECT CASE (HPEDOTF) 00467 CASE ('CH78') 00468 WHERE(PSAND/=XUNDEF) WSAT_FUNC_1D = 0.001 * (-108.*PSAND+494.305) 00469 CASE ('CO84') 00470 WHERE(PSAND/=XUNDEF) WSAT_FUNC_1D = 0.505-0.142*PSAND-0.037*PCLAY 00471 END SELECT 00472 00473 WHERE (PSAND==XUNDEF) WSAT_FUNC_1D = XUNDEF 00474 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WSAT_FUNC_1D',1,ZHOOK_HANDLE) 00475 ! 00476 END FUNCTION WSAT_FUNC_1D 00477 ! 00478 ! 00479 ! 00480 FUNCTION WWILT_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00481 USE MODD_SURF_PAR, ONLY : XUNDEF 00482 IMPLICIT NONE 00483 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00484 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00485 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00486 REAL, DIMENSION(SIZE(PCLAY)) :: WWILT_FUNC_1D 00487 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00488 ! 00489 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WWILT_FUNC_1D',0,ZHOOK_HANDLE) 00490 SELECT CASE (HPEDOTF) 00491 CASE ('CH78') 00492 WHERE(PCLAY/=XUNDEF) WWILT_FUNC_1D = 37.1342E-3*(PCLAY*100.)**0.5 00493 CASE ('CO84') 00494 WHERE(PCLAY/=XUNDEF) & 00495 WWILT_FUNC_1D = 0.15333-0.147*PSAND+0.33*PCLAY-0.102*(PCLAY**2) 00496 END SELECT 00497 ! 00498 WHERE (PCLAY==XUNDEF) WWILT_FUNC_1D = XUNDEF 00499 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WWILT_FUNC_1D',1,ZHOOK_HANDLE) 00500 ! 00501 END FUNCTION WWILT_FUNC_1D 00502 ! 00503 ! 00504 ! 00505 FUNCTION WFC_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00506 USE MODD_SURF_PAR, ONLY : XUNDEF 00507 IMPLICIT NONE 00508 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00509 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00510 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00511 REAL, DIMENSION(SIZE(PCLAY)) :: WFC_FUNC_1D 00512 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00513 ! 00514 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WFC_FUNC_1D',0,ZHOOK_HANDLE) 00515 SELECT CASE (HPEDOTF) 00516 CASE ('CH78') 00517 WHERE(PCLAY/=XUNDEF) WFC_FUNC_1D = 89.0467E-3*(PCLAY*100.)**0.3496 00518 CASE ('CO84') 00519 WHERE(PCLAY/=XUNDEF) & 00520 WFC_FUNC_1D = 0.1537-0.1233*PSAND+0.2685*PCLAY**(1./3.) 00521 END SELECT 00522 ! 00523 WHERE (PCLAY==XUNDEF) WFC_FUNC_1D = XUNDEF 00524 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:WFC_FUNC_1D',1,ZHOOK_HANDLE) 00525 ! 00526 END FUNCTION WFC_FUNC_1D 00527 ! 00528 ! 00529 ! 00530 FUNCTION W33_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00531 USE MODD_SURF_PAR, ONLY : XUNDEF 00532 IMPLICIT NONE 00533 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00534 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00535 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00536 REAL, DIMENSION(SIZE(PCLAY)) :: W33_FUNC_1D 00537 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00538 ! 00539 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:W33_FUNC_1D',0,ZHOOK_HANDLE) 00540 SELECT CASE (HPEDOTF) 00541 CASE ('CH78') 00542 WHERE(PCLAY/=XUNDEF) & 00543 W33_FUNC_1D = 0.3005674207-0.4725429691*PSAND+0.2080416963*PCLAY & 00544 + 0.3055907979*PSAND**(1./3.)-0.1202046909*PCLAY**(1./3.) 00545 CASE ('CO84') 00546 WHERE(PCLAY/=XUNDEF) & 00547 W33_FUNC_1D = 0.2016592588-0.5785747196*PSAND+0.1113006987*PCLAY & 00548 + 0.4305771483*PSAND**(1./3.)-0.0080618093*PCLAY**(1./3.) 00549 END SELECT 00550 00551 WHERE (PCLAY==XUNDEF) W33_FUNC_1D = XUNDEF 00552 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:W33_FUNC_1D',1,ZHOOK_HANDLE) 00553 ! 00554 END FUNCTION W33_FUNC_1D 00555 ! 00556 ! 00557 ! 00558 FUNCTION BCOEF_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00559 USE MODD_SURF_PAR, ONLY : XUNDEF 00560 IMPLICIT NONE 00561 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00562 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00563 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00564 REAL, DIMENSION(SIZE(PCLAY)) :: BCOEF_FUNC_1D 00565 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00566 ! 00567 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:BCOEF_FUNC_1D',0,ZHOOK_HANDLE) 00568 SELECT CASE (HPEDOTF) 00569 CASE ('CH78') 00570 WHERE (PCLAY/=XUNDEF) BCOEF_FUNC_1D = 13.7*PCLAY + 3.501 00571 CASE ('CO84') 00572 WHERE (PCLAY/=XUNDEF) BCOEF_FUNC_1D = 3.10+15.7*PCLAY-0.3*PSAND 00573 END SELECT 00574 00575 WHERE (PCLAY==XUNDEF) BCOEF_FUNC_1D = XUNDEF 00576 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:BCOEF_FUNC_1D',1,ZHOOK_HANDLE) 00577 ! 00578 END FUNCTION BCOEF_FUNC_1D 00579 ! 00580 ! 00581 ! 00582 FUNCTION MATPOTSAT_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00583 USE MODD_SURF_PAR, ONLY : XUNDEF 00584 IMPLICIT NONE 00585 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00586 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00587 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00588 REAL, DIMENSION(SIZE(PSAND)) :: MATPOTSAT_FUNC_1D 00589 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00590 ! 00591 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:MATPOTSAT_FUNC_1D',0,ZHOOK_HANDLE) 00592 SELECT CASE (HPEDOTF) 00593 CASE ('CH78') 00594 WHERE(PSAND/=XUNDEF) MATPOTSAT_FUNC_1D = -0.01*(10.**(1.85 - 0.88*PSAND)) 00595 CASE ('CO84') 00596 WHERE(PSAND/=XUNDEF) & 00597 MATPOTSAT_FUNC_1D = -0.01*(10.0**(1.54-0.95*PSAND+0.63*(1.-PSAND-PCLAY))) 00598 END SELECT 00599 00600 WHERE (PSAND==XUNDEF) MATPOTSAT_FUNC_1D = XUNDEF 00601 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:MATPOTSAT_FUNC_1D',1,ZHOOK_HANDLE) 00602 ! 00603 END FUNCTION MATPOTSAT_FUNC_1D 00604 ! 00605 ! 00606 ! 00607 FUNCTION HYDCONDSAT_FUNC_1D(PCLAY,PSAND,HPEDOTF) 00608 USE MODD_SURF_PAR, ONLY : XUNDEF 00609 IMPLICIT NONE 00610 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00611 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00612 CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF 00613 REAL, DIMENSION(SIZE(PCLAY)) :: HYDCONDSAT_FUNC_1D 00614 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00615 ! 00616 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:HYDCONDSAT_FUNC_1D',0,ZHOOK_HANDLE) 00617 SELECT CASE (HPEDOTF) 00618 CASE ('CH78') 00619 WHERE(PCLAY/=XUNDEF) 00620 HYDCONDSAT_FUNC_1D = 1.0e-6*(10.0**(0.161874E+01 & 00621 - 0.581989E+01*PCLAY - 0.907123E-01*PSAND & 00622 + 0.529268E+01*PCLAY**2 + 0.120332E+01*PSAND**2)) 00623 END WHERE 00624 CASE ('CO84') 00625 WHERE(PCLAY/=XUNDEF) & 00626 HYDCONDSAT_FUNC_1D = 0.0254*(10.0**(-0.6+1.26*PSAND-0.64*PCLAY))/3600. 00627 END SELECT 00628 ! 00629 WHERE(PCLAY==XUNDEF) HYDCONDSAT_FUNC_1D = XUNDEF 00630 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:HYDCONDSAT_FUNC_1D',1,ZHOOK_HANDLE) 00631 ! 00632 END FUNCTION HYDCONDSAT_FUNC_1D 00633 ! 00634 ! 00635 ! 00636 FUNCTION CGSAT_FUNC_1D(PCLAY,PSAND) 00637 USE MODD_SURF_PAR, ONLY : XUNDEF 00638 IMPLICIT NONE 00639 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00640 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00641 REAL, DIMENSION(SIZE(PCLAY)) :: CGSAT_FUNC_1D 00642 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00643 ! 00644 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:CGSAT_FUNC_1D',0,ZHOOK_HANDLE) 00645 WHERE (PCLAY/=XUNDEF) 00646 CGSAT_FUNC_1D = ( -1.5571*PSAND - 1.441*PCLAY + 4.70217 )*1.E-6 00647 ELSEWHERE 00648 CGSAT_FUNC_1D = XUNDEF 00649 END WHERE 00650 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:CGSAT_FUNC_1D',1,ZHOOK_HANDLE) 00651 ! 00652 END FUNCTION CGSAT_FUNC_1D 00653 ! 00654 ! 00655 ! 00656 FUNCTION C1SAT_FUNC_1D(PCLAY) 00657 USE MODD_SURF_PAR, ONLY : XUNDEF 00658 IMPLICIT NONE 00659 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00660 REAL, DIMENSION(SIZE(PCLAY)) :: C1SAT_FUNC_1D 00661 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00662 ! 00663 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C1SAT_FUNC_1D',0,ZHOOK_HANDLE) 00664 WHERE (PCLAY/=XUNDEF) 00665 C1SAT_FUNC_1D = 0.01*(558.*PCLAY+84.88) 00666 ELSEWHERE 00667 C1SAT_FUNC_1D = XUNDEF 00668 END WHERE 00669 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C1SAT_FUNC_1D',1,ZHOOK_HANDLE) 00670 ! 00671 END FUNCTION C1SAT_FUNC_1D 00672 ! 00673 ! 00674 ! 00675 FUNCTION C2REF_FUNC_1D(PCLAY) 00676 USE MODD_SURF_PAR, ONLY : XUNDEF 00677 IMPLICIT NONE 00678 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00679 REAL, DIMENSION(SIZE(PCLAY)) :: C2REF_FUNC_1D 00680 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00681 ! 00682 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C2REF_FUNC_1D',0,ZHOOK_HANDLE) 00683 WHERE (PCLAY/=XUNDEF) 00684 C2REF_FUNC_1D = 13.815*(PCLAY*100.)**(-0.954) 00685 ELSEWHERE 00686 C2REF_FUNC_1D = XUNDEF 00687 END WHERE 00688 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C2REF_FUNC_1D',1,ZHOOK_HANDLE) 00689 ! 00690 END FUNCTION C2REF_FUNC_1D 00691 ! 00692 ! 00693 ! 00694 FUNCTION C3_FUNC_1D(PCLAY) 00695 USE MODD_SURF_PAR, ONLY : XUNDEF 00696 IMPLICIT NONE 00697 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00698 REAL, DIMENSION(SIZE(PCLAY)) :: C3_FUNC_1D 00699 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00700 ! 00701 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C3_FUNC_1D',0,ZHOOK_HANDLE) 00702 WHERE (PCLAY/=XUNDEF) 00703 C3_FUNC_1D = 5.327*(PCLAY*100.)**(-1.043) 00704 ELSEWHERE 00705 C3_FUNC_1D = XUNDEF 00706 END WHERE 00707 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C3_FUNC_1D',1,ZHOOK_HANDLE) 00708 ! 00709 END FUNCTION C3_FUNC_1D 00710 ! 00711 ! 00712 ! 00713 FUNCTION C4B_FUNC_1D(PCLAY) 00714 USE MODD_SURF_PAR, ONLY : XUNDEF 00715 IMPLICIT NONE 00716 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00717 REAL, DIMENSION(SIZE(PCLAY)) :: C4B_FUNC_1D 00718 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00719 ! 00720 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4B_FUNC_1D',0,ZHOOK_HANDLE) 00721 WHERE (PCLAY/=XUNDEF) 00722 C4B_FUNC_1D = 5.14+11.47*PCLAY 00723 ELSEWHERE 00724 C4B_FUNC_1D = XUNDEF 00725 END WHERE 00726 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4B_FUNC_1D',1,ZHOOK_HANDLE) 00727 ! 00728 END FUNCTION C4B_FUNC_1D 00729 ! 00730 ! 00731 ! 00732 FUNCTION C4REF_FUNC_1D(PCLAY,PSAND,PD2,PD3) 00733 USE MODD_SURF_PAR, ONLY : XUNDEF 00734 IMPLICIT NONE 00735 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00736 REAL, DIMENSION(:), INTENT(IN) :: PSAND 00737 REAL, DIMENSION(:), INTENT(IN) :: PD2 00738 REAL, DIMENSION(:), INTENT(IN) :: PD3 00739 REAL, DIMENSION(SIZE(PCLAY)) :: C4REF_FUNC_1D 00740 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00741 ! 00742 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4REF_FUNC_1D',0,ZHOOK_HANDLE) 00743 WHERE (PCLAY/=XUNDEF .AND. PD2/=XUNDEF .AND. PD3/=XUNDEF) 00744 C4REF_FUNC_1D = 10.0**( 4.421 & 00745 + 0.4881 * PSAND - 25.73 * PCLAY & 00746 + 5.927 *(PSAND**2) + 88.63 *(PCLAY**2) & 00747 - 6.085 *(PSAND**3) - 81.33 *(PCLAY**3) ) 00748 ! 00749 ! Scale the C4 coefficient as a function of grid geometry: 00750 ! NOTE that 2.0 represents the value for a coefficient which 00751 ! represents the baseline grid geometry with units of m**2 00752 ! so that the scaling is dimensionless. 00753 ! 00754 C4REF_FUNC_1D = C4REF_FUNC_1D*2.0*(PD3-PD2)/(PD2*PD3*PD3) 00755 ! 00756 ELSEWHERE 00757 C4REF_FUNC_1D = XUNDEF 00758 END WHERE 00759 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:C4REF_FUNC_1D',1,ZHOOK_HANDLE) 00760 ! 00761 END FUNCTION C4REF_FUNC_1D 00762 ! 00763 ! 00764 ! 00765 FUNCTION ACOEF_FUNC_1D(PCLAY) 00766 USE MODD_SURF_PAR, ONLY : XUNDEF 00767 IMPLICIT NONE 00768 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00769 REAL, DIMENSION(SIZE(PCLAY)) :: ACOEF_FUNC_1D 00770 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00771 ! 00772 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:ACOEF_FUNC_1D',0,ZHOOK_HANDLE) 00773 WHERE (PCLAY/=XUNDEF) 00774 ACOEF_FUNC_1D = 732.42E-3*(PCLAY*100.)**(-0.539) 00775 ELSEWHERE 00776 ACOEF_FUNC_1D = XUNDEF 00777 END WHERE 00778 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:ACOEF_FUNC_1D',1,ZHOOK_HANDLE) 00779 ! 00780 END FUNCTION ACOEF_FUNC_1D 00781 ! 00782 ! 00783 ! 00784 FUNCTION PCOEF_FUNC_1D(PCLAY) 00785 USE MODD_SURF_PAR, ONLY : XUNDEF 00786 IMPLICIT NONE 00787 REAL, DIMENSION(:), INTENT(IN) :: PCLAY 00788 REAL, DIMENSION(SIZE(PCLAY)) :: PCOEF_FUNC_1D 00789 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00790 ! 00791 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:PCOEF_FUNC_1D',0,ZHOOK_HANDLE) 00792 WHERE (PCLAY/=XUNDEF) 00793 PCOEF_FUNC_1D = 13.4*PCLAY+3.4 00794 ELSEWHERE 00795 PCOEF_FUNC_1D = XUNDEF 00796 END WHERE 00797 IF (LHOOK) CALL DR_HOOK('MODE_SOIL:PCOEF_FUNC_1D',1,ZHOOK_HANDLE) 00798 ! 00799 END FUNCTION PCOEF_FUNC_1D 00800 00801 !------------------------------------------------------------------------------- 00802 ! 00803 END MODULE MODE_SOIL