Source code for crop_irradiance.uniform_crops.params

from crop_irradiance.uniform_crops.formalisms import config, sunlit_shaded_leaves
from crop_irradiance.uniform_crops.inputs import LumpedInputs, SunlitShadedInputs


[docs] class LumpedParams: def __init__(self, model: str, **kwargs): self.model = model if "clumping_factor" in kwargs: self.clumping_factor = kwargs["clumping_factor"] else: self.clumping_factor = 1 if self.model == "beer": self.extinction_coefficient = kwargs["extinction_coefficient"] elif self.model == "de_pury": self.canopy_reflectance_to_diffuse_irradiance = kwargs[ "canopy_reflectance_to_diffuse_irradiance" ] self.sky_sectors_number = kwargs["sky_sectors_number"] self.sky_type = kwargs["sky_type"] if "leaf_angle_distribution_factor" in kwargs: self.leaf_angle_distribution_factor = kwargs[ "leaf_angle_distribution_factor" ] else: self.leaf_angle_distribution_factor = config.SPHERICAL_ANGLES_FACTOR self.leaf_scattering_coefficient = ( sunlit_shaded_leaves.calc_leaf_scattering_coefficient( leaf_reflectance=kwargs["leaf_reflectance"], leaf_transmittance=kwargs["leaf_transmittance"], ) ) self.direct_black_extinction_coefficient = None self.direct_extinction_coefficient = None self.diffuse_extinction_coefficient = None self.canopy_reflectance_to_direct_irradiance = None
[docs] def update(self, inputs: LumpedInputs): self.direct_black_extinction_coefficient = ( sunlit_shaded_leaves.calc_direct_black_extinction_coefficient( solar_inclination=inputs.solar_inclination, leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, ) ) self.direct_extinction_coefficient = ( sunlit_shaded_leaves.calc_direct_extinction_coefficient( solar_inclination=inputs.solar_inclination, leaf_scattering_coefficient=self.leaf_scattering_coefficient, leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, ) ) self.diffuse_extinction_coefficient = ( sunlit_shaded_leaves.calc_diffuse_extinction_coefficient( leaf_area_index=sum(inputs.leaf_layers.values()), leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, leaf_scattering_coefficient=self.leaf_scattering_coefficient, sky_sectors_number=self.sky_sectors_number, sky_type=self.sky_type, )[0] ) self.canopy_reflectance_to_direct_irradiance = sunlit_shaded_leaves.calc_canopy_reflectance_to_direct_irradiance( direct_black_extinction_coefficient=self.direct_black_extinction_coefficient, leaf_scattering_coefficient=self.leaf_scattering_coefficient, )
[docs] class SunlitShadedParams: def __init__( self, leaf_reflectance: float, leaf_transmittance: float, sky_sectors_number: int, sky_type: str, canopy_reflectance_to_diffuse_irradiance: float, leaf_angle_distribution_factor: float = config.SPHERICAL_ANGLES_FACTOR, clumping_factor: float = 1, ): self.leaf_angle_distribution_factor = leaf_angle_distribution_factor self.sky_sectors_number = sky_sectors_number self.sky_type = sky_type self.canopy_reflectance_to_diffuse_irradiance = ( canopy_reflectance_to_diffuse_irradiance ) self.clumping_factor = clumping_factor self.direct_black_extinction_coefficient = None self.direct_extinction_coefficient = None self.diffuse_extinction_coefficient = None self.canopy_reflectance_to_direct_irradiance = None self.leaf_scattering_coefficient = ( sunlit_shaded_leaves.calc_leaf_scattering_coefficient( leaf_reflectance, leaf_transmittance ) )
[docs] def update(self, inputs: SunlitShadedInputs): self.direct_black_extinction_coefficient = ( sunlit_shaded_leaves.calc_direct_black_extinction_coefficient( solar_inclination=inputs.solar_inclination, leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, ) ) self.direct_extinction_coefficient = ( sunlit_shaded_leaves.calc_direct_extinction_coefficient( solar_inclination=inputs.solar_inclination, leaf_scattering_coefficient=self.leaf_scattering_coefficient, leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, ) ) self.diffuse_extinction_coefficient = ( sunlit_shaded_leaves.calc_diffuse_extinction_coefficient( leaf_area_index=sum(inputs.leaf_layers.values()), leaf_angle_distribution_factor=self.leaf_angle_distribution_factor, clumping_factor=self.clumping_factor, leaf_scattering_coefficient=self.leaf_scattering_coefficient, sky_sectors_number=self.sky_sectors_number, sky_type=self.sky_type, )[0] ) self.canopy_reflectance_to_direct_irradiance = sunlit_shaded_leaves.calc_canopy_reflectance_to_direct_irradiance( direct_black_extinction_coefficient=self.direct_black_extinction_coefficient, leaf_scattering_coefficient=self.leaf_scattering_coefficient, )