Source code for openalea.cnwgrass.hydraulics.parameters

# -*- coding: latin-1 -*-
"""
    hydraulics.parameters
    ~~~~~~~~~~~~~~~~~~

    The module :mod:`hydraulics.parameters` defines the parameters of the model.

"""

from math import exp

HOUR_TO_SECOND_CONVERSION_FACTOR = 3600.  #: Number of seconds in 1 hour

CELSIUS_2_KELVIN = 273.15  #: conversion factor from degree Celsius to Kelvin
R = 8.31  #: Perfect gas constant (J mol-1 K-1)
RHO_WATER = 1E6  #: Water density (g m-3)
PI = 3.141592653    #: Pi (?)

NB_C_SUCROSE = 12  #: Number of C in 1 mol of sucrose
SUCROSE_MOLAR_MASS = 342  #: g mol-1
AMINO_ACIDS_N_RATIO = 1.17  #: Mean number of mol of N in 1 mol of the major amino acids of plants (Glu, Gln, Ser, Asp, Ala, Gly)
WATER_MOLAR_MASS = 18  #: g mol-1
VSTORAGE = 0.8  #: Storage portion of the volume of the organ (-)

VANT_HOFF_SUCROSE = 1  #: Van't Hoff coefficient of sucrose (dimensionless)
VANT_HOFF_AMINO_ACIDS = 1.25  #: Van't Hoff coefficient estimated for amino acids (dimensionless)

RATIO_MSTRUCT_DM = 0.8  #: Ratio mstruct/dry matter (dimensionless). From growth model.
SLOPE_MASS_VOLUME = 3.23337E-06  #: Slope of the relation between leaf dry mass and its volume at the time of the previous leaf emergence (m3 g-1). Found from Williams 1960, Fig 11.
OFFSET_MASS_VOLUME = 1.82312E-13  #: Offset of the relation between leaf dry mass and its volume at the time of the previous leaf emergence (m3). Found from Williams 1960, Fig 11.


