Skip to content
Open
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
7 changes: 4 additions & 3 deletions CMIP7/esm1p6/atmosphere/cmip7_ancil_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def zero_poles(cube):
cube.data[:, -1] = 0.0


def save_ancil(cubes, save_dirpath, save_filename):
def save_ancil(cubes, save_dirpath, save_filename, gregorian=True):
"""
Handle both a list and a single cube
"""
Expand All @@ -109,8 +109,9 @@ def save_ancil(cubes, save_dirpath, save_filename):
"""
for cube in cubes:
cube.attributes["grid_staggering"] = 3 # New dynamics
cube.attributes["time_type"] = 1 # Gregorian
set_gregorian(cube)
if gregorian:
cube.attributes["time_type"] = 1 # Gregorian
set_gregorian(cube)
"""
ANTS doesn't set the calendar header for monthly fields
See fileformats/ancil/time_headers.py
Expand Down
53 changes: 53 additions & 0 deletions CMIP7/esm1p6/atmosphere/ozone/cmip7_HI_ozone_generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from argparse import ArgumentParser
from pathlib import Path

from cmip7_ancil_argparse import (
grid_parser,
path_parser,
)
from cmip7_ancil_common import save_ancil
from cmip7_ancil_constants import ANCIL_TODAY
from ozone.cmip7_ozone import (
fix_cmip7_ozone,
load_cmip7_ozone,
ozone_parser,
)


def parse_args():
parser = ArgumentParser(
parents=[path_parser(), grid_parser(), ozone_parser()],
prog="cmip7_HI_ozone_generate",
description=(
"Generate input files from UK CMIP7 historical ozone forcings"
),
)
return parser.parse_args()


def esm_hi_ozone_save_dirpath(args):
return (
Path(args.ancil_target_dirname)
/ "modern"
/ "historical"
/ "forcing"
/ args.esm_grid_rel_dirname
/ ANCIL_TODAY
)


def save_cmip7_hi_ozone(args, cube):
# Save as an ancillary file
save_dirpath = esm_hi_ozone_save_dirpath(args)
save_ancil(cube, save_dirpath, args.save_filename, gregorian=False)


if __name__ == "__main__":
args = parse_args()

# Load the CMIP7 datasets
ozone_cube = load_cmip7_ozone(args)
# Match the ESM1.5 mask
esm_cube = fix_cmip7_ozone(args, ozone_cube)
# Save the ancillary
save_cmip7_hi_ozone(args, esm_cube)
53 changes: 53 additions & 0 deletions CMIP7/esm1p6/atmosphere/ozone/cmip7_PI_ozone_generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from argparse import ArgumentParser
from pathlib import Path

from cmip7_ancil_argparse import (
grid_parser,
path_parser,
)
from cmip7_ancil_common import save_ancil
from cmip7_ancil_constants import ANCIL_TODAY
from ozone.cmip7_ozone import (
fix_cmip7_ozone,
load_cmip7_ozone,
ozone_parser,
)


def parse_args():
parser = ArgumentParser(
parents=[path_parser(), grid_parser(), ozone_parser()],
prog="cmip7_PI_ozone_generate",
description=(
"Generate input files from UK CMIP7 pre-industrial ozone forcings"
),
)
return parser.parse_args()


def esm_pi_ozone_save_dirpath(args):
return (
Path(args.ancil_target_dirname)
/ "modern"
/ "pre-industrial"
/ "forcing"
/ args.esm_grid_rel_dirname
/ ANCIL_TODAY
)


def save_cmip7_pi_ozone(args, cube):
# Save as an ancillary file
save_dirpath = esm_pi_ozone_save_dirpath(args)
save_ancil(cube, save_dirpath, args.save_filename, gregorian=False)


if __name__ == "__main__":
args = parse_args()

# Load the CMIP7 datasets
ozone_cube = load_cmip7_ozone(args)
# Match the ESM1.5 mask
esm_cube = fix_cmip7_ozone(args, ozone_cube)
# Save the ancillary
save_cmip7_pi_ozone(args, esm_cube)
32 changes: 32 additions & 0 deletions CMIP7/esm1p6/atmosphere/ozone/cmip7_ozone.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from argparse import ArgumentParser
from pathlib import Path

import iris
from cmip7_ancil_common import fix_coords


def ozone_parser():
parser = ArgumentParser(add_help=False)
parser.add_argument("--ukesm-ancil-dirpath")
parser.add_argument("--ukesm-netcdf-filename")
parser.add_argument("--save-filename")
return parser


def cmip7_ozone_filepath(args):
dirpath = Path(args.ukesm_ancil_dirpath)
filename = args.ukesm_netcdf_filename
return dirpath / filename


def load_cmip7_ozone(args):
filepath = cmip7_ozone_filepath(args)
cube = iris.load_cube(filepath)
return cube


def fix_cmip7_ozone(args, cube):
# Make the coordinates compatible with the ESM1.5 grid mask
fix_coords(args, cube)
cube.data = cube.data.filled(0.0)
return cube
Loading