Ocean Base Module
Hydrostatic Boussinesq
Models
ClimateMachine.Ocean.HydrostaticBoussinesq.HydrostaticBoussinesqModel
— TypeHydrostaticBoussinesqModel <: BalanceLaw
A BalanceLaw
for ocean modeling.
write out the equations here
ρₒ = reference density of sea water cʰ = maximum horizontal wave speed cᶻ = maximum vertical wave speed αᵀ = thermal expansitivity coefficient νʰ = horizontal viscosity νᶻ = vertical viscosity κʰ = horizontal diffusivity κᶻ = vertical diffusivity fₒ = first coriolis parameter (constant term) β = second coriolis parameter (linear term)
Usage
HydrostaticBoussinesqModel(problem)
ClimateMachine.Ocean.HydrostaticBoussinesq.LinearHBModel
— TypeLinearHBModel <: BalanceLaw
A BalanceLaw
for modeling vertical diffusion implicitly.
write out the equations here
Usage
model = HydrostaticBoussinesqModel(problem)
linear = LinearHBModel(model)
BCs
ClimateMachine.Ocean.OceanBC
— TypeOceanBC(velocity = Impenetrable(NoSlip())
temperature = Insulating())
The standard boundary condition for OceanModel. The default options imply a "no flux" boundary condition.
ClimateMachine.Ocean.Penetrable
— TypePenetrable(drag::VelocityDragBC) :: VelocityBC
Defines an penetrable wall model for velocity. This implies:
- no constraint on flow in the direction normal to the boundary, and
- flow parallel to the boundary is subject to the
drag
condition.
ClimateMachine.Ocean.Impenetrable
— TypeImpenetrable(drag::VelocityDragBC) :: VelocityBC
Defines an impenetrable wall model for velocity. This implies:
- no flow in the direction normal to the boundary, and
- flow parallel to the boundary is subject to the
drag
condition.
ClimateMachine.Ocean.NoSlip
— TypeNoSlip() :: VelocityDragBC
Zero velocity at the boundary.
ClimateMachine.Ocean.FreeSlip
— TypeFreeSlip() :: VelocityDragBC
No surface drag on velocity parallel to the boundary.
ClimateMachine.Ocean.KinematicStress
— TypeKinematicStress(stress) :: VelocityDragBC
Applies the specified kinematic stress on velocity normal to the boundary. Prescribe the net inward kinematic stress across the boundary by stress
, a function with signature stress(problem, state, aux, t)
, returning the flux (in m²/s²).
ClimateMachine.Ocean.Insulating
— TypeInsulating() :: TemperatureBC
No temperature flux across the boundary
ClimateMachine.Ocean.TemperatureFlux
— TypeTemperatureFlux(flux) :: TemperatureBC
Prescribe the net inward temperature flux across the boundary by flux
, a function with signature flux(problem, state, aux, t)
, returning the flux (in m⋅K/s).
ShallowWater
Models
ClimateMachine.Ocean.ShallowWater.ShallowWaterModel
— TypeShallowWaterModel <: BalanceLaw
A BalanceLaw
for shallow water modeling.
write out the equations here
Usage
ShallowWaterModel(problem)
OceanProblems
Problems
ClimateMachine.Ocean.OceanProblems.SimpleBox
— TypeSimpleBoxProblem <: AbstractSimpleBoxProblem
Stub structure with the dimensions of the box. Lˣ = zonal (east-west) length Lʸ = meridional (north-south) length H = height of the ocean
ClimateMachine.Ocean.OceanProblems.HomogeneousBox
— TypeHomogeneousBox <: AbstractSimpleBoxProblem
Container structure for a simple box problem with wind-stress. Lˣ = zonal (east-west) length Lʸ = meridional (north-south) length H = height of the ocean τₒ = maximum value of wind-stress (amplitude)
ClimateMachine.Ocean.OceanProblems.OceanGyre
— TypeOceanGyre <: AbstractSimpleBoxProblem
Container structure for a simple box problem with wind-stress, coriolis force, and temperature forcing. Lˣ = zonal (east-west) length Lʸ = meridional (north-south) length H = height of the ocean τₒ = maximum value of wind-stress (amplitude) λʳ = temperature relaxation penetration constant (meters / second) θᴱ = maximum surface temperature
Other (development)
ClimateMachine.Ocean.SuperModels.HydrostaticBoussinesqSuperModel
— TypeHydrostaticBoussinesqSuperModel(; domain, time_step, parameters,
initial_conditions = InitialConditions(),
advection = (momentum = NonLinearAdvectionTerm(), tracers = NonLinearAdvectionTerm()),
turbulence_closure = (νʰ=0, νᶻ=0, κʰ=0, κᶻ=0),
coriolis = (f₀=0, β=0),
rusanov_wave_speeds = (cʰ=0, cᶻ=0),
buoyancy = (αᵀ=0,)
numerical_fluxes = ( first_order = RusanovNumericalFlux(),
second_order = CentralNumericalFluxSecondOrder(),
gradient = CentralNumericalFluxGradient())
timestepper = ClimateMachine.ExplicitSolverType(solver_method=LS3NRK33Heuns),
)
Builds a SuperModel
that solves the Hydrostatic Boussinesq equations.
ClimateMachine.Ocean.JLD2Writers.JLD2Writer
— TypeJLD2Writer(model, outputs=model.fields; filepath, array_type=Array, overwrite_existing=true)
Returns a utility for writing field output to JLD2 files, overwrite_existing
file at filepath
.
write!(jld2_writer::JLD2Writer)
writes outputs
to filepath
, where outputs
is either a NamedTuple
or Dict
ionary of fields
or functions of the form output(model)
.
Field data is converted to array_type
before outputting.
ClimateMachine.Ocean.SplitExplicit01.SplitExplicitLSRK2nSolver
— TypeSplitExplicitLSRK2nSolver(slow_solver, fast_solver; dt, t0 = 0, coupled = true)
This is a time stepping object for explicitly time stepping the differential equation given by the right-hand-side function f
with the state Q
, i.e.,
\[ \dot{Q_fast} = f_fast(Q_fast, Q_slow, t) \dot{Q_slow} = f_slow(Q_slow, Q_fast, t)\]
with the required time step size dt
and optional initial time t0
. This time stepping object is intended to be passed to the solve!
command.
This method performs an operator splitting to timestep the Sea-Surface elevation and vertically averaged horizontal velocity of the model at a faster rate than the full model, using LowStorageRungeKutta2N time-stepping.
ClimateMachine.Ocean.SplitExplicit01.SplitExplicitLSRK3nSolver
— TypeSplitExplicitLSRK3nSolver(slow_solver, fast_solver; dt, t0 = 0, coupled = true)
This is a time stepping object for explicitly time stepping the differential equation given by the right-hand-side function f
with the state Q
, i.e.,
\[ \dot{Q_fast} = f_fast(Q_fast, Q_slow, t) \dot{Q_slow} = f_slow(Q_slow, Q_fast, t)\]
with the required time step size dt
and optional initial time t0
. This time stepping object is intended to be passed to the solve!
command.
This method performs an operator splitting to timestep the Sea-Surface elevation and vertically averaged horizontal velocity of the model at a faster rate than the full model, using LowStorageRungeKutta3N time-stepping.
ClimateMachine.Ocean.SplitExplicit01.OceanDGModel
— FunctionOceanDGModel()
helper function to add required filtering not used in the Driver+Config setup