Changeset 8462


Ignore:
Timestamp:
2024-03-07T18:38:03+01:00 (10 months ago)
Author:
josefine.ghattas
Message:

The Moyano function describing the soil moisture effect on OM decomposition is added. It has been developed by Elodie Salmon in another branch and integrated in ORCHIDEE_2_2 by Bertrad Guenet. This commit corresponds to a corrected version of [8418].

Location:
branches/ORCHIDEE_2_2/ORCHIDEE
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_parameters/constantes.f90

    r8423 r8462  
    143143       !Config Units = BOOLEAN     
    144144       CALL getin_p('SPINUP_ANALYTIC',spinup_analytic) 
    145  
     145       ! 
     146       !Config Key   = OK_MOYANO_SOILHUMSAT 
     147       !Config Desc  = Activation of Moyano equation for control_moist in stomate_litter. 
     148       !Config If    = OK_STOMATE 
     149       !Config Def   = n 
     150       !Config Help  = Activate this option if you want to use Moyano equation 
     151       !to define control_moist in stomate_litter. 
     152       !Config Units = [FLAG]     
     153       CALL getin_p('OK_MOYANO_SOILHUMSAT',ok_moyano_soilhumsat) 
     154       ! 
     155       !Config Key   = OK_ORGA 
     156       !Config Desc  = Activation of Moyano equation for control_moist in 
     157       !stomate_litter. 
     158       !Config If    = OK_STOMATE and OK_MOYANO_SOILHUMSAT 
     159       !Config Def   = n 
     160       !Config Help  = Activate this option if you want to use the organic part 
     161       !of the Moyano equation for soil rich in C. 
     162       !to define control_moist in stomate_litter. 
     163       !Config Units = [FLAG]     
     164       CALL getin_p('OK_ORGA',ok_orga) 
    146165    ENDIF 
    147166 
     
    18621881    !Config Units = [-] 
    18631882    CALL getin_p('MOISTCONT_MIN',moistcont_min) 
    1864  
     1883    ! 
     1884    !Config Key   = BETA1 
     1885    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(2) 
     1886    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1887    !Config Def   = -0.26 
     1888    !Config Help  =  
     1889    !Config Units = [-] 
     1890    CALL getin_p('BETA1',beta1) 
     1891    ! 
     1892    !Config Key   = BETA1_ORGA 
     1893    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(3) 
     1894    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT 
     1895    !Config Def   = -0.67 
     1896    !Config Help  = 
     1897    !Config Units = [-] 
     1898    CALL getin_p('BETA1_ORGA',beta1_orga) 
     1899    ! 
     1900    !Config Key   = BETA2 
     1901    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(2) 
     1902    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1903    !Config Def   = 0.32 
     1904    !Config Help  =  
     1905    !Config Units = [-] 
     1906    CALL getin_p('BETA2',beta2) 
     1907    ! 
     1908    !Config Key   = BETA2_ORGA 
     1909    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(3) 
     1910    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT 
     1911    !Config Def   = 1.08 
     1912    !Config Help  = 
     1913    !Config Units = [-] 
     1914    CALL getin_p('BETA2_ORGA',beta2_orga)     
     1915    ! 
     1916    !Config Key   = BETA3 
     1917    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(2) 
     1918    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1919    !Config Def   = -0.15 
     1920    !Config Help  =  
     1921    !Config Units = [-] 
     1922    CALL getin_p('BETA3',beta3) 
     1923    ! 
     1924    !Config Key   = BETA3_ORGA 
     1925    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(3) 
     1926    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT 
     1927    !Config Def   = -0.57 
     1928    !Config Help  = 
     1929    !Config Units = [-] 
     1930    CALL getin_p('BETA3_ORGA',beta3_orga)     
     1931    ! 
     1932    !Config Key   = BETA4 
     1933    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(2) 
     1934    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1935    !Config Def   = 0.08 
     1936    !Config Help  =  
     1937    !Config Units = [-] 
     1938    CALL getin_p('BETA4',beta4) 
     1939    ! 
     1940    !Config Key   = BETA5 
     1941    !Config Desc  = Parameter for Moyano et al 2012 PRSR model(2) 
     1942    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1943    !Config Def   = -0.09 
     1944    !Config Help  =  
     1945    !Config Units = [-] 
     1946    CALL getin_p('BETA5',beta5) 
     1947    ! 
     1948    !Config Key   = BETA6 
     1949    !Config Desc  = Prameter for Moyano et al 2012 PRSR model(2) 
     1950    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1951    !Config Def   = 0.57 
     1952    !Config Help  =  
     1953    !Config Units = [-] 
     1954    CALL getin_p('BETA6',beta6) 
     1955    ! 
     1956    !Config Key   = INTERCEPT 
     1957    !Config Desc  = Prameter for Moyano et al 2012 PRSR model(2) 
     1958    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1959    !Config Def   = 1.059 
     1960    !Config Help  =  
     1961    !Config Units = [-] 
     1962    CALL getin_p('INTERCEPT',intercept) 
     1963    ! 
     1964    !Config Key   = INTERCEPT_ORGA 
     1965    !Config Desc  = Prameter for Moyano et al 2012 PRSR model(3) 
     1966    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1967    !Config Def   = 1.134 
     1968    !Config Help  =  
     1969    !Config Units = [-] 
     1970    CALL getin_p('INTERCEPT_ORGA',intercept_orga)     
     1971    ! 
     1972    !Config Key   = SRO 
     1973    !Config Desc  = Initial respiration value (SR0) arbitrary defined at 1.0  
     1974    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1975    !Config Def   = 1.0 
     1976    !Config Help  =  
     1977    !Config Units = [-] 
     1978    CALL getin_p('SRO',SRo) 
     1979    ! 
     1980    !Config Key   = MOISTCONSTSAT_MIN 
     1981    !Config Desc  = minimum soil wetness to limit the heterotrophic respiration  
     1982    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1983    !Config Def   = 0.0 
     1984    !Config Help  =  
     1985    !Config Units = [-] 
     1986    CALL getin_p('MOISTCONSTSAT_MIN',moistcontSAT_min) 
     1987    !     
     1988    !Config Key   = SOILHEIGHT 
     1989    !Config Desc  = soilheight to converte gC/m2soil to gC/gsoil  
     1990    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1991    !Config Def   = 0.1 
     1992    !Config Help  =  
     1993    !Config Units = [-] 
     1994    CALL getin_p('SOILHEIGHT',soilheight) 
     1995    !     
     1996    !Config Key   = CINI_MOYANO 
     1997    !Config Desc  = Carbon content to initialize Moyano equation  
     1998    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     1999    !Config Def   = 1000.0 
     2000    !Config Help  =  
     2001    !Config Units = [gC/m3] 
     2002    CALL getin_p('CINI_MOYANO',Cini_Moyano) 
     2003    !     
     2004    !Config Key   = LITTERINI_MOYANO 
     2005    !Config Desc  = Carbon litter content to initialize Moyano equation  
     2006    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2007    !Config Def   = 1000.0 
     2008    !Config Help  =  
     2009    !Config Units = [gC/m3] 
     2010    CALL getin_p('LITTERINI_MOYANO',Litterini_Moyano) 
     2011    !     
     2012    !Config Key   = MAX_CARBON_MOYANO 
     2013    !Config Desc  = Maximum carbon concentration in the database used by Moyano et al 
     2014    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2015    !Config Def   = 0.35 
     2016    !Config Help  =  
     2017    !Config Units = [gC/g soil] 
     2018    CALL getin_p('MAX_CARBON_MOYANO',max_carbon_moyano) 
     2019    !     
     2020    !Config Key   = MIN_CARBON_MOYANO 
     2021    !Config Desc  = Minimum carbon concentration in the database used by Moyano et al 
     2022    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2023    !Config Def   = 0.01 
     2024    !Config Help  =  
     2025    !Config Units = [gC/g soil] 
     2026    CALL getin_p('MIN_CARBON_MOYANO',min_carbon_moyano) 
     2027    !     
     2028    !Config Key   = LIMIT_CARBON_ORGA 
     2029    !Config Desc  = Minimum carbon concentration in the database for organic soil used by Moyano et al 
     2030    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2031    !Config Def   = 0.06 
     2032    !Config Help  =  
     2033    !Config Units = [gC/g soil] 
     2034    CALL getin_p('LIMIT_CARBON_ORGA',limit_carbon_orga)     
     2035    !     
     2036    !Config Key   = MAX_CLAY_MOYANO 
     2037    !Config Desc  = Maximum clay fraction in the database used by Moyano et al 
     2038    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2039    !Config Def   = 0.58 
     2040    !Config Help  =  
     2041    !Config Units = [-] 
     2042    CALL getin_p('MAX_CLAY_MOYANO',max_clay_moyano) 
     2043    !     
     2044    !Config Key   = MIN_CLAY_MOYANO 
     2045    !Config Desc  = Minimum clay fraction in the database used by Moyano et al 
     2046    !Config If    = OK_STOMATE, OK_MOYANO_SOILHUMSAT  
     2047    !Config Def   = 0.03 
     2048    !Config Help  =  
     2049    !Config Units = [-] 
     2050    CALL getin_p('MIN_CLAY_MOYANO',min_clay_moyano) 
    18652051    !- 
    18662052    ! lpj parameters 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_parameters/constantes_var.f90

    r8423 r8462  
    702702!$OMP THREADPRIVATE(veget_year_orig) 
    703703   
     704 REAL(r_std), SAVE :: bulk_default = 1000.0           !! Default value for bulk density of soil (kg/m3) 
     705!$OMP THREADPRIVATE(bulk_default) 
    704706  REAL(r_std), SAVE :: min_vegfrac = 0.001           !! Minimal fraction of mesh a vegetation type can occupy (0-1, unitless) 
    705707!$OMP THREADPRIVATE(min_vegfrac) 
     
    10221024!$OMP THREADPRIVATE(moistcont_min) 
    10231025 
    1024  
     1026  ! 4. Moyano et la. 2012 Biogeosciences 
     1027 
     1028  LOGICAL, SAVE :: ok_moyano_soilhumsat = .FALSE.  !! Use soilhumSAT and Moyano formulation for control_moist 
     1029!$OMP THREADPRIVATE(ok_moyano_soilhumsat) 
     1030  LOGICAL, SAVE :: ok_orga = .TRUE.                !! Do we use also the equation designed for organic soils by Moyano et al. 
     1031                                                   !! for control_moist 
     1032!$OMP THREADPRIVATE(ok_orga) 
     1033  REAL(r_std), SAVE :: beta1 = -0.26               !! 1st(Beta1*M) term of Moyano' PRSR model 2 
     1034                                                   !! for fraction of saturation Beta1= [-0.28,-0.24] 
     1035!$OMP THREADPRIVATE(beta1) 
     1036  REAL(r_std), SAVE :: beta2 = 0.32                !! 2nd(Beta2*M^2) term of Moyano' PRSR model 2 
     1037                                                   !! for fraction of saturation Beta2= [0.28,0.36] 
     1038!$OMP THREADPRIVATE(beta2) 
     1039  REAL(r_std), SAVE :: beta3 = -0.15               !! 3rd(Beta3*M^3) term of Moyano' PRSR model 2 
     1040                                                   !! for fraction of saturation Beta3= [-0.18,-0.12] 
     1041!$OMP THREADPRIVATE(beta3) 
     1042  REAL(r_std), SAVE :: beta1_orga = -0.67          !! 1st(Beta1*M) term of Moyano' PRSR model 3 
     1043                                                   !! for fraction of saturation Beta1= [-0.65,-0.69] 
     1044!$OMP THREADPRIVATE(beta1_orga) 
     1045  REAL(r_std), SAVE :: beta2_orga = 1.08           !! 2nd(Beta2*M^2) term of Moyano' PRSR model 3 
     1046                                                   !! for fraction of saturation Beta2= [1.03,1.13] 
     1047!$OMP THREADPRIVATE(beta2_orga) 
     1048  REAL(r_std), SAVE :: beta3_orga = -0.57          !! 3rd(Beta3*M^3) term of Moyano' PRSR model 3 
     1049                                                   !! for fraction of saturation Beta3= [-0.54,-0.60] 
     1050!$OMP THREADPRIVATE(beta3_orga) 
     1051  REAL(r_std), SAVE :: beta4 = 0.08                !! 4th(Beta4*clay) term of Moyano' PRSR model 2 
     1052                                                   !! for fraction of saturation Beta4= [0.07,0.09] 
     1053!$OMP THREADPRIVATE(beta4) 
     1054  REAL(r_std), SAVE :: beta5 = -0.09               !! 5th(Beta5*M*clay) term of Moyano' PRSR model 2 
     1055                                                   !! for fraction of saturation Beta5= [-0.10,-0.08] 
     1056!$OMP THREADPRIVATE(beta5) 
     1057  REAL(r_std), SAVE :: beta6 = 0.57                !! 6th(Beta6*SOC) term of Moyano' PRSR model 2 
     1058                                                   !! for fraction of saturation Beta6= [0.53,0.61] 
     1059!$OMP THREADPRIVATE(beta6) 
     1060  REAL(r_std), SAVE :: intercept = 1.059           !! intercept term of Moyano' PRSR model 2 
     1061                                                   !! for fraction of saturation intercept= [1.056,1.062] 
     1062!$OMP THREADPRIVATE(intercept) 
     1063  REAL(r_std), SAVE :: intercept_orga = 1.134      !! intercept term of Moyano' PRSR model 3 
     1064                                                   !! for fraction of saturation intercept= [1.131,1.137] 
     1065!$OMP THREADPRIVATE(intercept_orga) 
     1066  REAL(r_std), SAVE :: SRo = 1.0                   !! Initial respiration value (SR0) arbitrary defined at 1.0  
     1067!$OMP THREADPRIVATE(SRo) 
     1068  REAL(r_std), SAVE :: moistcontSAT_min = 0.0      !! minimum soil wetness to limit the heterotrophic respiration 
     1069!$OMP THREADPRIVATE(moistcontSAT_min) 
     1070  REAL(r_std), SAVE :: soilheight = 0.10           !! soil height in meter to converte totalSOC  
     1071                                                   !! from gC/m2soil to gC/gsoil [0.10, 0.20, 0.30, 0.50, 1m]  
     1072!$OMP THREADPRIVATE(soilheight) 
     1073  REAL(r_std), SAVE :: Cini_Moyano = 1000_r_std !!Initial carbon content for Moyano equation  (kgC/m3) 
     1074!$OMP THREADPRIVATE(Cini_Moyano) 
     1075  REAL(r_std), SAVE :: Litterini_Moyano = 1000_r_std !!Initial litter carbon content for Moyano equation  (kgC/m3) 
     1076!$OMP THREADPRIVATE(Litterini_Moyano) 
     1077  REAL(r_std), SAVE :: min_carbon_moyano = 0.01   !! Minimum carbon concentration in the database  
     1078                                                  !! used by Moyano et al (gC/gSoil) 
     1079!$OMP THREADPRIVATE(min_carbon_moyano) 
     1080  REAL(r_std), SAVE :: max_carbon_moyano = 0.35   !! Maximum carbon concentration in the database  
     1081                                                  !! used by Moyano et al (gC/gSoil) 
     1082!$OMP THREADPRIVATE(max_carbon_moyano) 
     1083  REAL(r_std), SAVE :: limit_carbon_orga = 0.06   !! Minimum carbon concentration in the database  
     1084                                                  !! for organic soil used by Moyano et al (gC/gSoil) 
     1085!$OMP THREADPRIVATE(limit_carbon_orga) 
     1086  REAL(r_std), SAVE :: min_clay_moyano = 0.03     !! Minimum clay fraction in the database used by Moyano et al (unitless) 
     1087!$OMP THREADPRIVATE(min_clay_moyano) 
     1088  REAL(r_std), SAVE :: max_clay_moyano = 0.58     !! Maximum clay fraction in the database used by Moyano et al (unitless) 
     1089!$OMP THREADPRIVATE(max_clay_moyano) 
    10251090  ! 
    10261091  ! stomate_lpj.f90 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/hydrol.f90

    r8423 r8462  
    415415  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)    :: soil_wet_litter  !! Soil wetness aove mvw in the litter (0-1, unitless) 
    416416!$OMP THREADPRIVATE(soil_wet_litter) 
     417  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)    :: soil_wet_litterSAT!!Soil wetness above mvw in the litter (0-1, unitless) 
     418                                                                          !! with respect to(tmc_litter_sat-tmc_litter_wilt) 
     419!$OMP THREADPRIVATE(soil_wet_litterSAT) 
    417420  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:,:)  :: qflux_ns         !! Diffusive water fluxes between soil layers 
    418421                                                                         !! (at lower interface) 
     
    572575       & tot_melt, transpir, precip_rain, precip_snow, returnflow, reinfiltration, irrigation, & 
    573576       & humrel, vegstress, drysoil_frac, evapot, evapot_penm, evap_bare_lim, evap_bare_lim_ns, & 
    574        & flood_frac, flood_res, & 
     577       & flood_frac, flood_res,shumdiagSAT,litterhumdiagSAT, & 
    575578       & shumdiag,shumdiag_perma, k_litt, litterhumdiag, soilcap, soiltile, fraclut, reinf_slope_soil, rest_id, hist_id, hist2_id,& 
    576579       & contfrac, stempdiag, & 
     
    650653                                                                           !! with respect to (mcfc-mcw) 
    651654                                                                           !! (unitless; can be out of 0-1) 
     655    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out):: shumdiagSAT      !! Relative soil moisture in each soil layer  
     656                                                                           !! with respect to (mcs-mcw) 
     657                                                                           !! (unitless; can be out of 0-1) 
     658                                                                           !! used in Stomate, for Moyano et al 2012 equation 
    652659    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out):: shumdiag_perma   !! Percent of porosity filled with water (mc/mcs) used for the thermal computations  
    653660    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: k_litt           !! litter approximate conductivity 
    654661    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: litterhumdiag    !! litter humidity 
     662    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: litterhumdiagSAT !!litter humidity  
     663                                                                           !! with respect to(tmc_litter_sat-tmc_litter_wilt)  
    655664    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: tot_melt         !! Total melt     
    656665    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: floodout         !! Flux out of floodplains 
     
    806815         transpir, vevapnu, evapot, evapot_penm, runoff, drainage, &  
    807816         returnflow, reinfiltration, irrigation, & 
    808          tot_melt,evap_bare_lim,evap_bare_lim_ns, shumdiag, shumdiag_perma, & 
    809          k_litt, litterhumdiag, humrel, vegstress, drysoil_frac,& 
     817         tot_melt,evap_bare_lim,evap_bare_lim_ns,shumdiagSAT, shumdiag, shumdiag_perma, & 
     818         k_litt,litterhumdiagSAT, litterhumdiag, humrel, vegstress, drysoil_frac,& 
    810819         stempdiag,snow,snowdz, tot_bare_soil,  u, v, tq_cdrag, & 
    811820         mc_layh, mcl_layh, root_deficit, veget) 
     
    17721781    ALLOCATE (soil_wet_litter(kjpindex,nstm),stat=ier) 
    17731782    IF (ier /= 0) CALL ipslerr_p(3,'hydrol_init','Problem in allocate of variable soil_wet_litter','','') 
     1783 
     1784    ALLOCATE (soil_wet_litterSAT(kjpindex,nstm),stat=ier) 
     1785    IF (ier /= 0) CALL ipslerr_p(3,'hydrol_init','Problem in allocate of variable soil_wet_litterSAT','','')  
    17741786 
    17751787    ALLOCATE (qflux_ns(kjpindex,nslm,nstm),stat=ier)  
     
    23912403    IF (ALLOCATED  (soil_wet_ns)) DEALLOCATE (soil_wet_ns) 
    23922404    IF (ALLOCATED  (soil_wet_litter)) DEALLOCATE (soil_wet_litter) 
     2405    IF (ALLOCATED  (soil_wet_litterSAT)) DEALLOCATE (soil_wet_litterSAT) 
    23932406    IF (ALLOCATED  (qflux_ns)) DEALLOCATE (qflux_ns) 
    23942407    IF (ALLOCATED  (tmat)) DEALLOCATE (tmat) 
     
    36613674       & transpir, vevapnu, evapot, evapot_penm, runoff, drainage, & 
    36623675       & returnflow, reinfiltration, irrigation, & 
    3663        & tot_melt, evap_bare_lim, evap_bare_lim_ns, shumdiag, shumdiag_perma,& 
    3664        & k_litt, litterhumdiag, humrel,vegstress, drysoil_frac, & 
     3676       & tot_melt, evap_bare_lim, evap_bare_lim_ns,shumdiagSAT, shumdiag, shumdiag_perma,& 
     3677       & k_litt,litterhumdiagSAT, litterhumdiag, humrel,vegstress, drysoil_frac, & 
    36653678       & stempdiag,snow, & 
    36663679       & snowdz, tot_bare_soil, u, v, tq_cdrag, mc_layh, mcl_layh, root_deficit, veget) 
     
    37243737    REAL(r_std), DIMENSION (kjpindex,nslm), INTENT (out)     :: shumdiag         !! Relative soil moisture in each diag soil layer  
    37253738                                                                                 !! with respect to (mcfc-mcw) (unitless, [0-1]) 
     3739    REAL(r_std), DIMENSION (kjpindex,nslm), INTENT (out)     :: shumdiagSAT      !! Relative soil moisture in each diag soil layer  
     3740                                                                                 !! with respect to(mcs-mcw)(unitless,[0-1])  
     3741                                                                                 !! used in stomate for Moyano et al 2012 equation 
    37263742    REAL(r_std), DIMENSION (kjpindex,nslm), INTENT (out)     :: shumdiag_perma   !! Percent of porosity filled with water (mc/mcs) 
    37273743                                                                                 !! in each diag soil layer (for the thermal computations) 
     
    37313747    REAL(r_std), DIMENSION (kjpindex), INTENT (out)          :: litterhumdiag    !! Mean of soil_wet_litter across soil tiles 
    37323748                                                                                 !! (unitless, [0-1]) 
     3749    REAL(r_std), DIMENSION (kjpindex), INTENT (out)          ::litterhumdiagSAT  !! Mean of soil_wet_litterSAT across soil tiles 
     3750                                                                                 !!(unitless, [0-1]) 
     3751                                                                                 !! with respect to(tmc_litter_sat-tmc_litter_wilt)  
    37333752    REAL(r_std), DIMENSION (kjpindex, nvm), INTENT(out)      :: vegstress        !! Veg. moisture stress (only for vegetation  
    37343753                                                                                 !! growth) (unitless, [0-1]) 
     
    44044423       END DO 
    44054424 
     4425       ! Subsequent calculation of soil_wet_litterSAT (tmc-tmcw)/(tmcs-tmcw) 
     4426       ! Based on liquid water content 
     4427       DO ji=1,kjpindex 
     4428          soil_wet_litterSAT(ji,jst) = MIN(un, MAX(zero,& 
     4429               & (tmc_litter(ji,jst)-tmc_litter_wilt(ji,jst)) / & 
     4430               & (tmc_litter_sat(ji,jst)-tmc_litter_wilt(ji,jst)) )) 
     4431       END DO 
     4432 
     4433 
    44064434       ! Preliminary calculation of various soil moistures (for each layer, in kg/m2) 
    44074435       sm(:,1)  = dz(2) * (trois*mcl(:,1,jst) + mcl(:,2,jst))/huit 
     
    46244652        
    46254653       ! For consistency in stomate, we also set moderwilt and soil_wet_ns to zero in this case.  
    4626        ! They are used later for shumdiag and shumdiag_perma 
     4654       ! They are used later for shumdiag, shumdiagSAT and shumdiag_perma 
    46274655       DO jsl = 1,nslm 
    46284656          WHERE (is_under_mcr(:,jst)) 
     
    46714699    !! 7. Summing 3d variables into 2d variables  
    46724700    CALL hydrol_diag_soil (ks, nvan, avan, mcr, mcs, mcfc, mcw, kjpindex, veget_max, soiltile, njsc, runoff, drainage, & 
    4673          & evapot, vevapnu, returnflow, reinfiltration, irrigation, & 
    4674          & shumdiag,shumdiag_perma, k_litt, litterhumdiag, humrel, vegstress, drysoil_frac,tot_melt) 
     4701         & evapot, vevapnu, returnflow, reinfiltration, irrigation, shumdiagSAT,& 
     4702         & shumdiag,shumdiag_perma, k_litt,litterhumdiagSAT, litterhumdiag, humrel, vegstress, drysoil_frac,tot_melt) 
    46754703 
    46764704    ! Means of wtd, runoff and drainage corrections, across soiltiles     
     
    64156443 
    64166444  SUBROUTINE hydrol_diag_soil (ks, nvan, avan, mcr, mcs, mcfc, mcw, kjpindex, veget_max, soiltile, njsc, runoff, drainage, & 
    6417        & evapot, vevapnu, returnflow, reinfiltration, irrigation, & 
    6418        & shumdiag,shumdiag_perma, k_litt, litterhumdiag, humrel, vegstress, drysoil_frac, tot_melt) 
     6445       & evapot, vevapnu, returnflow, reinfiltration, irrigation,shumdiagSAT, & 
     6446       & shumdiag,shumdiag_perma, k_litt,litterhumdiagSAT, litterhumdiag, humrel, vegstress, drysoil_frac, tot_melt) 
    64196447    !  
    64206448    ! interface description 
     
    64486476    REAL(r_std), DIMENSION (kjpindex), INTENT(out)           :: drainage        !! Drainage 
    64496477    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out)      :: shumdiag        !! relative soil moisture 
     6478    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out)      :: shumdiagSAT     !! relative soil moisture with respect to (mcs-mcw) 
    64506479    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out)      :: shumdiag_perma  !! Percent of porosity filled with water (mc/mcs) used for the thermal computations 
    64516480    REAL(r_std),DIMENSION (kjpindex), INTENT (out)           :: k_litt          !! litter cond. 
    64526481    REAL(r_std),DIMENSION (kjpindex), INTENT (out)           :: litterhumdiag   !! litter humidity 
     6482    REAL(r_std),DIMENSION (kjpindex), INTENT (out)           :: litterhumdiagSAT!! litter humidity 
     6483                                                                                !! with respect to(tmc_litter_sat-tmc_litter_wilt) 
    64536484    REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (out)       :: humrel          !! Relative humidity 
    64546485    REAL(r_std), DIMENSION (kjpindex, nvm), INTENT(out)      :: vegstress       !! Veg. moisture stress (only for vegetation growth) 
     
    64966527    humtot(:) = zero 
    64976528    shumdiag(:,:)= zero 
     6529    shumdiagSAT(:,:)= zero 
    64986530    shumdiag_perma(:,:)=zero 
    64996531    k_litt(:) = zero 
    65006532    litterhumdiag(:) = zero 
     6533    litterhumdiagSAT(:) = zero 
    65016534    tmc_litt_dry_mea(:) = zero 
    65026535    tmc_litt_wet_mea(:) = zero 
     
    65716604    ! BUT THIS IS NOT USED ANYMORE WITH THE NEW BACKGROUNG ALBEDO 
    65726605    !! k_litt is calculated here as a grid-cell average (for consistency with drainage)    
    6573     !! litterhumdiag, like shumdiag, is averaged over the soiltiles for transmission to stomate 
     6606    !! litterhumdiag, litterhumdiagSAT, like shumdiag,shumdiagSAT is averaged over the soiltiles for transmission to stomate 
    65746607    DO jst=1,nstm        
    65756608       DO ji=1,kjpindex 
     
    65886621          litterhumdiag(ji) = litterhumdiag(ji) + & 
    65896622               & soil_wet_litter(ji,jst) * soiltile(ji,jst) 
     6623 
     6624          litterhumdiagSAT(ji) = litterhumdiagSAT(ji) + & 
     6625               & soil_wet_litterSAT(ji,jst) * soiltile(ji,jst) 
    65906626 
    65916627          tmc_litt_wet_mea(ji) =  tmc_litt_wet_mea(ji) + &  
     
    66596695       ENDDO 
    66606696    ENDDO 
    6661      
     6697 
     6698    ! ShumdiagSAT: we start from soil_wet_ns, 
     6699    !  do a spatial average, excluding the nobio fraction on which stomate doesn't act 
     6700    DO jst=1,nstm 
     6701       DO jsl=1,nslm 
     6702          DO ji=1,kjpindex 
     6703             shumdiagSAT(ji,jsl) = shumdiagSAT(ji,jsl) + soil_wet_ns(ji,jsl,jst) * soiltile(ji,jst)  
     6704             shumdiagSAT(ji,jsl) = MAX(MIN(shumdiagSAT(ji,jsl), un), zero) 
     6705          ENDDO 
     6706       ENDDO 
     6707    ENDDO 
     6708 
    66626709    ! Shumdiag_perma is based on soilmoist / moisture at saturation in the layer 
    66636710    ! Her we start from grid averages by hydrol soil layer and transform it to the diag levels 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/sechiba.f90

    r8423 r8462  
    140140                                                                     !! by thermosoil.f90 (unitless, 0-1) 
    141141!$OMP THREADPRIVATE(shumdiag) 
     142  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)  :: shumdiagSAT    !! Mean relative soil moisture (0-1, unitless)  
     143                                                                     !! with respect to(mcs-mcw) 
     144!$OMP THREADPRIVATE(shumdiagSAT)  
    142145  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)  :: shumdiag_perma !! Saturation degree of the soil  
    143146!$OMP THREADPRIVATE(shumdiag_perma) 
     
    146149  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:)    :: litterhumdiag  !! Litter dryness factor (unitless, 0-1) 
    147150!$OMP THREADPRIVATE(litterhumdiag) 
     151  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:)    :: litterhumdiagSAT!! Litter dryness factor (unitless, 0-1) 
     152!$OMP THREADPRIVATE(litterhumdiagSAT) 
    148153  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)  :: stempdiag      !! Temperature which controls canopy evolution (K) 
    149154!$OMP THREADPRIVATE(stempdiag) 
     
    765770         & tot_melt, transpir, precip_rain, precip_snow, returnflow, reinfiltration, irrigation, & 
    766771         & humrel, vegstress, drysoil_frac, evapot, evapot_corr, evap_bare_lim, evap_bare_lim_ns, flood_frac, flood_res, & 
    767          & shumdiag,shumdiag_perma, k_litt, litterhumdiag, soilcap, soiltile, fraclut, reinf_slope_soil,& 
     772         & shumdiagSAT,litterhumdiagSAT,shumdiag,shumdiag_perma, k_litt, litterhumdiag, soilcap, soiltile, fraclut, reinf_slope_soil, & 
    768773         & rest_id, hist_id, hist2_id,& 
    769774         & contfrac, stempdiag, & 
     
    820825    CALL slowproc_main (kjit, kjpij, kjpindex, & 
    821826         index, indexveg, lalo, neighbours, resolution, contfrac, soiltile, fraclut, nwdFraclut, & 
    822          temp_air, temp_sol, stempdiag, & 
     827         temp_air, temp_sol, stempdiag,shumdiagSAT,litterhumdiagSAT, & 
    823828         vegstress, shumdiag, litterhumdiag, precip_rain, precip_snow, gpp, & 
    824829         deadleaf_cover, & 
     
    17651770    ALLOCATE (shumdiag(kjpindex,nslm),stat=ier) 
    17661771    IF (ier /= 0) CALL ipslerr_p(3,'sechiba_init','Pb in alloc for shumdiag','','') 
     1772 
     1773    ALLOCATE (shumdiagSAT(kjpindex,nslm),stat=ier) 
     1774    IF (ier /= 0) CALL ipslerr_p(3,'sechiba_init','Pb in alloc for shumdiagSAT','','') 
    17671775     
    17681776    ALLOCATE (shumdiag_perma(kjpindex,nslm),stat=ier) 
     
    17711779    ALLOCATE (litterhumdiag(kjpindex),stat=ier) 
    17721780    IF (ier /= 0) CALL ipslerr_p(3,'sechiba_init','Pb in alloc for litterhumdiag','','') 
     1781 
     1782    ALLOCATE (litterhumdiagSAT(kjpindex),stat=ier) 
     1783    IF (ier /= 0) CALL ipslerr_p(3,'sechiba_init','Pb in alloc for litterhumdiagSAT','','') 
    17731784 
    17741785    ALLOCATE (ptnlev1(kjpindex),stat=ier) 
     
    20212032    IF ( ALLOCATED (co2_flux)) DEALLOCATE (co2_flux) 
    20222033    IF ( ALLOCATED (shumdiag)) DEALLOCATE (shumdiag) 
     2034    IF ( ALLOCATED (shumdiagSAT)) DEALLOCATE (shumdiagSAT) 
    20232035    IF ( ALLOCATED (shumdiag_perma)) DEALLOCATE (shumdiag_perma) 
    20242036    IF ( ALLOCATED (litterhumdiag)) DEALLOCATE (litterhumdiag) 
     2037    IF ( ALLOCATED (litterhumdiagSAT)) DEALLOCATE (litterhumdiagSAT) 
    20252038    IF ( ALLOCATED (ptnlev1)) DEALLOCATE (ptnlev1) 
    20262039    IF ( ALLOCATED (k_litt)) DEALLOCATE (k_litt) 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/slowproc.f90

    r8423 r8462  
    7272  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:)      :: siltfraction        !! Siltfraction (0-1, unitless) 
    7373!$OMP THREADPRIVATE(siltfraction)   
     74  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:)      :: bulk                !! Bulk density (kg/m**3)  
     75!$OMP THREADPRIVATE(bulk)    
    7476  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:,:)  :: laimap              !! LAI map when the LAI is prescribed and not calculated by STOMATE 
    7577!$OMP THREADPRIVATE(laimap) 
     
    137139     
    138140    !! 2. Prepare for reading of PFTmap file 
     141    !!  
     142    !! 2.1 Prepare for reading of bulk variable  
     143    !!  
     144    IF (ok_moyano_soilhumsat) THEN  
     145       ! Get the file name from run.def file and set file attributes accordingly  
     146       filename = 'soil_bulk_and_ph.nc'   
     147       CALL getin_p('SOIL_BULK_FILE',filename)   
     148       name = filename(1:LEN_TRIM(FILENAME)-3)  
     149       CALL xios_orchidee_set_file_attr("soilbulk_file",name=name)  
     150        
     151       ! Set variables that can be used in the xml files  
     152       lerr=xios_orchidee_setvar('bulk_default',bulk_default)  
     153        
     154       ! Determine if the file will be read by XIOS. If not,deactivate reading of the file.      
     155       IF (xios_interpolation .AND. restname_in=='NONE' .AND. .NOT. impsoilt) THEN  
     156          ! Reading will be done with XIOS later  
     157          IF (printlev>=2) WRITE(numout,*) 'Reading of soilbulk file will be done later using XIOS. The filename is ', filename  
     158       ELSE  
     159          ! No reading by XIOS, deactivate soilbulk file and related variables declared in context_input_orchidee.xml.  
     160          ! If this is not done, the model will crash if the file is not available in the run directory.  
     161          IF (printlev>=2) WRITE(numout,*) 'Reading of soil_bulk file will not be done with XIOS.'  
     162          CALL xios_orchidee_set_file_attr("soilbulk_file",enabled=.FALSE.)  
     163          CALL xios_orchidee_set_field_attr("soilbulk",enabled=.FALSE.)  
     164          CALL xios_orchidee_set_field_attr("soilbulk_mask",enabled=.FALSE.)  
     165       END IF 
     166    ELSE 
     167       ! Not needed if the flag is not activated, deactivate soilbulk file and related variables 
     168       ! declared in context_input_orchidee.xml.  
     169       ! If this is not done, the model will crash if the file is not 
     170       ! available in the run directory.  
     171       IF (printlev>=2) WRITE(numout,*) 'Reading of soil_bulk file will not be done with XIOS.' 
     172       CALL xios_orchidee_set_file_attr("soilbulk_file",enabled=.FALSE.) 
     173       CALL xios_orchidee_set_field_attr("soilbulk",enabled=.FALSE.) 
     174       CALL xios_orchidee_set_field_attr("soilbulk_mask",enabled=.FALSE.) 
     175    END IF 
     176           
     177    !!  
     178    !! 2.2 Prepare for reading of PFTmap file  
     179    !!  
     180 
    139181    filename = 'PFTmap.nc' 
    140182    CALL getin_p('VEGETATION_FILE',filename) 
     
    377419             rest_id_stom,   hist_id_stom,           hist_id_stom_IPCC,               & 
    378420             indexLand,      lalo,                   neighbours,   resolution,        & 
    379              contfrac,       totfrac_nobio,          clayfraction, temp_air,          & 
    380              lai,            veget,                  veget_max,                       & 
     421             contfrac,       totfrac_nobio,          clayfraction, bulk,              & 
     422             temp_air,       lai,                    veget,        veget_max,         & 
    381423             deadleaf_cover,         assim_param,  temp_growth ) 
    382424    ENDIF 
     
    478520  SUBROUTINE slowproc_main (kjit, kjpij, kjpindex, & 
    479521       IndexLand, indexveg, lalo, neighbours, resolution, contfrac, soiltile, fraclut, nwdFraclut, & 
    480        temp_air, temp_sol, stempdiag, & 
     522       temp_air, temp_sol, stempdiag, shumdiagSAT,litterhumdiagSAT, & 
    481523       humrel, shumdiag, litterhumdiag, precip_rain, precip_snow, gpp, & 
    482524       deadleaf_cover, & 
     
    511553    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (in)  :: stempdiag           !! Soil temperature (K) 
    512554    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (in)  :: shumdiag            !! Relative soil moisture (0-1, unitless) 
     555    REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (in)  :: shumdiagSAT         !! Relative soil moisture (0-1, unitless) 
     556                                                                               !! with respect to(mcs-mcw) 
    513557    REAL(r_std),DIMENSION (kjpindex), INTENT (in)       :: litterhumdiag       !! Litter humidity  (0-1, unitless) 
     558    REAL(r_std),DIMENSION (kjpindex), INTENT (in)       :: litterhumdiagSAT    !! Litter humidity  (0-1, unitless)  
     559                                                                               !!with respect to(tmc_litter_sat-tmc_litter_wilt) 
    514560    REAL(r_std),DIMENSION (kjpindex), INTENT (in)       :: precip_rain         !! Rain precipitation (mm dt_stomate^{-1}) 
    515561    REAL(r_std),DIMENSION (kjpindex), INTENT (in)       :: precip_snow         !! Snow precipitation (mm dt_stomate^{-1}) 
     
    627673 
    628674       !! 4.1 Call stomate main routine that will call all c-cycle routines       ! 
     675 
    629676       CALL stomate_main (kjit, kjpij, kjpindex, & 
    630677            IndexLand, lalo, neighbours, resolution, contfrac, totfrac_nobio, clayfraction, & 
    631             temp_air, temp_sol, stempdiag, & 
    632             humrel, shumdiag, litterhumdiag, precip_rain, precip_snow, gpp, & 
     678            bulk, temp_air, temp_sol, stempdiag, humrel, shumdiag, shumdiagSAT, litterhumdiag, & 
     679            litterhumdiagSAT, precip_rain, precip_snow, gpp, & 
    633680            deadleaf_cover, & 
    634681            assim_param, & 
     
    638685            co2_flux, fco2_lu, fco2_wh, fco2_ha, & 
    639686            resp_maint, resp_hetero, resp_growth, temp_growth) 
    640  
    641687 
    642688       !! 4.2 Output the respiration terms and the net primary 
     
    865911    ! counter, vegetation fraction, max vegetation fraction, LAI 
    866912    ! variable from stomate, fraction of bare soil, soiltype 
    867     ! fraction, clay fraction, height of vegetation, map of LAI 
     913    ! fraction, clay fraction, bulk density, height of vegetation, map of LAI 
    868914     
    869915    CALL restput_p (rest_id, 'veget', nbp_glo, nvm, 1, kjit, veget, 'scatter',  nbp_glo, index_g) 
     
    904950    CALL restput_p (rest_id, 'clay_frac', nbp_glo, 1, 1, kjit, clayfraction, 'scatter',  nbp_glo, index_g) 
    905951    CALL restput_p (rest_id, 'sand_frac', nbp_glo, 1, 1, kjit, sandfraction, 'scatter',  nbp_glo, index_g) 
     952    IF (ok_moyano_soilhumsat) CALL restput_p (rest_id, 'bulk', nbp_glo, 1, 1, kjit, bulk, 'scatter',  nbp_glo,index_g)  
     953 
    906954    !salma: added the following lines for restput of the soil parameters 
    907955    CALL restput_p (rest_id, 'ks', nbp_glo, 1, 1, kjit, ks, 'scatter',  nbp_glo, index_g) 
     
    929977    ! 2.2 Write restart variables managed by STOMATE 
    930978    IF ( ok_stomate ) THEN 
    931        CALL stomate_finalize (kjit, kjpindex, indexLand, clayfraction, assim_param)  
     979       CALL stomate_finalize (kjit, kjpindex, indexLand, clayfraction, bulk, assim_param)  
    932980    ENDIF 
    933981     
     
    10571105    siltfraction(:)=undef_sechiba 
    10581106 
     1107    ALLOCATE (bulk(kjpindex),stat=ier) 
     1108    IF (ier /= 0) CALL ipslerr_p(3,'slowproc_init','Problem in allocation of variable bulk','','') 
     1109    bulk(:)=undef_sechiba 
     1110 
    10591111    ! Allocation of last year vegetation fraction in case of land use change 
    10601112    ALLOCATE(veget_max_new(kjpindex, nvm), STAT=ier) 
     
    12111263    END IF 
    12121264 
     1265 
     1266    IF (ok_moyano_soilhumsat) THEN 
     1267       var_name= 'bulk'  
     1268       CALL ioconf_setatt_p('UNITS', '-') 
     1269       CALL ioconf_setatt_p('LONG_NAME','Bulk density in each mesh') 
     1270       CALL restget_p (rest_id, var_name, nbp_glo, 1, 1, kjit, .TRUE., bulk, "gather", nbp_glo, index_g)  
     1271       IF ( ALL(bulk(:) .EQ. val_exp ) ) THEN 
     1272          ! bulk is not in restart file 
     1273          call_slowproc_soilt=.TRUE. 
     1274       END IF 
     1275    END IF 
     1276 
     1277     
     1278     
    12131279    ! Calculate siltfraction not needed to be in restart file 
    12141280    IF ( ALL( sandfraction(:) .EQ. val_exp) ) THEN 
     
    13081374       CALL setvar_p (ks, val_exp, 'KS_IMP', ks_default) 
    13091375 
     1376       !Config Key   = BULK   
     1377       !Config Desc  = Bulk density (0-dim mode)  
     1378       !Config Def   = 1000.0 
     1379       !Config If    = IMPOSE_SOIL  
     1380       !Config Help  = Determines the bulk density in the grid box.  The bulk density  
     1381       !Config         is the weight of soil in a given volume.  
     1382       !Config Units = [-]   
     1383       CALL setvar_p (bulk, val_exp, 'BULK', bulk_default)  
     1384        
    13101385       ! By default, we calculate mcf and mcw from the above values, as in slowproc_soilt, 
    13111386       ! but they can be overruled by values from run.def 
     
    13571432          CALL slowproc_soilt(njsc, ks, nvan, avan, mcr, mcs, mcfc, mcw, kjpindex, & 
    13581433               lalo, neighbours, resolution, contfrac, soilclass, & 
    1359                clayfraction, sandfraction, siltfraction) 
     1434               clayfraction, sandfraction, siltfraction, bulk) 
    13601435           
    13611436          call_slowproc_soilt=.FALSE. 
     
    15361611    ENDIF 
    15371612 
     1613 
    15381614    var_name= 'lai' 
    15391615    CALL ioconf_setatt_p('UNITS', '-') 
     
    16111687       !Config Units = [-] 
    16121688       CALL setvar_p (lai, val_exp, 'SECHIBA_LAI', llaimax) 
     1689  
    16131690 
    16141691       !Config Key   = SLOWPROC_HEIGHT 
     
    17231800    ENDIF 
    17241801     
    1725  
    17261802    !! 4.3 Dynamic irrigation map 
    17271803    !  If do_irrigation, it will look to the dynamical irrig. map in restart 
     
    18431919    IF (ALLOCATED (sandfraction)) DEALLOCATE (sandfraction) 
    18441920    IF (ALLOCATED (siltfraction)) DEALLOCATE (siltfraction) 
     1921    IF (ALLOCATED (bulk)) DEALLOCATE (bulk)  
    18451922    IF (ALLOCATED (laimap)) DEALLOCATE (laimap) 
    18461923    IF (ALLOCATED (veget_max_new)) DEALLOCATE (veget_max_new) 
     
    25312608    END IF  
    25322609 
    2533     ! Assigning the right values and giving a value where information was not found 
     2610    ! Assiggning the right values and giving a value where information was not found 
    25342611    DO ib=1,nbpt 
    25352612      IF (alaimap(ib) < min_sechiba) THEN 
     
    29313008!>\BRIEF         looks for nearest grid point on the fine map 
    29323009!! 
    2933 !! DESCRIPTION  : (definitions, functional, design, flags):  
    2934 !! 
     3010!! DESCRIPTION  : (definitions, functional, design, flags): 
     3011!!            
    29353012!! RECENT CHANGE(S): None 
    29363013!! 
     
    30033080!! 
    30043081!>\BRIEF         Interpolate the Zobler or Reynolds/USDA soil type map 
     3082!!               Read and interpolate soil bulk from file.  
    30053083!! 
    30063084!! DESCRIPTION  : (definitions, functional, design, flags):  
     
    30103088!!                             and everything needed to read all maps and assign parameter values.   
    30113089!! 
    3012 !! MAIN OUTPUT VARIABLE(S): ::soiltype, ::clayfraction, sandfraction, siltfraction 
     3090!! MAIN OUTPUT VARIABLE(S): ::soiltype, ::clayfraction, sandfraction, siltfraction, bulk 
    30133091!! 
    30143092!! REFERENCE(S) : Reynold, Jackson, and Rawls (2000). Estimating soil water-holding capacities  
     
    30193097!! \n 
    30203098!_ ================================================================================================================================ 
    3021   SUBROUTINE slowproc_soilt(njsc,  ks,  nvan, avan, mcr, mcs, mcfc, mcw, nbpt, lalo, neighbours, resolution, contfrac, soilclass, clayfraction, sandfraction, siltfraction) 
     3099  SUBROUTINE slowproc_soilt(njsc,  ks,  nvan, avan, mcr, mcs, mcfc, mcw, nbpt, lalo, neighbours, resolution, contfrac, soilclass, clayfraction, sandfraction, siltfraction, bulk) 
    30223100 
    30233101    USE interpweight 
     
    30613139    REAL(r_std), INTENT(out)      :: sandfraction(nbpt)     !! The fraction of sand (for SP-MIP) 
    30623140    REAL(r_std), INTENT(out)      :: siltfraction(nbpt)     !! The fraction of silt (for SP-MIP) 
     3141    REAL(r_std), INTENT(out)      :: bulk(nbpt)             !! Bulk density  as used by STOMATE  
    30633142    ! 
    30643143    ! 
     
    30883167    CHARACTER(LEN=80)                                    :: spmipexp          !! designing the number of sp-mip experiment 
    30893168    CHARACTER(LEN=80)                                    :: unif_case               !! designing the model of experiment 4 (sp_mip) 
    3090  
     3169    REAL(r_std), DIMENSION(nbpt)                         :: abulkph          !!Availability of the bulk and ph interpolation  
    30913170    REAL(r_std)                                          :: vmin, vmax       !! min/max values to use for the  
    30923171 
     
    36373716                      IF ( (solt(ilf) .LE. nscm) .AND. (solt(ilf) .GT. 0) ) THEN 
    36383717                         soilclass(ib,solt(ilf)) = textrefrac(ib,solt(ilf)) 
    3639                          clayfraction(ib) = clayfraction(ib) + textfrac_table(solt(ilf),3) *                & 
     3718                         clayfraction(ib) = clayfraction(ib) + textfrac_table(solt(ilf),3) * & 
    36403719                              textrefrac(ib,solt(ilf)) 
    36413720                         sandfraction(ib) = sandfraction(ib) + textfrac_table(solt(ilf),2) * & 
     
    36883767 
    36893768       ENDIF        !      xios_interpolation 
     3769 
     3770    !!  
     3771    !! Read and interpolate soil bulk and soil ph using IOIPSL or XIOS  
     3772    !! 
     3773    IF (ok_moyano_soilhumsat) THEN 
     3774       IF (xios_interpolation) THEN  
     3775         ! Read and interpolate using XIOS  
     3776     
     3777           ! Check if the restart file for sechiba is read.  
     3778           ! Reading of soilbulk and soilph with XIOS is only activated if restname==NONE.  
     3779           IF (restname_in /= 'NONE') THEN  
     3780              CALL ipslerr_p(3,'slowproc_soilt','soilbulk and soilph can not be read with XIOS if sechiba restart file exist', & 
     3781              'Remove sechiba restart file and start again','')  
     3782           END IF  
     3783      
     3784           IF (printlev_loc>=3) WRITE (numout,*) 'slowproc_soilt:Read soilbulk and soilph with XIOS'  
     3785           CALL xios_orchidee_recv_field('soilbulk', bulk)  
     3786       ELSE  
     3787       ! Read using IOIPSL and interpolate using aggregate tool in ORCHIDEE  
     3788           IF (printlev_loc>=3) WRITE (numout,*) 'slowproc_soilt:Read soilbulk and soilph with IOIPSL'       
     3789           !! Read soilbulk  
     3790      
     3791           !Config Key   = SOIL_BULK_FILE  
     3792           !Config Desc  = Name of file from which soil bulk should be read  
     3793           !Config Def   = soil_bulk_and_ph.nc  
     3794           !Config If    =   
     3795           !Config Help  =   
     3796           !Config Units = [FILE]  
     3797 
     3798       ! By default, bulk and ph is stored in the same file but they could be 
     3799       ! separated if needed.  
     3800           filename = 'soil_bulk_and_ph.nc'  
     3801           CALL getin_p('SOIL_BULK_FILE',filename)  
     3802      
     3803           variablename = 'soilbulk'  
     3804           ! Name of the longitude and latitude in the input file  
     3805           lonname = 'nav_lon'  
     3806           latname = 'nav_lat'  
     3807           vmin=0  ! not used in interpweight_2Dcont  
     3808           vmax=0  ! not used in interpweight_2Dcont  
     3809      
     3810           ! Should negative values be set to zero from input file?  
     3811           nonegative = .FALSE.  
     3812           ! Type of mask to apply to the input data (see header for more 
     3813           ! details)  
     3814           maskingtype = 'mabove'  
     3815           ! Values to use for the masking  
     3816           maskvals = (/ min_sechiba, undef_sechiba, undef_sechiba/)  
     3817           ! Name of the variable with the values for the mask in the input file 
     3818           ! (only if maskkingtype='var') ( not used)  
     3819           namemaskvar = ''  
     3820           ! Type of calculation of cell fractions  
     3821           fractype = 'default'  
     3822 
     3823              IF (printlev_loc >= 1) WRITE(numout,*) "slowproc_soilt: Read and interpolate " & 
     3824                   // TRIM(filename) // " for variable " // TRIM(variablename) 
     3825 
     3826 
     3827           CALL interpweight_2Dcont(nbpt, 0, 0, lalo, resolution,neighbours,                           &     
     3828                contfrac, filename, variablename, lonname, latname,vmin, vmax,nonegative, maskingtype,    &     
     3829                maskvals, namemaskvar, -1, fractype, bulk_default,undef_sechiba,                       & 
     3830                bulk, abulkph)  
     3831           WRITE(numout,*) 'bulk density map is read _______' 
     3832 
     3833 
     3834       ENDIF        !      xios_interpolation 
     3835    ENDIF 
    36903836 
    36913837       ! End of soil texture reading, for 'maps' and classical behavior 
     
    38183964    CALL xios_orchidee_send_field("interp_diag_njsc",REAL(njsc, r_std)) 
    38193965    CALL xios_orchidee_send_field("interp_diag_clayfraction",clayfraction) 
     3966    CALL xios_orchidee_send_field("interp_diag_bulk",bulk) 
    38203967    CALL xios_orchidee_send_field("interp_diag_sandfraction",sandfraction) 
    38213968    CALL xios_orchidee_send_field("interp_diag_siltfraction",siltfraction) 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate.f90

    r8423 r8462  
    644644         rest_id_stom,   hist_id_stom,      hist_id_stom_IPCC,               & 
    645645         index,          lalo,              neighbours,   resolution,        & 
    646          contfrac,       totfrac_nobio,     clay,         temp_air,          & 
    647          lai,            veget,             veget_max,                       & 
     646         contfrac,       totfrac_nobio,     clay,         bulk,              & 
     647         temp_air,       lai,               veget,        veget_max,         & 
    648648         deadleaf_cover,    assim_param,  temp_growth ) 
    649649 
     
    665665    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: totfrac_nobio     !! Fraction of grid cell covered by lakes, land ice, cities, ... (unitless)  
    666666    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: clay              !! Clay fraction of soil (0-1, unitless) 
     667    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: bulk              !! Bulk density (kg/m**3)   
    667668    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: temp_air          !! Air temperature at first atmospheric model layer (K) 
    668669    REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(in)  :: lai               !! Leaf area inex @tex $(m^2 m^{-2})$ @endtex 
     
    11881189       & (kjit, kjpij, kjpindex, & 
    11891190       &  index, lalo, neighbours, resolution, contfrac, totfrac_nobio, clay, & 
    1190        &  temp_air, temp_sol, stempdiag, & 
    1191        &  humrel, shumdiag, litterhumdiag, precip_rain, precip_snow, & 
     1191       &  bulk, temp_air, temp_sol, stempdiag, & 
     1192       &  humrel, shumdiag,shumdiagSAT, litterhumdiag,litterhumdiagSAT, precip_rain, precip_snow, & 
    11921193       &  gpp, deadleaf_cover, assim_param, & 
    11931194       &  lai, frac_age, height, veget, veget_max, & 
     
    12251226                                                                         !! ice, cities, ... (unitless)  
    12261227    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: clay              !! Clay fraction of soil (0-1, unitless) 
     1228    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: bulk              !! Bulk density (kg/m**3)   
    12271229    REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(in)  :: humrel            !! Relative humidity ("moisture availability")  
    12281230                                                                         !! (0-1, unitless)  
     
    12311233    REAL(r_std),DIMENSION(kjpindex,nslm),INTENT(in) :: stempdiag         !! Soil temperature (K) 
    12321234    REAL(r_std),DIMENSION(kjpindex,nslm),INTENT(in) :: shumdiag          !! Relative soil moisture (0-1, unitless) 
     1235    REAL(r_std),DIMENSION(kjpindex,nslm),INTENT(in) :: shumdiagSAT       !! Relative soil moisture (0-1, unitless) 
     1236                                                                         !! with respect to(mcs-mcw) 
    12331237    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: litterhumdiag     !! Litter humidity (0-1, unitless) 
     1238    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: litterhumdiagSAT  !! Litter humidity (0-1, unitless) 
     1239                                                                         !! with respect to(tmc_litter_sat-tmc_litter_wilt) 
    12341240    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: precip_rain       !! Rain precipitation   
    12351241                                                                         !! @tex $(mm dt_stomate^{-1})$ @endtex  
     
    13691375 
    13701376!_ ================================================================================================================================ 
    1371      
     1377    
     1378  
    13721379  !! 1. Initialize variables 
    13731380 
     
    14871494    CALL littercalc (kjpindex, & 
    14881495         turnover_littercalc, bm_to_littercalc, & 
    1489          veget_cov_max, temp_sol, stempdiag, shumdiag, litterhumdiag, & 
     1496         veget_cov_max, temp_sol, stempdiag, shumdiag, litterhumdiag,shumdiagSAT,litterhumdiagSAT, & 
    14901497         litterpart, litter, dead_leaves, lignin_struc, & 
    14911498         deadleaf_cover, resp_hetero_litter, & 
    14921499         soilcarbon_input_inst, control_temp_inst, control_moist_inst, & 
    1493          matrixA, vectorB) 
     1500         matrixA, vectorB, bulk, clay, carbon) 
    14941501     
    14951502    ! Heterothropic litter respiration during time step ::dt_sechiba @tex $(gC m^{-2})$ @endtex 
     
    15511558            &          (kjpindex, dt_days, & 
    15521559            &           veget_cov, veget_cov_max, & 
    1553             &           humrel_daily, t2m_daily, tsoil_daily, soilhum_daily, lalo, & 
     1560            &           humrel_daily, t2m_daily, tsoil_daily, & 
     1561            &           soilhum_daily, lalo, & 
    15541562            &           precip_daily, npp_daily, biomass, & 
    15551563            &           turnover_daily, gpp_daily, when_growthinit, & 
     
    15621570            &           maxfpc_lastyear, maxfpc_thisyear, & 
    15631571            &           humrel_month, humrel_week, t2m_longterm, tau_longterm, & 
    1564             &           t2m_month, t2m_week, tsoil_month, soilhum_month, & 
     1572            &           t2m_month, t2m_week, tsoil_month,soilhum_month, & 
    15651573            &           npp_longterm, turnover_longterm, gpp_week, & 
    15661574            &           gdd_m5_dormance, gdd_midwinter, ncd_dormance, ngd_minus5, & 
     
    15841592            &             clay, herbivores, & 
    15851593            &             tsurf_daily, tsoil_daily, t2m_daily, t2m_min_daily, & 
    1586             &             litterhum_daily, soilhum_daily, & 
     1594            &             litterhum_daily, soilhum_daily,  & 
    15871595            &             maxhumrel_lastyear, minhumrel_lastyear, & 
    15881596            &             gdd0_lastyear, precip_lastyear, & 
     
    20132021!_ ================================================================================================================================ 
    20142022 
    2015   SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, assim_param)  
     2023  SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, bulk, assim_param)  
    20162024     
    20172025    IMPLICIT NONE 
     
    20232031    INTEGER(i_std),DIMENSION(kjpindex),INTENT(in)   :: index             !! Indices of the terrestrial pixels only (unitless) 
    20242032    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: clay              !! Clay fraction of soil (0-1, unitless) 
     2033    REAL(r_std),DIMENSION(kjpindex),INTENT(in)      :: bulk              !! Bulk density (kg/m**3) 
    20252034    REAL(r_std),DIMENSION(kjpindex,nvm,npco2),INTENT(in) :: assim_param  !! min+max+opt temperatures (K) & vmax for photosynthesis   
    20262035 
     
    21092118         dt_days, days_since_beg, & 
    21102119         ind, adapted, regenerate, & 
    2111          humrel_daily, gdd_init_date, litterhum_daily, & 
     2120         humrel_daily, gdd_init_date, litterhum_daily,& 
    21122121         t2m_daily, t2m_min_daily, tsurf_daily, tsoil_daily, & 
    21132122         soilhum_daily, precip_daily, & 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_io.f90

    r8423 r8462  
    440440         &              .TRUE., litterhum_daily, 'gather', nbp_glo, index_g) 
    441441    IF (ALL(litterhum_daily(:) == val_exp)) litterhum_daily(:) = zero 
     442 
    442443    !- 
    443444    t2m_daily(:) = val_exp 
     
    471472         &                .TRUE., soilhum_daily, 'gather', nbp_glo, index_g) 
    472473    IF (ALL(soilhum_daily(:,:) == val_exp)) soilhum_daily(:,:) = zero 
     474 
    473475    !- 
    474476    precip_daily(:) = val_exp 
     
    604606         &              .TRUE., soilhum_month, 'gather', nbp_glo, index_g) 
    605607    IF (ALL(soilhum_month(:,:) == val_exp)) soilhum_month(:,:) = zero 
     608 
     609 
    606610    !- 
    607611    ! 6 fire probability 
     
    993997             CALL restget_p (rest_id_stomate, var_name, nbp_glo, nlitt , 1, itime, & 
    994998                  &                     .TRUE., litter(:,:,m,l,k), 'gather', nbp_glo, index_g) 
    995              IF (ALL(litter(:,:,m,l,k) == val_exp)) litter(:,:,m,l,k) = zero 
     999             IF (ok_moyano_soilhumsat)THEN 
     1000               IF (ALL(litter(:,:,m,l,k) == val_exp)) litter(:,:,m,l,k) = Litterini_Moyano 
     1001             ELSE 
     1002               IF (ALL(litter(:,:,m,l,k) == val_exp)) litter(:,:,m,l,k) = zero 
     1003             ENDIF 
    9961004          ENDDO 
    9971005       ENDDO 
     
    10131021       CALL restget_p (rest_id_stomate, var_name, nbp_glo, ncarb , 1, itime, & 
    10141022            &                   .TRUE., carbon(:,:,m), 'gather', nbp_glo, index_g) 
    1015        IF (ALL(carbon(:,:,m) == val_exp)) carbon(:,:,m) = zero 
     1023       IF (ok_moyano_soilhumsat)THEN  
     1024          IF (ALL(carbon(:,:,m) == val_exp)) carbon(:,:,m) = Cini_Moyano 
     1025       ELSE 
     1026          IF (ALL(carbon(:,:,m) == val_exp)) carbon(:,:,m) = zero 
     1027       ENDIF 
    10161028    ENDDO 
    10171029    !- 
     
    16891701    var_name = 't2m_daily' 
    16901702    CALL restput_p (rest_id_stomate, var_name, nbp_glo,    1, 1, itime, & 
    1691          &                t2m_daily, 'scatter', nbp_glo, index_g) 
     1703                    &                t2m_daily, 'scatter', nbp_glo, index_g) 
    16921704    !- 
    16931705    var_name = 't2m_min_daily' 
    16941706    CALL restput_p (rest_id_stomate, var_name, nbp_glo,    1, 1, itime, & 
    1695          &                t2m_min_daily, 'scatter', nbp_glo, index_g) 
     1707                    &                t2m_min_daily, 'scatter', nbp_glo, index_g) 
    16961708    !- 
    16971709    var_name = 'tsurf_daily' 
    16981710    CALL restput_p (rest_id_stomate, var_name, nbp_glo,    1, 1, itime, & 
    1699          &                tsurf_daily, 'scatter', nbp_glo, index_g) 
     1711                    &                tsurf_daily, 'scatter', nbp_glo, index_g) 
    17001712    !- 
    17011713    var_name = 'tsoil_daily' 
    17021714    CALL restput_p (rest_id_stomate, var_name, nbp_glo, nslm, 1, itime, & 
    1703          &                tsoil_daily, 'scatter', nbp_glo, index_g) 
     1715                    &                tsoil_daily, 'scatter', nbp_glo, index_g) 
    17041716    !- 
    17051717    var_name = 'soilhum_daily' 
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_litter.f90

    r8423 r8462  
    2626 
    2727  ! modules used: 
    28  
     28  USE xios_orchidee 
    2929  USE ioipsl_para 
    3030  USE stomate_data 
     
    180180       turnover, bm_to_litter, & 
    181181       veget_cov_max, tsurf, tsoil, soilhum, litterhum, & 
     182       soilhumSAT, litterhumSAT, & 
    182183       litterpart, litter, dead_leaves, lignin_struc, & 
    183184       deadleaf_cover, resp_hetero_litter, & 
    184185       soilcarbon_input, control_temp, control_moist, & 
    185        MatrixA, VectorB) 
     186       MatrixA, VectorB, bulk, clay, carbon) 
    186187 
    187188    !! 0. Variable and parameter declaration 
     
    201202    REAL(r_std), DIMENSION(npts,nslm), INTENT(in)               :: soilhum            !! Daily soil humidity of each soil layer  
    202203                                                                                      !! (unitless) 
     204    REAL(r_std), DIMENSION(npts,nslm), INTENT(in)               :: soilhumSAT         !! Daily soil humidity of each soil layer  
     205                                                                                      !! (unitless) 
    203206    REAL(r_std), DIMENSION(npts), INTENT(in)                    :: litterhum          !! Daily litter humidity (unitless) 
     207    REAL(r_std), DIMENSION(npts), INTENT(in)                    :: litterhumSAT       !! Daily litter humidity (unitless) 
     208    REAL(r_std), DIMENSION(npts), INTENT(in)                    :: clay               !! Clay fraction (unitless, 0-1)  
     209    REAL(r_std), DIMENSION(npts),INTENT(in)                     :: bulk               !! Bulk density (kg/m**3)   
     210    REAL(r_std), DIMENSION(npts,ncarb,nvm), INTENT(in)          :: carbon             !! Soil carbon pools: active, slow, or passive, \f$(gC m^{2})$\f 
    204211 
    205212    !! 0.2 Output variables 
     
    261268    REAL(r_std), DIMENSION(npts)                                :: soilhum_decomp     !! Humidity used for decompostition in soil 
    262269                                                                                      !! (unitless) 
     270    REAL(r_std), DIMENSION(npts)                                :: soilhumSAT_decomp  !! Humidity used for decompostition in soil 
     271                                                                                      !! (unitless) for Moyano et al 2012  
    263272    REAL(r_std), DIMENSION(npts)                                :: fd                 !! Fraction of structural or metabolic litter 
    264273                                                                                      !! decomposed (unitless) 
     
    585594     
    586595    !! 4.1 above the ground: litter humidity 
    587     control_moist(:,iabove) = control_moist_func (npts, litterhum) 
    588  
     596 
     597    IF (ok_moyano_soilhumsat)THEN !!ok_moyano_soilhumsat is true 
     598       control_moist(:,iabove) = control_moist_func_moyano (npts,clay,bulk,carbon, litter ,litterhumSAT, veget_cov_max) 
     599    ELSE !ok_moyano_soilhumsat is false by default 
     600       control_moist(:,iabove) = control_moist_func (npts, litterhum) 
     601    ENDIF 
     602 
     603        CALL xios_orchidee_send_field("ControlMoistLitter",control_moist(:,iabove)) 
     604        CALL xios_orchidee_send_field("litterhumSAT",litterhumSAT(:)) 
    589605    ! 
    590606    !! 4.2 below: convolution of humidity and decomposer profiles 
     
    596612    !! 4.2.2 integrate over the nslm levels 
    597613    soilhum_decomp(:) = zero 
    598  
    599     DO l = 1, nslm !Loop over soil levels 
    600  
    601        soilhum_decomp(:) = & 
    602             soilhum_decomp(:) + soilhum(:,l) * rpc(:) * & 
    603             ( EXP( -z_soil(l-1)/z_decomp ) - EXP( -z_soil(l)/z_decomp ) ) 
    604  
    605     ENDDO 
    606  
    607     control_moist(:,ibelow) = control_moist_func (npts, soilhum_decomp) 
     614    soilhumSAT_decomp(:) = zero 
     615 
     616    IF (ok_moyano_soilhumsat)THEN !!ok_moyano_soilhumsat is true 
     617      DO l = 1, nslm !Loop over soil levels 
     618         soilhumSAT_decomp(:) = & 
     619              soilhumSAT_decomp(:) + soilhumSAT(:,l) * rpc(:) * & 
     620              ( EXP( -z_soil(l-1)/z_decomp ) - EXP( -z_soil(l)/z_decomp ) ) 
     621      ENDDO 
     622      control_moist(:,ibelow) = control_moist_func_moyano (npts,clay,bulk,carbon, litter, soilhumSAT_decomp,veget_cov_max) 
     623 
     624     ELSE !ok_moyano_soilhumsat is false by default 
     625      DO l = 1, nslm !Loop over soil levels 
     626 
     627         soilhum_decomp(:) = & 
     628              soilhum_decomp(:) + soilhum(:,l) * rpc(:) * & 
     629              ( EXP( -z_soil(l-1)/z_decomp ) - EXP( -z_soil(l)/z_decomp ) ) 
     630      ENDDO 
     631      control_moist(:,ibelow) = control_moist_func (npts, soilhum_decomp) 
     632    ENDIF 
     633 
     634        CALL xios_orchidee_send_field("ControlMoistSoil",control_moist(:,ibelow)) 
     635        CALL xios_orchidee_send_field("soilhumSAT",soilhumSAT_decomp(:)) 
    608636 
    609637  !! 5. fluxes from litter to carbon pools and respiration 
     
    850878 
    851879!! ================================================================================================================================ 
     880!! FUNCTION     : control_moist_func_moyano 
     881!! 
     882!>\BRIEF        Calculate moisture control for litter and soil C decomposition 
     883!! 
     884!! DESCRIPTION  : Calculate moisture control factor applied 
     885!! to litter decomposition and to soil carbon decomposition in 
     886!! stomate_soilcarbon.f90 using the following equation based on the Moyano et al., 2012 BG paper: \n 
     887!! \latexonly 
     888!! \input{control_moist_func1.tex} 
     889!! \endlatexonly 
     890!! \n 
     891!! with M the moisture control factor and soilmoisutre, the soil moisture  
     892!! calculated in sechiba. 
     893!! Then, the function is ranged between Moistcont_min and 1:\n 
     894!! \latexonly 
     895!! \input{control_moist_func2.tex} 
     896!! \endlatexonly 
     897!! \n 
     898!! RECENT CHANGE(S) : None 
     899!! 
     900!! RETURN VALUE : ::moistfunc_result 
     901!!  
     902!! REFERENCE(S) : None 
     903!! 
     904!! FLOWCHART : None 
     905!! \n 
     906!_ ================================================================================================================================ 
     907   
     908  FUNCTION control_moist_func_moyano (npts,clay,bulk,carbon,litter,moist_in,veget_cov_max) RESULT (moistfunc_result) 
     909 
     910  !! 0. Variable and parameter declaration 
     911     
     912    !! 0.1 Input variables 
     913    INTEGER(i_std)                           :: k,m,n,i,l,e         !!indices               
     914    INTEGER(i_std), INTENT(in)               :: npts                !! Domain size - number of grid pixel (unitless) 
     915    REAL(r_std), DIMENSION(npts), INTENT(in) :: moist_in            !! relative humidity (unitless) 
     916    REAL(r_std), DIMENSION(npts), INTENT(in) :: clay                !! Clay fraction (unitless, 0-1)  
     917    REAL(r_std), DIMENSION(npts), INTENT(in) :: bulk                !! Bulk density (kg/m**3)   
     918    REAL(r_std), DIMENSION(npts,ncarb,nvm), INTENT(in) :: carbon    !! Soil carbon pools: active, s     low, or passive, \f$(gC m^{2})$\f 
     919    REAL(r_std), DIMENSION(npts,nlitt,nvm,nlevs,nelements), INTENT(inout) ::litter   !! Metabolic and structural litter,above and 
     920                                                                    !! below ground. The unit is given by m^2 of ground 
     921                                                                    !! @tex $(gC m^{-2})$ @endtex 
     922    REAL(r_std),DIMENSION(npts,nvm),INTENT(in):: veget_cov_max      !! PFT "Maximal" coverage fraction of a PFT  
     923  
     924    !! 0.2 Output variables 
     925    
     926    REAL(r_std), DIMENSION(npts)             :: moistfunc_result    !! Moisture control factor (0.25-1, unitless) 
     927 
     928    !! 0.3 Modified variables 
     929 
     930    !! 0.4 Local variables 
     931    REAL(r_std), DIMENSION(101)              :: Mint                !! range [0,0.01,1] to compute PRSRmax 
     932    REAL(r_std), DIMENSION(npts,101)         :: PRSR                !! Proportional Response of Soil Respiration   
     933    REAL(r_std), DIMENSION(npts,101)         :: SR                  !! Soil respiration compute using Moyano et al 2012 procedure   
     934    REAL(r_std)                              :: SRmax               !! maximum value of SR 
     935    REAL(r_std), DIMENSION(npts,101)         :: SRnorm              !! SR normalized by the SRmax  
     936    REAL(r_std)                              :: ind                 !! i index of maximum SRnorm value 
     937    REAL(r_std)                              :: SRmin               !! minimum value of SRnorm 
     938    REAL(r_std), DIMENSION(npts,101)         :: SRsc                !! Soil respiration rescale between 0 and 1 following Moyano et al 2012 procedure   
     939    REAL(r_std)                              :: SRscmax             !! maximum value of SRsc 
     940    REAL(r_std)                              :: indmc               !! i index of maximum mois_round values  
     941    REAL(r_std)                              :: moist_round         !! moist_in round to 2decimal points 
     942    REAL(r_std), DIMENSION(npts)             :: carbon_gCgs         !! total Soil carbon pools: active +slow+ passive, (gC/gsoil) 
     943    REAL(r_std), DIMENSION(npts)             :: carbon_gCm2s        !! total Soil carbon pools: active +slow+ passive     , (gC/gsoil) 
     944    REAL(r_std), DIMENSION(npts)             :: clay_Moyano         !! Clay fraction borned within the values used by Moyano et al., (unitless, 0-1) 
     945 
     946!_ =============================================================================================================================== 
     947 
     948  !! In ok_moyano_soilhumsat total soil carbon per grid cells need to be computed and 
     949  !!  converted from gC/m2soil to gC/gsoil 
     950  carbon_gCm2s(:)=zero 
     951  carbon_gCgs(:)=zero 
     952  DO n = 1, npts ! loop over grids 
     953   DO m = 1, nvm ! Loop over # PFTs 
     954    DO k = 1, ncarb ! Loop over carbon pools  
     955     carbon_gCm2s(n)=carbon_gCm2s(n)+carbon(n,k,m)*veget_cov_max(n,m) 
     956    ENDDO 
     957   ENDDO 
     958  ENDDO 
     959 
     960  IF (ok_orga) THEN 
     961     DO n = 1, npts ! loop over grids 
     962       carbon_gCgs(n)=carbon_gCm2s(n) / (bulk(n) * 1E3 * soilheight) 
     963       carbon_gCgs(n)= MAX(min_carbon_moyano,MIN(max_carbon_moyano,carbon_gCgs(n)))  
     964       clay_Moyano(n) = MAX(min_clay_moyano,MIN(max_clay_moyano,clay(n))) 
     965    ENDDO 
     966 
     967     !!1. compute Max(Prsr(M[0,0.01,1])); Prsr:Proportional Response of Soil 
     968     !!Respiration (PRSR) and Soil respiration(SR): SR(M)=SRo x Prsr(M)/Max(Prsr(M[0,0.01,1])) 
     969     !! M:soilhumSAT, SRo=1 (arbitrary) 
     970     DO n = 1,npts 
     971       Mint(:)= zero 
     972       SRmax = zero 
     973       DO i = 1,101 
     974          Mint(i)=0.01*(i-1) 
     975          IF (carbon_gCgs(n) .LT. limit_carbon_orga) THEN 
     976              PRSR(n,i) = beta1 * Mint(i)  + beta2 * Mint(i)**2.0 + beta3 * Mint(i)**3.0 & 
     977                         & + beta4 * clay_Moyano(n) + beta5 * clay_Moyano(n) * Mint(i) & 
     978                         & + beta6 * carbon_gCgs(n) + intercept 
     979          ELSE  
     980              PRSR(n,i) = beta1_orga * Mint(i)  + beta2_orga * Mint(i)**2.0 + & 
     981                         & beta3_orga * Mint(i)**3.0 + intercept_orga 
     982          ENDIF 
     983 
     984         IF (i.LT.2) THEN 
     985            SR(n,i) = PRSR(n,i) 
     986            SRmax = MAX(SR(n,i),SRmax) 
     987         ELSE 
     988            SR(n,i) = PRSR(n,i) * SR(n,i-1) 
     989            SRmax = MAX(SR(n,i),SRmax) 
     990          ENDIF 
     991       ENDDO 
     992       SRnorm(n,:)= SRo * SR(n,:)/SRmax 
     993     ENDDO 
     994  ELSE 
     995     DO n = 1, npts ! loop over grids 
     996       carbon_gCgs(n)=carbon_gCm2s(n) / (bulk(n) * 1E3 * soilheight) 
     997       carbon_gCgs(n)= MAX(min_carbon_moyano,MIN(limit_carbon_orga,carbon_gCgs(n))) 
     998       clay_Moyano(n) = MAX(min_clay_moyano,MIN(max_clay_moyano,clay(n))) 
     999    ENDDO 
     1000 
     1001     !!1. compute Max(Prsr(M[0,0.01,1])); Prsr:Proportional Response of Soil 
     1002     !!Respiration (PRSR) and Soil respiration(SR): SR(M)=SRo x 
     1003     !Prsr(M)/Max(Prsr(M[0,0.01,1])) 
     1004     !! M:soilhumSAT, SRo=1 (arbitrary) 
     1005     DO n = 1,npts 
     1006       Mint(:)= zero 
     1007       SRmax = zero 
     1008       DO i = 1,101 
     1009          Mint(i)=0.01*(i-1) 
     1010           PRSR(n,i) = beta1 * Mint(i)  + beta2 * Mint(i)**2.0 + beta3 * Mint(i)**3.0 & 
     1011                      & + beta4 * clay_Moyano(n) + beta5 * clay_Moyano(n) * Mint(i) & 
     1012                      & + beta6 * carbon_gCgs(n) + intercept 
     1013 
     1014          IF (i.LT.2) THEN 
     1015            SR(n,i) = PRSR(n,i) 
     1016            SRmax = MAX(SR(n,i),SRmax) 
     1017          ELSE 
     1018            SR(n,i) = PRSR(n,i) * SR(n,i-1) 
     1019            SRmax = MAX(SR(n,i),SRmax) 
     1020          ENDIF 
     1021       ENDDO 
     1022       SRnorm(n,:)= SRo * SR(n,:)/SRmax 
     1023     ENDDO 
     1024  ENDIF    
     1025 
     1026  !!2. Rescale SR values between 0 and 1 and defined SR for moist_in 
     1027    DO n = 1,npts 
     1028      ind = 1.0 
     1029      indmc = zero 
     1030      moist_round = zero 
     1031      SRscmax = zero 
     1032      SRsc(n,:) = zero 
     1033      SRmin = 1.0 
     1034          
     1035      ind = MAXLOC(SRnorm(n,:),1) 
     1036      DO i = 1,ind 
     1037        SRmin = MIN(SRnorm(n,i),SRmin) 
     1038      ENDDO 
     1039      DO i = 1,101 
     1040        SRsc(n,i) = SRnorm(n,i)- SRmin 
     1041        IF (i.LE.ind)THEN 
     1042          SRscmax = MAX(SRsc(n,i),SRscmax) 
     1043        ENDIF 
     1044      ENDDO 
     1045      SRsc(n,:)=SRsc(n,:)/SRscmax 
     1046          
     1047      moist_round=(NINT(moist_in(n)*100.))/100. 
     1048      indmc=INT(moist_round/0.01) + un 
     1049         
     1050     moistfunc_result(n) = SRsc(n,indmc) 
     1051     moistfunc_result(n) = MAX( moistcontSAT_min, MIN( un, moistfunc_result(n) )) 
     1052    ENDDO 
     1053 
     1054  END FUNCTION control_moist_func_moyano 
     1055 
     1056!! ================================================================================================================================ 
    8521057!! FUNCTION     : control_moist_func 
    8531058!! 
     
    8611066!! \endlatexonly 
    8621067!! \n 
    863 !! with M the moisture control factor and soilmoisutre, the soil moisture  
     1068!! with M the moisture control factor and soilmoisutre, the soil moisture 
    8641069!! calculated in sechiba. 
    8651070!! Then, the function is ranged between Moistcont_min and 1:\n 
     
    8711076!! 
    8721077!! RETURN VALUE : ::moistfunc_result 
    873 !!  
     1078!! 
    8741079!! REFERENCE(S) : None 
    8751080!! 
     
    8771082!! \n 
    8781083!_ ================================================================================================================================ 
    879    
     1084      
    8801085  FUNCTION control_moist_func (npts, moist_in) RESULT (moistfunc_result) 
    8811086 
    8821087  !! 0. Variable and parameter declaration 
    883      
    884     !! 0.1 Input variables 
    885            
    886     INTEGER(i_std), INTENT(in)               :: npts                !! Domain size - number of grid pixel (unitless) 
    887     REAL(r_std), DIMENSION(npts), INTENT(in) :: moist_in            !! relative humidity (unitless) 
    888  
    889     !! 0.2 Output variables 
     1088        
     1089  !! 0.1 Input variables 
     1090               
     1091   INTEGER(i_std), INTENT(in)               :: npts                !! Domain size - number of grid pixel (unitless) 
     1092   REAL(r_std), DIMENSION(npts), INTENT(in) :: moist_in            !! relative humidity (unitless) 
     1093      
     1094  !! 0.2 Output variables 
     1095         
     1096  REAL(r_std), DIMENSION(npts)             :: moistfunc_result    !! Moisture control factor (0.25-1, unitless) 
    8901097    
    891     REAL(r_std), DIMENSION(npts)             :: moistfunc_result    !! Moisture control factor (0.25-1, unitless) 
    892  
    893     !! 0.3 Modified variables 
    894  
    895     !! 0.4 Local variables 
    896  
     1098  !! 0.3 Modified variables 
     1099     
     1100  !! 0.4 Local variables 
     1101     
    8971102!_ ================================================================================================================================ 
    898  
     1103      
    8991104    moistfunc_result(:) = -moist_coeff(1) * moist_in(:) * moist_in(:) + moist_coeff(2)* moist_in(:) - moist_coeff(3) 
    9001105    moistfunc_result(:) = MAX( moistcont_min, MIN( un, moistfunc_result(:) ) ) 
    901  
     1106      
    9021107  END FUNCTION control_moist_func 
    903  
    9041108 
    9051109!! ================================================================================================================================ 
Note: See TracChangeset for help on using the changeset viewer.