Skip to content

New Use Case: StatAnalysis Python Embedding to read native grid (u-grid) #1561

@JohnHalleyGotway

Description

@JohnHalleyGotway

Describe the New Use Case

Note that this was originally an issue in MET with the plan of adding support directly to the C++ tools. However, as of 4/6/2022, the plan has changed to leveraging existing python functionality for an initial implementation. Along with that, we'll need a new use case to demonstrate that functionality. In the long run, enhancements could be added directly to MET to support unstructured grids, but those would be described in a different issue.

Here's the original text of this issue for background:

This issue is the result of a meeting with Mark Miesch about JEDI on 1/23/2020.

Consider enhancing MET to leverage the JEDI C++ interface for reading data from LFRic, FV3, MPAS, Neptune, WRF, and SOCA. The geometry object in JEDI can instantiate a grid.

JEDI Source Code (not public): https://github.com/JCSDA/oops

State.h header file defines the State class. Each model instantiates a State in a different way, including grid information and parallel distribution information. The State object will retrieve a model value at a given location by calling getValues(). This returns a GeoVaLs object for the model values at the requested location(s). The "State::read(const eckit::Configuration &)" member function can read data from a model output file and populates the state object. The "State::geometry()" member function contains the grid information.

Dependencies: ecmwf/eckit, oops, FV3 JEDI, oops depends on boost headers (not actually compiled).
JEDI is built using ecbuild.
ecmwf/eckit does all the MPI handling.

Some functional steps...

  • Query the model to get values from a specific location.
  • Pull observations from an observation database (either ODB2 or NetCDF, dependent on WCOSS).
  • Investigate the use of BUMP and/or oops for the handling of unstructured grids.
    • Currently cube sphere grids and MPAS variable mesh grids are processed as unstructured grids by BUMP.

Here's a specific idea:
(1) Work on Hera.
(2) Enhance MET to support a new configurable option to interface with JEDI from FV3.
(3) Specifically, enhance Point-Stat to call Shape::getValues() for each observation location and generate matched pairs.
(4) Compute the resulting statistics.

So really "JEDI" is a new input "file type"... from which you extract forecast values.

This is needed by September 30, 2020 (end of Q4).

Use Case Name and Category

Provide use case name, following Contributor's Guide naming template, and list which category the use case will reside in.
If a new category is needed for this use case, provide its name and brief justification

Input Data

List input data types and sources.
Provide a total input file size, keeping necessary data to a minimum.

Acceptance Testing

Describe tests required for new functionality.
As use case develops, provide a run time here

Time Estimate

Estimate the amount of work required here.
Issues should represent approximately 1 to 3 days of work.

Sub-Issues

Consider breaking the new feature down into sub-issues.

  • Add a checkbox for each sub-issue here.

Relevant Deadlines

List relevant project deadlines here or state NONE.

Funding Source

Define the source of funding and account keys here or state NONE.

Define the Metadata

Assignee

  • Select engineer(s) or no engineer required
  • Select scientist(s) or no scientist required

Labels

  • Select component(s)
  • Select priority
  • Select requestor(s)
  • Select privacy

Projects and Milestone

  • Select Repository and/or Organization level Project(s) or add alert: NEED PROJECT ASSIGNMENT label
  • Select Milestone as the next official version or Future Versions

Define Related Issue(s)

Consider the impact to the other METplus components.

New Use Case Checklist

See the METplus Workflow for details.

  • Complete the issue definition above, including the Time Estimate and Funding source.
  • Fork this repository or create a branch of develop.
    Branch name: feature_<Issue Number>_<Description>
  • Complete the development and test your changes.
  • Add/update log messages for easier debugging.
  • Add/update unit tests.
  • Add/update documentation.
  • Add any new Python packages to the METplus Components Python Requirements table.
  • Push local changes to GitHub.
  • Submit a pull request to merge into develop.
    Pull request: feature <Issue Number> <Description>
  • Define the pull request metadata, as permissions allow.
    Select: Reviewer(s) and Linked issues
    Select: Repository level development cycle Project for the next official release
    Select: Milestone as the next official version
  • Iterate until the reviewer(s) accept your changes. Merge branch into develop.
  • Create a second pull request to merge develop into develop-ref, following the same steps for the first pull request.
  • Delete your fork or branch.
  • Close this issue.

Metadata

Metadata

Type

No type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions