# AtmosModel

## AtmosModel balance law

ClimateMachine.Atmos.AtmosPhysicsType
AtmosPhysics

An AtmosPhysics for atmospheric physics

Usage

AtmosPhysics(
param_set,
ref_state,
energy,
moisture,
compressibility,
turbulence,
turbconv,
hyperdiffusion,
precipitation,
tracers,
lsforcing,
)

Fields

• param_set

Parameter Set (type to dispatch on, e.g., planet parameters. See CLIMAParameters.jl package)

• ref_state

Reference State (For initial conditions, or for linearisation when using implicit solvers)

• energy

Energy sub-model, can be energy-based or θliqice-based

• moisture

Moisture Model (Equations for dynamics of moist variables)

• compressibility

Compressibility switch

• turbulence

Turbulence Closure (Equations for dynamics of under-resolved turbulent flows)

• turbconv

Turbulence Convection Closure (e.g., EDMF)

• hyperdiffusion

Hyperdiffusion Model (Equations for dynamics of high-order spatial wave attenuation)

• viscoussponge

Viscous sponge layers

• precipitation

Precipitation Model (Equations for dynamics of precipitating species)

• tracers

Tracer Terms (Equations for dynamics of active and passive tracers)

• lsforcing

Large-scale forcing (Forcing information from GCMs, reanalyses, or observations)

source
ClimateMachine.Atmos.AtmosModelType
AtmosModel <: BalanceLaw

A BalanceLaw for atmosphere modeling. Users may over-ride prescribed default values for each field.

Usage

AtmosModel(
physics,
problem,
orientation,
source,
data_config,
)

Fields

• physics

Atmospheric physics

• problem

Problem (initial and boundary conditions)

• orientation

An orientation model

• source

Source Terms (Problem specific source terms)

• data_config

Data Configuration (Helper field for experiment configuration)

source

## AtmosModel methods

ClimateMachine.BalanceLaws.flux_first_order!Method
flux_first_order!(
bl::BalanceLaw,
state::Vars,
aux::Vars,
t::Real
)

Computes (and assembles) flux terms F¹(Y) in:

∂Y
-- + ∇ • F¹(Y) + ∇ • F²(Y,G) = S(Y, G),     G = ∇Y
∂t

Computes and assembles non-diffusive fluxes in the model equations.

For this fallback to work, several methods must be defined:

optionally,

and individual flux kernels that are defined for each type that eq_tends returns.

source
ClimateMachine.BalanceLaws.flux_second_order!Method
flux_second_order!(
bl::BalanceLaw,
state::Vars,
diffusive::Vars,
hyperdiffusive::Vars,
aux::Vars,
t::Real
)

Computes (and assembles) flux terms F²(Y, G) in:

∂Y
-- + ∇ • F¹(Y) + ∇ • F²(Y,G) = S(Y, G),     G = ∇Y
∂t

Diffusive fluxes in BalanceLaw. Viscosity, diffusivity are calculated in the turbulence subcomponent and accessed within the diffusive flux function. Contributions from subcomponents are then assembled (pointwise).

For this fallback to work, several methods must be defined:

optionally,

and individual flux kernels that are defined for each type that eq_tends returns.

source
ClimateMachine.BalanceLaws.source!Method
source!(
bl::BalanceLaw,
source::Vars,
state::Vars,
diffusive::Vars,
aux::Vars,
t::Real,
direction::Direction,
)

Computes (and assembles) source terms S(Y) in:

∂Y
-- + ∇ • F¹(Y) + ∇ • F²(Y,G) = S(Y, G),     G = ∇Y
∂t

For this fallback to work, several methods must be defined:

optionally,

and individual source kernels that are defined for each type that eq_tends returns.

source
ClimateMachine.BalanceLaws.init_state_prognostic!Method
init_state_prognostic!(
m::AtmosModel,
state::Vars,
aux::Vars,
localgeo,
t,
args...,
)

Initialise state variables. args... provides an option to include configuration data (current use cases include problem constants, spline-interpolants).

source

## Compressibility

ClimateMachine.Atmos.Anelastic1DType
Anelastic1D <: Compressibilty

Dispatch on Anelastic1D model

• The state density is taken constant in time and equal to the reference density. This constant density profile is used in all equations and conversions from conservative to specific variables per unit mass. The density can be accessed using the dispatch function density(atmos, state, aux).
• The thermodynamic state is constructed from the reference pressure (constant in time), and the internal energy (which evolves in time).
• The state density is not consistent with the thermodynamic state, since we neglect buoyancy perturbations on all equations except in the vertical buoyancy flux.
• The density obtained from the thermodynamic state, air_density(ts), recovers the full density, which should only be used to compute buoyancy and buoyancy fluxes, and in the FV reconstruction.
• Removes momentum z-component tendencies, assuming balance between the pressure gradient and buoyancy forces.
source

## Reference states

ClimateMachine.Atmos.HydrostaticStateType
HydrostaticState{P,T} <: ReferenceState

A hydrostatic state specified by a virtual temperature profile and relative humidity.

By default, this is a dry hydrostatic reference state.

source
ClimateMachine.Atmos.InitStateBCType
InitStateBC

