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
