[Thread Prev][Thread Next][Index]

Re: [ferret_users] scat2gridgauss not functioning properly



Hi,
     I too vote for CURV_TO_RECT functions. Especially if your source
grid (curvilinear) and destination grid (regular) is fixed, these
functions will be much handier than the SCAT2GRID family functions.
However, it should be noted that, according the grid-size the
CURV_TO_RECT_MAP function may take long time to complete the
calculation...be patient.

An example is given below.

Thanks and Regards,

Jaison

!---------Example for CURV_TO_RECT functions------------
 \ cancel mode verify
!
! Description : Example for CURV_TO_RECT_MAP function
!
!-------------------------------------------------------

     set data "/path/to/curvilinear_grid.nc"

     ! define input XY-coordinates

     let lonin = lon_rho[d=1]
     let latin = lat_rho[d=1]

     ! define destination rectilinear XY-grid

     define axis/x=79:314.5:`1/2`/units=longitudes xlon_rect
     define axis/Y=-52:62.5:`1/2`/unit=latitudes   ylat_rect

     let destgrid = x[gx=xlon_rect]*0 + y[gy=ylat_rect]*0

     let radius = 1/2

     ! calculate the mapping function

     let map = CURV_TO_RECT_MAP (lonin, latin, dstgrid, radius)
     set var/title="Map Function for test grid" map

     sp rm -f map_testgrid.nc
     save/file=map_testgrid.nc/APPEND map

     ! use this map function as follows: let temp be the curvilinear variable
     !     use curvilinear_data.nc
     !     use map_testgrid.nc
     !     temp_rect = CURV_TO_RECT(temp[d=1], map[d=2])

!--------end of Example------------------