Set the value at the boundary to match the init_state_prognostic! function. This is mainly useful for cases where the problem has an explicit solution.

TODO: This should be fixed later once BCs are figured out (likely want

different things here?)

source

## Thermodynamics

ClimateMachine.Atmos.recover_thermo_stateFunction
recover_thermo_state(atmos::AtmosModel, state::Vars, aux::Vars)

An atmospheric thermodynamic state.

Warn

For now, we are directly calling newthermostate to avoid inconsistent aux states in kernels where the aux states are out of sync with the boundary state.

TODO: Define/call recover_thermo_state when it's safely implemented

(see https://github.com/CliMA/ClimateMachine.jl/issues/1648)

source
ClimateMachine.Atmos.new_thermo_stateFunction
new_thermo_state(atmos::AtmosModel, state::Vars, aux::Vars)

Create a new thermodynamic state, based on the state, and not the aux state.

Note

This method calls the iterative saturation adjustment procedure for EquilMoist models.

source
ClimateMachine.Atmos.recover_thermo_state_anelasticFunction
recover_thermo_state_anelastic(atmos::AtmosModel, state::Vars, aux::Vars)

An atmospheric thermodynamic state.

Warn

For now, we are directly calling newthermostate_anelastic to avoid inconsistent aux states in kernels where the aux states are out of sync with the boundary state.

TODO: Define/call recover_thermo_state_anelastic when it's safely implemented

(see https://github.com/CliMA/ClimateMachine.jl/issues/1648)

source
ClimateMachine.Atmos.new_thermo_state_anelasticFunction
new_thermo_state_anelastic(atmos::AtmosModel, state::Vars, aux::Vars)

Create a new thermodynamic state, based on the state, and not the aux state.

Note

This method calls the iterative saturation adjustment procedure for EquilMoist models.

source

## Stabilization

ClimateMachine.Atmos.RayleighSpongeType
RayleighSponge{FT} <: TendencyDef{Source}

Rayleigh Damping (Linear Relaxation) for top wall momentum components Assumes laterally periodic boundary conditions for LES flows. Momentum components are relaxed to reference values (zero velocities) at the top boundary.

source

## BCs

ClimateMachine.Atmos.AtmosBCType
AtmosBC(momentum = Impenetrable(FreeSlip())
energy   = Insulating()
moisture = Impermeable()
precipitation = OutflowPrecipitation()
tracer  = ImpermeableTracer())

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

source
ClimateMachine.Atmos.DragLawType
DragLaw(fn) :: MomentumDragBC

Drag law for momentum parallel to the boundary. The drag coefficient is C = fn(state, aux, t, normu_int_tan), where normu_int_tan is the internal speed parallel to the boundary. _int refers to the first interior node.

source
ClimateMachine.Atmos.BulkFormulaMoistureType
BulkFormulaMoisture(fn) :: MoistureBC

Calculate the net inward moisture flux across the boundary using the bulk formula. The drag coefficient is C_q = fn_C_q(state, aux, t, normu_int_tan). The surface qtot at the boundary is qtot = fnqtot(state, aux, t).

Return the flux (in kg m^-2 s^-1).

source

Prescribe the net inward potential temperature flux across the boundary by fn, a function with signature fn(state, aux, t), returning the flux (in kgK/m^2).

source
ClimateMachine.Atmos.BulkFormulaEnergyType
BulkFormulaEnergy(fn) :: EnergyBC

Calculate the net inward energy flux across the boundary. The drag coefficient is C_h = fn_C_h(atmos, state, aux, t, normu_int_tan). The surface temperature and qtot are T, qtot = fnTandqtot(atmos, state, aux, t). Return the flux (in W m^-2).

source
ClimateMachine.Atmos.ImpenetrableType
Impenetrable(drag::MomentumDragBC) :: MomentumBC

Defines an impenetrable wall model for momentum. 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.Atmos.average_densityFunction
average_density(ρ_sfc, ρ_int)

Average density between the surface and the interior point, given

• ρ_sfc density at the surface
• ρ_int density at the interior point
source

## Sources

ClimateMachine.Atmos.RemovePrecipitationType
RemovePrecipitation <: TendencyDef{Source}

A sink to q_tot when cloud condensate is exceeding a threshold. The threshold is defined either in terms of condensate or supersaturation. The removal rate is implemented as a relaxation term in the CloudMicrophysics.jl Microphysics_0M module. The default thresholds and timescale are defined in CLIMAParameters.jl.

source
ClimateMachine.Atmos.CreateCloudsType
CreateClouds <: TendencyDef{Source}

A source/sink to q_liq and q_ice implemented as a relaxation towards equilibrium in the Microphysics module. The default relaxation timescales are defined in CLIMAParameters.jl.

source
ClimateMachine.Atmos.WarmRain_1MType
WarmRain_1M <: TendencyDef{Source}

A collection of source/sink terms related to 1-moment warm rain microphysics. The microphysics process rates are implemented in the CloudMicrophysics.jl Microphysics_1M module.

source
ClimateMachine.Atmos.RainSnow_1MType
RainSnow_1M <: TendencyDef{Source}

A collection of source/sink terms related to 1-moment rain and snow microphysics The microphysics process rates are implemented in the CloudMicrophysics.jl Microphysics_1M module.

source