use of the script isen.gs

Robert Hart rhart at FSU.EDU
Fri Mar 28 21:23:05 EDT 2008


Eduardo,

The problem is possibly that you are defining  PP, u, and v only at the lowest level, since
the initial dimension environment opens the files with z=1, and you immediately define
the new variables in that environment.

Change your script to this, and it should work:

 'sdfopen d:\ncep-ncar\uwnd.mon.mean.nc'
 'sdfopen d:\air.mon.mean.nc'

"define uisen="isen(uwnd.1,air.2,lev,320)
"d uisen"

Bob Hart
FSU Meteorology


----- Original Message -----
From: Eduardo Agosta Scarel <eduardo.agosta at GMAIL.COM>
Date: Friday, March 28, 2008 5:56 pm
Subject: use of the script isen.gs
To: GRADSUSR at LIST.CINECA.IT

> Hello everybody!
>
> I am trying to use the script isen.gs to interpolate a variable field
> on isentropic surface but the final result is that  there are no
> griddedvalues to interpolate. Perhaps the problem is the use of
> 'lev' instead of
> pressure values? How to solve it?
>
> What did I do wrong?
>
> Please any suggestion to use the script will be much appreciated.
>
> Eduardo
>
> Below follows the main script used to test it.
>
>
>
> 'reinit'
>
> 'sdfopen d:\ncep-ncar\uwnd.mon.mean.nc'
> 'sdfopen d:\air.mon.mean.nc'
>
>
> 'define PP ='lev
> 'define u= uwnd.1'
> 'define v=vwnd.2'
> 'define t= air.3'
>
> "set lev 1050 150"
>
> "define uisen="isen(u,t,PP,320)
>
> "set z 1"
> "d uisen"
>
>
>
> function isen(field,tgrid,pgrid,tlev)
> *-------------------------------------------------------------------
> ---
> * Bob Hart (hart at ems.psu.edu) /  PSU Meteorology
> * 2/26/1999
> *
> * 2/26/99 - Fixed a bug that caused the script to crash on
> *           certain machines.
> *
> * GrADS function to interpolate within a 3-D grid to a specified
> * isentropic level.  Can also be used on non-pressure level data, such
> * as sigma or eta-coordinate output where pressure is a function
> * of time and grid level.  Can be used to create isentropic PV
> surfaces* (examples are given at end of documentation just prior to
> * function.)
> *
> * Advantages:  Easy to use, no UDFs.  Disadvantages:  Can take 5-20
> secs.*
> * Arguments:
> *    field = name of 3-D grid to interpolate
> *
> *    tgrid = name of 3-D grid holding temperature values (deg K) at
> each*            gridpoint.
> *
> *    pgrid = name of 3-D grid holding pressure values (mb) at each
> gridpoint*            If you are using regular pressure-level data,
> this should be
> *            set to the builtin GrADS variable 'lev'.
> *
> *    tlev  = theta-level (deg K) at which to interpolate
> *
> * Function returns:  defined grid interp holding interpolated values
> *
> * NOTE:  YOU NEED TO INCLUDE A COPY OF THIS FUNCTION IN YOUR SCRIPT
> *
> * NOTE:  Areas having tlev below bottom level or above upper level
> *        will be undefined in output field. Extrapolation is NOT
> *        performed!!
> *
> *-------------------------------------------------------------------
> -----
> *
> * EXAMPLE FUNCTION CALLS:
> *
> * Sample variables: u = u-wind in m/s
> *                   v = v-wind in m/s
> *                   w = vertical velocity
> *                   t = temperature in K
> *                  PP = pressure data in mb
> *
> * 1) Display vertical velocity field on 320K surface:
> *
> *    "d "isen(w,t,PP,320)
> *
> * 2) Create & Display colorized streamlines on 320K surface:
> *
> *    "define u320="isen(u,t,PP,320)
> *    "define v320="isen(v,t,PP,320)
> *    "set z 1"
> *    "set gxout stream"
> *    "d u320;v320;mag(u320,v320)"
> *
> * 3) Create & display a 320K isentropic PV surface:
> *
> *    "set lev 1050 150"
> *    "define coriol=2*7.29e-5*sin(lat*3.1415/180)"
> *    "define dudy=cdiff(u,y)/(111177*cdiff(lat,y))"
> *    "define
> dvdx=cdiff(v,x)/(111177*cdiff(lon,x)*cos(lat*3.1415/180))"*
> "define dt=t(z-1)*pow(1000/PP(z-1),0.286)-
> t(z+1)*pow(1000/PP(z+1),0.286)"
> *    "define dp=100*(PP(z-1)-PP(z+1))"
> *    "define dtdp=dt/dp"
> *    "define part1="isen(dvdx,t,PP,320)
> *    "define part2="isen(dudy,t,PP,320)
> *    "define part3="isen(dtdp,t,PP,320)
> *    "define pv320=-9.8*(coriol+part1-part2)*part3"
> *    "set z 1"
> *    "d pv320"
> *
> * PROBLEMS:  Send email to Bob Hart (hart at ems.psu.edu)
> *
> *-------------------------------------------------------------------
> ----
> *-------------------- BEGINNING OF FUNCTION ------------------------
> ----
> *-------------------------------------------------------------------
> ----
>
> * Get initial dimensions of dataset so that exit dimensions will be
> * same
>
> "q dims"
> rec=sublin(result,4)
> ztype=subwrd(rec,3)
> if (ztype = "fixed")
>   zmin=subwrd(rec,9)
>   zmax=zmin
> else
>   zmin=subwrd(rec,11)
>   zmax=subwrd(rec,13)
> endif
>
> * Get full z-dimensions of dataset.
>
> "q file"
> rec=sublin(result,5)
> zsize=subwrd(rec,9)
>
> * Determine spatially varying bounding pressure levels for isen
> surface* tabove = theta-value at level above ; tbelow = theta value
> at level
> * below for each gridpoint
>
> "set z 1 "zsize
> "define theta="tgrid"*pow(1000/"pgrid",0.286)"
> "set z 2 "zsize
> "define thetam="tgrid"(z-1)*pow(1000/"pgrid"(z-1),0.286)"
> "set z 1 "zsize-1
> "define thetap="tgrid"(z+1)*pow(1000/"pgrid"(z+1),0.286)"
>
> "define tabove=0.5*maskout
> (theta,theta-"tlev")+0.5*maskout(theta,"tlev"-thetam)"
> "define tbelow=0.5*maskout
> (theta,thetap-"tlev")+0.5*maskout(theta,"tlev"-theta)"
>
> * Isolate field values at bounding pressure levels
> * fabove = requested field value above isen surface
> * fbelow = requested field value below isen surface
>
> "define fabove=tabove*0+"field
> "define fbelow=tbelow*0+"field
>
> "set z 1"
>
> * Turn this 3-D grid of values (mostly undefined) into a 2-D isen
> layer
> * If more than one layer is valid (rare), take the mean of all the
> * valid levels. Not the best way to deal with the multi-layer issue,
> * but works well, rarely if ever impacts output, and is quick.
> * Ideally, only the upper most level would be used.  However, this
> * is not easily done using current GrADS intrinsic functions.
>
> "define fabove=mean(fabove,z=1,z="zsize")"
> "define fbelow=mean(fbelow,z=1,z="zsize")"
> "define tabove=mean(tabove,z=1,z="zsize")"
> "define tbelow=mean(tbelow,z=1,z="zsize")"
>
> * Finally, interpolate linearly in theta and create isen surface.
> * Linear interpolation in theta works b/c it scales as height,
> * or log-P, from Poisson equation for pot temp.
>
> "set z "zmin " " zmax
>
> "define slope=(fabove-fbelow)/(tabove-tbelow)"
> "define b=fbelow-slope*tbelow"
> "define interp=slope*"tlev"+b"
>
> * variable interp now holds isentropic field and its named it returned
> * for use by the user.
>
> say "Done.  Newly defined variable interp has "tlev"K "field"-field."
>
> return(interp)
>



More information about the gradsusr mailing list