tutorials:radiation-model-in-crop_model3
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorials:radiation-model-in-crop_model3 [2025/05/27 16:39] – barley1965 | tutorials:radiation-model-in-crop_model3 [2025/05/27 17:55] (current) – barley1965 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Introducing leaf growth ====== | ====== Introducing leaf growth ====== | ||
- | //Open LeafGrowth.gsz// | + | // |
Currently, the leaves and internodes of our plant just “pop up” with their final size, although in a real plant they would, of course, grow. Growth in length can be modelled easily: first, we need to give both '' | Currently, the leaves and internodes of our plant just “pop up” with their final size, although in a real plant they would, of course, grow. Growth in length can be modelled easily: first, we need to give both '' | ||
Line 20: | Line 20: | ||
Bud(r, p, o), (r < 10 && p == 0 && o <= 3) ==> RV(-0.1) | Bud(r, p, o), (r < 10 && p == 0 && o <= 3) ==> RV(-0.1) | ||
Internode(0.1, | Internode(0.1, | ||
- | [ RL(LEAF_ANGLE) Leaf(0.1, 0.07, 0, 1)] RH(GOLDEN_ANGLE) RV(-0.1) | + | [ RL(LEAF_ANGLE) Leaf(0.1, 0.07, 0)] RH(GOLDEN_ANGLE) RV(-0.1) |
- | Internode(0.1, 1) Bud(r+1, PHYLLOCHRON, | + | Internode(0.1) Bud(r+1, PHYLLOCHRON, |
</ | </ | ||
Line 39: | Line 39: | ||
<code java> | <code java> | ||
- | module Internode(super.length, | + | module Internode(super.length, |
Cylinder(length, | Cylinder(length, | ||
{setShader(internodemat); | {setShader(internodemat); | ||
} | } | ||
- | module Leaf(super.length, | + | module Leaf(super.length, |
Box(length, | Box(length, | ||
(setShader(new AlgorithmSwitchShader(new RGBAShader(0, | (setShader(new AlgorithmSwitchShader(new RGBAShader(0, | ||
Line 50: | Line 50: | ||
- | Next, we need to initialize age with 1 in the run() method (L. 103). | + | Next, we need to initialize |
+ | |||
+ | <code java> | ||
+ | Bud(r, p, o), (r < 10 && p == 0 && o <= 3) ==> RV(-0.1) | ||
+ | Internode(0.1, | ||
+ | [ RL(LEAF_ANGLE) Leaf(0.1, 0.07, 0, 1)] RH(GOLDEN_ANGLE) RV(-0.1) | ||
+ | Internode(0.1, | ||
+ | </ | ||
- | Then, we extend the Leaf rule in the method that we now rename to absorbAndGrow() to model leaf ageing and extension in length and width: | + | Then, we extend the '' |
+ | |||
+ | <code java> | ||
+ | protected void absorbAndGrow() | ||
+ | [ | ||
+ | lf:Leaf ::> { | ||
+ | lf[al] = lm.getAbsorbedPower3d(lf).integrate()*2.25; | ||
+ | // | ||
+ | lf.(setShader(new AlgorithmSwitchShader(new RGBAShader(lf[al]/ | ||
+ | //ageing and growth of leaf: | ||
+ | lf[age]++; | ||
+ | lf[length] += logistic(3, | ||
+ | lf[width] = lf[length]*0.7; | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
Finally, we add another execution (update) rule to model internode extension: | Finally, we add another execution (update) rule to model internode extension: | ||
- | |||
- | Task: Change the leaf growth | + | <code java> |
- | | + | protected void absorbAndGrow() |
+ | [ | ||
+ | lf:Leaf ::> { | ||
+ | lf[al] = lm.getAbsorbedPower3d(lf).integrate()*2.25; | ||
+ | // | ||
+ | lf.(setShader(new AlgorithmSwitchShader(new RGBAShader(lf[al]/ | ||
+ | //ageing and growth | ||
+ | lf[age]++; | ||
+ | lf[length] += logistic(3, | ||
+ | lf[width] = lf[length]*0.7; | ||
+ | } | ||
+ | // | ||
+ | itn: | ||
+ | itn[age]++; | ||
+ | itn[length] += logistic(1, | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | //Task: Change the leaf growth parameters to obtain a very flat or else a rather steep light interception curve! (see figures below)// | ||
+ | |||
+ | {{tutorials: | ||
tutorials/radiation-model-in-crop_model3.1748356749.txt.gz · Last modified: 2025/05/27 16:39 by barley1965