Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/access_moppy/derivations/calc_ocean.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import logging

import click


@click.pass_context
def K_degC(ctx, var, inverse=False):
"""Converts temperature from/to K to/from degC.

Parameters
----------
ctx : click context
Includes obj dict with 'cmor' settings, exp attributes
var : Xarray DataArray
temperature array

Returns
-------
vout : Xarray DataArray
temperature array in degrees Celsius or Kelvin if inverse is True

"""
var_log = logging.getLogger(ctx.obj["var_log"])
if not inverse and "K" in var.units:
var_log.info("temp in K, converting to degC")
vout = var - 273.15
elif inverse and "C" in var.units:
var_log.info("temp in degC, converting to K")
vout = var + 273.15
return vout
65 changes: 65 additions & 0 deletions src/access_moppy/derivations/calc_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,3 +248,68 @@ def get_plev(ctx, levnum):
plev = np.array(axis_dict[f"plev{levnum}"]["requested"])
plev = plev.astype(float)
return plev


def power(var, exponent):
"""
Raise a variable to a power.

Parameters
----------
var : DataArray
Base variable
exponent : float
Power to raise the variable to

Returns
-------
DataArray
var raised to the exponent (var**exponent)
"""
return var**exponent


def multiply(var, factor):
"""
Multiply a variable by a constant factor.

Parameters
----------
var : DataArray
Input variable
factor : float
Multiplication factor

Returns
-------
DataArray
var multiplied by factor (var * factor)

Used for:
- pbo: multiply(pbot_t, 10000) - convert pressure to dbar
"""
return var * factor


def sum_vertical(var, dim="st_ocean"):
"""
Sum/integrate a 3D variable along the vertical (depth) dimension.

Parameters
----------
var : DataArray
Input 3D variable with vertical dimension
dim : str, optional
Name of vertical dimension to sum over (default: 'st_ocean')
Can also be 'sw_ocean' for variables on w-grid

Returns
-------
DataArray
2D variable after vertical integration

Examples
--------
Used for: hfsifrazil2d (vertical integral of frazil ice heat flux)
"""
return var.sum(dim=dim)