> Hi - Yes, this isn't hard to do.  I'll get this into the next release.
>
> But looking at what you're doing, I think what you really want is the
> curvilinear-to-rectilinear gridding functions.  The process is a
> two-step one: first give Ferret the curvilinear x and y coordinates and
> an output rectilinear xy grid, and the function CURV_TO_RECT_MAP
> computes a mapping between the two grids. Save the mapping, and then in
> a much faster operation CURV_TO_RECT applies the map to convert the data
> field to the new grid.
>
> yes? show function curv_to_rect*
> CURV_TO_RECT_MAP(lon_in,lat_in,grid_out,radius)
>     Compute mapping for regridding: curvilinear to rectangular grid.
>     lon_in: Source grid longitudes (2-D) (degrees)
>     lat_in: Source grid latitudes (2-D) (degrees)
>     grid_out: Any variable on destination Longitude-Latitude grid, Lon
> and Lat (degrees)
>     radius: Source points falling within radius are included in mapping
> to destination point (degrees)
> CURV_TO_RECT(V,mapping)
>     Apply mapping to regrid from curvilinear to rectangular grid
>     V: Variable to regrid, on curvilinear grid V(x,y,z,t)
>     mapping: mapping computed by curv_to_rect_MAP
>
>
> Stephen Guimond wrote:
>> Ansley,
>>
>> Thank you for your help.  A 50,000 point limit seems rather low.  I routinely work
>> with datasets well over this limit so dynamically allocated memory seems like the way
>> to go.  Will you make this updated scat2gridlaplace available in the next FERRET
>> release?
>>
>> Steve
>>
>> ----- Original Message -----
>> From: Ansley Manke <Ansley.B.Manke@xxxxxxxx>
>> Date: Tuesday, August 26, 2008 12:04 pm
>> Subject: Re: [ferret_users] scat2gridgauss not functioning properly
>> To: guimond@xxxxxxxxxxxxx
>> Cc: jaison@xxxxxxxxxxxxxx, oar.pmel.ferret_users@xxxxxxxx
>>
>>
>>> Hi Stephen,
>>> The underlying code that scat2gridlaplace calls to do the gridding
>>> operation has some work space that's hardwired in size to 50,000
>>> points.
>>> Your data is 960*367 = 352367 points so the code eventually
>>> overwrites
>>> memory and causes the crash. We should at least put in a test for
>>> that
>>> limit being exceeded so you'd get a useful error message - but I
>>> should
>>> be able to set up the work space with dynamically-allocated memory
>>> so
>>> it'd work correctly.
>>>
>>> Ansley
>>>
>>> Stephen Guimond wrote:
>>>
>>>> Hi Jaison,
>>>>
>>>> Thank you for your response, using a 1-D axis for x and y input
>>>>
>>> values worked.  I suppose the "objective_analysis_demo" script
>>> should be fixed because it shows 2-D axes for x and y input.
>>>
>>>> Another thing I found was that using "scat2gridlaplace" causes a
>>>>
>>> crash of FERRET.  I used similar input as I did with
>>> "scat2gridgauss", but with cay and nrng both equal to 5.  I am
>>> using FERRET v6.1  for 32-bit Linux.  Have you found anything similar?
>>>
>>>> Thanks,
>>>> Steve
>>>>
>>>>
>>>> ----- Original Message -----
>>>> From: jaison@xxxxxxxxxxxxxx
>>>> Date: Wednesday, August 20, 2008 9:51 pm
>>>> Subject: Re: [ferret_users] scat2gridgauss not functioning properly
>>>> To: guimond@xxxxxxxxxxxxx
>>>> Cc: ferret_users@xxxxxxxx
>>>>
>>>>
>>>>
>>>>> Hi Steve,
>>>>>           According to documentation (and from experience), the
>>>>> first two
>>>>> input arguments to SCAT2GRIDGAUSS function should be defined on
>>>>> either X
>>>>> (and ZT) or Y (and ZT) axis, but NOT on both X and Y at the same
>>>>>
>>> time.>> (see  Ch3 Sec2.3.37.  SCAT2GRIDGAUSS_XY). In your script
>>> add the
>>>
>>>>> followinglines
>>>>>
>>>>>   let xx1D = XSEQUENCE(xx)
>>>>>   let yy1D = XSEQUENCE(yy)
>>>>>
>>>>> then use these variables in SCAT2GRIDGAUSS function as
>>>>>
>>>>>   let sgrid = scat2gridgauss_xy(xx1D, yy1D, .........)
>>>>>
>>>>> Ok. The last argument (9th one) is not used in newer versions of
>>>>> Ferret.The 3 arguments before that, XSCALE, YSCALE and CUTOFF
>>>>>
>>> need
>>>
>>>>> to be chosen
>>>>> to match your destination grid. Read the documentation carefully
>>>>>
>>> for>> CUTOFF. You can try few different values to choose between
>>> high-
>>>
>>>>> data loss
>>>>> (smaller SCALE and CUTOFF) and high-smoothing (higher SCALE and
>>>>> CUTOFF),with respect to the destination grid. For example, if
>>>>> CUTOFF is 2, then
>>>>> XSCALE can be dx (of destination grid) and YSCALE can be dy.
>>>>>
>>>>> Also note that, it is always a good habit to add proper units while
>>>>> defining axis, and use proper names (xlon, ylat or xkm, ykm etc).
>>>>>
>>>>> Please let me  know if you have any questions.
>>>>>
>>>>> Thanks and Regards,
>>>>>
>>>>> Jaison
>>>>>
>>>>>
>>>>>
>>>>>> Hello Ferreters,
>>>>>>
>>>>>> I am trying to put scattered data onto a regular grid and tried
>>>>>>
>>>>>>
>>>>> with the scat2gridgauss
>>>>>
>>>>>
>>>>>> function.
>>>>>>
>>>>>> Here is my code:
>>>>>>
>>>>>> ! the scattered data axes...
>>>>>> def axis/x=1:960:1 x;def axis/y=1:367:1 y;def grid/x=x/y=y g
>>>>>> file/format=stream/grid=g/var="xx,yy,zz,dbz" output.dat
>>>>>> ! the regular grid axes...
>>>>>> def axis/x=-240:240:0.5 nx;def axis/y=-240:240:0.5 ny
>>>>>> let sgrid = scat2gridgauss_xy(xx, yy, dbz, x[gx=nx], y[gy=ny],
>>>>>>
>>>>>>
>>>>> 2.,2.,2.,0)>
>>>>>
>>>>>
>>>>>> The result does not work (toying with the last few parameters
>>>>>>
>>>>>>
>>>>> makes no difference),
>>>>>
>>>>>
>>>>>> although it does have the grid I expect.  I'm assuming the same
>>>>>>
>>>>>>
>>>>> will be true for the
>>>>>
>>>>>
>>>>>> scat2gridlaplace functions as well.
>>>>>>
>>>>>> Any ideas?
>>>>>>
>>>>>> Thanks,
>>>>>> Steve
>>>>>>
>>>>>>
>>>>>> =======================================================
>>>>>> Stephen R. Guimond
>>>>>> Graduate Research Assistant
>>>>>> Florida State University
>>>>>> Center for Ocean-Atmospheric Prediction Studies (COAPS)
>>>>>> =======================================================
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>> =======================================================
>>>> Stephen R. Guimond
>>>> Graduate Research Assistant
>>>> Florida State University
>>>> Center for Ocean-Atmospheric Prediction Studies (COAPS)
>>>> =======================================================
>>>>
>>>>
>>>
>>>
>>
>> =======================================================
>> Stephen R. Guimond
>> Graduate Research Assistant
>> Florida State University
>> Center for Ocean-Atmospheric Prediction Studies (COAPS)
>> =======================================================
>>
>



[Thread Prev][Thread Next][Index]

Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement