User Tools

Site Tools


tutorials:radiation-model-in-crop_model9

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tutorials:radiation-model-in-crop_model9 [2025/10/31 07:45] barley1965tutorials:radiation-model-in-crop_model9 [2025/11/01 15:40] (current) barley1965
Line 1: Line 1:
 ====== Assimilate Transport and Fruit Development ====== ====== Assimilate Transport and Fruit Development ======
  
-//Open {{ :tutorials:Transport.gsz |Transport.gsz}}//+//Open {{ :tutorials:advanced:Transport.gsz |Transport.gsz}}//
  
 The Transport model extends the [[:Tutorials:Radiation-model-in-crop model7|Flower aging model]] by implementing a physiologically-based system for sugar transport from photosynthetically active leaves through the plant architecture to developing fruits. This creates a more realistic simulation of source-sink relationships in the virtual plant. The Transport model extends the [[:Tutorials:Radiation-model-in-crop model7|Flower aging model]] by implementing a physiologically-based system for sugar transport from photosynthetically active leaves through the plant architecture to developing fruits. This creates a more realistic simulation of source-sink relationships in the virtual plant.
Line 8: Line 8:
  
  
-The model introduces a new parameter ''as'' (assimilate storage) to track sugar content in different organs:+The model introduces a new parameter ''as'' (assimilate storage) to track sugar content in different organs (L. 9, 12, 43):
  
 <code java> <code java>
Line 16: Line 16:
 </code> </code>
  
-Note that we now track assimilates (''as''in three types of modules: leaves (where they are produced), internodes (where they are transported), and fruits (where they accumulate).+Assimilates are monitored in three types of modules: leaves (where they are produced), internodes (where they are transported), and fruits (where they accumulate).
  
 ===== Maintenance Respiration =====  ===== Maintenance Respiration ===== 
-A maintenance respiration constant has been added to simulate the metabolic cost of keeping tissues alive (L. 78):+A maintenance respiration constant has been added to simulate the metabolic cost of keeping tissues alive (L. 96):
  
 <code java> <code java>
Line 25: Line 25:
 </code> </code>
  
-This is applied to internodes during growth to simulate sugar consumption:+This is applied to internodes during growth to simulate sugar consumption (L. 207 ff):
  
 <code java> <code java>
 itn:Internode ::> { itn:Internode ::> {
-    itn[age]++; + itn[age]++; 
-    if(itn[as]>0) {itn[as] *= (1-MR); } + if(itn[as]>0) {itn[as] *= (1-MR); } 
-    itn[length] += logistic(1, itn[age], 10, 0.1); + itn[length] += logistic(1, itn[age], 10, itn[as]); 
-}+ itn.(setShader(new RGBAShader(itn[as]*15.0, itn[as]*7.5, itn[as]))); 
 + }
 </code> </code>
 +
 +Internode length is incremented up to a fixed length of 1, however, we vary the speed of elongation as a function of sugar available in the internode, ''itn[as]''
  
 ===== Transport Mechanism =====  ===== Transport Mechanism ===== 
-The main novelty of the present model is the implementation of a diffusion-based transport system. The transport occurs with a diffusion constant that controls the rate (L. 75):+The main novelty of the present model is the implementation of a diffusion-based transport system. The transport occurs with a diffusion constant that controls the rate (L. 94):
  
 <code java> <code java>
-const float DIFF_CONST = 0.001;+const float DIFF_CONST = 0.002;
 </code> </code>
  
-The transport is invoked periodically in the ''grow()'' method - every 24 timesteps to simulate hourly transport (L. 138-143):+Transport is invoked periodically in the ''grow()'' method - every 24 timesteps to simulate hourly transport (L. 145-149):
  
 <code java> <code java>
Line 55: Line 58:
 Three types of transport are implemented using user-defined edge relations: Three types of transport are implemented using user-defined edge relations:
  
-**a) Leaf to Internode Transport** (L. 251-258):+**a) Leaf to Internode Transport, and vice versa ** (L. 256-280):
  
 <code java> <code java>
 lf:Leaf <-minDescendants- itn:Internode ::> { lf:Leaf <-minDescendants- itn:Internode ::> {
-    if(lf[as] > 0.01) { // Keep minimum for leaf maintenance+ if(lf[as] > 0.01 && lf[age]>=10) { // Keep minimum for leaf maintenance
         float exportable = lf[as] - 0.01;         float exportable = lf[as] - 0.01;
         float r = DIFF_CONST * exportable;         float r = DIFF_CONST * exportable;
         lf[as] -= r;         lf[as] -= r;
         itn[as] += r;         itn[as] += r;
-    + //println("transport from leaf to internode"); 
-}+ } else 
 + if(itn[as] > 0.01 && lf[age]<10) { // Keep minimum for internode maintenance 
 +        float exportable = itn[as] - 0.01; 
 +        float r = DIFF_CONST * exportable; 
 +        lf[as] += r; 
 +        itn[as] -= r; 
 + //println("transport from internode to leaf"); 
 +
 + }
 </code> </code>
  
-This rule ensures leaves retain a minimum amount (0.01) for maintenance while exporting the surplus.+This rule ensures leaves retain a minimum amount (0.01) for maintenance while exporting the surplus. As you can see from the second half of the rule, assimilates can also go the other way, from an internode to a (young) leaf, because the latter is a sugar sink before it has reached its final size and becomes a net exporter of assimilates! 
  
 **b) Internode to Internode Transport** (L. 260-268): **b) Internode to Internode Transport** (L. 260-268):
