# Hydrostatic Boussinesq

## Models

ClimateMachine.Ocean.HydrostaticBoussinesq.HydrostaticBoussinesqModelType
HydrostaticBoussinesqModel <: 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)
source

## BCs

ClimateMachine.Ocean.OceanBCType
OceanBC(velocity    = Impenetrable(NoSlip())
temperature = Insulating())

The standard boundary condition for OceanModel. The default options imply a "no flux" boundary condition.

source
ClimateMachine.Ocean.PenetrableType
Penetrable(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.
source
ClimateMachine.Ocean.ImpenetrableType
Impenetrable(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.
source
ClimateMachine.Ocean.KinematicStressType
KinematicStress(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²).

source
ClimateMachine.Ocean.TemperatureFluxType
TemperatureFlux(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).

source

# OceanProblems

## Problems

ClimateMachine.Ocean.OceanProblems.HomogeneousBoxType
HomogeneousBox <: 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)

source
ClimateMachine.Ocean.OceanProblems.OceanGyreType
OceanGyre <: 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

source

## Other (development)

ClimateMachine.Ocean.SuperModels.HydrostaticBoussinesqSuperModelType
HydrostaticBoussinesqSuperModel(; domain, time_step, parameters,
initial_conditions = InitialConditions(),
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(),
timestepper = ClimateMachine.ExplicitSolverType(solver_method=LS3NRK33Heuns),
)

Builds a SuperModel that solves the Hydrostatic Boussinesq equations.

source
ClimateMachine.Ocean.JLD2Writers.JLD2WriterType
JLD2Writer(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.

source
ClimateMachine.Ocean.SplitExplicit01.SplitExplicitLSRK2nSolverType
SplitExplicitLSRK2nSolver(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.

source
ClimateMachine.Ocean.SplitExplicit01.SplitExplicitLSRK3nSolverType
SplitExplicitLSRK3nSolver(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.

source