APSIMInitiative / ApsimX

ApsimX is the next generation of APSIM
http://www.apsim.info
Other
132 stars 161 forks source link

Pest/Disease plant interface #4374

Open HamishBrownPFR opened 4 years ago

HamishBrownPFR commented 4 years ago

To implement pest/disease impacts on crop/pasture production we need an interface for plant to provide status info to the pest/disease model and it to send status changes back to the plant.

Reduce population Pests/Diseases that kill entire plants (e.g greasy cut worm). • Parameter “PlantMortality” specified for each life cycle stage • “Plantmortality” needs to access daily Plant population from plant model and assemble functions to return how many plants it kills each day. • Life cycle model aggregated plant mortality from each stage, determines the extent of biomass, LAI and RLD removal. This would be done in proportion to plant mortality • Cycle stages that return a positive “PlantMortality” will not need to return “BiomassRemoval” or “LAIRemoval” or “RLDReduction” • These stages may still return positive values for these damages if the pest/disease causes damage additional to the death of specific plants (i.e sub fatal plant damage) Remove biomass Pests/Diseases that remove biomass from one or more organ (e.g caterpillars) • Parameter “OrganFeedingDemand” specified for each life cycle stage • “OrganFeedingDemand” determines how much tissue each cycle stage will consume from the specified organ if feeding is unconstrained. • Multiple “OrganFeedingDemand” functions may be specified for each lifecycle if the pest/disease stage feeds on more than one organ (struggling to think of an example here) • Life cycle model gets feeding demands from all stages, reduces them if feed availability from the plant is constrained and then tells the plant how much biomass is removed from each organ. • Removal of biomass must cause a reduction in LAI (if from leaf) or RLD (if from root). However, it is up to the plant to translate loss of biomass into and pest model is to work out how much area/length is reduced Reduce effective LAI or RLD Pests/Diseases that remove the effective area of organs (e.g. diseases that cause neurotic spots/ chlotitic spots or obscure radiation absorption or gas exchange or leaves or pests that block conductivity of vesicles limiting hydraulic conductivity of roots) • Parameter “ReduceEffectiveDimension” specified for each life stage • “ReduceEffectiveDimension” determines the reduction in effective LAI or RLD. Disease works out how much it can potentially grow.
• LAI is not constrained to Leaf organs. Other organs can implement Icanopy and could be influenced by a reduction in effective dimensions (eg spots on pea pods) • Actual size of reduction is limited by the area/length of the organ that is being grown on. • Life cycle aggregated the reduction in effective area from all life stages and sends to plant. • Plant moves area from live to dead so the biomass remains but it no-longer partakes in radiation interception/ resource uptake processes Remove assimilate Pests/Diseases that remove sucrose directly from vessels (e.g. aphids) • Parameter “AssimilateFeedingDemand” specified for each life cycle stage • Organ is not relevant as the overall biomass supply is being tapped • Lifecycle sums up total assimilate demand from stages and sends to plant.

HamishBrownPFR commented 4 years ago

Assuming #4377 is merged there is an issue that needs to be fixed. The PlantOrganFunctionalDimensionReduction class needs a method that takes arguements of organ, and the amount of reduction. The IPlantDamage interace then needs to deprecate ReduceCanopy and ReduceRootLengthDensity methods and replace them with a ReduceFunctionalDiminsion method that then applies the changes to ICanopy or IRoot organs based on the organ type that was passed in.

jbrider commented 4 years ago

@Hamish Brown Hamish.Brown@plantandfood.co.nz Why does the interface need a direction parameter - they seem to be significantly different in the areas they affect? The title you put that under says 'or' which suggests it's trying to do 2 different things. Could you just rename the interface functions to DamageCanopy and DamageRoot?

On Wed, Nov 20, 2019 at 8:58 AM Hamish Brown notifications@github.com wrote:

Assuming #4377 https://github.com/APSIMInitiative/ApsimX/pull/4377 is merged there is an issue that needs to be fixed. The PlantOrganFunctionalDimensionReduction class needs a method that takes arguements of organ, and the amount of reduction. The IPlantDamage interace then needs to deprecate ReduceCanopy and ReduceRootLengthDensity methods and replace them with a ReduceFunctionalDiminsion method that then applies the changes to ICanopy or IRoot organs based on the organ type that was passed in.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/APSIMInitiative/ApsimX/issues/4374?email_source=notifications&email_token=AAE3G7AJA5ZMF54CGDIELHLQURVR7A5CNFSM4JO3VRP2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEQCOOA#issuecomment-555755320, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAE3G7AORA2JD5ZHSJJORRDQURVR7ANCNFSM4JO3VRPQ .

HamishBrownPFR commented 4 years ago

It is so we can fold them both into a single class at the Pest/Disease end.

jbrider commented 4 years ago

Should have read the code first, I though the initial post was about what was about to be added. I didn't realise it was already there.

It looks like you will need to create separate instances of PlantOrganFunctionalDimensionReduction for damage to different organs? You already have the organ - which I assume will need to implement the damage function, do you need to tell it that it will be canopy/root damage? Or will the damage function be at the plant level? in which case could you have an array of organs that each have damage values?

Either way, shouldn't the implementation know if it needs to reduce root or canopy given which organ is identified?

On Wed, Nov 20, 2019 at 9:41 AM Hamish Brown notifications@github.com wrote:

It is so we can fold them both into a single class at the Pest/Disease end.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/APSIMInitiative/ApsimX/issues/4374?email_source=notifications&email_token=AAE3G7E2X2OCXQM7YSYEXTDQUR2UDA5CNFSM4JO3VRP2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEQFMHY#issuecomment-555767327, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAE3G7HOXQ3ACDBWCZJ434LQUR2UDANCNFSM4JO3VRPQ .

jbrider commented 4 years ago

Could you create a Damage Object that gets passed around. Then the different object types would determine the damage type - biomass, canopy, root, etc.. Or using a more composite based pattern, you could have a damage object that contains an IFunction(s) for different damage effects: biomass, canopy, root, etc..

The object could then contain the organ(s) that can be damaged.

When you remove biomass/LAI are you removing N as well?