[ncl-talk] accumulate data on grid
Dave Allured - NOAA Affiliate
dave.allured at noaa.gov
Tue Oct 20 16:57:48 MDT 2020
Debasish, thanks for the extra description. I see that Dennis just
explained *bin_sum*. Here is a different method, possibly what you are
looking for. This is a variation of my original answer for 1-D coordinates
rather than 2-D coordinates.
This uses NCL single-value coordinate subscripting to position each input
coordinate pair into the nearest grid box. Notice the exact position of
the curly brackets. This is not the only way to locate a point to a grid
box, but it is the simplest. Untested:
dims = (/ nlat, nlon /)
xsum = new (dims, float)
xsum(:,:) = 0
do n = 0, npoints-1
xsum({lat(n)}, {lon(n)}) = xsum({lat(n)}, {lon(n)}) + dvar(n)
end do
This will not work properly if there are missing values or locations
outside of the output grid. These can be fixed with a little extra code,
but I want to give you a starting point. There may also be ways to
optimize this brute force method, if better run time is needed. Good luck.
On Mon, Oct 19, 2020 at 4:04 PM Paimazumder, Debasish <
Debasish.Paimazumder at aig.com> wrote:
> Hi Dave
>
> In this case, input dlon, dlat and dvar are from csv file and output grid
> lat/lon from netcdf file. See below their dimension. I would like to create
> a new variable at lat/lon grid by summing all dvar based on number of dlon,
> dlat within each of lat/lon grid.
>
>
>
> For example – if we have 50 dlat/dlon in one latXlon grid, then new
> variable in lat/lon grid = sum of dvar from all 50 dlat/dlon.
>
>
>
> With regards
>
> -Dave
>
>
>
> *Input *
>
> Variable: dlat
>
> Type: float
>
> Total Size: 1392092 bytes
>
> 348023 values
>
> Number of Dimensions: 1
>
> Dimensions and sizes: [348023]
>
> Coordinates:
>
> Number Of Attributes: 1
>
> _FillValue : 9.96921e+36
>
>
>
> Variable: dlon
>
> Type: float
>
> Total Size: 1392092 bytes
>
> 348023 values
>
> Number of Dimensions: 1
>
> Dimensions and sizes: [348023]
>
> Coordinates:
>
> Number Of Attributes: 1
>
> _FillValue : 9.96921e+36
>
>
>
> Variable: dvar
>
> Type: float
>
> Total Size: 1392092 bytes
>
> 348023 values
>
> Number of Dimensions: 1
>
> Dimensions and sizes: [348023]
>
> Coordinates:
>
> Number Of Attributes: 1
>
> _FillValue : 9.96921e+36
>
>
>
> *Output grid –*
>
> Variable: lat
>
> Type: float
>
> Total Size: 744 bytes
>
> 186 values
>
> Number of Dimensions: 1
>
> Dimensions and sizes: [lat | 186]
>
> Coordinates:
>
> lat: [-46.375..-0.125]
>
> Number Of Attributes: 4
>
> units : degree_north
>
> standard_name : latitude
>
> long_name : latitude
>
> bounds : lat_bnds
>
>
>
> Variable: lon
>
> Type: float
>
> Total Size: 964 bytes
>
> 241 values
>
> Number of Dimensions: 1
>
> Dimensions and sizes: [lon | 241]
>
> Coordinates:
>
> lon: [100.125..160.125]
>
> Number Of Attributes: 4
>
> units : degree_east
>
> standard_name : longitude
>
> long_name : longitude
>
> bounds : lon_bnds
>
>
>
> *From:* Dave Allured - NOAA Affiliate <dave.allured at noaa.gov>
> *Sent:* Sunday, October 18, 2020 4:36 PM
>
>
> Debasish,
>
>
>
> Sorry, you originally said "I have ... 2d lat, lon grid" and I
> misunderstood what that meant. See other answers from Barry and Dennis.
> If you need more help, please show printVarSummary for your input variables
> x, lat, and lon, so we can be clear about what type of input data you have.
>
>
>
>
>
> On Sun, Oct 18, 2020 at 11:32 AM Paimazumder, Debasish <
> Debasish.Paimazumder at aig.com> wrote:
>
> Dave- getind_latlon2d needs two-dimensional lat/lon while my output grid
> 1-d lat/lon.
>
> Interpolation from location to 1-d grid could be an option but we won’t
> get the accumulation (sum) at the output grid.
>
> Best regards,
>
> Dave
>
>
>
> On Oct 18, 2020, at 12:54 PM, Barry Lynn <barry.h.lynn at gmail.com> wrote:
>
> Right, that can be done. Or, you can interpolate the data from the fine
> to coarse grid.
>
>
>
> I am not sure if the latter will conserve the averages like doing the
> averaging in a loop.
>
>
>
> On Sun, Oct 18, 2020 at 6:58 PM Dave Allured - NOAA Affiliate via ncl-talk
> <ncl-talk at mailman.ucar.edu> wrote:
>
> Use the function *getind_latlon2d* to get the (i,j) grid point indices
> for the point data coordinates. Then do a single loop over the point data
> to accumulate sums and counts on the output grid.
>
>
>
>
>
> On Sun, Oct 18, 2020 at 9:09 AM Paimazumder, Debasish via ncl-talk <
> ncl-talk at mailman.ucar.edu> wrote:
>
> Hi Barry,
>
> Thanks for your response. Actually I don’t have time dimension. I have
> location level data (at high resolution).
>
> For example, x(m) with lat(m) and lon (m) where m = 300k location
>
>
>
> My output grid is 32x32 km and I would like to do following
>
> 1. Estimate the number of locations are in each 32x32 km grid
>
> 2. Accumulate (sum) the x at each output grid.
>
> For example- if I have 100 locations at one of the 32x32km grid, I will
> sum all x from 100 locations and assign the sum to the output grid.
>
> Best regards,
>
> Dave
>
>
>
> On Oct 18, 2020, at 3:50 AM, Barry Lynn <barry.h.lynn at gmail.com> wrote:
>
> Hi:
>
>
>
> If you have two grids of the same dimensions, but different times, you can
> simply add them together.
>
>
>
> If you have grids of a different size, you can interpolate the data to
> this grid, one grid at a time.
>
>
>
> See for example:
>
>
>
> https://www.ncl.ucar.edu/Applications/regrid.shtml
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ncl.ucar.edu_Applications_regrid.shtml&d=DwMFaQ&c=kn4_INW_mBCDHV_xJEVJkg&r=fpudUXThXLQwAKQPDCnmVaSzm2dwE9OxcWi7MuJ0jbo&m=IaFm8AuXStzIPZXMbIRmp6fjt5zy74eAUUQzoQb5pBc&s=tUIMDu-yehcnE2-mHTaX2NhZiAg5eBHJsqf3e1Bmbl8&e=>
>
>
>
> This may also help.
>
>
>
> https://www.ncl.ucar.edu/Document/Functions/Built-in/dim_sum_n.shtml
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ncl.ucar.edu_Document_Functions_Built-2Din_dim-5Fsum-5Fn.shtml&d=DwMFaQ&c=kn4_INW_mBCDHV_xJEVJkg&r=fpudUXThXLQwAKQPDCnmVaSzm2dwE9OxcWi7MuJ0jbo&m=IaFm8AuXStzIPZXMbIRmp6fjt5zy74eAUUQzoQb5pBc&s=4tdKFBxFBOUpMYFj95WyO8MUdUcYRniTWsJIvCCbhAE&e=>
>
>
>
> On Sun, Oct 18, 2020 at 7:59 AM Paimazumder, Debasish via ncl-talk <
> ncl-talk at mailman.ucar.edu> wrote:
>
> Hi NCL users
>
> I have location level data and 2d lat, lon grid and I’m trying to
> accumulate the data on 2d lat, lon grid.
>
>
>
> For example
>
> Input - x (n) with lat(n), lon(n)
>
> Output grid - lat(i)xlon(j)
>
> I’m trying to estimate number of location within each grid and accumulate
> x at each grid.
>
> Is there any function in NCL that will solve this problem?
>
>
>
> With regards
>
> -Debasish
>
>
>
> *Debasish PaiMazumder, PhD |*Tel +1 215 255 6052 <%2B1%20215%20255%206371>
> | Cell +1 267 449 5226 <%2B1%20718%20913%206946> |
> Debasish.Paimazumder at aig.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20201020/7060329b/attachment.html>
More information about the ncl-talk
mailing list