[docs] class PopulationParameters(object): """ Internal parameters of populations. """ def __init__(self): pass
#: The instance of class :class:`hydraulics.parameters.PopulationParameters` for current process POPULATION_PARAMETERS = PopulationParameters()
[docs] class PlantParameters(object): """ Internal parameters of plants. """ def __init__(self): super(PlantParameters, self).__init__() self.plant_density = 250
#: The instance of class :class:`hydraulics.parameters.PlantParameters` for current process PLANT_PARAMETERS = PlantParameters()
[docs] class AxisParameters(object): """ Internal parameters of axes. """ def __init__(self): pass
#: The instance of class :class:`hydraulics.parameters.AxisParameters` for current process AXIS_PARAMETERS = AxisParameters()
[docs] class AxisInitCompartments(object): """ Initial values for compartments of axis. """ def __init__(self): # state parameters self.SAM_temperature = 12 #: initial temperature of shoot apical meristem (°C)
#: The instance of class :class:`hydraulics.parameters.PhytomerInitCompartments` for current process AXIS_INIT_COMPARTMENTS = AxisInitCompartments()
[docs] class PhytomerParameters(object): """ Internal parameters of phytomers. """ def __init__(self): pass
#: The instance of class :class:`hydraulics.parameters.PhytomerParameters` for current process PHYTOMER_PARAMETERS = PhytomerParameters()
[docs] class PhytomerInitCompartments(object): """ Initial values for compartments of hidden zones. """ def __init__(self): # state parameters self.Tr = 0 #: mmol H20 m-2 s-1 self.green_area = 0 #: m2
#: The instance of class :class:`hydraulics.parameters.PhytomerInitCompartments` for current process PHYTOMER_INIT_COMPARTMENTS = PhytomerInitCompartments()
[docs] class OrganParameters(object): """ Internal parameters of organs. """ def __init__(self): super(OrganParameters, self).__init__()
#: The instance of class :class:`hydraulics.parameters.PhytomerParameters` for current process ORGAN_PARAMETERS = OrganParameters()
[docs] class HiddenZoneParameters(OrganParameters): """ Internal parameters of hidden growing zones. """ def __init__(self): super(HiddenZoneParameters, self).__init__() # Elasticity self.epsilon = {'x': 50, 'y': 40, 'z': 50} #: Dimension-specific elasticity in relation to reversible dimensional changes (MPa). x: width, y: thickness, z: length. # Extensibility self.phi_initial = {'x': 13E-09, 'y': 10E-09, 'z': 34E-06} #: Initial dimension-specific cell wall extensibility in relation to non-reversible dimensional changes (MPa-1 s-1) # Length self.tend = 2160000 #: end of leaf elongation in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 self.tmax = 1473120 #: time at which leaf elongation rate is maximal in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 self.tbase = -822960 #: beginning of leaf elongation in automate growth (s at 12°c); fitted from adapted data from Fournier 2005 # 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) # Maximal leaf length self.leaf_Lmax_MAX = 0.45 #: Maximum leaf_Lmax (m) (Gauthier et al., 2021) # Maximal leaf width 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 L0 = abs((1 + (self.tend / (self.tend - self.tmax))) * (min(1.0, float(-self.tbase) / float(self.tend - self.tbase)) ** ((self.tend - self.tbase) / (self.tend - self.tmax)))) #: Leaf length at t=0 in automate growth (beta function) (m) FITTED_L0 = 0.01557936 #: Fitted value of leaf length at t=0 after rescaling the beta function with L0 (m); Fournier 2005 sur courbe corrigee self.OFFSET_LEAF = FITTED_L0 - L0 #: Offset used for the final fitting of the beta function (m) self.RATIO_MSTRUCT_DM = 0.8 #: Ratio mstruct/dry matter (dimensionless). From growth model. self.SLOPE_MASS_VOLUME = 3.23337E-06 #: Slope of the relation between leaf dry mass and its volume at the time of the previous leaf emergence (m3 g-1). Found from Williams 1960, Fig 11. self.OFFSET_MASS_VOLUME = 1.82312E-13 #: Offset of the relation between leaf dry mass and its volume at the time of the previous leaf emergence (m3). Found from Williams 1960, Fig 11. 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. self.Sa = 260 #: (mol m-3) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sb = 0.9 #: (-) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sc = -8.5 #: (-) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sd = 1000 #: (mol m-3) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.WL_ratio = 0.675 #: - self.TL_ratio = 0.14 #: -
#: The instance of class :class:`hydraulics.parameters.HiddenZoneParameters` for current process HIDDEN_ZONE_PARAMETERS = HiddenZoneParameters()
[docs] class HiddenZoneInitCompartments(object): """ Initial values for compartments of hidden zones. """ def __init__(self): self.Tr = 0 #: mmol H20 m-2 s-1 self.green_area = 0 #: m2 self.temperature = 8 #: °C self.hiddenzone_age = 0 #: °Cd self.leaf_pseudo_age = -1 #: °Cd self.amino_acids = 0.000075 #: :math:`:math:`\\mu mol N`` self.proteins = 0.0011 #: :math:`:math:`\\mu mol N`` self.sucrose = 0.000384 #: :math:`:math:`\\mu mol C`` self.fructan = 0 #: :math:`:math:`\\mu mol C`` self.mstruct = 1.26E-07 #: g self.leaf_enclosed_mstruct = 1.26E-07 #: g self.delta_teq = 3600 #: s #: time equivalent to a reference temperature i.e. temperature-compensated time (Parent, 2010) self.leaf_pseudostem_length = 4E-5 #: m self.leaf_L = 5E-5 #: m self.length_hz_En = None #: m self.lamina_Lmax = None #: m self.leaf_Wmax = None #: m self.leaf_is_growing = True #: - self.width = 0.003 #: m self.thickness = 0.0005 #: m self.volume = self.leaf_L * self.width * self.thickness self.water_content = self.volume * RHO_WATER self.water_influx = 0 #: g H2O self.water_outflow = 0 #: g H2O self.SRWC = 80 #: % self.osmotic_water_potential = -0.8 #: Mpa self.water_potential = - exp((-self.SRWC + 39.765) / 18.902) #: MPa self.turgor_water_potential = self.water_potential - self.osmotic_water_potential #: MPa
#: The instance of class :class:`hydraulics.parameters.HiddenZoneInitCompartments` for current process HIDDEN_ZONE_INIT_COMPARTMENTS = HiddenZoneInitCompartments()
[docs] class RootsParameters(object): """ Internal parameters of roots. """ def __init__(self): super(RootsParameters, self).__init__()
#: The instance of class :class:`cnmetabolism.parameters.XylemParameters` for current process ROOTS_PARAMETERS = RootsParameters()
[docs] class RootsInitCompartments(object): """ Initial values for compartments of roots """
#: The instance of class :class:`cnmetabolism.parameters.RootsInitCompartments` for current process ROOTS_INIT_COMPARTMENTS = RootsInitCompartments()
[docs] class XylemParameters(object): """ Internal parameters of xylem. """ def __init__(self): super(XylemParameters, self).__init__() self.R_xylem_hz = 1 #: Flow resistance between xylem and shoot organs (Mpa s g-1 m) : 1 self.R_soil = 1E-05 #: Flow resistance between soil and xylem (Mpa s g-1 m) : 1E-05 self.R_xylem_organ = 0.25 #: Flow resistance between xylem and shoot organs (Mpa s g-1 m) : 0.25
#: The instance of class :class:`cnmetabolism.parameters.XylemParameters` for current process XYLEM_PARAMETERS = XylemParameters()
[docs] class XylemInitCompartments(object): """ Initial values for compartments of xylem. """ def __init__(self): # state parameters # intermediate variables self.SRWC = 80 #: % self.soil_water_potential = - exp((-self.SRWC + 39.765) / 18.902) #: MPa self.water_potential = - exp((-self.SRWC + 39.765) / 18.902) #: MPa
#: The instance of class :class:`cnmetabolism.parameters.XylemInitCompartments` for current process XYLEM_INIT_COMPARTMENTS = XylemInitCompartments()
[docs] class PhotosyntheticOrganElementParameters(object): """ Internal parameters of Photosynthetic Organ Element. """ def __init__(self): super(PhotosyntheticOrganElementParameters, self).__init__() self.epsilon = {'x': 150, 'y': 120, 'z': 150} #: Dimension-specific elasticity in relation to reversible dimensional changes (MPa). x: width, y: thickness, z: length. self.Sa = 260 #: (mol m-3) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sb = 0.9 #: (-) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sc = -8.5 #: (-) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential self.Sd = 1000 #: (mol m-3) Parameter of a sigmoidal function of equivalent solutes concentration used in osmotic water potential
#: The instance of class :class:`cnmetabolism.parameters.PhotosyntheticOrganElementParameters` for current process PHOTOSYNTHETIC_ORGAN_ELEMENT_PARAMETERS = PhotosyntheticOrganElementParameters()
[docs] class PhotosyntheticOrganElementInitCompartments(object): """ Initial values for compartments of photosynthetic organ elements. """ def __init__(self): # state parameters self.is_growing = None #: - self.age = None #: °Cd self.Wmax = None #: °Cd self.amino_acids = 0 #: :math:`:math:`\\mu mol N`` self.proteins = 0 #: :math:`:math:`\\mu mol N`` self.sucrose = 0 #: :math:`:math:`\\mu mol C`` self.fructan = 0 #: :math:`:math:`\\mu mol C`` self.temperature = 0 #: °C self.Ts = 12 #: °C self.green_area = 1E-4 #: initial value of green_area (m2) self.Tr = 0 #: mmol H20 m-2 s-1 self.mstruct = 0 #: g self.width = 0.003 #: m init self.thickness = 0.0005 #: m init self.length = 4E-5 #: m init self.volume = self.length * self.width * self.thickness self.water_content = self.volume * RHO_WATER self.water_influx = 0 #: g H2O self.water_outflow = 0 #: g H2O self.SRWC = 80 #: % self.osmotic_water_potential = -0.8 #: MPa self.water_potential = - exp((-self.SRWC + 39.765) / 18.902) #: MPa self.turgor_water_potential = self.water_potential - self.osmotic_water_potential #: MPa
#: The instance of class :class:`hydraulics.parameters.LaminaInitCompartments` for current process PHOTOSYNTHETIC_ORGAN_ELEMENT_INIT_COMPARTMENTS = PhotosyntheticOrganElementInitCompartments()
[docs] class LaminaElementParameters(OrganParameters): """ Internal parameters of lamina. """ def __init__(self): super(LaminaElementParameters, self).__init__() self.epsilon = {'x': 150, 'y': 120, 'z': 150} #: Dimension-specific elasticity in relation to reversible dimensional changes (MPa). x: width, y: thickness, z: length.
#: The instance of class :class:`hydraulics.parameters.LaminaParameters` for current process LAMINA_ELEMENT_PARAMETERS = LaminaElementParameters()
[docs] class LaminaElementInitCompartments(object): """ Initial values for compartments of lamina elements. """ def __init__(self): # state parameters self.width = 0.003 #: m self.thickness = 0.0005 #: m
#: The instance of class :class:`hydraulics.parameters.LaminaElementInitCompartments` for current process LAMINA_ELEMENT_INIT_COMPARTMENTS = LaminaElementInitCompartments()
[docs] class InternodeElementParameters(OrganParameters): """ Internal parameters of internodes. """ def __init__(self): super(InternodeElementParameters, self).__init__() self.epsilon = {'x': 10, 'y': 10, 'z': 10} #: Dimension-specific elasticity in relation to reversible dimensional changes (MPa). x: width, y: thickness, z: length.
#: The instance of class :class:`hydraulics.parameters.InternodeParameters` for current process INTERNODE_ELEMENT_PARAMETERS = InternodeElementParameters()
[docs] class InternodeElementInitCompartments(object): """ Initial values for compartments of internode elements. """ def __init__(self): # state parameters self.width = 0.003 #: m self.thickness = 0.0005 #: m
#: The instance of class :class:`hydraulics.parameters.InternodeElementInitCompartments` for current process INTERNODE_ELEMENT_INIT_COMPARTMENTS = InternodeElementInitCompartments()
[docs] class SheathElementParameters(OrganParameters): """ Internal parameters of sheaths. """ def __init__(self): super(SheathElementParameters, self).__init__() self.epsilon = {'x': 150, 'y': 120, 'z': 150} #: Dimension-specific elasticity in relation to reversible dimensional changes (MPa). x: width, y: thickness, z: length.
#: The instance of class :class:`hydraulics.parameters.InternodeParameters` for current process SHEATH_ELEMENT_PARAMETERS = SheathElementParameters()
[docs] class SheathElementInitCompartments(object): """ Initial values for compartments of sheath elements. """ def __init__(self): # state parameters self.width = 0.003 #: m self.thickness = 0.0005 #: m
#: The instance of class :class:`hydraulics.parameters.SheathElementInitCompartments` for current process SHEATH_ELEMENT_INIT_COMPARTMENTS = SheathElementInitCompartments()
[docs] class SoilParameters(object): """ Internal parameters of soil. """ def __init__(self): self.AWC = 50 # Available Water Capacity (g) self.Soil_a = 15.906 #: Mpa - Parameter for soil water function (adapté pour sol limono-argileux profond, Grignon) self.Soil_b = 18.902 #: % - Parameter for soil water function (adapté pour sol limono-argileux profond, Grignon)
#: The instance of class :class:`cnmetabolism.parameters.SoilParameters` for current process SOIL_PARAMETERS = SoilParameters()