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/30 22:10] barley1965tutorials:radiation-model-in-crop_model9 [2025/10/31 14:11] (current) barley1965
Line 1: Line 1:
 ====== Assimilate Transport and Fruit Development ====== ====== Assimilate Transport and Fruit Development ======
  
-The Transport model extends the FlowerAging 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.+//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.
  
 ===== Assimilate Storage and Transport Parameters ===== ===== Assimilate Storage and Transport Parameters =====
  
  
-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>
-module Internode(super.length, int age, int rank, float as)  +module Internode(super.length, int age, int rank, float as) extends Cylinder(length, 0.1); 
- extends Cylinder(length, 0.1);+module Leaf(super.length, super.width, float al, int age, float as, int rank) extends Box(length, width, 0.01); 
 +module Fruit(float size, int age, float as) ==> Sphere(size).(setShader(RED)); 
 +</code>
  
-module Leaf(super.length, super.width, float al, int age, float as,  +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).
-    int rankextends Box(lengthwidth0.01);+
  
-module Fruit(float size, int age, float as) ==>  +===== Maintenance Respiration =====  
- Sphere(size).(setShader(RED)); +A maintenance respiration constant has been added to simulate the metabolic cost of keeping tissues alive (L. 96): 
-<\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). +<code java>
-2) Maintenance Respiration +
-A maintenance respiration constant has been added to simulate the metabolic cost of keeping tissues alive (L. 78):+
 const float MR = 0.01; //maintenance respiration const float MR = 0.01; //maintenance respiration
-This is applied to internodes during growth to simulate sugar consumption:+</code> 
 + 
 +This is applied to internodes during growth to simulate sugar consumption (L. 207 ff): 
 + 
 +<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]))); 
-3) Transport Mechanism +
-The core innovation is the implementation of a diffusion-based transport system. The transport occurs with a diffusion constant that controls the rate (L. 75): +</code> 
-const float DIFF_CONST = 0.001+ 
-The transport is invoked periodically in the grow() method - every 24 timesteps to simulate hourly transport (L. 138-143):+Note that 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 =====  
 +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> 
 +const float DIFF_CONST = 0.002
 +</code> 
 + 
 +Transport is invoked periodically in the ''grow()'' method - every 24 timesteps to simulate hourly transport (L. 145-149): 
 + 
 +<code java>
 if(time % 24 == 0) { if(time % 24 == 0) {
     for(int hour = 0; hour < 24; hour++) {     for(int hour = 0; hour < 24; hour++) {
Line 36: Line 53:
     }     }
 } }
-4) Transport Rules+</code> 
 + 
 +===== Transport Rules =====
 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>
 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 
-This rule ensures leaves retain a minimum amount (0.01) for maintenance while exporting the surplus. + if(itn[as] > 0.01 && lf[age]<10) { // Keep minimum for internode maintenance 
-b) Internode to Internode Transport (L. 260-268):+        float exportable = itn[as] - 0.01; 
 +        float r = DIFF_CONST * exportable; 
 +        lf[as] += r; 
 +        itn[as] -= r; 
 + //println("transport from internode to leaf"); 
 + } 
 +
 +</code> 
 + 
 +This rule ensures leaves retain a minimum amount (0.01) for maintenance while exporting the surplus. In fact, if you look closely, 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): 
 +<code java>
 i_top:Internode <-minDescendants- i_bottom:Internode ::> { i_top:Internode <-minDescendants- i_bottom:Internode ::> {
     if((i_bottom[as] - i_top[as])<=0) {      if((i_bottom[as] - i_top[as])<=0) { 
Line 61: Line 95:
     }     }
 } }
-This bidirectional transport follows the concentration gradient between successive internodes. +</code> 
-c) Internode to Fruit Transport (L. 269-275):+ 
 +This bidirectional transport follows the concentration gradient between successive internodes.  
 + 
 +**c) Internode to Fruit Transport** (L. 269-275): 
 +<code java>
 itn:Internode -minDescendants-> fr:Fruit ::> { itn:Internode -minDescendants-> fr:Fruit ::> {
     if(itn[as]>0) {     if(itn[as]>0) {
Line 71: Line 109:
     }     }
 } }
