Variables
At the top of SpeedyWeather's type tree sits the Simulation, containing Variables and model (e.g. BarotropicModel), which in itself contains model components with their own fields and so on, see Models.
The variables are split into
groups: prognostic, grid, tendencies, dynamics, parameterizations, particles and scratch
namespace, these are optional sub-categories, e.g.
prognostic.landandprognostic.ocean
Such that their paths are fully defined by
simulation.variables.group.namespace.name # if they are in a namespace
simulaiton.variables.group.name # otherwiseWhere to find the variables can quickly get complicated at that degre of nesting. The following is to give users a better overview of how simulation, variables and model are structured within SpeedyWeather.
Simulation
Let's start at the top. When creating a Simulation, its fields are
using SpeedyWeather
spectral_grid = SpectralGrid(nlayers = 1)
model = BarotropicModel(spectral_grid)
simulation = initialize!(model)Simulation{...} (688.38 KB)
├ variables::Variables{...} (157.95 KB)
└ model::BarotropicModel{...} (588.86 KB)the variables contain all arrays but also the clock or other scalars that are supposed to be variable, so changing while a simulation is running. Note that the variables depend on what variables are requested by the model and its components, see Variables and Variable system for more information.
In contrast, we largely think of model as being constant after initialization. This is not completely true, as model does contain mutuable structs but mostly for output and feedback. Values that would influence the variables are considered read-only after initialization but there is no hard restriction on this, e.g. you can use Intrusive callbacks to change the model during integration.
The Variables struct
All simulation variables (prognostic and diagnostic) are stored in simulation.variables, which is a Variables struct with 7 (hardcoded) groups prognostic, grid, tendencies, dynamics, parameterizations, particles and scratch. The variables are model-specific, each model only allocates the variables it needs. The prognostic variables in variables.prognostic are generally in spectral coefficients, variables.grid hold gridded variables, variables.tendencies the tendencies, variables.dynamics work arrays that are computed by the dynamical core. variables.parameterizations are those required by the parameterizations and variables.particles by the particle advection. variables.scratch are scratch arrays: These can be used in any computation by should be considered in an undefined state, so write to it before you read from it. Any other component can leave this in any state. But you can use them to avoid allocations and hold intermediate results.
A full overview of all variables can be easily printed with:
simulation.variablesVariables{@NamedTuple{...}, ...} (157.95 KB)
├ prognostic (19.29 KB)
│ ├ clock: Clock{DateTime, Second, Int64, Millisecond}
│ ├ scale: Base.RefValue{Float32}
│ └ vorticity: 560×1×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
├ grid (64.47 KB)
│ ├ vorticity: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ u: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ └ v: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
├ tendencies (79.21 KB)
│ ├ vorticity: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ └ grid
│ ├ vorticity: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ u: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ └ v: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
├ dynamics (0 bytes)
├ parameterizations (0 bytes)
├ particles (0 bytes)
└ scratch (41.46 KB)
├ a: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ b: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
└ transform_memory: 57×1×24×2 ScratchMemory{Array{ComplexF32,...}, ...}These are the default variables of the BarotropicModel, for the ShallowWaterModel we have
spectral_grid = SpectralGrid(nlayers = 1)
model = ShallowWaterModel(spectral_grid)
simulation = initialize!(model)
simulation.variablesVariables{@NamedTuple{...}, ...} (274.57 KB)
├ prognostic (37.44 KB)
│ ├ clock: Clock{DateTime, Second, Int64, Millisecond}
│ ├ scale: Base.RefValue{Float32}
│ ├ vorticity: 560×1×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ divergence: 560×1×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ └ η: 560×2 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ grid (102.74 KB)
│ ├ vorticity: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ u: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ v: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ divergence: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Arra...
│ ├ η: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Array o...
│ └ geopotential: 3168-element, 48-ring OctahedralGaussianField{Float32, 1}...
├ tendencies (113.90 KB)
│ ├ vorticity: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ divergence: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ η: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{...}}
│ └ grid
│ ├ vorticity: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ u: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ v: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ divergence: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Ar...
│ └ η: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Array...
├ dynamics (0 bytes)
├ parameterizations (0 bytes)
├ particles (0 bytes)
└ scratch (93.17 KB)
├ a: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ b: 560×1 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ transform_memory: 57×1×24×2 ScratchMemory{Array{ComplexF32,...}, ...}
└ grid
├ a: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
└ b: 3168×1, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...The PrimitiveDryModel has the following default variables
spectral_grid = SpectralGrid(nlayers = 8)
model = PrimitiveDryModel(spectral_grid)
simulation = initialize!(model)
simulation.variablesVariables{@NamedTuple{...}, ...} (3.35 MB)
├ prognostic (311.81 KB)
│ ├ clock: Clock{DateTime, Second, Int64, Millisecond}
│ ├ scale: Base.RefValue{Float32}
│ ├ vorticity: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ divergence: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ temperature: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ pressure: 560×2 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ land
│ │ └ soil_temperature: 3168×2, 48-ring OctahedralGaussianField{Float32, 2}...
│ └ ocean
│ ├ sea_surface_temperature: 3168-element, 48-ring OctahedralGaussianFiel...
│ └ sea_ice_concentration: 3168-element, 48-ring OctahedralGaussianField{...
├ grid (1.07 MB)
│ ├ vorticity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ u: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ v: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ divergence: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arra...
│ ├ temperature: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ pressure: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ divergence_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as...
│ ├ temperature_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} a...
│ ├ pressure_prev: 3168-element, 48-ring OctahedralGaussianField{Float32, 1...
│ ├ u_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on...
│ ├ v_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on...
│ ├ geopotential: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Ar...
│ └ temp_average: 8-element Vector{Float32}
├ tendencies (668.85 KB)
│ ├ vorticity: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ divergence: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ temperature: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ pressure: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{.....
│ └ grid
│ ├ vorticity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ u: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ v: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ divergence: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Ar...
│ ├ temperature: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as A...
│ └ pressure: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} a...
├ dynamics (582.44 KB)
│ ├ dpres_dx: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ dpres_dy: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ pres_flux: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ virtual_temperature: 560×8 LowerTriangularArray{ComplexF32, 2, Array{.....
│ ├ u_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} ...
│ ├ v_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} ...
│ ├ div_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1...
│ ├ div_mean: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{.....
│ ├ div_sum_above: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as A...
│ ├ pres_flux_sum_above: 3168×8, 48-ring OctahedralGaussianField{Float32, 2...
│ ├ w: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ └ geopotential: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ parameterizations (357.74 KB)
│ ├ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField{F...
│ ├ surface_longwave_down: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ cos_zenith: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} a...
│ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...
│ ├ boundary_layer_drag: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ boundary_layer_height: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ surface_wind_speed: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_air_density: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ surface_air_temperature: 3168-element, 48-ring OctahedralGaussianField{...
│ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ ├ outgoing_shortwave: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ outgoing_longwave: 3168-element, 48-ring OctahedralGaussianField{Float3...
│ ├ land
│ │ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{F...
│ │ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ │ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ │ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ │ └ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField...
│ └ ocean
│ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{F...
│ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ surface_humidity_flux: 3168-element, 48-ring OctahedralGaussianField{...
│ ├ surface_sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianF...
│ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ └ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField...
├ particles (0 bytes)
└ scratch (521.30 KB)
├ a: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ b: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ a_2D: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{...}}
├ b_2D: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{...}}
├ transform_memory: 57×8×24×2 ScratchMemory{Array{ComplexF32,...}, ...}
└ grid
├ a: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
├ b: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
├ a_2D: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...
└ b_2D: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...And the most complex model, the PrimitiveWetModel allocates
spectral_grid = SpectralGrid(nlayers = 8)
model = PrimitiveWetModel(spectral_grid)
simulation = initialize!(model)
simulation.variablesVariables{@NamedTuple{...}, ...} (4.00 MB)
├ prognostic (421.80 KB)
│ ├ clock: Clock{DateTime, Second, Int64, Millisecond}
│ ├ scale: Base.RefValue{Float32}
│ ├ vorticity: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ divergence: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ temperature: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ pressure: 560×2 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ humidity: 560×8×2 LowerTriangularArray{ComplexF32, 3, Array{...}}
│ ├ land
│ │ ├ soil_temperature: 3168×2, 48-ring OctahedralGaussianField{Float32, 2}...
│ │ ├ soil_moisture: 3168×2, 48-ring OctahedralGaussianField{Float32, 2} as...
│ │ └ snow_depth: 3168-element, 48-ring OctahedralGaussianField{Float32, 1}...
│ └ ocean
│ ├ sea_surface_temperature: 3168-element, 48-ring OctahedralGaussianFiel...
│ └ sea_ice_concentration: 3168-element, 48-ring OctahedralGaussianField{...
├ grid (1.27 MB)
│ ├ vorticity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ u: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ v: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ ├ divergence: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arra...
│ ├ temperature: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ pressure: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ divergence_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as...
│ ├ temperature_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} a...
│ ├ pressure_prev: 3168-element, 48-ring OctahedralGaussianField{Float32, 1...
│ ├ u_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on...
│ ├ v_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on...
│ ├ humidity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array ...
│ ├ humidity_prev: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as A...
│ ├ geopotential: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Ar...
│ └ temp_average: 8-element Vector{Float32}
├ tendencies (806.26 KB)
│ ├ vorticity: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ divergence: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ temperature: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ ├ pressure: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{.....
│ ├ humidity: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
│ └ grid
│ ├ vorticity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arr...
│ ├ u: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ v: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
│ ├ divergence: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Ar...
│ ├ temperature: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as A...
│ ├ pressure: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} a...
│ └ humidity: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Arra...
├ dynamics (582.44 KB)
│ ├ dpres_dx: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ dpres_dy: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ pres_flux: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array...
│ ├ virtual_temperature: 560×8 LowerTriangularArray{ComplexF32, 2, Array{.....
│ ├ u_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} ...
│ ├ v_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} ...
│ ├ div_mean_grid: 3168-element, 48-ring OctahedralGaussianField{Float32, 1...
│ ├ div_mean: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{.....
│ ├ div_sum_above: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as A...
│ ├ pres_flux_sum_above: 3168×8, 48-ring OctahedralGaussianField{Float32, 2...
│ ├ w: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CPU
│ └ geopotential: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ parameterizations (561.78 KB)
│ ├ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField{F...
│ ├ surface_longwave_down: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ rain_rate: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as...
│ ├ cos_zenith: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} a...
│ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...
│ ├ boundary_layer_drag: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ boundary_layer_height: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ surface_wind_speed: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_air_density: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ surface_air_temperature: 3168-element, 48-ring OctahedralGaussianField{...
│ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_humidity_flux: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ rain_large_scale: 3168-element, 48-ring OctahedralGaussianField{Float32...
│ ├ snow_large_scale: 3168-element, 48-ring OctahedralGaussianField{Float32...
│ ├ rain_rate_large_scale: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ snow_rate_large_scale: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ snow_rate: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as...
│ ├ cloud_top: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as...
│ ├ rain_convection: 3168-element, 48-ring OctahedralGaussianField{Float32,...
│ ├ rain_rate_convection: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ ├ outgoing_shortwave: 3168-element, 48-ring OctahedralGaussianField{Float...
│ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Floa...
│ ├ outgoing_longwave: 3168-element, 48-ring OctahedralGaussianField{Float3...
│ ├ land
│ │ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{F...
│ │ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ │ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ │ ├ river_runoff: 3168-element, 48-ring OctahedralGaussianField{Float32, ...
│ │ ├ surface_humidity_flux: 3168-element, 48-ring OctahedralGaussianField{...
│ │ ├ snow_melt_rate: 3168-element, 48-ring OctahedralGaussianField{Float32...
│ │ ├ vegetation_high: 3168-element, 48-ring OctahedralGaussianField{Float3...
│ │ ├ vegetation_low: 3168-element, 48-ring OctahedralGaussianField{Float32...
│ │ ├ soil_moisture_availability: 3168-element, 48-ring OctahedralGaussianF...
│ │ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ │ └ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField...
│ └ ocean
│ ├ surface_shortwave_up: 3168-element, 48-ring OctahedralGaussianField{F...
│ ├ surface_longwave_up: 3168-element, 48-ring OctahedralGaussianField{Fl...
│ ├ surface_humidity_flux: 3168-element, 48-ring OctahedralGaussianField{...
│ ├ surface_sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianF...
│ ├ albedo: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as ...
│ ├ sensible_heat_flux: 3168-element, 48-ring OctahedralGaussianField{Flo...
│ └ surface_shortwave_down: 3168-element, 48-ring OctahedralGaussianField...
├ particles (0 bytes)
└ scratch (521.30 KB)
├ a: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ b: 560×8 LowerTriangularArray{ComplexF32, 2, Array{...}}
├ a_2D: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{...}}
├ b_2D: 560-element, 33x32 LowerTriangularMatrix{ComplexF32, Array{...}}
├ transform_memory: 57×8×24×2 ScratchMemory{Array{ComplexF32,...}, ...}
└ grid
├ a: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
├ b: 3168×8, 48-ring OctahedralGaussianField{Float32, 2} as Array on CP...
├ a_2D: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...
└ b_2D: 3168-element, 48-ring OctahedralGaussianField{Float32, 1} as Ar...Setting variables
The prognostic variables can be mutated (e.g. to set new initial conditions) with the SpeedyWeather.set! function. Other variables can be set too but they might be overwritten such that your changes may have a different effect than you expect. You can specify group (default =:prognostic) and namespace (default =nothing) in set! to set variables, e.g.
set!(simulation, sea_surface_temperature=300, namespace=:ocean)For another example, see Set tracers.