<div>Hello everybody!</div>
<div>&nbsp;</div>
<div>I am trying to use the script <a href="http://isen.gs">isen.gs</a> to interpolate a variable field on&nbsp;isentropic surface but the final result is that&nbsp;&nbsp;there are no gridded values to interpolate. Perhaps the problem is the use of &#39;lev&#39; instead of pressure values? How to solve it?</div>

<div>&nbsp;</div>
<div>What did I do wrong?</div>
<div>&nbsp;</div>
<div>Please any suggestion to use the script will be much appreciated.</div>
<div>&nbsp;</div>
<div>Eduardo</div>
<div>&nbsp;</div>
<div>Below follows the main script used to test it.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<p>&#39;reinit&#39;</p>
<p>&#39;sdfopen d:\ncep-ncar\uwnd.mon.mean.nc&#39;<br>&#39;sdfopen d:\air.mon.mean.nc&#39;<br></p>
<p><br>&#39;define PP =&#39;lev<br>&#39;define u= uwnd.1&#39;<br>&#39;define v=vwnd.2&#39;<br>&#39;define t= air.3&#39;</p>
<p>&quot;set lev 1050 150&quot;</p>
<p>&quot;define uisen=&quot;isen(u,t,PP,320)</p>
<p>&quot;set z 1&quot;<br>&quot;d uisen&quot;</p>
<p>&nbsp;</p>
<p>function isen(field,tgrid,pgrid,tlev)<br>*----------------------------------------------------------------------<br>* Bob Hart (<a href="mailto:hart@ems.psu.edu">hart@ems.psu.edu</a>) /&nbsp; PSU Meteorology<br>* 2/26/1999<br>
*<br>* 2/26/99 - Fixed a bug that caused the script to crash on<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; certain machines.&nbsp; <br>*<br>* GrADS function to interpolate within a 3-D grid to a specified<br>* isentropic level.&nbsp; Can also be used on non-pressure level data, such<br>
* as sigma or eta-coordinate output where pressure is a function<br>* of time and grid level.&nbsp; Can be used to create isentropic PV surfaces<br>* (examples are given at end of documentation just prior to<br>* function.)<br>
* <br>* Advantages:&nbsp; Easy to use, no UDFs.&nbsp; Disadvantages:&nbsp; Can take 5-20 secs.<br>*<br>* Arguments:<br>*&nbsp;&nbsp;&nbsp; field = name of 3-D grid to interpolate<br>*<br>*&nbsp;&nbsp;&nbsp; tgrid = name of 3-D grid holding temperature values (deg K) at each<br>
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gridpoint.<br>*<br>*&nbsp;&nbsp;&nbsp; pgrid = name of 3-D grid holding pressure values (mb) at each gridpoint<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you are using regular pressure-level data, this should be<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set to the builtin GrADS variable &#39;lev&#39;.<br>
*<br>*&nbsp;&nbsp;&nbsp; tlev&nbsp; = theta-level (deg K) at which to interpolate<br>*<br>* Function returns:&nbsp; defined grid interp holding interpolated values<br>*<br>* NOTE:&nbsp; YOU NEED TO INCLUDE A COPY OF THIS FUNCTION IN YOUR SCRIPT<br>*<br>
* NOTE:&nbsp; Areas having tlev below bottom level or above upper level <br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; will be undefined in output field. Extrapolation is NOT<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; performed!!<br>*<br>*------------------------------------------------------------------------<br>
*<br>* EXAMPLE FUNCTION CALLS:<br>*<br>* Sample variables: u = u-wind in m/s<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v = v-wind in m/s<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w = vertical velocity<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = temperature in K<br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PP = pressure data in mb<br>
*<br>* 1) Display vertical velocity field on 320K surface:<br>* <br>*&nbsp;&nbsp;&nbsp; &quot;d &quot;isen(w,t,PP,320)<br>*<br>* 2) Create &amp; Display colorized streamlines on 320K surface:<br>*<br>*&nbsp;&nbsp;&nbsp; &quot;define u320=&quot;isen(u,t,PP,320)<br>
*&nbsp;&nbsp;&nbsp; &quot;define v320=&quot;isen(v,t,PP,320)<br>*&nbsp;&nbsp;&nbsp; &quot;set z 1&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;set gxout stream&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;d u320;v320;mag(u320,v320)&quot;<br>*<br>* 3) Create &amp; display a 320K isentropic PV surface:<br>
*<br>*&nbsp;&nbsp;&nbsp; &quot;set lev 1050 150&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define coriol=2*7.29e-5*sin(lat*3.1415/180)&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define dudy=cdiff(u,y)/(111177*cdiff(lat,y))&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define dvdx=cdiff(v,x)/(111177*cdiff(lon,x)*cos(lat*3.1415/180))&quot;<br>
*&nbsp;&nbsp;&nbsp; &quot;define dt=t(z-1)*pow(1000/PP(z-1),0.286)-t(z+1)*pow(1000/PP(z+1),0.286)&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define dp=100*(PP(z-1)-PP(z+1))&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define dtdp=dt/dp&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;define part1=&quot;isen(dvdx,t,PP,320)<br>
*&nbsp;&nbsp;&nbsp; &quot;define part2=&quot;isen(dudy,t,PP,320)<br>*&nbsp;&nbsp;&nbsp; &quot;define part3=&quot;isen(dtdp,t,PP,320)<br>*&nbsp;&nbsp;&nbsp; &quot;define pv320=-9.8*(coriol+part1-part2)*part3&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;set z 1&quot;<br>*&nbsp;&nbsp;&nbsp; &quot;d pv320&quot;<br>
*<br>* PROBLEMS:&nbsp; Send email to Bob Hart (<a href="mailto:hart@ems.psu.edu">hart@ems.psu.edu</a>)<br>* <br>*-----------------------------------------------------------------------<br>*-------------------- BEGINNING OF FUNCTION ----------------------------<br>
*-----------------------------------------------------------------------</p>
<p>* Get initial dimensions of dataset so that exit dimensions will be<br>* same</p>
<p>&quot;q dims&quot;<br>rec=sublin(result,4)<br>ztype=subwrd(rec,3)<br>if (ztype = &quot;fixed&quot;) <br>&nbsp;&nbsp; zmin=subwrd(rec,9)<br>&nbsp;&nbsp; zmax=zmin<br>else<br>&nbsp;&nbsp; zmin=subwrd(rec,11)<br>&nbsp;&nbsp; zmax=subwrd(rec,13)<br>endif</p>
<p>* Get full z-dimensions of dataset.</p>
<p>&quot;q file&quot;<br>rec=sublin(result,5)<br>zsize=subwrd(rec,9)</p>
<p>* Determine spatially varying bounding pressure levels for isen surface<br>* tabove = theta-value at level above ; tbelow = theta value at level<br>* below for each gridpoint</p>
<p>&quot;set z 1 &quot;zsize<br>&quot;define theta=&quot;tgrid&quot;*pow(1000/&quot;pgrid&quot;,0.286)&quot;<br>&quot;set z 2 &quot;zsize<br>&quot;define thetam=&quot;tgrid&quot;(z-1)*pow(1000/&quot;pgrid&quot;(z-1),0.286)&quot;<br>
&quot;set z 1 &quot;zsize-1<br>&quot;define thetap=&quot;tgrid&quot;(z+1)*pow(1000/&quot;pgrid&quot;(z+1),0.286)&quot;</p>
<p>&quot;define tabove=0.5*maskout(theta,theta-&quot;tlev&quot;)+0.5*maskout(theta,&quot;tlev&quot;-thetam)&quot;<br>&quot;define tbelow=0.5*maskout(theta,thetap-&quot;tlev&quot;)+0.5*maskout(theta,&quot;tlev&quot;-theta)&quot;</p>

