xgcm / xgcm

python package for analyzing general circulation model output data
http://xgcm.readthedocs.org
MIT License
222 stars 80 forks source link

Interpolation (not centred) #145

Open rcaneill opened 5 years ago

rcaneill commented 5 years ago

Hello, I am trying to figure how to do interpolation that are not centred, e.g. when a "center" point is not at the middle point of 2 "right" points. I tried different ways but I did not manage to find a satisfying way that would fit in the xgcm.Axis class. My idea was to implement a new function for interpolation between data_left and data_right, taking also a weight representing the distance to the new position for each data, and use it instead of raw_interp_function:

def interp_function(data_left, data_right, weight_left, weight_right):
    return (data_left * weight_left + data_right * weight_right) / (weight_left + weight_right)

For an interpolation from "right" to "center", weights would be (C: "center, R: "right", wl: "weight_left", wr: "weight_right"):

    |-----------------|----------------|----------------|
            C         R           C    R           C    R
                  data_left        data_right           
                       <---------> <--> 
                            wr      wl 

I did not really find how to implement this solution without changing too much code, as I am not yet familiar with xgcm. Maybe it is necessary to reshape some parts. Does someone has an idea of the rough lines? Or another solution?

rabernat commented 5 years ago

Hi @rcaneill - thanks for this useful idea.

So far, xgcm only supports grids in which the variables are assumed to be centered. But I know this is not the case for some models, like MOM5 / MOM6. Could you let us know what is your specific use case here?

As you have already seen, the interpolation function is exceedingly simple:

https://github.com/xgcm/xgcm/blob/cac66afeb2426546b142aef07b7752bd02ea0ebb/xgcm/grid.py#L1249-L1252

I would definitely be open to extending this to the more general case where the interpolation weights vary spatially. There would be some design questions to answer here, such as

rcaneill commented 5 years ago

Hi, I am using NEMO in s coordinates, where the vertical variable are not necessarily centered. I'll think about the design questions and keep you in touch if I find a clean solution.

github-actions[bot] commented 3 years ago

This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution!

github-actions[bot] commented 3 years ago

This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.

jbusecke commented 3 years ago

Can this be achieved in principal with #344 ?

github-actions[bot] commented 3 years ago

This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.

jbusecke commented 3 years ago

@andersy005 This now seems too early? Shouldnt my post count as activity?

andersy005 commented 3 years ago

@andersy005 This now seems too early? Shouldnt my post count as activity?

You're right... My hunch is that this is related to this bug: https://github.com/actions/stale/issues/509. I will look into it sometime next week.

jbusecke commented 3 years ago

Thanks @andersy005

github-actions[bot] commented 3 years ago

This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days.

Thank you for your contribution!