Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement xESMF based regridding operation #127

Merged
merged 12 commits into from Feb 2, 2018
Merged

Implement xESMF based regridding operation #127

merged 12 commits into from Feb 2, 2018

Conversation

@philippjfr
Copy link
Member

philippjfr commented Jan 20, 2018

Adds a xESMF based regridding operation along with a user guide on how to use it. Depends on holoviz/holoviews#2265. The draft user guide can be seen here: https://anaconda.org/philippjfr/resampling_grids/notebook

@philippjfr

This comment has been minimized.

Copy link
Member Author

philippjfr commented Jan 29, 2018

@jbednar Whenever you have a minute it would be good if you could review this.

Copy link
Member

jbednar left a comment

Looks great! Minor suggestions only.

grids using the xESMF library, supporting all the ESMF regridding
algorithms including bilinear, conservative and nearest neighbour
regridding. In addition to these different interpolation options
it supports

This comment has been minimized.

Copy link
@jbednar
if issubclass(self.p.target.interface, XArrayInterface):
ds_out = self.p.target.data
ds_out.rename({tx.name: 'lon', ty.name: 'lat'},
inplace=True)

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

I didn't look very far into it, but is renaming in place safe (here and below)? Seems like that would leave people with altered data.

"source": [
"The xESMF library is specifically designed to provide an easy way to correctly resample grids defined in geographic coordinate systems and differs significantly from the simpler approach used by datashader, which applies simple upsampling and downsampling. xESMF is a wrapper around the [ESMF regridding algorithms](https://www.earthsystemcog.org/projects/esmf/regridding), which compute an interpolation weight matrix which is applied to remap the values of the source grid onto the destination grid. \n",
"\n",
"In GeoViews these algorithms are made available via the simple ``weighted_regrid`` operation, which supports the different interpolation modes including: 'bilinear', 'nearest_s2d', 'nearest_d2s' and 'conservative'. Since generating the sparse weight matrix takes much longer than applying it the operation will cache the weight matrix on disk for later use, this optimization can be disabled via the ``reuse_weights`` parameter or customized by defining a custom ``file_pattern``."

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

Why "simple"? I'd take that out, unless you are comparing it against some more complicated option we also provide (in which case that should be described here). Also, as usual, "use, this" needs to be "use; this" or "use. This".

"cell_type": "markdown",
"metadata": {},
"source": [
"If we want to explore a very large grid it therefore often makes sense to resample the data onto a rectilinear grid, which can be rendered much more efficiently. Once again we have the option of using the datashader based approach or the more correct xESMF based approach."

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

I'd say "more accurate" rather than "more correct"; there are varying levels of accuracy but correctness is Boolean. Neither approach is unequivocally "correct"; one can always use more and more complex models (given that the earth isn't actually precisely spherical, for instance).

"cell_type": "markdown",
"metadata": {},
"source": [
"To regrid a ``QuadMesh`` using GeoViews we can import the ``rasterize`` operation. In the background the operation will convert the ``QuadMesh`` into a ``TriMesh``, which datashader understands. To optimize this conversion so it occurs only when aggregating the ``QuadMesh`` for the first time we can activate the ``precompute`` option. Additionally we have to define an aggregator, in this case to compute the mean ``Tair`` value in a pixel:"

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

Tair (air temperature)?

This comment has been minimized.

Copy link
@philippjfr

philippjfr Jan 29, 2018

Author Member

I feel stupid now, I've been puzzling over this a while.

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

Just my guess. :-)

"cell_type": "markdown",
"metadata": {},
"source": [
"Another commonly used mesh/grid type are trimeshes, here we will load a 3dm file and demonstrate how to visualize it using HoloViews:"

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

Another comma splice; needs to be "trimeshes; here".

"cell_type": "markdown",
"metadata": {},
"source": [
"This is a reasonably large mesh with >1 million triangles and cannot easily be displayed directly with matplotlib or especially bokeh. Therefore we will once again regrid this dataset onto a rectilinear grid. Additionally, to speed up plotting of meshes, we can do two things, first of all since all data displayed with bokeh is first projected to Web Mercator coordinates we can project the mesh immediately, secondly we can use the ``precompute`` during rasterization, which will cache an optimized mesh datastructure:"

This comment has been minimized.

Copy link
@jbednar

jbednar Jan 29, 2018

Member

"two things: first, since ....; second, we can"

@philippjfr philippjfr force-pushed the regrid_operations branch from 7f1bfec to 73d4931 Feb 2, 2018
@philippjfr philippjfr removed the status: WIP label Feb 2, 2018
@philippjfr philippjfr force-pushed the regrid_operations branch from 73d4931 to 06a3647 Feb 2, 2018
philippjfr added 5 commits Feb 2, 2018
@philippjfr

This comment has been minimized.

Copy link
Member Author

philippjfr commented Feb 2, 2018

Tests passing. Merging.

@philippjfr philippjfr merged commit 4f8dca8 into master Feb 2, 2018
3 checks passed
3 checks passed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
continuous-integration/travis-ci/push The Travis CI build passed
Details
coverage/coveralls Coverage remained the same at 38.092%
Details
@philippjfr philippjfr deleted the regrid_operations branch Mar 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

2 participants
You can’t perform that action at this time.