APSIMInitiative / ApsimX

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

Additional functionality for vernalisation function #4950

Open ntd14 opened 4 years ago

ntd14 commented 4 years ago

Could the ability to add a photoperiod requirement in the vernalisation function be included?

This would be used for species such as perennial ryegrass where there is a short photoperiod or lengthening photoperiod requirement in addition to the temperature profiles currently implemented.

@HamishBrownPFR is this something you could do? Thanks

HamishBrownPFR commented 4 years ago

This should be implemented as a set of separate phenological responses rather than lumping them into one. Happy to have a chat about the exact mechanisums and help design a phenology model to deal with this

ntd14 commented 4 years ago

Thanks Hamish, Yeah that would be good. I might have a chat with Richard first to make use I understand the physiology correctly. At the moment I have implemented it by splitting the vegetative phase into two parts, the first one ending at when the temperature requirement is met, and the second ending when the day length requirement is met. In reality I suspect these two phases overlap, but maybe this is still the best way of doing it anyway. When I posted the comment I hadn't thought of doing it this way and had a much messier way of doing it.

ntd14 commented 4 years ago

Hi @HamishBrownPFR, I had a pretty big conversation with Richard re his data and thoughts on how this all works. His data suggests that veranlisation from temperature accumulates at different rates depending on the day length.

For example, one genotype: (Others differ, and one appears to be related to increasing/decreasing day lengths) 4C @ 17 hours took 10 weeks 12C @ 17 hours didnt vernalise 12C @ 8 hours took 8 weeks

At the moment I have implemented something like what is below (ignore the specific values) accumulating to a target as part of a GeneticPhase function. But this is a fairly messy an unflexable way of doing it, it doesn't allow for devernalisation etc. and accumulation is controlled by limiting the phases which accumulation can occur.

Maybe the one I have implemented is the best solution for now as we dont really understand devernalisation?

{ "$type": "Models.Functions.AccumulateFunction, Models", "StartStageName": "Emergence", "EndStageName": "Vernalised", "ResetStageName": "TerminalSpikelet", "FractionRemovedOnCut": 0.0, "FractionRemovedOnHarvest": 0.0, "FractionRemovedOnGraze": 0.0, "FractionRemovedOnPrune": 0.0, "Name": "Progression", "Children": [ { "$type": "Models.Functions.MultiplyFunction, Models", "Name": "MultiplyFunction", "Children": [ { "$type": "Models.Functions.AirTemperatureFunction, Models", "Name": "VernalisingDays", "Children": [ { "$type": "Models.Functions.XYPairs, Models", "X": [ 0.0, 2.0, 4.0, 6.0, 8.0 ], "Y": [ 0.0, 1.0, 1.0, 0.0, 0.0 ], "Name": "XYPairs", "Children": [], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false } ], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false }, { "$type": "Models.Functions.LinearInterpolationFunction, Models", "Name": "Progression", "Children": [ { "$type": "Models.Functions.XYPairs, Models", "X": [ 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 20.0 ], "Y": [ 1.0, 1.0, 0.8, 0.6, 0.4, 0.1, 0.1, 0.0 ], "Name": "XYPairs", "Children": [], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false }, { "$type": "Models.Functions.VariableReference, Models", "VariableName": "[Phenology].Photoperiod", "Name": "XValue", "Children": [], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false } ], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false } ], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false } ], "IncludeInDocumentation": true, "Enabled": true, "ReadOnly": false }