Source code for abcmodel.atmos.clouds.no_clouds
from dataclasses import dataclass, field
import jax.numpy as jnp
from jax import Array
from ...coupling import AbstractCoupledState
from ..abstracts import AbstractCloudModel, AbstractCloudState
[docs]
@dataclass
class NoCloudState(AbstractCloudState):
"""No cloud initial state."""
cc_frac: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$a_{cc}$",
"unit": "-",
"description": "Cloud core fraction",
},
)
"""Cloud core fraction [-], range 0 to 1."""
cc_mf: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$M_{cc}$",
"unit": "s^{-1}",
"description": "Cloud core mass flux",
},
)
"""Cloud core mass flux [kg/kg/s]."""
cc_qf: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$(w'q')_{cc}$",
"unit": "kg kg^{-1} s^{-1}",
"description": "Cloud core moisture flux",
},
)
"""Cloud core moisture flux [kg/kg/s]."""
cl_trans: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$\tau_{cl}$",
"unit": "-",
"description": "Cloud layer transmittance",
},
)
"""Cloud layer transmittance [-], range 0 to 1."""
q2_h: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$\sigma^2_{q,h}$",
"unit": "kg^2 kg^{-2}",
"description": "Humidity variance at mixed-layer top",
},
)
"""Humidity variance at mixed-layer top [kg²/kg²]."""
top_CO22: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$\sigma^2_{CO2,h}$",
"unit": "ppm^2",
"description": "CO2 variance at mixed-layer top",
},
)
"""CO2 variance at mixed-layer top [ppm²]."""
wCO2M: Array = field(
default_factory=lambda: jnp.array(0.0),
metadata={
"label": r"$(w'CO_2')_M$",
"unit": "mgC m^{-2} s^{-1}",
"description": "CO2 mass flux",
},
)
"""CO2 mass flux [mgC/m²/s]."""
[docs]
class NoCloudModel(AbstractCloudModel[NoCloudState]):
"""No cloud is formed using this model."""
def __init__(self):
pass
[docs]
def init_state(self) -> NoCloudState:
"""Initialize the model state.
Returns:
The initial cloud state.
"""
return NoCloudState()
[docs]
def run(self, state: AbstractCoupledState) -> NoCloudState:
"""No calculations."""
return state.atmos.clouds