SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_soil.F90
Go to the documentation of this file.
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