Remapper for “online” remapping of data sets

Xylar Asay-Davis
date: 2017/04/15

Summary

This document describes the design and implementation of a Remapper class for performing either “online” (in memory) or “offline” (through files via ncremap) remapping of horizontal data sets. The Remapper is needed in order to support remapping to and from grids grids not currently supported by ncremap such as polar stereographic grids commonly used for polar data sets.

Requirements

Requirement: Support for remapping to and from stereographic grids
Date last modified: 2017/04/15
Contributors: Xylar Asay-Davis

There should exist a method for interpolating from stereographic grids to the comparison grid used in MPAS-Analysis. This is needed to support observations that are stored on stereographic grids.

It would often be more efficient (in terms of the size of data sets) and more practical to perform analysis of polar data sets on a stereographic grid centered at that pole. Support for mapping to stereographic grids should be included, if feasible.

Algorithmic Formulations

Design solution: Support for remapping to and from stereographic grids
Date last modified: 2017/04/15
Contributors: Xylar Asay-Davis

The design solution is somewhat complex and will be described in multiple sections.

MeshDescriptor classes

To support mapping to and from MPAS meshes, lat/lon grid and stereographic grids (as well as future grids we might want to support), I propose defining a “mesh descriptor” that defines the mesh either by reading it from a file or by creating it from simple numpy ndarrays. Each MeshDescriptor class defines enough information (such as the locations of cell centers and corners) about the mesh or grid to allow remapping between meshes.

An MpasMeshDescriptor class will define MPAS meshes read from a file.

A LatLonGridDescriptor class will define global lat/lon grids such as the existing comparison grid.

A ProjectionGridDescriptor class will define any grid that can be described by a logically rectangular grid with pyproj projection. In particular, such a projection grid could be used to support both polar stereographic grids and regional lat/lon grids.

Remapper class

Remapping between meshes described by MeshDescriptor classes will be performed by a Remapper class. This class will support both “online” mapping in memory and “offline” mapping with ncremap. Only “online” mapping will be supported for grids defined with the ProjectionGridDescriptor, as these are not supported by ncremap. A Remapper object will be created by giving it source and destintion MeshDescriptor objects and an optional mapping file name. (If the mapping file name is not given, it is assumed that the source and destination grids are the same, and no remapping is needed.)

If remapping is performed “online”, it supports renormalization of masked arrays. If a data sets includes NaNs in a given data array, both the data array and a mask are remapped, and renormalization is performed anywhere the remapped mask exceeds a given threshold.

Design and Implementation

Implementation: Support for remapping to and from stereographic grids
Date last modified: 2017/04/15
Contributors: Xylar Asay-Davis

The implementation is on the branch xylar/MPAS-Analysis/add_polar_stereographic_interp

MeshDescriptor classes

Each MeshDescriptor subclass includes the following member variables or methods:

  • meshNamea name of the mesh or grid, used for naming mapping files and

    climatologies

  • regional: whether the mesh is regional or global

  • coords and dimsdictionaries defining the coordinates and dimensions

    of this mesh, used to update a data set following remapping

  • to_scrip method: used to write out a SCRIP file defining the mesh.

Remapper class

Below is a skeleton of the Remapper public API.

class Remapper(object):
    def __init__(self, sourceDescriptor, destinationDescriptor,
                 mappingFileName=None):
        '''
        Create the remapper and read weights and indices from the given file
        for later used in remapping fields.
        '''

    def build_mapping_file(self, method='bilinear',
                           additionalArgs=None):
        '''
        Given a source file defining either an MPAS mesh or a lat-lon grid and
        a destination file or set of arrays defining a lat-lon grid, constructs
        a mapping file used for interpolation between the source and
        destination grids.
        '''

    def remap_file(self, inFileName, outFileName,
                   variableList=None, overwrite=False):
        '''
        Given a source file defining either an MPAS mesh or a lat-lon grid and
        a destination file or set of arrays defining a lat-lon grid, constructs
        a mapping file used for interpolation between the source and
        destination grids.
        '''

    def remap(self, ds, renormalizationThreshold=None):
        '''
        Given a source data set, returns a remapped version of the data set,
        possibly masked and renormalized.
        '''

Testing and Validation: Support for remapping to and from stereographic grids
Date last modified: 2017/04/15
Contributors: Xylar Asay-Davis

On the branch xylar/MPAS-Analysis/add_polar_stereographic_interp, climatologies have ben updated to use Remapper objects. Analysis has been run on both QU240 and EC60to30 beta0 ACME results, and results have been compared by eye. Results from ncremap are identical, as expected. Because of renormalization, results with “online” remapping differ from those from ncremap, typically with less severe masking of missing data.

Continuous integration unit tests for climatology and interpolation have both been updated to make use of the Remapper class. New tests have been added to perform remapping with stereographic grids.