<p>* Isolate field values at bounding pressure levels<br>* fabove = requested field value above isen surface<br>* fbelow = requested field value below isen surface</p>
<p>&quot;define fabove=tabove*0+&quot;field<br>&quot;define fbelow=tbelow*0+&quot;field</p>
<p>&quot;set z 1&quot;</p>
<p>* Turn this 3-D grid of values (mostly undefined) into a 2-D isen layer</p>
<p>* If more than one layer is valid (rare), take the mean of all the<br>* valid levels. Not the best way to deal with the multi-layer issue,<br>* but works well, rarely if ever impacts output, and is quick.<br>* Ideally, only the upper most level would be used.&nbsp; However, this<br>
* is not easily done using current GrADS intrinsic functions.</p>
<p>&quot;define fabove=mean(fabove,z=1,z=&quot;zsize&quot;)&quot;<br>&quot;define fbelow=mean(fbelow,z=1,z=&quot;zsize&quot;)&quot;<br>&quot;define tabove=mean(tabove,z=1,z=&quot;zsize&quot;)&quot;<br>&quot;define tbelow=mean(tbelow,z=1,z=&quot;zsize&quot;)&quot;</p>

<p>* Finally, interpolate linearly in theta and create isen surface.<br>* Linear interpolation in theta works b/c it scales as height,<br>* or log-P, from Poisson equation for pot temp.</p>
<p>&quot;set z &quot;zmin &quot; &quot; zmax</p>
<p>&quot;define slope=(fabove-fbelow)/(tabove-tbelow)&quot;<br>&quot;define b=fbelow-slope*tbelow&quot;<br>&quot;define interp=slope*&quot;tlev&quot;+b&quot;</p>
<p>* variable interp now holds isentropic field and its named it returned<br>* for use by the user.</p>
<p>say &quot;Done.&nbsp; Newly defined variable interp has &quot;tlev&quot;K &quot;field&quot;-field.&quot;</p>
<p>return(interp)<br></p></div>