if statement in grads

Eric Altshuler ela at COLA.IGES.ORG
Thu Mar 12 19:25:05 EDT 2009


Hello John,

I took another look at your script, and it seems you want to do some sort of masking, to write out an area averaged variable (iwc) at grid points where rain.2 is in a certain range, and to write out undefined values at grid points where rain.2 is outside that range. You might be able to accomplish your task by using the maskout and/or const functions. Since the area averaged 'iwc' is the same at all grid points (it depends only on Z) and the undef value is a constant, it is very wasteful to calculate the area averaged iwc and undef for every grid point individually. I'm not exactly sure what steps you would need in your script, but I'm just trying to point you in the right direction with the maskout and const functions. See the grads documentation (http://grads.iges.org/grads/gadoc/index.html) for details.

Best regards,
Eric

----- Original Message -----
From: "John Guhin" <johnguhin at GMAIL.COM>
To: GRADSUSR at LIST.CINECA.IT
Sent: Thursday, March 12, 2009 5:05:23 PM GMT -05:00 US/Canada Eastern
Subject: Re: if statement in grads

 Thanks Eric. It worked out perfectly. One remaining problem is : I don't
want to write rain.2 in the file that I am creating.  Because of 'd
24*rain.2' it is also written in the output file. Is there any way to
suppress rain.2, and write only the intended variable (iwc)?
thanks again.

On Thu, Mar 12, 2009 at 3:48 PM, Eric Altshuler <ela at cola.iges.org> wrote:

> John,
>
> One problem I immediately see is that in your if statement:
>
> 'define aa=rain.2*24'
> if (rainlow <= aa & aa < rainhigh)
>
> you are trying to compare the script variables rainlow and rainhigh with
> 'aa', which is a GrADS defined data variable, not a script variable. This
> will not work. You need to assign a particular single value to the script
> variable aa. An example might be the following, with the dimension
> environment set to all dimensions fixed:
>
> ...
> ...
> 'set t 't1
> ...
> 'set z 'z1
> ...
> 'set x 'x1
> 'set y 'y1
> 'd 24*rain.2'
> aa=subwrd(result,4)
> if (rainlow <= aa & aa < rainhigh)
> ...
> ...
>
> where x1, y1, z1 and t1 are the values (assigned to these script variables)
> you want for the fixed dimensions. You already have a looping structure set
> up for Z, and I assume you also have one for T, but you will also need to
> loop over the values of X and Y so that the script variable aa is assigned a
> single value in each iteration of the loop.
>
> Best regards,
>
> Eric L. Altshuler
> Assistant Research Scientist
> Center for Ocean-Land-Atmosphere Studies
> 4041 Powder Mill Road, Suite 302
> Calverton, MD 20705-3106
> USA
>
> E-mail: ela at cola.iges.org
> Phone: (301) 902-1257
> Fax: (301) 595-9793
>
> ----- Original Message -----
> From: "John Guhin" <johnguhin at GMAIL.COM>
> To: GRADSUSR at LIST.CINECA.IT
> Sent: Thursday, March 12, 2009 12:31:00 PM GMT -05:00 US/Canada Eastern
> Subject: Re: if statement in grads
>
> Thanks Stephen. You are correct for more than one time step. But can we
> read
> a 2D variable at all inside the if statement? Consider the following:
>
> 'open /raid/pray/processed_data/IWC/iwc.ctl'
> 'open /raid/pray/processed_data/AMSRE/rain-amsre_15jun06-31aug08.ctl'
> rainlow=0 ; rainhigh=5;
> lon1=0 ; lon2=360
> lat1=-30 ; lat2=30
> undef=-1e+34
> z1=1
> while(z1<19)
> 'set z 'z1
> 'define aa=rain.2*24'
> if (rainlow <= aa & aa < rainhigh)
> 'd aave(iwc,lon='lon1',lon='lon2',lat='lat1',lat='lat2')'
> else
> 'd aave(iwc*0+'undef',lon='lon1',lon='lon2',lat='lat1',lat='lat2')'
> endif
> z1=z1+1
> endwhile
>
> iwc is 3D. rain.2 is actually a 2D variable, so aa is  also 2D. I think
> thats where the problem is.  Anybody has faced similar problem?
> thanks.
>
>
>
> On Thu, Mar 12, 2009 at 11:39 AM, Stephen R McMillan <
> smcmillan at planalytics.com> wrote:
>
> >
> > John,
> > The if statement you quoted--the one that Jennifer suggested--is valid,
> as
> > is the nested method that Pablo suggested.  However, your unexpected
> results
> > appear to indicate the "if..else" conditions (in particular are not
> changing
> > during the second time loop iteration.  Since your variable 'aa' would be
> > the same at each timestep, then I suppose 'iwc' may be the culprit. Have
> you
> > tried echo-displaying the conditional results at each timestep to confirm
> > their values?
> > Stephen Mc
> >
> >
> > *John Guhin <johnguhin at GMAIL.COM>*
> > Sent by: GRADSUSR at LIST.CINECA.IT
> >
> > 03/11/2009 08:03 PM
> > Please respond to
> > GRADSUSR at LIST.CINECA.IT
> >
> > To
> > GRADSUSR at LIST.CINECA.ITcc
> > Subject
> > Re: if statement in grads
> >
> >
> >
> >
> > Thanks Stephen.
> >  I simplified the script by considering only one time (t). The problem is
> > indeed if statement.
> > It seems if statement like this  if (rainlow <=aa & aa<rainhigh)
> > does not work in grads. Is it true? or there is another way to solve my
> > problem?
> >
> > thanks in advance.
> >
> >
> > On Wed, Mar 11, 2009 at 5:07 PM, Stephen R McMillan <*
> > smcmillan at planalytics.com* <smcmillan at planalytics.com>>wrote:
> > John,
> > Check the position of your "t1=1" line.  As it is, it would appear to
> > repeat the 20 days once.  Did you intend to put "t1=1" before the
> outermost
> > while loop?
> > Stephen Mc
> >
> >
> > *John Guhin <**johnguhin at GMAIL.COM* <johnguhin at GMAIL.COM>*>*
> > Sent by: *GRADSUSR at LIST.CINECA.IT* <GRADSUSR at LIST.CINECA.IT>
> >
> > 03/11/2009 03:48 PM
> > Please respond to
> > *GRADSUSR at LIST.CINECA.IT* <GRADSUSR at LIST.CINECA.IT>
> >
> >
> > To
> > *GRADSUSR at LIST.CINECA.IT* <GRADSUSR at LIST.CINECA.IT>cc
> > Subject
> > Re: if statement in grads
> >
> >
> >
> >
> >
> >
> > Hi,
> >    I tried with
> >  if (rainlow <=aa & aa<rainhigh)
> >
> >  but didn't work. Am I mising something?
> >
> > thanks in advance.
> >
> >
> > On Wed, Mar 11, 2009 at 1:28 PM, Jennifer Adams <*jma at cola.iges.org*<
> jma at cola.iges.org>
> > >wrote:
> > Try  changing your if statement to:
> > if (rainlow <=aa & aa<rainhigh)
> > --Jennifer
> >
> > On Mar 11, 2009, at 1:19 PM, John Guhin wrote:
> >
> >
> > Hi,
> >     I am trying to use if statement in a grads script... which doesn't
> seem
> > to work. I am
> > attaching  the gs file. iwc is a 3D variable, and rain is 2D variable
> > exactly in the same grids. I am trying to extract iwc when rain is within
> > certain range. The script executes without any error, but the output
> repeats
> > itself every 20 days. This means that the " if" statement is not
> working!!
> > Any help would be appreciated.
> >
> >  'reinit'
> > 'c'
> > 'open iwc.ctl'
> > 'open /rain.ctl'
> > 'set gxout fwrite'
> > 'set fwrite iwc_ppt_binned.dat'
> >
> > lon1=40 ; lon2=180
> > lat1=-20 ; lat2=20
> > undef=-1e+34
> > rainlow=0 ; rainhigh=5;
> >
> > while(rainhigh<11)
> > t1=1
> > while(t1<21)
> > 'set t 't1
> > z1=1
> > while(z1<19)
> > 'set z 'z1
> > 'define aa=24*rain.2(z=1)'
> > if (rainlow <= aa < rainhigh)
> > 'd aave(iwc,lon='lon1',lon='lon2',lat='lat1',lat='lat2')'
> > else
> > 'd aave(iwc*0+'undef',lon='lon1',lon='lon2',lat='lat1',lat='lat2')'
> > endif
> > z1=z1+1
> > endwhile
> > t1=t1+1
> > endwhile
> > rainlow=rainlow+5
> > rainhigh=rainhigh+5
> > endwhile
> >
> > 'close 2'
> > 'close 1'
> > 'disable fwrite'
> >
> > --
> > John Guhin
> > --
> > Jennifer M. Adams
> > IGES/COLA
> > 4041 Powder Mill Road, Suite 302
> > Calverton, MD 20705
> > *jma at cola.iges.org* <jma at cola.iges.org>
> >
> >
> >
> >
> >
> >
> >
> > --
> > John Guhin
> >
> >
> >
> > ***************************************************
> > The information contained in this e-mail message is intended only for the
> > use of the recipient(s) named above and may contain information that is
> > privileged, confidential, and/or proprietary.  If you are not the
> intended
> > recipient, you may not review, copy or distribute this message.  If you
> have
> > received this communication in error, please notify the sender
> immediately
> > by e-mail, and delete the original message.
> > ***************************************************
> >
> >
> >
> > --
> > John Guhin
> >
> >
> >
> > ***************************************************
> > The information contained in this e-mail message is intended only for the
> > use of the recipient(s) named above and may contain information that is
> > privileged, confidential, and/or proprietary. If you are not the intended
> > recipient, you may not review, copy or distribute this message. If you
> have
> > received this communication in error, please notify the sender
> immediately
> > by e-mail, and delete the original message.
> > ***************************************************
> >
>
>
>
> --
> John Guhin
>



--
John Guhin



More information about the gradsusr mailing list