Tree structure
At the top of SpeedyWeather's type tree sits the Simulation
, containing variables and model, which in itself contains model components with their own fields and so on. (Note that we are talking about the structure of structs within structs not the type hierarchy as defined by subtyping abstract types.) This can quickly get complicated with a lot of nested structs. The following is to give users a better overview of how simulation, variables and model are structured within SpeedyWeather. Many types in SpeedyWeather have extended Julia's show
function to give you an overview of its contents, e.g. a clock::Clock
is printed as
using SpeedyWeather
clock = Clock()
Clock
├ time::DateTime = 2000-01-01T00:00:00
├ start::DateTime = 2000-01-01T00:00:00
├ period::Second = 0 seconds
├ timestep_counter::Int64 = 0
├ n_timesteps::Int64 = 0
└ Δt::Dates.Millisecond = 0 milliseconds
illustrating the fields within a clock, their types and (unless they are an array) also their values. For structs within structs however, this information, would not be printed by default. You could use Julia's autocomplete like clock.<tab>
by hitting tab after the .
to inspect the fields of an instance but that would require you to manually go down every branch of that tree. To better visualise this, we have defined a tree(S)
function for any instance S
defined in SpeedyWeather which will print every field, and also its containing fields if they are also defined within SpeedyWeather. The "if defined in SpeedyWeather" is important because otherwise the tree would also show you the contents of a complex number or other types defined in Julia Base itself that we aren't interested in here. But let's start at the top.
Simulation
When creating a Simulation
, its fields are
spectral_grid = SpectralGrid(nlayers = 1)
model = BarotropicModel(spectral_grid)
simulation = initialize!(model)
Simulation{BarotropicModel}
├ prognostic_variables::PrognosticVariables{...}
├ diagnostic_variables::DiagnosticVariables{...}
└ model::BarotropicModel{...}
the prognostic_variables
, the diagnostic_variables
and the model
(that we just initialized). We could now do tree(simulation)
but that gets very lengthy and so will split things into tree(simulation.prognostic_variables)
, tree(simulation.diagnostic_variables)
and tree(simulation.model)
for more digestible chunks. You can also provide the with_types=true
keyword to get also the types of these fields printed, but we'll skip that here.
Prognostic variables
The prognostic variables struct is parametric on the model type, model_type(model)
(which strips away its parameters), but this is only to dispatch over it. The fields are for all models the same, just the barotropic model would not use temperature for example (but you could use nevertheless).
tree(simulation.prognostic_variables)
PrognosticVariables{Float32, Array, 2, LowerTriangularMatrix{ComplexF32}, LowerTriangularArray{ComplexF32, 2, Matrix{ComplexF32}}, OctahedralGaussianGrid{Float32}, Vector{Particle{Float32}}}
├ trunc
├ nlat_half
├ nlayers
├ nparticles
├ vor
├ div
├ temp
├ humid
├ pres
├ random_pattern
├┐ocean
│├ nlat_half
│├ sea_surface_temperature
│└ sea_ice_concentration
├┐land
│├ nlat_half
│├ land_surface_temperature
│├ snow_depth
│├ soil_moisture_layer1
│└ soil_moisture_layer2
├ particles
├ scale
└┐clock
├ time
├ start
├ period
├ timestep_counter
├ n_timesteps
└ Δt
The prognostic variable struct can be mutated (e.g. to set new initial conditions) with the SpeedyWeather.set!
function.
Diagnostic variables
Similar for the diagnostic variables, regardless the model type, they contain the same fields but for the 2D models many will not be used for example.
tree(simulation.diagnostic_variables)
DiagnosticVariables{Float32, Array, OctahedralGaussianGrid, LowerTriangularMatrix{ComplexF32}, LowerTriangularArray{ComplexF32, 2, Matrix{ComplexF32}}, OctahedralGaussianGrid{Float32}, OctahedralGaussianArray{Float32, 2, Matrix{Float32}}, Vector{Particle{Float32}}, Vector{Float32}}
├ trunc
├ nlat_half
├ nlayers
├ nparticles
├┐tendencies
│├ trunc
│├ nlat_half
│├ nlayers
│├ vor_tend
│├ div_tend
│├ temp_tend
│├ humid_tend
│├ u_tend
│├ v_tend
│├ pres_tend
│├ u_tend_grid
│├ v_tend_grid
│├ temp_tend_grid
│├ humid_tend_grid
│└ pres_tend_grid
├┐grid
│├ nlat_half
│├ nlayers
│├ vor_grid
│├ div_grid
│├ temp_grid
│├ temp_virt_grid
│├ humid_grid
│├ u_grid
│├ v_grid
│├ pres_grid
│├ random_pattern
│├ temp_grid_prev
│├ humid_grid_prev
│├ u_grid_prev
│├ v_grid_prev
│└ pres_grid_prev
├┐dynamics
│├ trunc
│├ nlat_half
│├ nlayers
│├ a
│├ b
│├ a_grid
│├ b_grid
│├ a_2D
│├ b_2D
│├ a_2D_grid
│├ b_2D_grid
│├ uv∇lnp
│├ uv∇lnp_sum_above
│├ div_sum_above
│├ temp_virt
│├ geopot
│├ σ_tend
│├ ∇lnp_x
│├ ∇lnp_y
│├ u_mean_grid
│├ v_mean_grid
│├ div_mean_grid
│└ div_mean
├┐physics
│├ nlat_half
│├ precip_large_scale
│├ precip_convection
│├ cloud_top
│├ soil_moisture_availability
│└ cos_zenith
├┐particles
│├ nparticles
│├ nlat_half
│├ locations
│├ u
│├ v
│├ σ_tend
│└ interpolator
├┐columns
│├ nlayers
│├ ij
│├ jring
│├ lond
│├ latd
│├ land_fraction
│├ orography
│├ u
│├ v
│├ temp
│├ humid
│├ ln_pres
│├ pres
│├ u_tend
│├ v_tend
│├ temp_tend
│├ humid_tend
│├ flux_u_upward
│├ flux_u_downward
│├ flux_v_upward
│├ flux_v_downward
│├ flux_temp_upward
│├ flux_temp_downward
│├ flux_humid_upward
│├ flux_humid_downward
│├ random_value
│├ boundary_layer_depth
│├ boundary_layer_drag
│├ surface_geopotential
│├ surface_u
│├ surface_v
│├ surface_temp
│├ surface_humid
│├ surface_wind_speed
│├ skin_temperature_sea
│├ skin_temperature_land
│├ soil_moisture_availability
│├ surface_air_density
│├ sat_humid
│├ dry_static_energy
│├ temp_virt
│├ geopot
│├ cloud_top
│├ precip_convection
│├ precip_large_scale
│├ cos_zenith
│├ albedo
│├ a
│├ b
│├ c
│└ d
├ temp_average
└ scale
BarotropicModel
The BarotropicModel
is the simplest model we have, which will not have many of the model components that are needed to define the primitive equations for example. Note that forcing or drag aren't further branched which is because the default BarotropicModel
has NoForcing
and NoDrag
which don't have any fields. If you create a model with non-default conponents they will show up here. tree
dynamicallt inspects the current contents of a (mutable) struct and that tree may look different depending on what model you have constructed!
model = BarotropicModel(spectral_grid)
tree(model)
BarotropicModel{...}
├┐spectral_grid
│├ NF
│├ device
│├ ArrayType
│├ trunc
│├ Grid
│├ dealiasing
│├ radius
│├ nparticles
│├ nlat_half
│├ nlat
│├ npoints
│├ nlayers
│├┐vertical_coordinates
││├ nlayers
││└ σ_half
│├ SpectralVariable2D
│├ SpectralVariable3D
│├ SpectralVariable4D
│├ GridVariable2D
│├ GridVariable3D
│├ GridVariable4D
│└ ParticleVector
├┐device_setup
│├ device
│├ device_KA
│└ n
├┐geometry
│├┐spectral_grid
││├ NF
││├ device
││├ ArrayType
││├ trunc
││├ Grid
││├ dealiasing
││├ radius
││├ nparticles
││├ nlat_half
││├ nlat
││├ npoints
││├ nlayers
││├┐vertical_coordinates
│││├ nlayers
│││└ σ_half
││├ SpectralVariable2D
││├ SpectralVariable3D
││├ SpectralVariable4D
││├ GridVariable2D
││├ GridVariable3D
││├ GridVariable4D
││└ ParticleVector
│├ nlat_half
│├ nlon_max
│├ nlon
│├ nlat
│├ nlayers
│├ npoints
│├ radius
│├ colat
│├ lat
│├ latd
│├ lond
│├ londs
│├ latds
│├ lons
│├ lats
│├ sinlat
│├ coslat
│├ coslat⁻¹
│├ coslat²
│├ coslat⁻²
│├ σ_levels_half
│├ σ_levels_full
│├ σ_levels_thick
│├ ln_σ_levels_full
│└ full_to_half_interpolation
├┐planet
│├ rotation
│├ gravity
│├ daily_cycle
│├ length_of_day
│├ seasonal_cycle
│├ length_of_year
│├ equinox
│├ axial_tilt
│└ solar_constant
├┐atmosphere
│├ mol_mass_dry_air
│├ mol_mass_vapour
│├ heat_capacity
│├ R_gas
│├ R_dry
│├ R_vapour
│├ mol_ratio
│├ μ_virt_temp
│├ κ
│├ water_density
│├ latent_heat_condensation
│├ latent_heat_sublimation
│├ stefan_boltzmann
│├ pres_ref
│├ temp_ref
│├ moist_lapse_rate
│├ dry_lapse_rate
│└ layer_thickness
├┐coriolis
│├ nlat
│└ f
├ forcing
├ drag
├ particle_advection
├┐initial_conditions
│├┐vordiv
││├ power
││└ amplitude
│├ pres
│├ temp
│└ humid
├ random_process
├┐time_stepping
│├ trunc
│├ nsteps
│├ Δt_at_T31
│├ radius
│├ adjust_with_output
│├ robert_filter
│├ williams_filter
│├ Δt_millisec
│├ Δt_sec
│└ Δt
├ spectral_transform
├ implicit
├┐horizontal_diffusion
│├ trunc
│├ nlayers
│├ power
│├ time_scale
│├ time_scale_div
│├ resolution_scaling
│├ power_stratosphere
│├ tapering_σ
│├ expl
│├ impl
│├ expl_div
│└ impl_div
├┐output
│├ active
│├ path
│├ id
│├ run_path
│├ filename
│├ write_restart
│├ pkg_version
│├ startdate
│├ output_dt
│├ variables
│├ output_every_n_steps
│├ timestep_counter
│├ output_counter
│├ netcdf_file
│├ interpolator
│├ grid2D
│└ grid3D
├ callbacks
└┐feedback
├ verbose
├ debug
├ output
├ id
├ run_path
├ progress_meter
├ progress_txt
└ nars_detected
ShallowWaterModel
The ShallowWaterModel
is similar to the BarotropicModel
, but it contains for example orography, that the BarotropicModel
doesn't have.
model = ShallowWaterModel(spectral_grid)
tree(model)
ShallowWaterModel{...}
├┐spectral_grid
│├ NF
│├ device
│├ ArrayType
│├ trunc
│├ Grid
│├ dealiasing
│├ radius
│├ nparticles
│├ nlat_half
│├ nlat
│├ npoints
│├ nlayers
│├┐vertical_coordinates
││├ nlayers
││└ σ_half
│├ SpectralVariable2D
│├ SpectralVariable3D
│├ SpectralVariable4D
│├ GridVariable2D
│├ GridVariable3D
│├ GridVariable4D
│└ ParticleVector
├┐device_setup
│├ device
│├ device_KA
│└ n
├┐geometry
│├┐spectral_grid
││├ NF
││├ device
││├ ArrayType
││├ trunc
││├ Grid
││├ dealiasing
││├ radius
││├ nparticles
││├ nlat_half
││├ nlat
││├ npoints
││├ nlayers
││├┐vertical_coordinates
│││├ nlayers
│││└ σ_half
││├ SpectralVariable2D
││├ SpectralVariable3D
││├ SpectralVariable4D
││├ GridVariable2D
││├ GridVariable3D
││├ GridVariable4D
││└ ParticleVector
│├ nlat_half
│├ nlon_max
│├ nlon
│├ nlat
│├ nlayers
│├ npoints
│├ radius
│├ colat
│├ lat
│├ latd
│├ lond
│├ londs
│├ latds
│├ lons
│├ lats
│├ sinlat
│├ coslat
│├ coslat⁻¹
│├ coslat²
│├ coslat⁻²
│├ σ_levels_half
│├ σ_levels_full
│├ σ_levels_thick
│├ ln_σ_levels_full
│└ full_to_half_interpolation
├┐planet
│├ rotation
│├ gravity
│├ daily_cycle
│├ length_of_day
│├ seasonal_cycle
│├ length_of_year
│├ equinox
│├ axial_tilt
│└ solar_constant
├┐atmosphere
│├ mol_mass_dry_air
│├ mol_mass_vapour
│├ heat_capacity
│├ R_gas
│├ R_dry
│├ R_vapour
│├ mol_ratio
│├ μ_virt_temp
│├ κ
│├ water_density
│├ latent_heat_condensation
│├ latent_heat_sublimation
│├ stefan_boltzmann
│├ pres_ref
│├ temp_ref
│├ moist_lapse_rate
│├ dry_lapse_rate
│└ layer_thickness
├┐coriolis
│├ nlat
│└ f
├┐orography
│├ path
│├ file
│├ file_Grid
│├ scale
│├ smoothing
│├ smoothing_power
│├ smoothing_strength
│├ smoothing_fraction
│├ orography
│└ geopot_surf
├ forcing
├ drag
├ particle_advection
├┐initial_conditions
│├┐vordiv
││├ latitude
││├ width
││├ umax
││├ perturb_lat
││├ perturb_lon
││├ perturb_xwidth
││├ perturb_ywidth
││└ perturb_height
│├ pres
│├ temp
│└ humid
├ random_process
├┐time_stepping
│├ trunc
│├ nsteps
│├ Δt_at_T31
│├ radius
│├ adjust_with_output
│├ robert_filter
│├ williams_filter
│├ Δt_millisec
│├ Δt_sec
│└ Δt
├ spectral_transform
├┐implicit
│├ trunc
│├ α
│├ H
│├ ξH
│├ g∇²
│├ ξg∇²
│└ S⁻¹
├┐horizontal_diffusion
│├ trunc
│├ nlayers
│├ power
│├ time_scale
│├ time_scale_div
│├ resolution_scaling
│├ power_stratosphere
│├ tapering_σ
│├ expl
│├ impl
│├ expl_div
│└ impl_div
├┐output
│├ active
│├ path
│├ id
│├ run_path
│├ filename
│├ write_restart
│├ pkg_version
│├ startdate
│├ output_dt
│├ variables
│├ output_every_n_steps
│├ timestep_counter
│├ output_counter
│├ netcdf_file
│├ interpolator
│├ grid2D
│└ grid3D
├ callbacks
└┐feedback
├ verbose
├ debug
├ output
├ id
├ run_path
├ progress_meter
├ progress_txt
└ nars_detected
PrimitiveDryModel
The PrimitiveDryModel
is a big jump in complexity compared to the 2D models, but because it doesn't contain humidity, several model components like evaporation aren't needed.
spectral_grid = SpectralGrid()
model = PrimitiveDryModel(spectral_grid)
tree(model)
PrimitiveDryModel{...}
├┐spectral_grid
│├ NF
│├ device
│├ ArrayType
│├ trunc
│├ Grid
│├ dealiasing
│├ radius
│├ nparticles
│├ nlat_half
│├ nlat
│├ npoints
│├ nlayers
│├┐vertical_coordinates
││├ nlayers
││└ σ_half
│├ SpectralVariable2D
│├ SpectralVariable3D
│├ SpectralVariable4D
│├ GridVariable2D
│├ GridVariable3D
│├ GridVariable4D
│└ ParticleVector
├┐device_setup
│├ device
│├ device_KA
│└ n
├ dynamics
├┐geometry
│├┐spectral_grid
││├ NF
││├ device
││├ ArrayType
││├ trunc
││├ Grid
││├ dealiasing
││├ radius
││├ nparticles
││├ nlat_half
││├ nlat
││├ npoints
││├ nlayers
││├┐vertical_coordinates
│││├ nlayers
│││└ σ_half
││├ SpectralVariable2D
││├ SpectralVariable3D
││├ SpectralVariable4D
││├ GridVariable2D
││├ GridVariable3D
││├ GridVariable4D
││└ ParticleVector
│├ nlat_half
│├ nlon_max
│├ nlon
│├ nlat
│├ nlayers
│├ npoints
│├ radius
│├ colat
│├ lat
│├ latd
│├ lond
│├ londs
│├ latds
│├ lons
│├ lats
│├ sinlat
│├ coslat
│├ coslat⁻¹
│├ coslat²
│├ coslat⁻²
│├ σ_levels_half
│├ σ_levels_full
│├ σ_levels_thick
│├ ln_σ_levels_full
│└ full_to_half_interpolation
├┐planet
│├ rotation
│├ gravity
│├ daily_cycle
│├ length_of_day
│├ seasonal_cycle
│├ length_of_year
│├ equinox
│├ axial_tilt
│└ solar_constant
├┐atmosphere
│├ mol_mass_dry_air
│├ mol_mass_vapour
│├ heat_capacity
│├ R_gas
│├ R_dry
│├ R_vapour
│├ mol_ratio
│├ μ_virt_temp
│├ κ
│├ water_density
│├ latent_heat_condensation
│├ latent_heat_sublimation
│├ stefan_boltzmann
│├ pres_ref
│├ temp_ref
│├ moist_lapse_rate
│├ dry_lapse_rate
│└ layer_thickness
├┐coriolis
│├ nlat
│└ f
├┐geopotential
│├ nlayers
│├ Δp_geopot_half
│└ Δp_geopot_full
├┐adiabatic_conversion
│├ nlayers
│├ σ_lnp_A
│└ σ_lnp_B
├ particle_advection
├┐initial_conditions
│├┐vordiv
││├ η₀
││├ u₀
││├ perturb_lat
││├ perturb_lon
││├ perturb_uₚ
││└ perturb_radius
│├ pres
│├┐temp
││├ η₀
││├ σ_tropopause
││├ u₀
││├ ΔT
││└ Tmin
│└ humid
├ random_process
├┐orography
│├ path
│├ file
│├ file_Grid
│├ scale
│├ smoothing
│├ smoothing_power
│├ smoothing_strength
│├ smoothing_fraction
│├ orography
│└ geopot_surf
├┐land_sea_mask
│├ path
│├ file
│├ file_Grid
│└ mask
├┐ocean
│├ nlat_half
│├ Δt
│├ path
│├ file
│├ varname
│├ file_Grid
│├ missing_value
│└ monthly_temperature
├┐land
│├ nlat_half
│├ Δt
│├ path
│├ file
│├ varname
│├ file_Grid
│├ missing_value
│└ monthly_temperature
├┐solar_zenith
│├ length_of_day
│├ length_of_year
│├ equation_of_time
│├ seasonal_cycle
│├┐solar_declination
││├ axial_tilt
││├ equinox
││├ length_of_year
││└ length_of_day
│├┐time_correction
││├ a
││├ s1
││├ c1
││├ s2
││└ c2
│└ initial_time
├┐albedo
│├ nlat_half
│├ path
│├ file
│├ varname
│├ file_Grid
│└ albedo
├ physics
├┐boundary_layer_drag
│├ κ
│├ z₀
│├ Ri_c
│└ drag_max
├ temperature_relaxation
├┐vertical_diffusion
│├ nlayers
│├ κ
│├ z₀
│├ Ri_c
│├ fb
│├ diffuse_static_energy
│├ diffuse_momentum
│├ diffuse_humidity
│├ logZ_z₀
│├ sqrtC_max
│├ ∇²_above
│└ ∇²_below
├ surface_thermodynamics
├┐surface_wind
│├ f_wind
│├ V_gust
│├ use_boundary_layer_drag
│├ drag_land
│└ drag_sea
├┐surface_heat_flux
│├ use_boundary_layer_drag
│├ heat_exchange_land
│└ heat_exchange_sea
├┐convection
│├ nlayers
│└ time_scale
├ shortwave_radiation
├┐longwave_radiation
│├ α
│├ temp_tropopause
│└ time_scale
├┐time_stepping
│├ trunc
│├ nsteps
│├ Δt_at_T31
│├ radius
│├ adjust_with_output
│├ robert_filter
│├ williams_filter
│├ Δt_millisec
│├ Δt_sec
│└ Δt
├ spectral_transform
├┐implicit
│├ trunc
│├ nlayers
│├ α
│├ temp_profile
│├ ξ
│├ R
│├ U
│├ L
│├ W
│├ L0
│├ L1
│├ L2
│├ L3
│├ L4
│├ S
│└ S⁻¹
├┐horizontal_diffusion
│├ trunc
│├ nlayers
│├ power
│├ time_scale
│├ time_scale_div
│├ resolution_scaling
│├ power_stratosphere
│├ tapering_σ
│├ expl
│├ impl
│├ expl_div
│└ impl_div
├ vertical_advection
├┐output
│├ active
│├ path
│├ id
│├ run_path
│├ filename
│├ write_restart
│├ pkg_version
│├ startdate
│├ output_dt
│├ variables
│├ output_every_n_steps
│├ timestep_counter
│├ output_counter
│├ netcdf_file
│├ interpolator
│├ grid2D
│└ grid3D
├ callbacks
└┐feedback
├ verbose
├ debug
├ output
├ id
├ run_path
├ progress_meter
├ progress_txt
└ nars_detected
PrimitiveWetModel
The PrimitiveWetModel
is the most complex model we currently have, hence its field tree is the longest, defining many components for the physics parameterizations.
model = PrimitiveWetModel(spectral_grid)
tree(model)
PrimitiveWetModel{...}
├┐spectral_grid
│├ NF
│├ device
│├ ArrayType
│├ trunc
│├ Grid
│├ dealiasing
│├ radius
│├ nparticles
│├ nlat_half
│├ nlat
│├ npoints
│├ nlayers
│├┐vertical_coordinates
││├ nlayers
││└ σ_half
│├ SpectralVariable2D
│├ SpectralVariable3D
│├ SpectralVariable4D
│├ GridVariable2D
│├ GridVariable3D
│├ GridVariable4D
│└ ParticleVector
├┐device_setup
│├ device
│├ device_KA
│└ n
├ dynamics
├┐geometry
│├┐spectral_grid
││├ NF
││├ device
││├ ArrayType
││├ trunc
││├ Grid
││├ dealiasing
││├ radius
││├ nparticles
││├ nlat_half
││├ nlat
││├ npoints
││├ nlayers
││├┐vertical_coordinates
│││├ nlayers
│││└ σ_half
││├ SpectralVariable2D
││├ SpectralVariable3D
││├ SpectralVariable4D
││├ GridVariable2D
││├ GridVariable3D
││├ GridVariable4D
││└ ParticleVector
│├ nlat_half
│├ nlon_max
│├ nlon
│├ nlat
│├ nlayers
│├ npoints
│├ radius
│├ colat
│├ lat
│├ latd
│├ lond
│├ londs
│├ latds
│├ lons
│├ lats
│├ sinlat
│├ coslat
│├ coslat⁻¹
│├ coslat²
│├ coslat⁻²
│├ σ_levels_half
│├ σ_levels_full
│├ σ_levels_thick
│├ ln_σ_levels_full
│└ full_to_half_interpolation
├┐planet
│├ rotation
│├ gravity
│├ daily_cycle
│├ length_of_day
│├ seasonal_cycle
│├ length_of_year
│├ equinox
│├ axial_tilt
│└ solar_constant
├┐atmosphere
│├ mol_mass_dry_air
│├ mol_mass_vapour
│├ heat_capacity
│├ R_gas
│├ R_dry
│├ R_vapour
│├ mol_ratio
│├ μ_virt_temp
│├ κ
│├ water_density
│├ latent_heat_condensation
│├ latent_heat_sublimation
│├ stefan_boltzmann
│├ pres_ref
│├ temp_ref
│├ moist_lapse_rate
│├ dry_lapse_rate
│└ layer_thickness
├┐coriolis
│├ nlat
│└ f
├┐geopotential
│├ nlayers
│├ Δp_geopot_half
│└ Δp_geopot_full
├┐adiabatic_conversion
│├ nlayers
│├ σ_lnp_A
│└ σ_lnp_B
├ particle_advection
├┐initial_conditions
│├┐vordiv
││├ η₀
││├ u₀
││├ perturb_lat
││├ perturb_lon
││├ perturb_uₚ
││└ perturb_radius
│├ pres
│├┐temp
││├ η₀
││├ σ_tropopause
││├ u₀
││├ ΔT
││└ Tmin
│└┐humid
│ └ relhumid_ref
├ random_process
├┐orography
│├ path
│├ file
│├ file_Grid
│├ scale
│├ smoothing
│├ smoothing_power
│├ smoothing_strength
│├ smoothing_fraction
│├ orography
│└ geopot_surf
├┐land_sea_mask
│├ path
│├ file
│├ file_Grid
│└ mask
├┐ocean
│├ nlat_half
│├ Δt
│├ path
│├ file
│├ varname
│├ file_Grid
│├ missing_value
│└ monthly_temperature
├┐land
│├ nlat_half
│├ Δt
│├ path
│├ file
│├ varname
│├ file_Grid
│├ missing_value
│└ monthly_temperature
├┐solar_zenith
│├ length_of_day
│├ length_of_year
│├ equation_of_time
│├ seasonal_cycle
│├┐solar_declination
││├ axial_tilt
││├ equinox
││├ length_of_year
││└ length_of_day
│├┐time_correction
││├ a
││├ s1
││├ c1
││├ s2
││└ c2
│└ initial_time
├┐albedo
│├ nlat_half
│├ path
│├ file
│├ varname
│├ file_Grid
│└ albedo
├┐soil
│├ nlat_half
│├ D_top
│├ D_root
│├ W_cap
│├ W_wilt
│├ path
│├ file
│├ varname_layer1
│├ varname_layer2
│├ file_Grid
│├ missing_value
│├ monthly_soil_moisture_layer1
│└ monthly_soil_moisture_layer2
├┐vegetation
│├ nlat_half
│├ low_veg_factor
│├ path
│├ file
│├ varname_vegh
│├ varname_vegl
│├ file_Grid
│├ missing_value
│├ high_cover
│└ low_cover
├ physics
├┐clausius_clapeyron
│├ e₀
│├ T₀
│├ Lᵥ
│├ cₚ
│├ R_vapour
│├ R_dry
│├ Lᵥ_Rᵥ
│├ T₀⁻¹
│└ mol_ratio
├┐boundary_layer_drag
│├ κ
│├ z₀
│├ Ri_c
│└ drag_max
├ temperature_relaxation
├┐vertical_diffusion
│├ nlayers
│├ κ
│├ z₀
│├ Ri_c
│├ fb
│├ diffuse_static_energy
│├ diffuse_momentum
│├ diffuse_humidity
│├ logZ_z₀
│├ sqrtC_max
│├ ∇²_above
│└ ∇²_below
├ surface_thermodynamics
├┐surface_wind
│├ f_wind
│├ V_gust
│├ use_boundary_layer_drag
│├ drag_land
│└ drag_sea
├┐surface_heat_flux
│├ use_boundary_layer_drag
│├ heat_exchange_land
│└ heat_exchange_sea
├┐surface_evaporation
│├ use_boundary_layer_drag
│├ moisture_exchange_land
│└ moisture_exchange_sea
├┐large_scale_condensation
│├ relative_humidity_threshold
│└ time_scale
├┐convection
│├ nlayers
│├ time_scale
│└ relative_humidity
├ shortwave_radiation
├┐longwave_radiation
│├ α
│├ temp_tropopause
│└ time_scale
├┐time_stepping
│├ trunc
│├ nsteps
│├ Δt_at_T31
│├ radius
│├ adjust_with_output
│├ robert_filter
│├ williams_filter
│├ Δt_millisec
│├ Δt_sec
│└ Δt
├ spectral_transform
├┐implicit
│├ trunc
│├ nlayers
│├ α
│├ temp_profile
│├ ξ
│├ R
│├ U
│├ L
│├ W
│├ L0
│├ L1
│├ L2
│├ L3
│├ L4
│├ S
│└ S⁻¹
├┐horizontal_diffusion
│├ trunc
│├ nlayers
│├ power
│├ time_scale
│├ time_scale_div
│├ resolution_scaling
│├ power_stratosphere
│├ tapering_σ
│├ expl
│├ impl
│├ expl_div
│└ impl_div
├ vertical_advection
├ hole_filling
├┐output
│├ active
│├ path
│├ id
│├ run_path
│├ filename
│├ write_restart
│├ pkg_version
│├ startdate
│├ output_dt
│├ variables
│├ output_every_n_steps
│├ timestep_counter
│├ output_counter
│├ netcdf_file
│├ interpolator
│├ grid2D
│└ grid3D
├ callbacks
└┐feedback
├ verbose
├ debug
├ output
├ id
├ run_path
├ progress_meter
├ progress_txt
└ nars_detected
Size of a Simulation
The tree
function also allows for the with_size::Bool
keyword (default false
), which will also print the size of the respective branches to give you an idea of how much memory a SpeedyWeather simulation uses.
tree(simulation, max_level=1, with_size=true)
Simulation{BarotropicModel} (1.20 MB)
├┐prognostic_variables (131.48 KB)
├┐diagnostic_variables (594.74 KB)
└┐model (473.81 KB)
And with max_level
you can truncate the tree to go down at most that many levels. 1MB is a typical size for a one-level T31 resolution simulation. In comparison, a higher resolution PrimitiveWetModel
would use
spectral_grid = SpectralGrid(trunc=127, nlayers=8)
model = PrimitiveWetModel(spectral_grid)
simulation = initialize!(model)
tree(simulation, max_level=1, with_size=true)
Simulation{PrimitiveWetModel} (63.66 MB)
├┐prognostic_variables (5.48 MB)
├┐diagnostic_variables (35.76 MB)
└┐model (22.41 MB)