Re: interpolate pixel level data into regular grid

From: Mary Haley <haley_at_nyahnyahspammersnyahnyah>
Date: Wed Oct 31 2012 - 08:21:36 MDT

Here's what the ESMF page says about the "conserve" method:

First-order conservative interpolation [19] is also available as a regridding method. This method will typically have a larger interpolation error than the previous two methods, but will do a much better job of preserving the value of the integral of data between the source and destination grid. In this method the value across each source cell is treated as a constant. The weights for a particular destination cell, are the area of intersection of each source cell with the destination cell divided by the area of the destination cell. Areas in this case are the great circle areas of the polygons which make up the cells (the cells around each center are defined by the corner coordinates in the grid file).

If you want to find out more about this method, you can email them directly at: esmf_support@list.woc.noaa.gov

--Mary

On Oct 30, 2012, at 5:38 PM, Luo, Chao wrote:

> It works by adding srcgrid. The original data are satellite biomass burning emission. One question is that if the result by this interpolation method is mass conserve. Thanks a lot.
>
> CL
>
> ----- Original Message -----
> From: "Mary Haley" <haley@ucar.edu>
> To: "Chao Luo" <chao.luo@eas.gatech.edu>
> Cc: "ncl-talk Talk" <ncl-talk@ucar.edu>
> Sent: Tuesday, October 30, 2012 1:18:53 PM
> Subject: Re: interpolate pixel level data into regular grid
>
> Okay, I guess your "x" *doesn't* have coordinate arrays. This looks like unstructured data.
>
> Try adding these two lines:
>
> Opt@SrcGridLat = sfile->latin
> Opt@SrcGridLon = silfe->lonin
>
> You might additionally need to set Opt@SrcMask2D if you have missing values. Something like this:
>
>
> Opt@SrcMask2D = where(.not.ismissing(x),1,0) ; Creates array of 0s and 1s, where 1 represents a non-missing value
>
> --Mary
>
> On Oct 30, 2012, at 2:06 PM, Luo, Chao wrote:
>
>> I have tried this and still there is error. The message is:
>> write_grid_description: can't determine what type of source grid you have.
>> I think this is related to lat/lon of var I want to interpolate. Following is the script I have tried. Please guide me what's wrong of my script. Thanks!
>>
>> CL
>>
>> ---------------------------
>> begin
>>
>> ;---Interpolation methods to use
>> methods = (/"bilinear","patch","conserve"/)
>> nmethods = dimsizes(methods)
>>
>> ;---Read variable to regrid
>>
>> srcFileName = "../dat/biomass_burning_20120313_18_23.nc"
>> sfile = addfile(srcFileName,"r") ; source grid
>>
>> x = sfile->CO_emission ; 6 x 1129
>> var = x(:,0) ; first time
>> latin = sfile->Latitude
>> latin@units = "degrees_north"
>> lonin = sfile->Longitude
>> lonin@units = "degrees_east"
>>
>> dimx = dimsizes( var )
>> nlat = dimx(0)
>> mlon = dimx(0)
>>
>> print(nlat)
>> print(mlon)
>>
>> ;---Create destination lat/lon arrays
>> NLAT36 = 112
>> MLON36 = 148
>>
>> ; lat36 = new (/NLAT36,MLON36/)
>> ; lon36 = new (/NLAT36,MLON36/)
>>
>> lat36 = asciiread("/data11/cluo/cmaq4.6/data/post/obs/grids_148x112/crogrids_lat_148x112.dat" \
>> , (/NLAT36,MLON36/),"float")
>> lon36 = asciiread("/data11/cluo/cmaq4.6/data/post/obs/grids_148x112/crogrids_lon_148x112.dat" \
>> , (/NLAT36,MLON36/),"float")
>>
>> Opt = True ; Regridding options
>> Opt@ForceOverwrite = True
>> Opt@DstGridLat = lat36
>> Opt@DstGridLon = lon36
>>
>> var_regrid = ESMF_regrid(var,Opt)
>>
>> -----------------------
>>
>> ----- Original Message -----
>> From: "Mary Haley" <haley@ucar.edu>
>> To: "Chao Luo" <chao.luo@eas.gatech.edu>
>> Cc: "ncl-talk Talk" <ncl-talk@ucar.edu>
>> Sent: Tuesday, October 30, 2012 10:50:05 AM
>> Subject: Re: interpolate pixel level data into regular grid
>>
>> Chao,
>>
>> Dennis suggested the ESMF regridding routines.
>>
>> You might want to look at ESMF_regrid specifically.
>>
>> Since you have 1D coordinate arrays for the source grid, and want a 12 km x 12 km destination grid, I suggest looking at example ESMF_regrid_2.ncl:
>>
>> http://www.ncl.ucar.edu/Applications/ESMF.shtml
>>
>> This shows how to regrid from a rectilinear grid (which it looks like you have), to a lat/lon grid that you define, which I assume you have.
>>
>> This example uses all three methods of interpolation (bilinear, patch, conserve) and regrids to two different grids.
>>
>> I think you just need to set:
>>
>> ---Common resources
>> Opt = True
>>
>> Opt@ForceOverwrite = True
>>
>> Opt@DstGridLat = lat12
>> Opt@DstGridLon = lon12
>>
>> where lat12 and lon12 contain arrays that represent the 12 km grid.
>>
>> Then, call ESMF_regrid:
>>
>> var_regrid = ESMF_regrid(var,Opt)
>>
>> Where "var" is the variable you want to regrid that contains the 1D coordinate arrays.
>>
>>
>> --Mary
>>
>>
>>
>> On Oct 30, 2012, at 11:09 AM, Luo, Chao wrote:
>>
>>> x refer to time. This is hourly biomass emission data from 18:00-23:00 on 3/17/2012. What I want to do is to interpolate this pixel level data to regular grid (12km x 12km), but don't know which function can be used. Any suggestions are very appreciated!
>>>
>>> ----- Original Message -----
>>> From: "Dennis Shea" <shea@ucar.edu>
>>> To: "Chao Luo" <chao.luo@eas.gatech.edu>
>>> Cc: "ncl-talk" <ncl-talk@ucar.edu>
>>> Sent: Monday, October 29, 2012 5:00:34 PM
>>> Subject: Re: interpolate pixel level data into regular grid
>>>
>>> The issue is "What does the named dimension 'x' refer to?"
>>> There is nothing on the file to indicate its purpose.
>>> You must find out before proceding.
>>>
>>> Attached is a simple NCL script that plots the data.
>>>
>>> netcdf biomass_burning_20120317_18_23 {
>>> dimensions:
>>> x = 6 ;
>>> y = 371 ;
>>> variables:
>>> float Latitude(y) ;
>>> Latitude:long_name = "Latitude" ;
>>> Latitude:units = "degree" ;
>>> Latitude:valid_range = -90.f, 90.f ;
>>> Latitude:scale_factor = 1.f ;
>>> Latitude:add_offset = 0.f ;
>>> Latitude:_FillValue = -9.f ;
>>> float Longitude(y) ;
>>> Longitude:long_name = "Longitude" ;
>>> Longitude:units = "degree" ;
>>> Longitude:valid_range = -180.f, 180.f ;
>>> Longitude:scale_factor = 1.f ;
>>> Longitude:add_offset = 0.f ;
>>> Longitude:_FillValue = -9.f ;
>>> float Burned_area(y, x) ;
>>> [snip]
>>>
>>> On 10/29/12 5:15 PM, Luo, Chao wrote:
>>>> Hi Dennis,
>>>>
>>>> I have checked example 8 and 15. They both require two dimensional lat/lon. The lat/lon of files I have are 1 dimension, but data array is 2D (I am not familiar with these format data). Do I need convert lat/lon from 1D to 2D, and then do interpolation in this case? I am attaching the file. Any suggestions and help are very appreciated!
>>>>
>>>> CL
>>>>
>>>> ----- Original Message -----
>>>> From: "Dennis Shea" <shea@ucar.edu>
>>>> To: "Chao Luo" <chao.luo@eas.gatech.edu>
>>>> Cc: "ncl-talk" <ncl-talk@ucar.edu>
>>>> Sent: Monday, October 29, 2012 3:35:54 PM
>>>> Subject: Re: interpolate pixel level data into regular grid
>>>>
>>>> http://www.ncl.ucar.edu/Applications/ESMF.shtml
>>>>
>>>> Examples 8 and 15 may be of use.
>>>>
>>>> On 10/29/12 3:59 PM, Luo, Chao wrote:
>>>>> Hi,
>>>>>
>>>>> I was wondering if NCL has some functions, which can be used to
>>>>> interpolate satellite pixel level data into regular data. Any helps are
>>>>> very appreciated.
>>>>>
>>>>> CL
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> ncl-talk mailing list
>>>>> List instructions, subscriber options, unsubscribe:
>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>> _______________________________________________
>> ncl-talk mailing list
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Wed Oct 31 08:21:47 2012

This archive was generated by hypermail 2.1.8 : Wed Oct 31 2012 - 09:14:12 MDT