Changeset 8462
- Timestamp:
- 2024-03-07T18:38:03+01:00 (10 months ago)
- Location:
- branches/ORCHIDEE_2_2/ORCHIDEE
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ORCHIDEE_2_2/ORCHIDEE/src_parameters/constantes.f90
r8423 r8462 143 143 !Config Units = BOOLEAN 144 144 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) 146 165 ENDIF 147 166 … … 1862 1881 !Config Units = [-] 1863 1882 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) 1865 2051 !- 1866 2052 ! lpj parameters -
branches/ORCHIDEE_2_2/ORCHIDEE/src_parameters/constantes_var.f90
r8423 r8462 702 702 !$OMP THREADPRIVATE(veget_year_orig) 703 703 704 REAL(r_std), SAVE :: bulk_default = 1000.0 !! Default value for bulk density of soil (kg/m3) 705 !$OMP THREADPRIVATE(bulk_default) 704 706 REAL(r_std), SAVE :: min_vegfrac = 0.001 !! Minimal fraction of mesh a vegetation type can occupy (0-1, unitless) 705 707 !$OMP THREADPRIVATE(min_vegfrac) … … 1022 1024 !$OMP THREADPRIVATE(moistcont_min) 1023 1025 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) 1025 1090 ! 1026 1091 ! stomate_lpj.f90 -
branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/hydrol.f90
r8423 r8462 415 415 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:) :: soil_wet_litter !! Soil wetness aove mvw in the litter (0-1, unitless) 416 416 !$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) 417 420 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: qflux_ns !! Diffusive water fluxes between soil layers 418 421 !! (at lower interface) … … 572 575 & tot_melt, transpir, precip_rain, precip_snow, returnflow, reinfiltration, irrigation, & 573 576 & 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, & 575 578 & shumdiag,shumdiag_perma, k_litt, litterhumdiag, soilcap, soiltile, fraclut, reinf_slope_soil, rest_id, hist_id, hist2_id,& 576 579 & contfrac, stempdiag, & … … 650 653 !! with respect to (mcfc-mcw) 651 654 !! (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 652 659 REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out):: shumdiag_perma !! Percent of porosity filled with water (mc/mcs) used for the thermal computations 653 660 REAL(r_std),DIMENSION (kjpindex), INTENT (out) :: k_litt !! litter approximate conductivity 654 661 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) 655 664 REAL(r_std),DIMENSION (kjpindex), INTENT (out) :: tot_melt !! Total melt 656 665 REAL(r_std),DIMENSION (kjpindex), INTENT (out) :: floodout !! Flux out of floodplains … … 806 815 transpir, vevapnu, evapot, evapot_penm, runoff, drainage, & 807 816 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,& 810 819 stempdiag,snow,snowdz, tot_bare_soil, u, v, tq_cdrag, & 811 820 mc_layh, mcl_layh, root_deficit, veget) … … 1772 1781 ALLOCATE (soil_wet_litter(kjpindex,nstm),stat=ier) 1773 1782 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','','') 1774 1786 1775 1787 ALLOCATE (qflux_ns(kjpindex,nslm,nstm),stat=ier) … … 2391 2403 IF (ALLOCATED (soil_wet_ns)) DEALLOCATE (soil_wet_ns) 2392 2404 IF (ALLOCATED (soil_wet_litter)) DEALLOCATE (soil_wet_litter) 2405 IF (ALLOCATED (soil_wet_litterSAT)) DEALLOCATE (soil_wet_litterSAT) 2393 2406 IF (ALLOCATED (qflux_ns)) DEALLOCATE (qflux_ns) 2394 2407 IF (ALLOCATED (tmat)) DEALLOCATE (tmat) … … 3661 3674 & transpir, vevapnu, evapot, evapot_penm, runoff, drainage, & 3662 3675 & 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, & 3665 3678 & stempdiag,snow, & 3666 3679 & snowdz, tot_bare_soil, u, v, tq_cdrag, mc_layh, mcl_layh, root_deficit, veget) … … 3724 3737 REAL(r_std), DIMENSION (kjpindex,nslm), INTENT (out) :: shumdiag !! Relative soil moisture in each diag soil layer 3725 3738 !! 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 3726 3742 REAL(r_std), DIMENSION (kjpindex,nslm), INTENT (out) :: shumdiag_perma !! Percent of porosity filled with water (mc/mcs) 3727 3743 !! in each diag soil layer (for the thermal computations) … … 3731 3747 REAL(r_std), DIMENSION (kjpindex), INTENT (out) :: litterhumdiag !! Mean of soil_wet_litter across soil tiles 3732 3748 !! (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) 3733 3752 REAL(r_std), DIMENSION (kjpindex, nvm), INTENT(out) :: vegstress !! Veg. moisture stress (only for vegetation 3734 3753 !! growth) (unitless, [0-1]) … … 4404 4423 END DO 4405 4424 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 4406 4434 ! Preliminary calculation of various soil moistures (for each layer, in kg/m2) 4407 4435 sm(:,1) = dz(2) * (trois*mcl(:,1,jst) + mcl(:,2,jst))/huit … … 4624 4652 4625 4653 ! 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_perma4654 ! They are used later for shumdiag, shumdiagSAT and shumdiag_perma 4627 4655 DO jsl = 1,nslm 4628 4656 WHERE (is_under_mcr(:,jst)) … … 4671 4699 !! 7. Summing 3d variables into 2d variables 4672 4700 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) 4675 4703 4676 4704 ! Means of wtd, runoff and drainage corrections, across soiltiles … … 6415 6443 6416 6444 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) 6419 6447 ! 6420 6448 ! interface description … … 6448 6476 REAL(r_std), DIMENSION (kjpindex), INTENT(out) :: drainage !! Drainage 6449 6477 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) 6450 6479 REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (out) :: shumdiag_perma !! Percent of porosity filled with water (mc/mcs) used for the thermal computations 6451 6480 REAL(r_std),DIMENSION (kjpindex), INTENT (out) :: k_litt !! litter cond. 6452 6481 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) 6453 6484 REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (out) :: humrel !! Relative humidity 6454 6485 REAL(r_std), DIMENSION (kjpindex, nvm), INTENT(out) :: vegstress !! Veg. moisture stress (only for vegetation growth) … … 6496 6527 humtot(:) = zero 6497 6528 shumdiag(:,:)= zero 6529 shumdiagSAT(:,:)= zero 6498 6530 shumdiag_perma(:,:)=zero 6499 6531 k_litt(:) = zero 6500 6532 litterhumdiag(:) = zero 6533 litterhumdiagSAT(:) = zero 6501 6534 tmc_litt_dry_mea(:) = zero 6502 6535 tmc_litt_wet_mea(:) = zero … … 6571 6604 ! BUT THIS IS NOT USED ANYMORE WITH THE NEW BACKGROUNG ALBEDO 6572 6605 !! k_litt is calculated here as a grid-cell average (for consistency with drainage) 6573 !! litterhumdiag, li ke shumdiag,is averaged over the soiltiles for transmission to stomate6606 !! litterhumdiag, litterhumdiagSAT, like shumdiag,shumdiagSAT is averaged over the soiltiles for transmission to stomate 6574 6607 DO jst=1,nstm 6575 6608 DO ji=1,kjpindex … … 6588 6621 litterhumdiag(ji) = litterhumdiag(ji) + & 6589 6622 & soil_wet_litter(ji,jst) * soiltile(ji,jst) 6623 6624 litterhumdiagSAT(ji) = litterhumdiagSAT(ji) + & 6625 & soil_wet_litterSAT(ji,jst) * soiltile(ji,jst) 6590 6626 6591 6627 tmc_litt_wet_mea(ji) = tmc_litt_wet_mea(ji) + & … … 6659 6695 ENDDO 6660 6696 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 6662 6709 ! Shumdiag_perma is based on soilmoist / moisture at saturation in the layer 6663 6710 ! 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 140 140 !! by thermosoil.f90 (unitless, 0-1) 141 141 !$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) 142 145 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:) :: shumdiag_perma !! Saturation degree of the soil 143 146 !$OMP THREADPRIVATE(shumdiag_perma) … … 146 149 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:) :: litterhumdiag !! Litter dryness factor (unitless, 0-1) 147 150 !$OMP THREADPRIVATE(litterhumdiag) 151 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:) :: litterhumdiagSAT!! Litter dryness factor (unitless, 0-1) 152 !$OMP THREADPRIVATE(litterhumdiagSAT) 148 153 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:) :: stempdiag !! Temperature which controls canopy evolution (K) 149 154 !$OMP THREADPRIVATE(stempdiag) … … 765 770 & tot_melt, transpir, precip_rain, precip_snow, returnflow, reinfiltration, irrigation, & 766 771 & 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, & 768 773 & rest_id, hist_id, hist2_id,& 769 774 & contfrac, stempdiag, & … … 820 825 CALL slowproc_main (kjit, kjpij, kjpindex, & 821 826 index, indexveg, lalo, neighbours, resolution, contfrac, soiltile, fraclut, nwdFraclut, & 822 temp_air, temp_sol, stempdiag, &827 temp_air, temp_sol, stempdiag,shumdiagSAT,litterhumdiagSAT, & 823 828 vegstress, shumdiag, litterhumdiag, precip_rain, precip_snow, gpp, & 824 829 deadleaf_cover, & … … 1765 1770 ALLOCATE (shumdiag(kjpindex,nslm),stat=ier) 1766 1771 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','','') 1767 1775 1768 1776 ALLOCATE (shumdiag_perma(kjpindex,nslm),stat=ier) … … 1771 1779 ALLOCATE (litterhumdiag(kjpindex),stat=ier) 1772 1780 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','','') 1773 1784 1774 1785 ALLOCATE (ptnlev1(kjpindex),stat=ier) … … 2021 2032 IF ( ALLOCATED (co2_flux)) DEALLOCATE (co2_flux) 2022 2033 IF ( ALLOCATED (shumdiag)) DEALLOCATE (shumdiag) 2034 IF ( ALLOCATED (shumdiagSAT)) DEALLOCATE (shumdiagSAT) 2023 2035 IF ( ALLOCATED (shumdiag_perma)) DEALLOCATE (shumdiag_perma) 2024 2036 IF ( ALLOCATED (litterhumdiag)) DEALLOCATE (litterhumdiag) 2037 IF ( ALLOCATED (litterhumdiagSAT)) DEALLOCATE (litterhumdiagSAT) 2025 2038 IF ( ALLOCATED (ptnlev1)) DEALLOCATE (ptnlev1) 2026 2039 IF ( ALLOCATED (k_litt)) DEALLOCATE (k_litt) -
branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/slowproc.f90
r8423 r8462 72 72 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:) :: siltfraction !! Siltfraction (0-1, unitless) 73 73 !$OMP THREADPRIVATE(siltfraction) 74 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:) :: bulk !! Bulk density (kg/m**3) 75 !$OMP THREADPRIVATE(bulk) 74 76 REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: laimap !! LAI map when the LAI is prescribed and not calculated by STOMATE 75 77 !$OMP THREADPRIVATE(laimap) … … 137 139 138 140 !! 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 139 181 filename = 'PFTmap.nc' 140 182 CALL getin_p('VEGETATION_FILE',filename) … … 377 419 rest_id_stom, hist_id_stom, hist_id_stom_IPCC, & 378 420 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, & 381 423 deadleaf_cover, assim_param, temp_growth ) 382 424 ENDIF … … 478 520 SUBROUTINE slowproc_main (kjit, kjpij, kjpindex, & 479 521 IndexLand, indexveg, lalo, neighbours, resolution, contfrac, soiltile, fraclut, nwdFraclut, & 480 temp_air, temp_sol, stempdiag, &522 temp_air, temp_sol, stempdiag, shumdiagSAT,litterhumdiagSAT, & 481 523 humrel, shumdiag, litterhumdiag, precip_rain, precip_snow, gpp, & 482 524 deadleaf_cover, & … … 511 553 REAL(r_std),DIMENSION (kjpindex,nslm), INTENT (in) :: stempdiag !! Soil temperature (K) 512 554 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) 513 557 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) 514 560 REAL(r_std),DIMENSION (kjpindex), INTENT (in) :: precip_rain !! Rain precipitation (mm dt_stomate^{-1}) 515 561 REAL(r_std),DIMENSION (kjpindex), INTENT (in) :: precip_snow !! Snow precipitation (mm dt_stomate^{-1}) … … 627 673 628 674 !! 4.1 Call stomate main routine that will call all c-cycle routines ! 675 629 676 CALL stomate_main (kjit, kjpij, kjpindex, & 630 677 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, & 633 680 deadleaf_cover, & 634 681 assim_param, & … … 638 685 co2_flux, fco2_lu, fco2_wh, fco2_ha, & 639 686 resp_maint, resp_hetero, resp_growth, temp_growth) 640 641 687 642 688 !! 4.2 Output the respiration terms and the net primary … … 865 911 ! counter, vegetation fraction, max vegetation fraction, LAI 866 912 ! variable from stomate, fraction of bare soil, soiltype 867 ! fraction, clay fraction, height of vegetation, map of LAI913 ! fraction, clay fraction, bulk density, height of vegetation, map of LAI 868 914 869 915 CALL restput_p (rest_id, 'veget', nbp_glo, nvm, 1, kjit, veget, 'scatter', nbp_glo, index_g) … … 904 950 CALL restput_p (rest_id, 'clay_frac', nbp_glo, 1, 1, kjit, clayfraction, 'scatter', nbp_glo, index_g) 905 951 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 906 954 !salma: added the following lines for restput of the soil parameters 907 955 CALL restput_p (rest_id, 'ks', nbp_glo, 1, 1, kjit, ks, 'scatter', nbp_glo, index_g) … … 929 977 ! 2.2 Write restart variables managed by STOMATE 930 978 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) 932 980 ENDIF 933 981 … … 1057 1105 siltfraction(:)=undef_sechiba 1058 1106 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 1059 1111 ! Allocation of last year vegetation fraction in case of land use change 1060 1112 ALLOCATE(veget_max_new(kjpindex, nvm), STAT=ier) … … 1211 1263 END IF 1212 1264 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 1213 1279 ! Calculate siltfraction not needed to be in restart file 1214 1280 IF ( ALL( sandfraction(:) .EQ. val_exp) ) THEN … … 1308 1374 CALL setvar_p (ks, val_exp, 'KS_IMP', ks_default) 1309 1375 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 1310 1385 ! By default, we calculate mcf and mcw from the above values, as in slowproc_soilt, 1311 1386 ! but they can be overruled by values from run.def … … 1357 1432 CALL slowproc_soilt(njsc, ks, nvan, avan, mcr, mcs, mcfc, mcw, kjpindex, & 1358 1433 lalo, neighbours, resolution, contfrac, soilclass, & 1359 clayfraction, sandfraction, siltfraction )1434 clayfraction, sandfraction, siltfraction, bulk) 1360 1435 1361 1436 call_slowproc_soilt=.FALSE. … … 1536 1611 ENDIF 1537 1612 1613 1538 1614 var_name= 'lai' 1539 1615 CALL ioconf_setatt_p('UNITS', '-') … … 1611 1687 !Config Units = [-] 1612 1688 CALL setvar_p (lai, val_exp, 'SECHIBA_LAI', llaimax) 1689 1613 1690 1614 1691 !Config Key = SLOWPROC_HEIGHT … … 1723 1800 ENDIF 1724 1801 1725 1726 1802 !! 4.3 Dynamic irrigation map 1727 1803 ! If do_irrigation, it will look to the dynamical irrig. map in restart … … 1843 1919 IF (ALLOCATED (sandfraction)) DEALLOCATE (sandfraction) 1844 1920 IF (ALLOCATED (siltfraction)) DEALLOCATE (siltfraction) 1921 IF (ALLOCATED (bulk)) DEALLOCATE (bulk) 1845 1922 IF (ALLOCATED (laimap)) DEALLOCATE (laimap) 1846 1923 IF (ALLOCATED (veget_max_new)) DEALLOCATE (veget_max_new) … … 2531 2608 END IF 2532 2609 2533 ! Assig ning the right values and giving a value where information was not found2610 ! Assiggning the right values and giving a value where information was not found 2534 2611 DO ib=1,nbpt 2535 2612 IF (alaimap(ib) < min_sechiba) THEN … … 2931 3008 !>\BRIEF looks for nearest grid point on the fine map 2932 3009 !! 2933 !! DESCRIPTION : (definitions, functional, design, flags): 2934 !! 3010 !! DESCRIPTION : (definitions, functional, design, flags): 3011 !! 2935 3012 !! RECENT CHANGE(S): None 2936 3013 !! … … 3003 3080 !! 3004 3081 !>\BRIEF Interpolate the Zobler or Reynolds/USDA soil type map 3082 !! Read and interpolate soil bulk from file. 3005 3083 !! 3006 3084 !! DESCRIPTION : (definitions, functional, design, flags): … … 3010 3088 !! and everything needed to read all maps and assign parameter values. 3011 3089 !! 3012 !! MAIN OUTPUT VARIABLE(S): ::soiltype, ::clayfraction, sandfraction, siltfraction 3090 !! MAIN OUTPUT VARIABLE(S): ::soiltype, ::clayfraction, sandfraction, siltfraction, bulk 3013 3091 !! 3014 3092 !! REFERENCE(S) : Reynold, Jackson, and Rawls (2000). Estimating soil water-holding capacities … … 3019 3097 !! \n 3020 3098 !_ ================================================================================================================================ 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) 3022 3100 3023 3101 USE interpweight … … 3061 3139 REAL(r_std), INTENT(out) :: sandfraction(nbpt) !! The fraction of sand (for SP-MIP) 3062 3140 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 3063 3142 ! 3064 3143 ! … … 3088 3167 CHARACTER(LEN=80) :: spmipexp !! designing the number of sp-mip experiment 3089 3168 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 3091 3170 REAL(r_std) :: vmin, vmax !! min/max values to use for the 3092 3171 … … 3637 3716 IF ( (solt(ilf) .LE. nscm) .AND. (solt(ilf) .GT. 0) ) THEN 3638 3717 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) * & 3640 3719 textrefrac(ib,solt(ilf)) 3641 3720 sandfraction(ib) = sandfraction(ib) + textfrac_table(solt(ilf),2) * & … … 3688 3767 3689 3768 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 3690 3836 3691 3837 ! End of soil texture reading, for 'maps' and classical behavior … … 3818 3964 CALL xios_orchidee_send_field("interp_diag_njsc",REAL(njsc, r_std)) 3819 3965 CALL xios_orchidee_send_field("interp_diag_clayfraction",clayfraction) 3966 CALL xios_orchidee_send_field("interp_diag_bulk",bulk) 3820 3967 CALL xios_orchidee_send_field("interp_diag_sandfraction",sandfraction) 3821 3968 CALL xios_orchidee_send_field("interp_diag_siltfraction",siltfraction) -
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate.f90
r8423 r8462 644 644 rest_id_stom, hist_id_stom, hist_id_stom_IPCC, & 645 645 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, & 648 648 deadleaf_cover, assim_param, temp_growth ) 649 649 … … 665 665 REAL(r_std),DIMENSION(kjpindex),INTENT(in) :: totfrac_nobio !! Fraction of grid cell covered by lakes, land ice, cities, ... (unitless) 666 666 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) 667 668 REAL(r_std),DIMENSION(kjpindex),INTENT(in) :: temp_air !! Air temperature at first atmospheric model layer (K) 668 669 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(in) :: lai !! Leaf area inex @tex $(m^2 m^{-2})$ @endtex … … 1188 1189 & (kjit, kjpij, kjpindex, & 1189 1190 & 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, & 1192 1193 & gpp, deadleaf_cover, assim_param, & 1193 1194 & lai, frac_age, height, veget, veget_max, & … … 1225 1226 !! ice, cities, ... (unitless) 1226 1227 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) 1227 1229 REAL(r_std),DIMENSION(kjpindex,nvm),INTENT(in) :: humrel !! Relative humidity ("moisture availability") 1228 1230 !! (0-1, unitless) … … 1231 1233 REAL(r_std),DIMENSION(kjpindex,nslm),INTENT(in) :: stempdiag !! Soil temperature (K) 1232 1234 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) 1233 1237 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) 1234 1240 REAL(r_std),DIMENSION(kjpindex),INTENT(in) :: precip_rain !! Rain precipitation 1235 1241 !! @tex $(mm dt_stomate^{-1})$ @endtex … … 1369 1375 1370 1376 !_ ================================================================================================================================ 1371 1377 1378 1372 1379 !! 1. Initialize variables 1373 1380 … … 1487 1494 CALL littercalc (kjpindex, & 1488 1495 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, & 1490 1497 litterpart, litter, dead_leaves, lignin_struc, & 1491 1498 deadleaf_cover, resp_hetero_litter, & 1492 1499 soilcarbon_input_inst, control_temp_inst, control_moist_inst, & 1493 matrixA, vectorB )1500 matrixA, vectorB, bulk, clay, carbon) 1494 1501 1495 1502 ! Heterothropic litter respiration during time step ::dt_sechiba @tex $(gC m^{-2})$ @endtex … … 1551 1558 & (kjpindex, dt_days, & 1552 1559 & 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, & 1554 1562 & precip_daily, npp_daily, biomass, & 1555 1563 & turnover_daily, gpp_daily, when_growthinit, & … … 1562 1570 & maxfpc_lastyear, maxfpc_thisyear, & 1563 1571 & humrel_month, humrel_week, t2m_longterm, tau_longterm, & 1564 & t2m_month, t2m_week, tsoil_month, 1572 & t2m_month, t2m_week, tsoil_month,soilhum_month, & 1565 1573 & npp_longterm, turnover_longterm, gpp_week, & 1566 1574 & gdd_m5_dormance, gdd_midwinter, ncd_dormance, ngd_minus5, & … … 1584 1592 & clay, herbivores, & 1585 1593 & tsurf_daily, tsoil_daily, t2m_daily, t2m_min_daily, & 1586 & litterhum_daily, soilhum_daily, &1594 & litterhum_daily, soilhum_daily, & 1587 1595 & maxhumrel_lastyear, minhumrel_lastyear, & 1588 1596 & gdd0_lastyear, precip_lastyear, & … … 2013 2021 !_ ================================================================================================================================ 2014 2022 2015 SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, assim_param)2023 SUBROUTINE stomate_finalize (kjit, kjpindex, index, clay, bulk, assim_param) 2016 2024 2017 2025 IMPLICIT NONE … … 2023 2031 INTEGER(i_std),DIMENSION(kjpindex),INTENT(in) :: index !! Indices of the terrestrial pixels only (unitless) 2024 2032 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) 2025 2034 REAL(r_std),DIMENSION(kjpindex,nvm,npco2),INTENT(in) :: assim_param !! min+max+opt temperatures (K) & vmax for photosynthesis 2026 2035 … … 2109 2118 dt_days, days_since_beg, & 2110 2119 ind, adapted, regenerate, & 2111 humrel_daily, gdd_init_date, litterhum_daily, 2120 humrel_daily, gdd_init_date, litterhum_daily,& 2112 2121 t2m_daily, t2m_min_daily, tsurf_daily, tsoil_daily, & 2113 2122 soilhum_daily, precip_daily, & -
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_io.f90
r8423 r8462 440 440 & .TRUE., litterhum_daily, 'gather', nbp_glo, index_g) 441 441 IF (ALL(litterhum_daily(:) == val_exp)) litterhum_daily(:) = zero 442 442 443 !- 443 444 t2m_daily(:) = val_exp … … 471 472 & .TRUE., soilhum_daily, 'gather', nbp_glo, index_g) 472 473 IF (ALL(soilhum_daily(:,:) == val_exp)) soilhum_daily(:,:) = zero 474 473 475 !- 474 476 precip_daily(:) = val_exp … … 604 606 & .TRUE., soilhum_month, 'gather', nbp_glo, index_g) 605 607 IF (ALL(soilhum_month(:,:) == val_exp)) soilhum_month(:,:) = zero 608 609 606 610 !- 607 611 ! 6 fire probability … … 993 997 CALL restget_p (rest_id_stomate, var_name, nbp_glo, nlitt , 1, itime, & 994 998 & .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 996 1004 ENDDO 997 1005 ENDDO … … 1013 1021 CALL restget_p (rest_id_stomate, var_name, nbp_glo, ncarb , 1, itime, & 1014 1022 & .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 1016 1028 ENDDO 1017 1029 !- … … 1689 1701 var_name = 't2m_daily' 1690 1702 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) 1692 1704 !- 1693 1705 var_name = 't2m_min_daily' 1694 1706 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) 1696 1708 !- 1697 1709 var_name = 'tsurf_daily' 1698 1710 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) 1700 1712 !- 1701 1713 var_name = 'tsoil_daily' 1702 1714 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) 1704 1716 !- 1705 1717 var_name = 'soilhum_daily' -
branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/stomate_litter.f90
r8423 r8462 26 26 27 27 ! modules used: 28 28 USE xios_orchidee 29 29 USE ioipsl_para 30 30 USE stomate_data … … 180 180 turnover, bm_to_litter, & 181 181 veget_cov_max, tsurf, tsoil, soilhum, litterhum, & 182 soilhumSAT, litterhumSAT, & 182 183 litterpart, litter, dead_leaves, lignin_struc, & 183 184 deadleaf_cover, resp_hetero_litter, & 184 185 soilcarbon_input, control_temp, control_moist, & 185 MatrixA, VectorB )186 MatrixA, VectorB, bulk, clay, carbon) 186 187 187 188 !! 0. Variable and parameter declaration … … 201 202 REAL(r_std), DIMENSION(npts,nslm), INTENT(in) :: soilhum !! Daily soil humidity of each soil layer 202 203 !! (unitless) 204 REAL(r_std), DIMENSION(npts,nslm), INTENT(in) :: soilhumSAT !! Daily soil humidity of each soil layer 205 !! (unitless) 203 206 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 204 211 205 212 !! 0.2 Output variables … … 261 268 REAL(r_std), DIMENSION(npts) :: soilhum_decomp !! Humidity used for decompostition in soil 262 269 !! (unitless) 270 REAL(r_std), DIMENSION(npts) :: soilhumSAT_decomp !! Humidity used for decompostition in soil 271 !! (unitless) for Moyano et al 2012 263 272 REAL(r_std), DIMENSION(npts) :: fd !! Fraction of structural or metabolic litter 264 273 !! decomposed (unitless) … … 585 594 586 595 !! 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(:)) 589 605 ! 590 606 !! 4.2 below: convolution of humidity and decomposer profiles … … 596 612 !! 4.2.2 integrate over the nslm levels 597 613 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(:)) 608 636 609 637 !! 5. fluxes from litter to carbon pools and respiration … … 850 878 851 879 !! ================================================================================================================================ 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 !! ================================================================================================================================ 852 1057 !! FUNCTION : control_moist_func 853 1058 !! … … 861 1066 !! \endlatexonly 862 1067 !! \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 864 1069 !! calculated in sechiba. 865 1070 !! Then, the function is ranged between Moistcont_min and 1:\n … … 871 1076 !! 872 1077 !! RETURN VALUE : ::moistfunc_result 873 !! 1078 !! 874 1079 !! REFERENCE(S) : None 875 1080 !! … … 877 1082 !! \n 878 1083 !_ ================================================================================================================================ 879 1084 880 1085 FUNCTION control_moist_func (npts, moist_in) RESULT (moistfunc_result) 881 1086 882 1087 !! 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) 890 1097 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 897 1102 !_ ================================================================================================================================ 898 1103 899 1104 moistfunc_result(:) = -moist_coeff(1) * moist_in(:) * moist_in(:) + moist_coeff(2)* moist_in(:) - moist_coeff(3) 900 1105 moistfunc_result(:) = MAX( moistcont_min, MIN( un, moistfunc_result(:) ) ) 901 1106 902 1107 END FUNCTION control_moist_func 903 904 1108 905 1109 !! ================================================================================================================================
Note: See TracChangeset
for help on using the changeset viewer.