Line 86: Line 97:
 </code> </code>
  
-This bidirectional transport follows the concentration gradient between successive internodes.+This bidirectional transport follows the concentration gradient between successive internodes. 
  
 **c) Internode to Fruit Transport** (L. 269-275): **c) Internode to Fruit Transport** (L. 269-275):
Line 99: Line 110:
 } }
 </code> </code>
 +This final rule expresses transport in only one direction, i.e. fruits are //absolute sinks// (as usual, we simplify things here, because young fruit are often green and have been shown to carry out photosynthesis). 
  
 ===== Fruit Set Decision Based on Sugar Availability =====  ===== Fruit Set Decision Based on Sugar Availability ===== 
-The model now makes fruit formation dependent on available sugar in the plant (L. 165-172):+The model now makes fruit formation dependent on the availability of a threshold amount of sugar in the nearest leaf (L. 169-174):
 <code java> <code java>
-fl:Flower(t, m), (t >= m) ==>  +fl:Flower(t, m)(* <-minDescendants-Node-minDescendants->lf:Leaf *),(t >= m && t<m+2) ==> 
-    {float sugar = sum((* lf:Leaf *)[as])+ {float sugar = lf[as]; 
-    println(sugar); + println("sugar: " + sugar); 
-    }  + }  
-    if(probability(0.6)) (Fruit(0.01,1,0.1)) + if(sugar>0) ({noFrts++;Fruit(0.01,1,0.1,noFrts)) 
-    else if(probability(0.4)) ();+ else (fl);
 </code> </code>
- +Note that a ''Flower'' that has not yet become a ''Fruit'', has two more chances to become one.   
-Sugar availability is calculated by summing all leaf assimilates before deciding on fruit formation.+Availability of sugar is calculated by querying ''as'' of the nearest ''Leaf'' before deciding on fruit formation. This query uses two ''minDescendants'' edges, first down to the next lower Node module, then up to the attached Leaf.
  
 ===== Fruit Growth Competition ===== ===== Fruit Growth Competition =====
-Multiple fruits compete for available resources using an age-based weighting system (L. 209-225):+Multiple fruits compete for available resources using an age-based weighting system (L. 214-226):
 <code java> <code java>
 fr:Fruit ::> { fr:Fruit ::> {
Line 129: Line 141:
     float sugar = (totalAgeWeight > 0) ?      float sugar = (totalAgeWeight > 0) ? 
         (totalSugar * ageWeight) / totalAgeWeight : totalSugar / fruitCount;         (totalSugar * ageWeight) / totalAgeWeight : totalSugar / fruitCount;
-</code>+    </code>
  
-Younger fruits receive proportionally more resources through exponential age weighting, simulating their stronger sink strength.+Younger fruits receive proportionally more resources through exponential age weighting, simulating their stronger sink affinity (thereby compensating their smaller size).
  
 ===== Visual Feedback ===== ===== Visual Feedback =====
 Internodes change color based on their sugar content, providing visual feedback of the transport process: Internodes change color based on their sugar content, providing visual feedback of the transport process:
 <code java> <code java>
-itn.(setShader(new RGBAShader(itn[as]*2000.0, itn[as]*1000, itn[as])));+itn.(setShader(new RGBAShader(itn[as]*20.0, itn[as]*10, itn[as])));
 </code> </code>
  
-===== Tasks for Exploration ===== +{{:tutorials:transport.png?direct&400|}}
-1. Run the model and observe sugar flowWatch how internodes change color as sugar moves through them. +
-2. Modify DIFF_CONSTTry values between 0.0001 and 0.01. How does this affect: +
-o Speed of sugar movement? +
-o Final fruit size? +
-o Number of successfully developed fruits? +
-3. Change transport frequency: Modify the condition if(time % 24 == 0) to different values (e.g., % 12 for twice-daily transport). What impact does this have? +
-4. Adjust maintenance respiration: Change MR from 0.01 to 0.05How does increased respiration affect fruit development?+
  
 +===== Fruit growth: graphical output =====
 +In order to see the development in time of each fruit, we have created a graph "Fruit growth. Here is how the associated data table (fruitdata) is filled:
 +<code java>
 +fruitdata.(setColumnKey((int)fr[no]-1, fr[no]));
 +    if(time>0) {fruitdata.addRow().set((int)fr[no]-1,time,fr[size]);}
 +</code>
 +{{:tutorials:fruitgrowth.png?direct&400|}}
 +{{:tutorials:fruitgrowth2.png?direct&400|}}
 +{{:tutorials:fruitgrowth3.png?direct&400|}}
 +{{:tutorials:fruitgrowth4.png?direct&400|}}
 +
 +===== Tasks for Exploration =====
 +  - Run the model and observe sugar flow: Watch how internodes change color as sugar moves through them!
 +  - Modify DIFF_CONST: Try values between 0.0001 and 0.01. How does this affect: Speed of sugar movement? Final fruit size? Number of successfully developed fruits? 
 +  - Change transport frequency: Modify the condition if(time % 24 == 0) to different values (e.g., % 12 for twice-daily transport). What impact does this have?
 +  - Adjust maintenance respiration: Change MR from 0.01 to 0.05. How does increased respiration affect fruit development?
 +  - The different Fruit growth graphs have been produced by modifying a single parameter: which one could that have been? (Hint: have a look at the run method, where new lateral buds are inserted). 
 ===== Biological Relevance ===== ===== Biological Relevance =====
 This transport model introduces key physiological concepts: This transport model introduces key physiological concepts:
-Source-sink relationships: Leaves act as sources, fruits as sinks +  - Source-sink relationships: Leaves act as sources, fruits as sinks 
-Phloem transport: Simplified as diffusion along concentration gradients +  Phloem transport: Simplified as diffusion along concentration gradients 
-Competition for resources: Multiple sinks compete for limited assimilates +  Competition for resources: Multiple sinks compete for limited assimilates 
-Maintenance respiration: Realistic metabolic costs +  Maintenance respiration: Realistic metabolic costs 
-Sink strength: Younger fruits have stronger sink strength +  Sink strength: Younger fruits have stronger sink affinity
  
tutorials/radiation-model-in-crop_model9.1761893116.txt.gz · Last modified: 2025/10/31 07:45 by barley1965