The problem is that there is a difference between grids that can be displayed and script variables. They can't be handled the same way. You can't use if statements using displayed fields. What you need to do is to save the output of each computation in your script to a script variable using the subwrd command. Here is an example:<br>
<br>'define th1 = temp * (pow(100000 / press , (0.286)))'<br>th1 = subwrd(result,4)<br><br>Hopefully you've noticed this before, but when you enter a display command at the Grads prompt, there will be a small amount of text output. If you display a variable with all of the dimensions in your environment fixed, the text will include the value of the field you are displaying. What subwrd does is grab the fourth word in the string variable "result". "result" is automatically assigned each time a display command is run, so that's why you don't see it being assigned anywhere else. NOTE: for some data sets and for some environment settings, Grads will interpolate the output before displaying, so the text output from the display command will read <br>
<br>"Note: interpolating variable...<br>Result value: _____"<br><br>In that case you'll need to use the sublin command first:<br>line = sublin(result,2)<br>th1 = subwrd(line,4)<br>This tells Grads to nab the second line of the output from the result variable (result includes all of the text output from the display command). Then you use subwrd to nab the 4th word of the string variable "line". When you do this, you'll have the fields you want as Grads scripting variables. Then you can run if statements on them. To output the value of a Grads script variable, use the say command:<br>
say th1 OR<br>say "th1 = "th1<br><br>ON THE OTHER HAND, you can do this without using any scripting variables. In this case use the max/min and maxloc/minloc functions. Then your script would look something like this:<br>
<br>'set lev 'botlevel' 'toplevel<br><div><br></div><div>
<span style="white-space:pre-wrap">        </span>'define th1 = temp * (pow(100000 / press , (0.286)))'</div><div><span style="white-space:pre-wrap">        </span>'define u1 = u'</div>
<div><span style="white-space:pre-wrap">        </span>'define v1 = v'</div><div><span style="white-space:pre-wrap">        </span>'define z1 = geopot/9.81'</div><div><br></div>
<div><span style="white-space:pre-wrap">        </span>'define th2 = temp(z-1) * (pow(100000 / press(z-1) , (0.286)))'</div><div><span style="white-space:pre-wrap">        </span>'define u2 = u(z-1)'</div>
<div><span style="white-space:pre-wrap">        </span>'define v2 = v(z-1)'</div><div><span style="white-space:pre-wrap">        </span>'define z2 = geopot(z-1)/9.81'</div><div><br></div><div><span style="white-space:pre-wrap">        </span>'define ri=9.81/(0.5*th1+th2)*(th2-th1)/(pow((u2-u1),2)+pow((v2-v1),2))*(z2-z1)'</div>
<div><br></div><div><span style="white-space:pre-wrap">        </span>'d ri'</div><div><span style="white-space:pre-wrap">        </span>say result <span style="white-space:pre-wrap">                        </span></div>
<div><br></div><div>'d min(ri,lev='botlev',lev='toplev')'<br>'d minloc(ri,lev='botlev',lev='toplev')'<br>'d max(ri,lev='botlev',lev='toplev')'<br>'d maxloc(ri,lev='botlev',lev='toplev')'<br>
<br>Carefully follow the location of the single quotes and note that there is no while loop here. Also note the (z-1) appended to the *2 variables to represent the field one level below the current level. The whole quote thing confuses some people, so that's understandable. Try this and see if it works. Ask if you have any questions. Good luck.<br>
<br>Jeff Duda<br><br></div><div class="gmail_quote">On Thu, Nov 3, 2011 at 5:23 AM, Lippo Nester <span dir="ltr"><<a href="mailto:liikkuvattaakse@gmail.com">liikkuvattaakse@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Hi!</div><div><br></div><div>I've been trying to create my very first GrADS-script. The script should compute values of the bulk Richardson number in a specific grid point between predefined model levels and then find the minimum value of Ri and probably the model level associated with it.</div>
<div><br></div><div>I tried to do this using while and if loops, but for some reason it's not working as I expected. Maybe I can't understand handling variables in GrADS?</div><div><br></div><div>In this script the top and the bottom model layers are set to 40 and 50. Ri is computed and I get a list of the Ri at different levels, and they seem to be ok. However the variable "minri" gets always the value of ri at the lowest model level (here: ri at level 50). Variable "minlevel" is always the highest model level (here: level 40)!</div>
<div><br></div><div>When count is 40 at the first step of the while-loop, the value of ri should be saved into variable minri and the model level at minlev. After that, if ri < minri at lower levels (count > 40), values of minri and minlev should be varied by the second if-loop...</div>
<div><br></div><div>Is there a more simple or more correct way to do this? I thought max() can't make it...</div><div><br></div><div>Any help is much appreciated! </div><div><br></div><div>Best regards, Lippo</div><div>
<br></div><div>(version of GrADS 2.0.a1)</div><div><br></div><div><div>'set lat 50.00'</div><div>'set lon 10.00'</div><div>botlevel=50</div><div>toplevel=40</div><div><br></div><div>count=toplevel</div><div>
<br></div><div><span style="white-space:pre-wrap">        </span>while (count <= botlevel)</div><div><br></div><div><span style="white-space:pre-wrap">        </span>'set lev 'count</div><div>
<span style="white-space:pre-wrap">        </span>'define th1 = temp * (pow(100000 / press , (0.286)))'</div><div><span style="white-space:pre-wrap">        </span>'define u1 = u'</div>
<div><span style="white-space:pre-wrap">        </span>'define v1 = v'</div><div><span style="white-space:pre-wrap">        </span>'define z1 = geopot/9.81'</div><div><br></div><div><span style="white-space:pre-wrap">        </span>'set lev 'count - 1</div>
<div><span style="white-space:pre-wrap">        </span>'define th2 = temp * (pow(100000 / press , (0.286)))'</div><div><span style="white-space:pre-wrap">        </span>'define u2 = u'</div>
<div><span style="white-space:pre-wrap">        </span>'define v2 = v'</div><div><span style="white-space:pre-wrap">        </span>'define z2 = geopot/9.81'</div><div><br></div><div><span style="white-space:pre-wrap">        </span>'define ri=9.81/(0.5*th1+th2)*(th2-th1)/(pow((u2-u1),2)+pow((v2-v1),2))*(z2-z1)'</div>
<div><br></div><div><span style="white-space:pre-wrap">        </span>'d 'ri</div><div><span style="white-space:pre-wrap">        </span>say result <span style="white-space:pre-wrap">                        </span>*THIS SEEMS TO WORK AS I GET 10 DIFFERENT VALUES OF RI</div>
<div><br></div><div><span style="white-space:pre-wrap">                </span>if (count = toplevel) <span style="white-space:pre-wrap">        </span>*THESE IF-LOOPS AREN'T OKAY, BUT WHY?</div><div><span style="white-space:pre-wrap">                </span>minri = ri</div>
<div><span style="white-space:pre-wrap">                </span>minlevel = count</div><div><span style="white-space:pre-wrap">                </span>endif</div><div><br></div><div><span style="white-space:pre-wrap">                </span>if (ri < minri)</div>
<div><span style="white-space:pre-wrap">                </span>minri = ri</div><div><span style="white-space:pre-wrap">                </span>minlevel = count</div><div><span style="white-space:pre-wrap">                </span>endif</div>
<div><br></div><div><span style="white-space:pre-wrap">        </span>count = count+1</div><div><span style="white-space:pre-wrap">        </span>endwhile</div><div><br></div><div>'d 'minri</div>
<div>say "Min Ri " result<span style="white-space:pre-wrap">                        </span>*ALWAYS THE VALUE OF RI AT LEVEL 50 (AT THE BOTTOM LEVEL)</div><div>'d 'minlevel<span style="white-space:pre-wrap">                                </span></div>
<div>say "Model level " result<span style="white-space:pre-wrap">                </span>*ALWAYS LEVEL 40 (TOP LEVEL)</div></div><div><br></div><div><br></div><div><br></div>
<br>_______________________________________________<br>
gradsusr mailing list<br>
<a href="mailto:gradsusr@gradsusr.org">gradsusr@gradsusr.org</a><br>
<a href="http://gradsusr.org/mailman/listinfo/gradsusr" target="_blank">http://gradsusr.org/mailman/listinfo/gradsusr</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Jeff Duda<br>Iowa State University<br>Meteorology Graduate Student<br><a href="http://www.meteor.iastate.edu/%7Ejdduda" target="_blank">www.meteor.iastate.edu/~jdduda</a><br>