Logic Question

Mark Sponsler msponsler at COMCAST.NET
Thu Mar 26 13:07:18 EDT 2009


Thanks everyone for your solutions.  I'll play with all of them and let you know how it turns out. 

Mark 

----- Original Message ----- 
From: "Eric Altshuler" <ela at COLA.IGES.ORG> 
To: GRADSUSR at LIST.CINECA.IT 
Sent: Wednesday, March 25, 2009 8:29:41 PM GMT -08:00 US/Canada Pacific 
Subject: Re: Logic Question 

Hello Mark, 

I think the following will do what you want: 

var1m=const(maskout(var1,var1-var2),0,-u) 
var2m=const(maskout(var2,var2-var1),0,-u) 
varxm=const(maskout(var1,-abs(var1-var2)),0,-u) 
d var1m+var2m-varxm 

var1m will equal var1 where var1>=var2 and zero where var1<var2. 
var2m will equal var2 where var2>=var1 and zero where var2<var1. 

The sum of var1m and var2m will equal var1 where var1>var2 and will equal var2 where var2>var1. However, at grid points where var1=var2, var1m+var2m will be equal to var1+var2 (and also equal to 2*var1 and 2*var2). In this case, var1 (or var2) must be subtracted from var1+var2 to get the correct value. To handle the situation where var1=var2, varxm will equal var1 (and also var2) where var1=var2 and zero where var1<>var2. So, finally, the expression var1m+var2m-varxm will equal var1 where var1>=var2 and will equal var2 where var2>=var1. 

I tried this out with my own data and it seems to work. The maskout and const functions are amazingly useful for problems like this. 

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: "Mark Sponsler" <msponsler at COMCAST.NET> 
To: GRADSUSR at LIST.CINECA.IT 
Sent: Wednesday, March 25, 2009 6:54:20 PM GMT -05:00 US/Canada Eastern 
Subject: Logic Question 

I need your expert assistance 

The goal is to display the greater of 2 variables, comparing them grib 
point by grib point onto a single image in one display operation.  I 
believe that 'if' and '>' can't be used in a define statement, hence the 
dilemma: 

Logically for each grib point I want to: 

if (var1 >= var2) 
   d var1 
else 
if (var2 > var1) 
   d var2 
endif 

So I'm trying to figure out how to set up a define statement to accomplish 
that. 

define var3 = (logic here...) 
d var3 

Any thoghts would be most appreciated. 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://gradsusr.org/pipermail/gradsusr/attachments/20090326/86122ba5/attachment.html 


More information about the gradsusr mailing list