PlantSimEngine.jlPlantSimEngine.jl

Loaded model catalog​#

Start with the scientific process you need, then choose a model and inspect its requirements. PlantSimEngine can list models from packages already loaded in your Julia session. It does not search all installed or available packages.

Choose where to start​#

You want to…Start here
Learn the interface with small examplesPlantSimEngine.Examples and one-object simulation
Work on leaf gas exchange or energy balancePlantBiophysics.jl and its model documentation
Write a new equationNew process or new model?
Compare two implementationsModel compatibility and replacement

The Toy... models in these tutorials are teaching examples. Their presence in a catalog does not establish scientific validation.

List a process's models​#

After loading a package, list its process types with Authoring.available_processes(). For a known process, request its models:

julia
using PlantSimEngine, DataFrames
using PlantSimEngine.Examples

Authoring.available_models(AbstractGrowthModel)
2-element Vector{Type}: ToyAssimGrowthModel ToyRUEGrowthModel

In your own session, load the relevant scientific package first. The table on this website reflects the documentation build's session only.

Inspect a model you might use​#

Construct a real model with explicit parameters. This avoids guessing the defaults of a type that requires arguments.

julia
candidate = ToyRUEGrowthModel(0.2)
description = Authoring.describe_model(candidate)

(
    model=description.model_type,
    process=description.process,
    parameters=description.parameters,
    inputs=inputs(candidate),
    outputs=outputs(candidate),
)
(model = "ToyRUEGrowthModel{Float64}", process = :growth, parameters = PlantSimEngine.ModelParameterDescription[PlantSimEngine.ModelParameterDescription(:efficiency, "Float64", "Float64", 0.2, "0.2", NamedTuple())], inputs = (:aPPFD,), outputs = (:biomass, :biomass_increment))

Read the package documentation to understand the equations, parameter units, assumptions, and conditions where the model has been tested. The report only shows the information its author has supplied.

variable_contracts(candidate) shows the units and physical meaning recorded for each variable. These declarations are called variable contracts. If one side of a connection has a contract, the other side must have the same one. Ask the model author to add missing declarations. If the quantities differ, for example a value per plant and a value per ground area, use a separate model to perform the conversion.

Check whether a candidate fits your simulation​#

  1. Confirm that its inputs can come from your data, environment, or other models.

  2. Check that connected values have the same units, refer to the same area or object, and describe the same time period. Check whether each is a total, an average, or a rate.

  3. Use Authoring.compare_models(current, candidate) when replacing a model.

  4. Validate the assembled scenario with Authoring.validate_scenario, then check a small run against an expected result.

See Coupling models for connection choices and Model compatibility and replacement for a complete comparison.

Reference: models visible during this build​#

The following table is generated from the loaded modules. complete=false means a type could not provide a complete description, for example because it needs parameter values before it can be created. Create a model with those parameters and inspect it before choosing it. The provenance column records where the description came from: the author's declarations or information found by examining the code. Detailed reports give this source for each field.

julia
catalog
29×5 DataFrame
Rowprocessmodelpackagecompleteprovenance
SymbolStringStringBoolSymbol
1light_interceptionBeerPlantSimEnginefalsebest_effort
2process1Process1ModelPlantSimEnginefalsebest_effort
3process2Process2ModelPlantSimEnginetruebest_effort
4process3Process3ModelPlantSimEnginetruebest_effort
5process4Process4ModelPlantSimEnginetruebest_effort
6process5Process5ModelPlantSimEnginetruebest_effort
7process6Process6ModelPlantSimEnginetruebest_effort
8process7Process7ModelPlantSimEnginetruebest_effort
9growthToyAssimGrowthModel{Float64}PlantSimEnginetruebest_effort
10carbon_assimilationToyAssimModel{Float64}PlantSimEnginetruebest_effort
11carbon_allocationToyCAllocationModelPlantSimEnginetruebest_effort
12carbon_biomassToyCBiomassModelPlantSimEnginefalsebest_effort
13carbon_demandToyCDemandModelPlantSimEnginefalsebest_effort
14toy_daily_developmentToyDailyDevelopmentModelPlantSimEnginefalsebest_effort
15DegreedaysToyDegreeDaysCumulModel{Float64}PlantSimEnginetruebest_effort
16toy_developmentToyDevelopmentModelPlantSimEnginefalsebest_effort
17toy_environment_controllerToyEnvironmentControllerModelPlantSimEnginefalsebest_effort
18toy_environment_readerToyEnvironmentReaderModelPlantSimEnginetruebest_effort
19LAI_DynamicToyLAIModel{Float64}PlantSimEnginetruebest_effort
20LAI_DynamicToyLAIfromLeafAreaModelPlantSimEnginefalsebest_effort
21leaf_surfaceToyLeafSurfaceModelPlantSimEnginefalsebest_effort
22light_partitioningToyLightPartitioningModelPlantSimEnginetruebest_effort
23maintenance_respirationToyMaintenanceRespirationModelPlantSimEnginefalsebest_effort
24leaf_surfaceToyPlantLeafSurfaceModelPlantSimEnginetruebest_effort
25maintenance_respirationToyPlantRmModelPlantSimEnginetruebest_effort
26growthToyRUEGrowthModelPlantSimEnginefalsebest_effort
27toy_selective_call_controllerToySelectiveCallControllerModelPlantSimEnginefalsebest_effort
28soil_waterToySoilWaterModel{Vector{Float64}}PlantSimEnginetruebest_effort
29toy_stock_writerToyStockWriterModelPlantSimEnginefalsebest_effort

To reproduce this discovery yourself, loop over Authoring.available_processes() and call Authoring.available_models(process_type) for each process. Pass a concrete model, such as ToyRUEGrowthModel(0.2), to Authoring.describe_model for its parameters, variables, physical meanings, and any problems found.