[gradsusr] variables in .gs scripts

Yaqiang Wang yaqiang.wang at gmail.com
Tue Nov 15 20:11:53 EST 2011


Try this:

mai = const(maskout(elr-malr,const(maskout(rh,rh-100),-1,-u)),0,-u)
        # If 100 is the biggest number in rh

or:                 #If 100 is not the biggest or samllest number in rh
rh1=maskout(rh,rh-100)
rh2=100-rh1
rh3=maskout(rh2,rh2-0)
rh4=const(rh3,-1,-u)
mai = const(maskout(elr-malr,rh4),0,-u)

The point is to get a maskout variable from rh, in which only the grid
points with 100 rh  are positive.


On Wed, Nov 16, 2011 at 4:18 AM, Yi-Chih Huang <dscpln at gmail.com> wrote:
> Hello,
>
>     After testing the script, I got the errors below.  If the second
> argument must be a constant, then a combination of const and maskout would
> not be as powerful as I thought.  My question remains: what would be the
> command in GrADS for the if statement?
>
> ################
> Error from CONST:  2nd argument must be a constant
> Operation Error:  Error from const function
> Operation Error:  Error from const function
>   Error ocurred at column 1
> DEFINE error:  Invalid expression.
>
> ################
> if (rh=100) then
>    "mai=elr-malr"
> else
>    "mai=0"
> endif
>
> ################
>
>     Thanks much,
>
>                             Yi-Chih
>
>
> On Tue, Nov 15, 2011 at 2:59 PM, Yi-Chih Huang <dscpln at gmail.com> wrote:
>>
>> Hello,
>>
>>     Thanks much for the elucidation.  I think the command below has the
>> same functions as the if statement.  It is good to learn the expression of
>> the if statement in GrADS.  But if the calculations are very complicate and
>> include several commands, probably a combination of const and maskout would
>> not be able to handle such complicate situations.
>>
>> ################
>> mai = const(const(maskout(rh,rh-100),elr-malr),0,-u)
>>
>> ################
>> if (rh=100) then
>>    "mai=elr-malr"
>> else
>>    "mai=0"
>> endif
>> ################
>>
>>     Thanks,
>>
>>            Yi-Chih
>>
>>
>> On Mon, Nov 14, 2011 at 10:49 PM, Yaqiang Wang <yaqiang.wang at gmail.com>
>> wrote:
>>>
>>> 1. maskout the rh values less than 100 to missing: rh=maskout(rh,rh-100)
>>> 2. get a new rh with the negtive values which are larger than 100
>>> before (100 is now 0): rh=100-rh
>>> 3. maskout the negtive values: rh=maskout(rh,rh)
>>> 4. get mai values: mai=elr-malr
>>> 5. maskout mai: mai=maskout(mai,rh)
>>> 6. const mai missing values to 0: mai=const(mai,0,-u)
>>>
>>> On Tue, Nov 15, 2011 at 10:58 AM, Yi-Chih Huang <dscpln at gmail.com> wrote:
>>> > Hello,
>>> >
>>> >     I had read the documents about const and maskout online.  However,
>>> > probably my understanding about const and maskout is so shallow that I
>>> > can't
>>> > use a combination of const and maskout to accomplish the function of
>>> > the if
>>> > statement.  Thus, I posed the question.
>>> >
>>> >     Thanks,
>>> >
>>> >                    Yi-Chih
>>> >
>>> >
>>> > On Mon, Nov 14, 2011 at 9:41 PM, Yaqiang Wang <yaqiang.wang at gmail.com>
>>> > wrote:
>>> >>
>>> >> You can find the usage of const and maskout from online help document.
>>> >> http://www.iges.org/grads/gadoc/gradfuncconst.html
>>> >> http://www.iges.org/grads/gadoc/gradfuncmaskout.html
>>> >>
>>> >> On Tue, Nov 15, 2011 at 10:28 AM, Yi-Chih Huang <dscpln at gmail.com>
>>> >> wrote:
>>> >> > Hello,
>>> >> >
>>> >> >     I work on regular grads.  I have searched online for the
>>> >> > examples to
>>> >> > use
>>> >> > const and maskout instead of if statement.  But I can't find any
>>> >> > example.
>>> >> > Could anyone show me an example to use const and maskout instead of
>>> >> > if
>>> >> > statement?
>>> >> >
>>> >> >     Thanks much for your help,
>>> >> >
>>> >> >                    Yi-Chih
>>> >> >
>>> >> >
>>> >> > On Mon, Nov 14, 2011 at 4:25 PM, Arlindo da Silva
>>> >> > <dasilva at alum.mit.edu>
>>> >> > wrote:
>>> >> >>
>>> >> >> On Mon, Nov 14, 2011 at 3:40 PM, Yi-Chih Huang <dscpln at gmail.com>
>>> >> >> wrote:
>>> >> >>>
>>> >> >>> Hello,
>>> >> >>>
>>> >> >>>     I want to calculate variable 2 based on the value of some
>>> >> >>> variable
>>> >> >>> as
>>> >> >>> follows.
>>> >> >>>
>>> >> >>> When var1 = 100, then  var2 =  (calculation 1)
>>> >> >>> When var1 != 100, then  var2 = (calculation 2)
>>> >> >>>
>>> >> >>> I wrote a .gs script as follows.  But the condition rh=100 did not
>>> >> >>> effect.  Could anyone reveal what would be the right command in
>>> >> >>> .gs
>>> >> >>> script
>>> >> >>> to give the condition in which variables are in the .ctl file?
>>> >> >>>
>>> >> >>>
>>> >> >>>
>>> >> >>>
>>> >> >>> "malr=dalr*(1+2500000*q/287/tk)/(1+0.622*pow(2500000,2)*q/1004/287/tk/tk)"
>>> >> >>> "elr=-(tk(z+1)-tk(z-1))/(height(z+1)-height(z-1))"
>>> >> >>>
>>> >> >>> if (rh=100) then
>>> >> >>>    "mai=elr-malr"
>>> >> >>> else
>>> >> >>>    "mai=0"
>>> >> >>> endif
>>> >> >>
>>> >> >> GrADS expression parser and the scripting language do not share the
>>> >> >> same
>>> >> >> name space. Therefore you cannot have an if statement as above
>>> >> >> where
>>> >> >> you
>>> >> >> reference a gridded variable.  If you are using opengrads, the if()
>>> >> >> function
>>> >> >> could accomplish what you want:
>>> >> >> 'mai = if(rh,=,0,elr-malr,0)'
>>> >> >> For more information on if() see:
>>> >> >> if(EXPR1,OP,EXPR2,TRUE_EXPR,FALSE_EXPR)
>>> >> >> In regular grads, a combination of maskout()/const() functions can
>>> >> >> accomplish the same as the if() function above.
>>> >> >>    Arlindo
>>> >> >>
>>> >> >> --
>>> >> >> Arlindo da Silva
>>> >> >> dasilva at alum.mit.edu
>>> >> >>
>>> >> >> _______________________________________________
>>> >> >> gradsusr mailing list
>>> >> >> gradsusr at gradsusr.org
>>> >> >> http://gradsusr.org/mailman/listinfo/gradsusr
>>> >> >>
>>> >> >
>>> >> >
>>> >> > _______________________________________________
>>> >> > gradsusr mailing list
>>> >> > gradsusr at gradsusr.org
>>> >> > http://gradsusr.org/mailman/listinfo/gradsusr
>>> >> >
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> *************************************************
>>> >> Dr. Yaqiang Wang
>>> >> Chinese Academy of Meteorological Sciences (CAMS)
>>> >> 46, Zhong-Guan-Cun South Avenue
>>> >> Beijing, 100081
>>> >> China
>>> >>
>>> >> yaqiang.wang at gmail.com
>>> >>
>>> >> http://www.meteothinker.com
>>> >> **************************************************
>>> >>
>>> >> _______________________________________________
>>> >> gradsusr mailing list
>>> >> gradsusr at gradsusr.org
>>> >> http://gradsusr.org/mailman/listinfo/gradsusr
>>> >
>>> >
>>> > _______________________________________________
>>> > gradsusr mailing list
>>> > gradsusr at gradsusr.org
>>> > http://gradsusr.org/mailman/listinfo/gradsusr
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> *************************************************
>>> Dr. Yaqiang Wang
>>> Chinese Academy of Meteorological Sciences (CAMS)
>>> 46, Zhong-Guan-Cun South Avenue
>>> Beijing, 100081
>>> China
>>>
>>> yaqiang.wang at gmail.com
>>>
>>> http://www.meteothinker.com
>>> **************************************************
>>>
>>> _______________________________________________
>>> gradsusr mailing list
>>> gradsusr at gradsusr.org
>>> http://gradsusr.org/mailman/listinfo/gradsusr
>>
>
>
> _______________________________________________
> gradsusr mailing list
> gradsusr at gradsusr.org
> http://gradsusr.org/mailman/listinfo/gradsusr
>
>



-- 
*************************************************
Dr. Yaqiang Wang
Chinese Academy of Meteorological Sciences (CAMS)
46, Zhong-Guan-Cun South Avenue
Beijing, 100081
China

yaqiang.wang at gmail.com

http://www.meteothinker.com
**************************************************




More information about the gradsusr mailing list