/// <summary> /// Calculates the radiation absorbed by the canopy, based on the position of the sun /// </summary> private void CalcAbsorbedRadiations(ISolarRadiation radiation) { // Set parameters Absorbed.DiffuseExtinction = Canopy.DiffuseExtCoeff; Absorbed.LeafScattering = Canopy.LeafScatteringCoeff; Absorbed.DiffuseReflection = Canopy.DiffuseReflectionCoeff; // Photon calculations (used by photosynthesis) var photons = Absorbed.CalcTotalRadiation(radiation.DirectPAR, radiation.DiffusePAR); Sunlit.PhotonCount = Absorbed.CalcSunlitRadiation(radiation.DirectPAR, radiation.DiffusePAR); Shaded.PhotonCount = photons - Sunlit.PhotonCount; // Energy calculations (used by water interaction) var PARDirect = radiation.Direct * 0.5 * 1000000; var PARDiffuse = radiation.Diffuse * 0.5 * 1000000; var NIRDirect = radiation.Direct * 0.5 * 1000000; var NIRDiffuse = radiation.Diffuse * 0.5 * 1000000; var PARTotalIrradiance = Absorbed.CalcTotalRadiation(PARDirect, PARDiffuse); var SunlitPARTotalIrradiance = Absorbed.CalcSunlitRadiation(PARDirect, PARDiffuse); var ShadedPARTotalIrradiance = PARTotalIrradiance - SunlitPARTotalIrradiance; // Adjust parameters for NIR calculations Absorbed.DiffuseExtinction = Canopy.DiffuseExtCoeffNIR; Absorbed.LeafScattering = Canopy.LeafScatteringCoeffNIR; Absorbed.DiffuseReflection = Canopy.DiffuseReflectionCoeffNIR; var NIRTotalIrradiance = Absorbed.CalcTotalRadiation(NIRDirect, NIRDiffuse); var SunlitNIRTotalIrradiance = Absorbed.CalcSunlitRadiation(NIRDirect, NIRDiffuse); var ShadedNIRTotalIrradiance = NIRTotalIrradiance - SunlitNIRTotalIrradiance; Sunlit.AbsorbedRadiation = SunlitPARTotalIrradiance + SunlitNIRTotalIrradiance; Shaded.AbsorbedRadiation = ShadedPARTotalIrradiance + ShadedNIRTotalIrradiance; }
public DCAPSTModel( ISolarGeometry solar, ISolarRadiation radiation, ITemperature temperature, IPathwayParameters pathway, ICanopyAttributes canopy, Transpiration trans ) { Solar = solar; Radiation = radiation; Temperature = temperature; this.pathway = pathway; Canopy = canopy; transpiration = trans; }
/// <summary> /// Recalculates canopy parameters for a new time step /// </summary> public void DoTimestepAdjustment(ISolarRadiation radiation) { CalcLAI(); CalcAbsorbedRadiations(radiation); CalcMaximumRates(); }