-5) Fruit Set Decision Based on Sugar Availability +</code> 
-The model now makes fruit formation dependent on available sugar in the plant (L. 165-172): +This final rule expresses transport in only one direction, i.e. fruits are //absolute sinks// (which is wrong, because young fruit are often green and have been shown to carry out photosynthesis).  
-fl:Flower(t, m), (t >= m) ==>  + 
-    {float sugar = sum((* lf:Leaf *)[as]); +===== Fruit Set Decision Based on Sugar Availability =====  
-    println(sugar); +The model now makes fruit formation dependent on sugar available in the nearest leaf (L. 169-174): 
-    }  +<code java> 
-    if(probability(0.6)) (Fruit(0.01,1,0.1)) +fl:Flower(t, m), (t >= m && t<m+2) ==>  
-    else if(probability(0.4)) (); + {float sugar = first((* Leaf *)[as]); 
-The sugar availability is calculated by summing all leaf assimilates before deciding on fruit formation. + println("sugar: " + sugar); 
-6) Fruit Growth Competition + }  
-Multiple fruits compete for available resources using an age-based weighting system (L. 209-225):+ if(sugar>0.0005) ({noFrts++;Fruit(0.01,1,0.1,noFrts)) 
 + else (fl); 
 +</code> 
 +Note that a ''Flower'' that has not yet become a ''Fruit'', has two more chances to become one.   
 +Availability of sugar is calculated by querying ''as'' of the nearest ''Leaf'' before deciding on fruit formation. 
 + 
 +===== Fruit Growth Competition ===== 
 +Multiple fruits compete for available resources using an age-based weighting system (L. 214-226): 
 +<code java>
 fr:Fruit ::> { fr:Fruit ::> {
     float totalSugar = sum((* lf1:Leaf *)[as]);     float totalSugar = sum((* lf1:Leaf *)[as]);
Line 95: Line 141:
     float sugar = (totalAgeWeight > 0) ?      float sugar = (totalAgeWeight > 0) ? 
         (totalSugar * ageWeight) / totalAgeWeight : totalSugar / fruitCount;         (totalSugar * ageWeight) / totalAgeWeight : totalSugar / fruitCount;
-Younger fruits receive proportionally more resources through exponential age weighting, simulating their stronger sink strength+    </code> 
-7) Visual Feedback+ 
 +Younger fruits receive proportionally more resources through exponential age weighting, simulating their stronger sink affinity (thereby compensating their smaller size)
 + 
 +===== 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>
 itn.(setShader(new RGBAShader(itn[as]*2000.0, itn[as]*1000, itn[as]))); itn.(setShader(new RGBAShader(itn[as]*2000.0, itn[as]*1000, itn[as])));
-Tasks for Exploration +</code> 
-1. Run the model and observe sugar flow: Watch how internodes change color as sugar moves through them. + 
-2. Modify DIFF_CONST: Try values between 0.0001 and 0.01. How does this affect: +===== Tasks for Exploration ===== 
-o Speed of sugar movement? +  Run the model and observe sugar flow: Watch how internodes change color as sugar moves through them. 
-o Final fruit size? +  Modify DIFF_CONST: Try values between 0.0001 and 0.01. How does this affect: 
-o Number of successfully developed fruits? +      Speed of sugar movement? 
-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? +  * Final fruit size? 
-4. Adjust maintenance respiration: Change MR from 0.01 to 0.05. How does increased respiration affect fruit development? +  * Number of successfully developed fruits? 
-Key Improvements Over FlowerAging Model +  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? 
-Feature FlowerAging Transport +  Adjust maintenance respiration: Change MR from 0.01 to 0.05. How does increased respiration affect fruit development? 
-Sugar tracking Only in leaves Leaves, internodes, and fruits + 
-Transport None Diffusion-based with user-defined edges +===== Biological Relevance =====
-Fruit growth Fixed size Based on sugar availability +
-Resource competition None Age-based weighting +
-Maintenance costs None Respiration in internodes +
-Visual feedback Leaf color only Leaf and internode color +
-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
Line 122: Line 167:
 • 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 strength
-The model provides a foundation for exploring how plant architecture and physiology interact to determine yield formation.+
  
tutorials/radiation-model-in-crop_model9.1761858646.txt.gz · Last modified: 2025/10/30 22:10 by barley1965