Ocean Base Module
Hydrostatic Boussinesq
Models
ClimateMachine.Ocean.HydrostaticBoussinesq.HydrostaticBoussinesqModel — TypeHydrostaticBoussinesqModel <: BalanceLawA 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 <: BalanceLawA 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) :: VelocityBCDefines 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
dragcondition.
ClimateMachine.Ocean.Impenetrable — TypeImpenetrable(drag::VelocityDragBC) :: VelocityBCDefines 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
dragcondition.
ClimateMachine.Ocean.NoSlip — TypeNoSlip() :: VelocityDragBCZero velocity at the boundary.
ClimateMachine.Ocean.FreeSlip — TypeFreeSlip() :: VelocityDragBCNo surface drag on velocity parallel to the boundary.
ClimateMachine.Ocean.KinematicStress — TypeKinematicStress(stress) :: VelocityDragBCApplies 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() :: TemperatureBCNo temperature flux across the boundary
ClimateMachine.Ocean.TemperatureFlux — TypeTemperatureFlux(flux) :: TemperatureBCPrescribe 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 <: BalanceLawA BalanceLaw for shallow water modeling.
write out the equations here
Usage
ShallowWaterModel(problem)OceanProblems
Problems
ClimateMachine.Ocean.OceanProblems.SimpleBox — TypeSimpleBoxProblem <: AbstractSimpleBoxProblemStub 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 <: AbstractSimpleBoxProblemContainer 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 <: AbstractSimpleBoxProblemContainer 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 Dictionary 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