Source code for openalea.cnwgrass.morphogenesis.parameters

# -*- coding: latin-1 -*-

from __future__ import division  # use "//" to do integer division

"""
    morphogenesis.parameters
    ~~~~~~~~~~~~~~~~~~~~~~

    The module :mod:`morphogenesis.parameters` defines the constant parameters.

"""


[docs] class Parameters(object): def __init__(self): # ------------------------------------------------------------------------------------------------------------------- # --- SAM # ------------------------------------------------------------------------------------------------------------------- # Parameters for temperature responses self.Temp_Tref = 12 # Arbitrary reference temperature (°C) self.Temp_Ea_R = 8900 # Parameter Ea/R in Eyring equation from Johnson and Lewin (1946) - Parameter value fitted from Kemp and Blacklow (1982) (K) self.Temp_DS_R = 68.432 # Parameter deltaS/R in Eyring equation from Johnson and Lewin (1946) - Parameter value fitted from Kemp and Blacklow (1982) (dimensionless) self.Temp_DH_R = 20735.5 # Parameter deltaH/R in Eyring equation from Johnson and Lewin (1946) - Parameter value fitted from Kemp and Blacklow (1982) (K) self.Temp_Ttransition = 9 # Below this temperature f = linear function of temperature instead of Arrhenius-like(°C) # Development self.PLASTOCHRONE = 70 / self.Temp_Tref * 24 * 3600 #76.1/12*24*3600 #: Leaf plastochron (s at 12°C) calculated from Ljutovac 2002 with primordia of 5E-5 m (76 dd) ; Malvoisin 35dd associated with init 3E-5 m self._delta_TT_GA = None self.max_nb_leaves = 11 #: Max number of leaves per axis # ------------------------------------------------------------------------------------------------------------------- # --- Leaves # ------------------------------------------------------------------------------------------------------------------- self.conc_sucrose_offset = 240 #: sucrose concentration under which no leaf and internode growth occurs (µmol of C g-1 mstruct) - same for root growth, see growth # Exponential elongation self.RERmax_Ljutovac_fit = {2: 2.55e-06, 3: 1.85e-06, 4: 1.7e-06, 5: 1.6e-06, 6: 1.5e-06, 7: 1.5e-06, 8: 1.5e-06, 9: 1.5e-06, 10: 1.4e-06, 11: 1.4e-06} # Optimal RERmax (s-1 at 12°C) calibrated from Ljutovac (2002) # { 5 : 0.00000279 , 6 : 0.00000176 , 7 : 0.00000162 , 8 : 0.00000144 , 9 : 0.00000144 , 10 : 0.00000144 , 11 : 0.00000142 } # Observed RER on data of Ljutovac 2002 RER (s-1 at 12°C) #RERmax = {2: 2.1e-06, 3: 2.5e-06, 4: 2.68e-06, 5: 2.65e-06, 6: 2.65e-06, 7: 2.65e-06, 8: 2.5e-06, 9: 2.3e-06, 10: 2.2e-06, 11: 2.2e-06} # RERmax (s-1 at 12°C) fitted for simulations accounting for metabolic regulation # self.RERmax = {2: 2.e-06, 3: 2.33e-06, 4: 2.19e-06, 5: 2.19e-06, 6: 2.25e-06, 7: 2.15e-06, 8: 2.1e-06, 9: 1.9e-06, 10: 1.75e-06, 11: 1.7e-06} # RERmax (s-1 at 12°C) fitted for simulations accounting for metabolic regulation self.RERmax = {2: 1.85e-06, 3: 2.57e-06, 4: 2.33e-06, 5: 2.22e-06, 6: 2.18e-06, 7: 2.05e-06, 8: 1.9e-06, 9: 1.75e-06, 10: 1.7e-06, 11: 1.7e-06} # RERmax (s-1 at 12°C) fitted for simulations accounting for metabolic regulation self.RER_Kc = 100 #: affinity coefficient of RER to C (µmol g-1) self.RER_Kn = 15 #: affinity coefficient of RER to N (µmol g-1) # Automate elongation #- Parameters for leaf 1 and 2 self.te_init = 250 * 3600 * 24 / 12 self.tm_init = 150 * 3600 * 24 / 12 self.tb_init = -35 * 3600 * 24 / 12 # - Following leaves self.te = 300 * 3600 * 24 / self.Temp_Tref #: end of leaf elongation in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 self.tm = 204.6 * 3600 * 24 / self.Temp_Tref #: time at which leaf elongation rate is maximal in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 self.tb = -114.3 * 3600 * 24 / self.Temp_Tref #: beginning of leaf elongation in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 # NB : Previous fit on adapted data from Fournier 2005 in phyllochronic time te = 271, tm=176, tb=-25 self.leaf_Lmax_MAX = 0.45 #: Maximum leaf_Lmax (m) self.leaf_pseudo_age_Vmax = 1.2 #: Maximal regulation of leaf length after emergence by CN status (dimensionless) self.leaf_pseudo_age_Kc = 150 #: affinity coefficient to C (µmol g-1) self.leaf_pseudo_age_Kn = 4 #: affinity coefficient to N (µmol g-1) # Leaf maximal width #- If optimal growth used self.leaf_Wmax_dict = {1: 0.0030, 2: 0.0033, 3: 0.0040, 4: 0.0048, 5: 0.00545, 6: 0.00734, 7: 0.00913, 8: 0.0111, 9: 0.0163, 10: 0.014, 11: 0.018} #: m (Ljutovac 2002) self.leaf_Wmax_Marion = {1: 0.0030, 2: 0.0033, 3: 0.0040, 4: 0.0045, 5: 0.0056, 6: 0.0075, 7: 0.010, 8: 0.012, 9: 0.013, 10: 0.014, 11: 0.018} #: m (Ljutovac 2002) # - If optimal growth not used self.leaf_W_L_MIN = 0.025 #: Minimal leaf width self.leaf_W_L_a = -0.02033728 self.leaf_W_L_b = -0.00005445836 self.leaf_W_L_c = 0.000459551 # Structural Specific Lamina Weight self.leaf_SSLW = {1: 21, 2: 21, 3: 21, 4: 22, 5: 22, 6: 22, 7: 22, 8: 24, 9: 25, 10: 28, 11: 31} # SSLW (g m-2) self.leaf_SSLW_Marion = {1: 21, 2: 21, 3: 22, 4: 17, 5: 19.58, 6: 20.9, 7: 23.55, 8: 25.63, 9: 28.65, 10: 28, 11: 31} # SSLW (g m-2) self.leaf_SSLW_NEMA = {1: 15, 2: 23, 3: 25, 4: 24, 5: 21, 6: 18, 7: 16, 8: 18, 9: 21, 10: 26, 11: 33} # Manip NEMA 05/06 traitments N+ (from data of J. Bertheloot, 2004) sauf pour F7/F8 self.leaf_SSLW_MIN = 5. self.leaf_SSLW_MAX = 45. self.leaf_SSLW_a = 47.50516 # g m-2 self.leaf_SSLW_b = 2927.944 # µmol C g-1 self.leaf_LSSW_dict = {1: 0.06, 2: 0.08, 3: 0.08, 4: 0.18, 5: 0.17, 6: 0.21, 7: 0.24, 8: 0.4, 9: 0.5, 10: 0.55, 11: 0.65} # Manip NEMA 05/06 Soissons N+ (from data of J. Bertheloot, 2004) self.leaf_LSSW_dict_Marion = {1: 0.06, 2: 0.08, 3: 0.09, 4: 0.16, 5: 0.21, 6: 0.26, 7: 0.32, 8: 0.37, 9: 0.43, 10: 0.55, 11: 0.65} self.leaf_LSSW_a = 0.00005 self.leaf_LSSW_integral_min = 1700 self.leaf_LSSW_nominal_A = 0.0403 self.leaf_LSSW_nominal_B = -0.0099 self.leaf_LSSW_MIN = 0.05 self.leaf_LSSW_MAX = 0.8 # Sheath: lamina ratio. Parameters of a polynomial function, from Dornbush 2011 self.SL_ratio_a = -0.0021 self.SL_ratio_b = 0.037 self.SL_ratio_c = - 0.1527 self.SL_ratio_d = 0.4962 # Ratio of leaf length composed by the division zone. # Parameters are used for an inverse beta function representing the ratio of the leaf composed by the division zone according to its relative length in log. # The model was fitted on literature data on wheat (Fournier 2005, Beemster and Masle 1996, Schuppler 1998). self.ratio_DZ_l_init = 0.065 #: normalized log of leaf length at which the leaf is fully composed by the division zone (dimensionless). self.ratio_DZ_l_mid = 0.075 #: intermediate point of the beta function (dimensionless). self.ratio_DZ_l_end = 0.7 #: normalized log of leaf length at which the leaf has no more division zone (dimensionless). # ------------------------------------------------------------------------------------------------------------------- # --- Internodes # ------------------------------------------------------------------------------------------------------------------- # Exponential elongation self.RERmax_dict_IN = {1: 2.4E-06, 2: 2.4E-06, 3: 1.85E-06, 4: 3.E-08, 5: 3.7E-06, 6: 3.3E-06, 7: 3.E-06, 8: 2.E-06, 9: 2.E-06, 10: 2.5E-06, 11: 2.5E-06, 12: 1.5E-06} #: s-1 at 12°C FIT jan 20 # RERmax_dict_IN = {1: 2.4E-06, 2: 2.4E-06, 3: 2.4E-06, 4: 2.4E-06, 5: 2.6E-06, 6: 2.6E-06, 7: 2.3E-06, 8: 1.9E-06, 9: 1.91E-06, 10: 1.9E-06, 11: 1.76E-06, 12: 1.5E-06} #: s-1 at 12°C FIT jan 20 # { 3 : 2.48E-06 ,4 : 2.48E-06 ,5 : 2.48E-06 , 6 : 2.48E-06 , 7 : 2.48E-06 , 8 : 2.48E-06 , 9 : 2.48E-06 , 10 : 1.9E-06 , 11 : 1.6E-06 }#: s-1 at 12°C # estimate from Ljutovac 2002 over the period until leaf ligulation i.e. wider than in the model. # Because i) not enough data if we consider only up to previous leaf ligulation, ii) same exponential like period # SCALING_FACTOR_INT = 59 #: Scaling factor of the internode in automate growth (dimensionless), Malvoisin 1984 II # SCALING_FACTOR_INT = 53 #: Scaling factor of the internode in automate growth (dimensionless), Ljutovac 2002, 250pl.m-2 # Initiation of internode elongation self.nb_PLASTO_internode_init = 5 #: Delay between leaf initiation and internode initiation expressed as a number of plastochron. From Malvoisin 1984b, associated with primordia of 5.10-4 m self.internode_L_init = 5E-5 #: Initial internode length (m) # Automate elongation # te_IN = 210 * 3600 * 24 /12 #: end of internode elongation in automate growth; Malvoisin 1984 II # tm_IN = 156 * 3600 * 24 /12 #: time at which internode elongation rate is maximal in automate growth (s); Malvoisin 1984 II # tb_IN = -70 * 3600 * 24 /12 #: beginning of internode elongation in automate growth (s); Malvoisin 1984 II self.te_IN = 331.7538 * 3600 * 24 / 12 #: end of internode elongation in automate growth; Ljutovac 2002, 250pl.m-2 self.tm_IN = 252.7798 * 3600 * 24 / 12 #: time at which internode elongation rate is maximal in automate growth (s);Ljutovac 2002, 250pl.m-2 self.tb_IN = -374.2918 * 3600 * 24 / 12 #: beginning of internode elongation in automate growth (s);Ljutovac 2002, 250pl.m-2 self.ratio_LSIW_LSSW = 2.5 #: ratio lineic structural internode mass / lineic structural sheath mass of the specific structural dry masses (from data of J. Bertheloot, 2004) self.internode_LSIW_dict = {1: 2.8, 2: 2.8, 3: 2.8, 4: 2.8, 5: 2.8, 6: 2.8, 7: 2.8, 8: 2.8, 9: 2.3, 10: 1.7, 11: 1.6, 12: 1.4, 13: 0.7} #: experiment of M.Gauthier 2017/18, consistent with R.Barillot 2014 # ------------------------------------------------------------------------------------------------------------------- # --- Coleoptiles # ------------------------------------------------------------------------------------------------------------------- self.delta_L_emergence = 0.003 #: length of visible coleoptile ie emerged from soil (m). Current value set allows coleo to match length of sheath 1 in Sreten. @property def delta_TT_GA(self): if self._delta_TT_GA is not None: return self._delta_TT_GA else: return self.PLASTOCHRONE * 5 #: Thermal time between floral transition of SAM and Gibberelin production expressed as a function of plastochron (s at 12°C) ; Malvoisin's data give 7 plastochrons @delta_TT_GA.setter def delta_TT_GA(self, value): """ Allows the value to be modified externally from simulation.py""" self._delta_TT_GA = value
[docs] class ParametersHydraulics(Parameters): def __init__(self): super().__init__() self.PLASTOCHRONE = 76.1 / self.Temp_Tref * 24 * 3600 self.RERmax = {1: 2.4E-06, 2: 2.4E-06, 3: 1.85E-06, 4: 3.E-08, 5: 3.45e-06, 6: 2.3e-06, 7: 2.2e-06, 8: 2.1e-06, 9: 2.0e-06, 10: 1.85e-06, 11: 1.76e-06} # RERmax (s-1 at 12°C) fitted for simulations accounting for metabolic regulation self.n = 4 #: Shape parameter of the xylem water potential function in RER (-) self.psi_ref = -0.185 #: Critical leaf water potential threshold at which RER is reduced by 50% (Mpa) (adapted from Boyer, 1968) self.lamina_Lmax_dict = {3: 0.09896253, 4: 0.10463127, 5: 0.10867923, 6: 0.1352669, 7: 0.16634665, 8: 0.19288286, 9: 0.25080917, 10: 0.28677033, 11: 0.3} #: Maximum lamina length (m) self.GAMMA = 0.2 #: Critical value for the pressure component which must be exceeded for irreversible volume changes (MPa). Found from Coussement et al., 2018 : 0.3 Mpa for soybean.
[docs] def parameters_factory(hydraulics=False): """ Factory for parameter instantiation according to the version of the model used :param bool hydraulics: if True the model will assume the coupling to the turgor-driven growth model :return: Instance of Parameters oo ParametersHydraulics """ if not hydraulics: return Parameters() else: return ParametersHydraulics()
[docs] class HiddenZoneInit(object): """ Initial values for hidden zones """ def __init__(self): self.leaf_is_growing = True self.internode_is_growing = False self.leaf_pseudostem_length = 4E-5 #: m self.delta_leaf_pseudostem_length = 0 #: m self.internode_distance_to_emerge = 0 #: m self.delta_internode_distance_to_emerge = 0 #: m, needed for growth self.leaf_L = 5E-5 #: m, should be consistent with PLASTOCHRONE self.delta_leaf_L = 0 #: m, needed for growth self.internode_L = 0 #: m self.delta_internode_L = 0 #: m, needed for growth self.leaf_Lmax = None #: m, no calculation before emergence Ln-1 self.leaf_Lmax_em = None #: m, no calculation before emergence Ln-1 self.lamina_Lmax = None #: m, no calculation before emergence Ln-1 self.sheath_Lmax = None #: m, no calculation before emergence Ln-1 self.leaf_Wmax = None #: m, no calculation before emergence Ln-1 self.SSLW = None #: g m-2, no calculation before emergence Ln-1 self.LSSW = None #: g m-1, no calculation before emergence Ln-1 (about 2) self.leaf_is_emerged = False self.internode_Lmax = None #: m, no calculation before ligulation Ln self.internode_Lmax_lig = None #: m, no calculation before ligulation Ln self.LSIW = None #: g m-1, no calculation before ligulation Ln self.internode_is_visible = False self.leaf_pseudo_age = 0 self.internode_pseudo_age = 0 self.delta_leaf_pseudo_age = 0 self.delta_internode_pseudo_age = 0 self.hiddenzone_age = 0 self.is_over = False self.leaf_is_remobilizing = False self.internode_is_remobilizing = False self.ratio_DZ = 1.0 # Default values used for RER calculation in morphogenesis self.sucrose = 5E-6 #: µmol C self.amino_acids = 4E-6 #: µmol N self.fructan = 0 #: µmol C - about 10% DM self.leaf_enclosed_mstruct = 1.26E-07 #: g self.internode_enclosed_mstruct = 0 #: g self.mstruct = self.leaf_enclosed_mstruct + self.internode_enclosed_mstruct #: g self.leaf_enclosed_Nstruct = self.leaf_enclosed_mstruct * 0.005 #: g, parameter value in Growth self.internode_enclosed_Nstruct = self.internode_enclosed_mstruct * 0.0322 #: g, parameter value in Growth self.Nstruct = self.leaf_enclosed_Nstruct + self.internode_enclosed_Nstruct #: g self.proteins = 2.6E-03 #: µmol N - about 9% N self.conc_cytokinins = 150 #: AU / g mstruct self.mean_conc_sucrose = 0 #: µmol C / g mstruct
[docs] class HiddenZoneInitHydraulics(HiddenZoneInit): """ Initial values for hidden zones """ def __init__(self): super().__init__() self.sheath_is_emerged = False self.init_leaf_L = 0 #: m, needed for growth self.leaf_pseudo_age = -1 #: s, no calculation before emergence Ln-1
[docs] class ElementInit(object): """ Initial values for emerged and growing elements """ def __init__(self): self.is_growing = True self.is_over = False self.length = 0 #: m self.Wmax = None # :m maximum lamina width (could store sheath and internode diameter as well) self.senesced_length_element = 0 #: m self.green_area = 0 #: m2 self.age = 0 #: Thermal Time self.age_teq = 0 #: s self.max_proteins = 0 #: µmol N self.Nresidual = 0 #: g self.sucrose = 0 #: µmol C self.amino_acids = 0 #: µmol N self.nitrates = 0 #: µmol N self.fructan = 0 #: µmol C self.starch = 0 #: µmol C self.proteins = 0 #: µmol N self.mstruct = 0 #: g self.senesced_mstruct = 0 #: g self.max_mstruct = 0 #: g self.Nstruct = 0 #: g self.cytokinins = 0 #: g