"""Module to compute the U.S. Standard Atmosphere 1976.
The U.S. Standard Atmosphere 1976 is a Earth atmosphere thermophysical model
described in the technical report [NOAA+1976](bibliography.md#NOAA+1976).
"""
import logging
import typing as t
import pint
import xarray as xr
from attrs import define
from .core import compute as compute
from ..core import Profile
from ..factory import factory
from ..schema import history, schema
from ...units import to_quantity
logger = logging.getLogger(__name__)
[docs]
@factory.register(identifier="ussa_1976")
@define
class USSA1976(Profile):
"""
Class to compute the U.S. Standard Atmosphere 1976.
The U.S. Standard Atmosphere 1976 is a Earth atmosphere thermophysical model
described in the technical report :cite:p:`NASA1976USStandardAtmosphere`.
"""
[docs]
def to_dataset(
self,
z: t.Optional[pint.Quantity] = None,
interp_method: t.Optional[t.Mapping[str, str]] = None,
conserve_column: bool = False,
**kwargs: t.Any,
) -> xr.Dataset:
# Since the ussa_1976 model can be evaluated at any altitude, both
# interp_method and conserve_column are ignored.
# kwargs are ignored
if kwargs:
logger.warning( # pragma: no cover
"value of the 'kwargs' parameter will be ignored."
)
# variable to compute with the ussa1976 package
variables = [
"p",
"t",
"n_tot",
"n",
]
# compute profile
if z is None:
logging.debug("Computing profile with ussa1976 package")
ds = compute(variables=variables)
else:
logging.debug("Computing profile with ussa1976 package")
logging.debug("z=%s", z)
ds = compute(z=z.m_as("m"), variables=variables)
# extract data
coords = {"z": to_quantity(ds["z"]).to("km")}
data_vars = {}
data_vars["p"] = to_quantity(ds["p"]).to("Pa")
data_vars["t"] = to_quantity(ds["t"]).to("K")
data_vars["n"] = to_quantity(ds["n_tot"]).to("m^-3")
# compute mole fraction
for s in ds["s"].values:
nx = to_quantity(ds["n"].sel(s=s))
n_tot = to_quantity(ds["n_tot"])
data_vars[f"x_{s}"] = (nx / n_tot).to("dimensionless")
attrs = {
"Conventions": "CF-1.10",
"title": "U.S. Standard Atmosphere 1976",
"institution": "NOAA",
"source": ds.attrs["source"],
"history": ds.attrs["history"] + "\n" + history(),
"references": ds.attrs["references"],
"url": "https://ntrs.nasa.gov/citations/19770009539",
"urldate": "2022-12-08",
}
ds = schema.convert(
data_vars,
coords,
attrs,
)
return ds