Working with model output

For convenience, aeolus provides a way of keeping loaded and processed data within one object along with extra metadata. The object is called AtmoSim (as in “atmospheric simulation”). The code below provides an example of basic usage of AtmoSim.

[1]:
from pathlib import Path

import iris
from aeolus.core import AtmoSim

Note that you can use either a single filename or a list of filenames, each of which is either a str or (recommended) pathlib.Path object.

[2]:
sample_file = Path.cwd().parent / "tests" / "data" / "test_data" / "pp" / "sample_t1e_2d_mean.pp"

To load the data, use iris functions.

[3]:
inp_data = iris.load(sample_file)
[4]:
type(inp_data)
[4]:
iris.cube.CubeList

This cube list can be then used to instantiate AtmoSim. It is also possible to add a short name, a long description of the experiment; and to specify a planet configuration with relevant constants (see “Physical constants” example for more info).

[5]:
my_run = AtmoSim(
    cubes=inp_data,
    name="t1e_example",
    description="This is some sample data from a UM simulation of tidally-locked Trappist-1e planet.",
    planet="trap1e",  # this reads constants from a JSON file
)
[6]:
type(my_run)
[6]:
aeolus.core.AtmoSim

The loaded data are stored as a CubeList as the _cubes attribute.

[7]:
print(my_run._cubes)
0: convective_rainfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
1: convective_snowfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
2: high_type_cloud_area_fraction / (1) (latitude: 90; longitude: 144)
3: low_type_cloud_area_fraction / (1)  (latitude: 90; longitude: 144)
4: medium_type_cloud_area_fraction / (1) (latitude: 90; longitude: 144)
5: stratiform_rainfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
6: stratiform_snowfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)

Constants that have been used in the model:

[8]:
my_run.const
[8]:
Trap1eConstants(earth_day [s], stefan_boltzmann [W m-2 K-4], water_heat_vaporization [m2 s-2], water_molecular_weight [kg mol-1], molar_gas_constant [J K-1 mol-1], boltzmann [m^2 kg s^-2 K^-1], avogadro [mol-1], gravity [m s-2], radius [m], day [s], solar_constant [W m-2], reference_surface_pressure [Pa], semi_major_axis [au], eccentricity [1], obliquity [degree], dry_air_spec_heat_press [m2 s-2 K-1], dry_air_molecular_weight [kg mol-1], condensible_density [kg m-3], condensible_heat_vaporization [m2 s-2])

Individual cubes can be accessed either by via the _cubes attribute and iris methods, or, more conveniently, as keys or attributes of AtmoSim:

[9]:
print(my_run.cv_rain)
convective_rainfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
    Dimension coordinates:
        latitude                                 x              -
        longitude                                -              x
    Scalar coordinates:
        forecast_period                 36360.0 hours, bound=(36000.0, 36720.0) hours
        forecast_reference_time         2004-05-13 09:00:00
        time                            2008-07-06 09:00:00, bound=(2008-06-21 09:00:00, 2008-07-21 09:00:00)
    Cell methods:
        mean                            time (1 hour)
    Attributes:
        STASH                           m01s05i205
        planet_conf                     Trap1eConstants(earth_day [s], stefan_boltzmann [W m-2 K-4], water_heat_vaporization...
        source                          'Data from Met Office Unified Model'
        um_version                      '11.3'
[10]:
print(my_run["cv_rain"])
convective_rainfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
    Dimension coordinates:
        latitude                                 x              -
        longitude                                -              x
    Scalar coordinates:
        forecast_period                 36360.0 hours, bound=(36000.0, 36720.0) hours
        forecast_reference_time         2004-05-13 09:00:00
        time                            2008-07-06 09:00:00, bound=(2008-06-21 09:00:00, 2008-07-21 09:00:00)
    Cell methods:
        mean                            time (1 hour)
    Attributes:
        STASH                           m01s05i205
        planet_conf                     Trap1eConstants(earth_day [s], stefan_boltzmann [W m-2 K-4], water_heat_vaporization...
        source                          'Data from Met Office Unified Model'
        um_version                      '11.3'

which is equivalent to typing

[11]:
print(my_run._cubes.extract_cube("convective_rainfall_flux"))
convective_rainfall_flux / (kg m-2 s-1) (latitude: 90; longitude: 144)
    Dimension coordinates:
        latitude                                 x              -
        longitude                                -              x
    Scalar coordinates:
        forecast_period                 36360.0 hours, bound=(36000.0, 36720.0) hours
        forecast_reference_time         2004-05-13 09:00:00
        time                            2008-07-06 09:00:00, bound=(2008-06-21 09:00:00, 2008-07-21 09:00:00)
    Cell methods:
        mean                            time (1 hour)
    Attributes:
        STASH                           m01s05i205
        planet_conf                     Trap1eConstants(earth_day [s], stefan_boltzmann [W m-2 K-4], water_heat_vaporization...
        source                          'Data from Met Office Unified Model'
        um_version                      '11.3'

Short-cuts are defined using the Model container (see the “Model field names” example).

[12]:
my_run.model.cv_rain
[12]:
'convective_rainfall_flux'