Start with the scientific question you want to answer. The packages below provide process models, whole-plant models, or tools for working with plant structure and light. They cover different parts of a simulation and can help you decide which models and data you need.
Once you have chosen a package, the second part of this page shows how to find and inspect its PlantSimEngine models in Julia.
PlantBiophysics provides models of photosynthesis, stomatal conductance, transpiration, and leaf energy balance. Use it to study how leaves respond to their environment, for example how light, temperature, and humidity affect carbon uptake and water loss. Its process models use PlantSimEngine for coupling and execution.
ArchimedLight computes radiation interception and scattering in scenes made of 3D surfaces. Use it when the positions and shapes of organs matter for shading and light absorption. These radiation calculations can supply the light information needed by physiological models; ArchimedLight itself focuses on light rather than photosynthesis or energy balance.
PlantGeom helps you read, build, and display plant structures and their 3D geometry. It works with MultiScaleTreeGraph (MTG), which records organs and their connections. Use diagram to view those connections, or plantviz to display 3D meshes and colour them using simulated values. This is useful for inspecting the plant on which your models run and presenting their results.
Documentation · Repository · Visualizing plant structure
XPalm combines plant development, carbon assimilation and allocation, water balance, and organ growth using PlantSimEngine. It provides an example of a whole-plant model assembled from several processes. Its VPalm component can add a 3D representation of the palm when the question requires plant architecture.
AMAPSim is a prototype for building and growing plant architectures. It combines models of organ development and branching with PlantSimEngine, records the plant structure in an MTG, and uses PlantGeom for 3D geometry. It is under development, and its repository is currently private.
PlantSimEngine can list models from packages already loaded in your Julia session. It does not search all installed or available packages. These functions find PlantSimEngine models; geometry and visualization tools are documented by their own packages.
| You want to… | Start here |
|---|---|
| Learn the interface with small examples | PlantSimEngine.Examples and one-object simulation |
| Write a new equation | New process or new model? |
| Compare two implementations | Model compatibility and replacement |
The Toy... models in these tutorials are teaching examples. Their presence in a catalog does not establish scientific validation.
After loading a package, list its process types with Authoring.available_processes(). For a known process, request its models:
using PlantSimEngine, DataFrames
using PlantSimEngine.Examples
Authoring.available_models(AbstractGrowthModel)In your own session, load the relevant scientific package first. The table on this website reflects the documentation build's session only.
Construct a real model with explicit parameters. This avoids guessing the defaults of a type that requires arguments.
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),
)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.
Confirm that its inputs can come from your data, environment, or other models.
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.
Use Authoring.compare_models(current, candidate) when replacing a model.
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.
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.
catalog| Row | process | model | package | complete | provenance |
|---|---|---|---|---|---|
| Symbol | String | String | Bool | Symbol | |
| 1 | light_interception | Beer | PlantSimEngine | false | best_effort |
| 2 | process1 | Process1Model | PlantSimEngine | false | best_effort |
| 3 | process2 | Process2Model | PlantSimEngine | true | best_effort |
| 4 | process3 | Process3Model | PlantSimEngine | true | best_effort |
| 5 | process4 | Process4Model | PlantSimEngine | true | best_effort |
| 6 | process5 | Process5Model | PlantSimEngine | true | best_effort |
| 7 | process6 | Process6Model | PlantSimEngine | true | best_effort |
| 8 | process7 | Process7Model | PlantSimEngine | true | best_effort |
| 9 | growth | ToyAssimGrowthModel{Float64} | PlantSimEngine | true | best_effort |
| 10 | carbon_assimilation | ToyAssimModel{Float64} | PlantSimEngine | true | best_effort |
| 11 | carbon_allocation | ToyCAllocationModel | PlantSimEngine | true | best_effort |
| 12 | carbon_biomass | ToyCBiomassModel | PlantSimEngine | false | best_effort |
| 13 | carbon_demand | ToyCDemandModel | PlantSimEngine | false | best_effort |
| 14 | toy_daily_development | ToyDailyDevelopmentModel | PlantSimEngine | false | best_effort |
| 15 | Degreedays | ToyDegreeDaysCumulModel{Float64} | PlantSimEngine | true | best_effort |
| 16 | toy_development | ToyDevelopmentModel | PlantSimEngine | false | best_effort |
| 17 | toy_environment_controller | ToyEnvironmentControllerModel{Float64} | PlantSimEngine | true | best_effort |
| 18 | toy_environment_reader | ToyEnvironmentReaderModel | PlantSimEngine | true | best_effort |
| 19 | LAI_Dynamic | ToyLAIModel{Float64} | PlantSimEngine | true | best_effort |
| 20 | LAI_Dynamic | ToyLAIfromLeafAreaModel | PlantSimEngine | false | best_effort |
| 21 | leaf_surface | ToyLeafSurfaceModel | PlantSimEngine | false | best_effort |
| 22 | light_partitioning | ToyLightPartitioningModel | PlantSimEngine | true | best_effort |
| 23 | maintenance_respiration | ToyMaintenanceRespirationModel | PlantSimEngine | false | best_effort |
| 24 | leaf_surface | ToyPlantLeafSurfaceModel | PlantSimEngine | true | best_effort |
| 25 | maintenance_respiration | ToyPlantRmModel | PlantSimEngine | true | best_effort |
| 26 | growth | ToyRUEGrowthModel | PlantSimEngine | false | best_effort |
| 27 | toy_selective_call_controller | ToySelectiveCallControllerModel | PlantSimEngine | false | best_effort |
| 28 | soil_water | ToySoilWaterModel{Vector{Float64}} | PlantSimEngine | true | best_effort |
| 29 | toy_stock_writer | ToyStockWriterModel | PlantSimEngine | false | best_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.