[ncl-talk] from staggered grid field to interpolated unique grid field

Francesco Trotta francesco.trotta4 at unibo.it
Mon Jul 3 15:39:42 MDT 2017


Hi Dennis,

I'm doing this interpolation because my veocity output (U and V datasets) will be use in another code which aspect both U and V on a T-Grid.

Interpolating U and V separatly on a T-grid I think is good.

I tried to do this with the following ncl script but I wonder if there is a way to optimized this script (is a bit time consuming)


In order to define the field near the coast I extrapolate the field using the ncl function "poisson_grid_fill" with arguments:

guess_type=1,nscan=2000,epsx=0.001,relc=0.6. Are these values reasonable)

It is possible to extrapolate with this function not in all the Land-points but just near the cost? (this can help to save time)


thanks

Francesco


   ;;;;====================================================

   ;;;;=== ZONAL VELOCITY U-GRID FILEs


   out_T    = addfile(path_exp_outdata_ocean+"/"+file_T,"r")
   out_Mesh = addfile(path_exp_outdata_oceanMesh+"/"+file_Mesh,"r")

   nlon  = dimsizes(out_T->nav_lon(0,:)-1)
   nlat  = dimsizes(out_T->nav_lon(:,0)-1)
   nlev  = dimsizes(out_T->deptht(:)-1)
   ntime = dimsizes(out_T->time_counter(:)-1)

   lat2dt = out_T->nav_lat(:,:)
   lon2dt = out_T->nav_lon(:,:)
   deptht = out_T->deptht(:)
   time      = out_T->time_counter(0:ntime-1)
   time_bnds = out_T->time_counter_bnds(0:ntime-1,:)

   var_name = "vozocrtx"
   out_U  = addfile(path_exp_outdata_ocean+"/"+file_U_Ugrid,"r")
   lon1du = (/ out_U->nav_lon(0,:) /)
   u_T    = new((/nlev,nlat,nlon/),typeof(out_U->$var_name$))
   ;Define dimensions, coord., attributes
   u_T!0 = "deptht"
   u_T!1 = "y"
   u_T!2 = "x"
   u_T&deptht = (/deptht(0:nlev-1)/)
   u_T&y      = (/lat2dt(0:nlat-1,0)/)
   u_T&x      = (/lon2dt(0,0:nlon-1)/)
   copy_VarAtts(out_U->$var_name$,u_T)

   mask3dt = (/ out_Mesh->tmask(0,:,:,:) /)
   mask3du = (/ out_Mesh->umask(0,:,:,:) /)

   do itime=0,ntime-1
      u_U = out_U->$var_name$(itime,:,:,:)
      ;printVarSummary(u_U)

      ;--- Assign Missing Values at Land Points (grid-U)
      u_U(0:nlev-1,0:nlat-1,0:nlon-1) = \
                where(mask3du(0:nlev-1,0:nlat-1,0:nlon-1).eq.0., \
                      u_U at _FillValue, \
                      u_U(0:nlev-1,0:nlat-1,0:nlon-1))

      ;--- Interpolates linearly along the longitude dimension
      u_T(0:nlev-1,0:nlat-1,0:nlon-1) = \
                 linint1_n(lon1du(0:nlon-1), \
                           u_U(0:nlev-1,0:nlat-1,0:nlon-1),False, \
                           lon2dt(0,0:nlon-1),0,2)

      ;--- Assign an extrapol Value to Missing Values points
      ;Replaces all Missing(_FillValue) values with values derived from solving Poisson's equation via relaxation.
      poisson_grid_fill(u_T(0:nlev-1,0:nlat-1,0:nlat-1), False, 1, 2000, 0.001, 0.6, 0)
      ;printVarSummary(u_T)

      ;--- Assign Missing Values at Land Points (grid-T)
      u_T(0:nlev-1,0:nlat-1,0:nlon-1) = \
                where(mask3dt(0:nlev-1,0:nlat-1,0:nlon-1).eq.0., \
                      u_T at _FillValue, \
                      u_T(0:nlev-1,0:nlat-1,0:nlon-1))

      write_regridVel(path_exp_outdata_ocean,file_U_Tgrid,itime,ntime,nlev,nlat,nlon, \
                      lon2dt(0:nlat-1,0:nlon-1),lat2dt(0:nlat-1,0:nlon-1),deptht(0:nlev-1), \
                      time(0:ntime-1),time_bnds(0:ntime-1,0:1), \
                      u_T(0:nlev-1,0:nlat-1,0:nlon-1),var_name)

   end do


________________________________
Da: Dennis Shea <shea at ucar.edu>
Inviato: venerdì 30 giugno 2017 16:11
A: Francesco Trotta
Cc: ncl-talk at ucar.edu
Oggetto: Re: [ncl-talk] from staggered grid field to interpolated unique grid field

The Arakawa C-grid has the U, V and scalar (?T?) variables on separate grids.

To *my* knowledge, the ESMF regrid package does not interpolate vector wind components. Wind components should be interpolated together on the sphere. The wind speed is conserved but the magnitudes of the wind components will vary. For u and v on the same grid

  uNew = u*cos(rot) - v*sin(rot)    ; rot - rotation angle
  vNew = u*sin(rot) + v*cos(rot)

Actually, on the Arakawa C-grid, since u and v are on separate grids the appropriate rotation angles would be different also.

---
What is the objective of the interpolation?

If it is 'just' graphics, then, maybe, interpolating the the V-grid and  U-grid separately to the T-grid would be acceptable.

---



On Thu, Jun 29, 2017 at 3:31 AM, Francesco Trotta <francesco.trotta4 at unibo.it<mailto:francesco.trotta4 at unibo.it>> wrote:
Dear ncl team,
  I using ncl and I'm producing 2 netcdf files of meridional e zonal velocity definite on the stagarate grid (C_arakawa U e V grids) and I need to pass this datasets to a collage on a unique T grid.

   Is there in ncl some build-in-function which from 2 netcdf file with u e v defined in a staggered U e V grid produce a file with u and v field interpolate on T grid?

thanks
Francesco?


_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170703/2c3c8953/attachment.html 


More information about the ncl-talk mailing list