Quick examples

This page is meant for people who have set up their environment and just want to copy-paste an example or two, see what the REPL returns and start tinkering.

If you are less comfortable with Julia, or need to set up an environment first, see this page : Getting started with Julia. If you wish for a more detailed rundown of the examples, you can instead have a look at the step by step section, which will go into more detail.

These examples are all for single-scale simulations. For multi-scale modelling tutorials and examples, refer to [this section][#multiscale]

You can find the implementation for all the example models, as well as other toy models in the examples folder.

Environment

These examples assume you have a working Julia environment with PlantSimengine added to it, as well as the other packages used in these examples. Details for getting to that point are provided on the Installing and running PlantSimEngine page.

Example with a single light interception model and a single weather timestep

using PlantSimEngine, PlantMeteo
using PlantSimEngine.Examples
meteo = Atmosphere(T = 20.0, Wind = 1.0, Rh = 0.65, Ri_PAR_f = 500.0)
leaf = ModelList(Beer(0.5), status = (LAI = 2.0,))
out = run!(leaf, meteo)
TimeStepTable{Status{(:LAI, :aPPFD), Tuple{...}(1 x 2):
╭─────┬─────────┬─────────╮
 Row      LAI    aPPFD 
      Float64  Float64 
├─────┼─────────┼─────────┤
   1      2.0   1444.4 
╰─────┴─────────┴─────────╯

Coupling the light interception model with a Leaf Area Index model

The weather data in this example contains data over 365 days, meaning the simulation will have as many timesteps.

using PlantSimEngine
using PlantMeteo, CSV, DataFrames

using PlantSimEngine.Examples

meteo_day = CSV.read(joinpath(pkgdir(PlantSimEngine), "examples/meteo_day.csv"), DataFrame, header=18)

models = ModelList(
    ToyLAIModel(),
    Beer(0.5),
    status=(TT_cu=cumsum(meteo_day.TT),),
)

outputs_coupled = run!(models, meteo_day)
TimeStepTable{Status{(:TT_cu, :LAI, :aPPFD)...}(365 x 3):
╭─────┬──────────┬────────────┬───────────╮
 Row     TT_cu         LAI      aPPFD 
       Float64     Float64    Float64 
├─────┼──────────┼────────────┼───────────┤
   1       0.0  0.00554988  0.0396961 
   2       0.0  0.00554988    0.02173 
   3       0.0  0.00554988  0.0314899 
   4       0.0  0.00554988  0.0390834 
   5       0.0  0.00554988  0.0454514 
   6       0.0  0.00554988  0.0472677 
   7       0.0  0.00554988    0.04346 
   8       0.0  0.00554988  0.0469832 
   9       0.0  0.00554988  0.0291703 
  10       0.0  0.00554988  0.0140052 
  11       0.0  0.00554988  0.0505283 
  12       0.0  0.00554988  0.0405277 
  13    0.5625  0.00557831  0.0297814 
  14  0.945833  0.00559777  0.0433269 
  15  0.979167  0.00559946  0.0470271 

╰─────┴──────────┴────────────┴───────────╯
                           350 rows omitted

Coupling the light interception and Leaf Area Index models with a biomass increment model

using PlantSimEngine
using PlantMeteo, CSV, DataFrames

using PlantSimEngine.Examples

meteo_day = CSV.read(joinpath(pkgdir(PlantSimEngine), "examples/meteo_day.csv"), DataFrame, header=18)

models = ModelList(
    ToyLAIModel(),
    Beer(0.5),
    ToyRUEGrowthModel(0.2),
    status=(TT_cu=cumsum(meteo_day.TT),),
)

outputs_coupled = run!(models, meteo_day)
TimeStepTable{Status{(:TT_cu, :LAI, :aPPFD,...}(365 x 5):
╭─────┬──────────┬────────────┬───────────┬────────────┬───────────────────╮
 Row     TT_cu         LAI      aPPFD     biomass  biomass_increment 
       Float64     Float64    Float64     Float64            Float64 
├─────┼──────────┼────────────┼───────────┼────────────┼───────────────────┤
   1       0.0  0.00554988  0.0396961  0.00793922         0.00793922 
   2       0.0  0.00554988    0.02173   0.0122852           0.004346 
   3       0.0  0.00554988  0.0314899   0.0185832         0.00629798 
   4       0.0  0.00554988  0.0390834   0.0263999         0.00781668 
   5       0.0  0.00554988  0.0454514   0.0354902         0.00909028 
   6       0.0  0.00554988  0.0472677   0.0449437         0.00945354 
   7       0.0  0.00554988    0.04346   0.0536357         0.00869201 
   8       0.0  0.00554988  0.0469832   0.0630324         0.00939665 
   9       0.0  0.00554988  0.0291703   0.0688664         0.00583406 
  10       0.0  0.00554988  0.0140052   0.0716675         0.00280105 
  11       0.0  0.00554988  0.0505283   0.0817731          0.0101057 
  12       0.0  0.00554988  0.0405277   0.0898787         0.00810554 
  13    0.5625  0.00557831  0.0297814    0.095835         0.00595629 
  14  0.945833  0.00559777  0.0433269      0.1045         0.00866538 
  15  0.979167  0.00559946  0.0470271    0.113906         0.00940542 

╰─────┴──────────┴────────────┴───────────┴────────────┴───────────────────╯
                                                            350 rows omitted

Example using PlantBioPhysics

A companion package, PlantBioPhysics, uses PlantSimEngine, and contains other models used in ecophysiological simulations.

You can have a look at its documentation here

Several example simulations are provided there. Here's one taken from this page :

using PlantBiophysics, PlantSimEngine

meteo = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995)

leaf = ModelList(
        Monteith(),
        Fvcb(),
        Medlyn(0.03, 12.0),
        status = (Ra_SW_f = 13.747, sky_fraction = 1.0, aPPFD = 1500.0, d = 0.03)
    )

out = run!(leaf,meteo)