Source code for improver.cli.nowcast_extrapolate
#!/usr/bin/env python
# (C) Crown Copyright, Met Office. All rights reserved.
#
# This file is part of 'IMPROVER' and is released under the BSD 3-Clause license.
# See LICENSE in the root of the repository for full licensing details.
"""Script to extrapolate input data given advection velocity fields."""
from improver import cli
# Creates the value_converter that clize needs.
inputadvection = cli.create_constrained_inputcubelist_converter(
lambda cube: cube.name()
in ["precipitation_advection_x_velocity", "grid_eastward_wind"],
lambda cube: cube.name()
in ["precipitation_advection_y_velocity", "grid_northward_wind"],
)
[docs]
@cli.clizefy
@cli.with_output
def process(
cube: cli.inputcube,
advection_velocity: inputadvection,
orographic_enhancement: cli.inputcube = None,
*,
attributes_config: cli.inputjson = None,
max_lead_time: int = 360,
lead_time_interval: int = 15,
):
"""Module to extrapolate input cubes given advection velocity fields.
Args:
cube (iris.cube.Cube):
The data to be advected.
advection_velocity (iris.cube.CubeList):
Advection cubes of U and V.
These must have the names of either:
precipitation_advection_x_velocity or grid_eastward_wind
precipitation_advection_y_velocity or grid_northward_wind
orographic_enhancement (iris.cube.Cube):
Cube containing orographic enhancement forecasts for the lead times
at which an extrapolation nowcast is required.
attributes_config (dict):
Dictionary containing the required changes to the attributes.
max_lead_time (int):
Maximum lead time required (mins).
lead_time_interval (int):
Interval between required lead times (mins).
Returns:
iris.cube.CubeList:
New cubes with updated time and extrapolated data.
"""
from improver.nowcasting.pysteps_advection import PystepsExtrapolate
from improver.utilities.cube_manipulation import MergeCubes
u_cube, v_cube = advection_velocity
# extrapolate input data to required lead times
forecast_plugin = PystepsExtrapolate(lead_time_interval, max_lead_time)
forecast_cubes = forecast_plugin(
cube, u_cube, v_cube, orographic_enhancement, attributes_dict=attributes_config
)
return MergeCubes()(forecast_cubes)