[gradsusr] How to convert a string to a real number?
Jeffrey Duda
jdduda at iastate.edu
Wed Jan 5 00:46:52 EST 2011
Qinglan,
Are you sure you're using the subwrd function correctly? I don't think you
are. If you want to get the value of SWDOWN.1 and SWDOWN.2, do something
like
(set environment commands)
'd SWDOWN.1'
SW1 = subwrd(result,1) !make sure this is the correct one...depending on
how your control file is setup, you might get "Notice: interpolation will be
made", then the value, in which case you'll need to do a sublin command
first, then the subwrd command
I'm pretty sure that's the source of your error. Here's an example from
another script I use (vgeo.gs):
'q dims'
xline=sublin(result,2)
xdim1=subwrd(xline,11)
xdim2=subwrd(xline,13)
yline=sublin(result,3)
ydim1=subwrd(yline,11)
ydim2=subwrd(yline,13)
...
...
...
x3 = xdim1 + xdim2
say xdim1 "+" xdim2 "=" x3
...
...
*The output is:*
ga-> run vgeo.gs
1+301=302
Try making those changes and see if it works then.
Jeff
P.S. Alternately, you can try using the maskout function to define a new
variable for SWDOWN which is undefined where your LU_index variable is 1.
Such a command could be like:
'define SWDOWNmask = maskout(SWDOWN.1,LU_index - 1.5)'
This would make sure not to mask out SWDOWN.1 when LU_index was 2 or greater
(I'm assuming the values of LU_index are positive integers only).
On Tue, Jan 4, 2011 at 9:19 PM, qinglan <qinglan at hku.hk> wrote:
> Dear all,
>
> Thanks for the response, but the reply has not solved my problem. Let me
> make my question more specific. I would like to calculate the average of the
> SWDOWN (short wave radiation) over certain land type, here referring to
> rural land type (LU_index =not 1).
>
> The following is my original code. First of all, I want summate all the
> values of SWDOWN for all the grids with LU_index!=1 and LU_index!=1, then
> divided by the total number of nrr. tim, m and n might be larger, here
> for simplifying purpose, setting them for only one loop each.
>
> The problem is the outputs of SWDOWN.1 or SWDOWN.2 are not a single value,
> the program treat SWDOWN.1 as a vector, even the t, x, y (tim, m, n) are
> fixed to one value.
>
> Firstly, there is an error for this sentence
>
> SWDOWN_nrr1=SWDOWN_nrr1+SWDOWN.1
>
> Or I try to output SWDOWN.1 to a single value
>
> SW1=subwrd(SWDOWN.1,1)
>
> the program treats SW1 as a string, not a value, so
>
> SW5=SW1+SW2 makes mistakes, as well as
> SWDOWN_nrr1=SWDOWN_nrr1+'SW1'
>
> Possible solutions for my problems are: convert the output of SWDOWN.1 to
> a single value, which I can use for summation. SWDOWN_nrr1=SWDOWN_nrr1+SWDOWN.1;
>
>
> or convert a string to a value, which I can also use it for summation.
> SWDOWN_nrr1=SWDOWN_nrr1+'SW1'
>
>
>
> Thank you very much!
>
> Qinglan Li
>
>
>
>
>
> 'reinit'
>
> 'open Small_Nest3_Moisture_2000July23-27_00_UTC_2000_land_AH100.ctl'
>
> 'open
> Small_Nest3_Moisture_2000July23-27_00_UTC_1980_land_AH100_changed_0.7profile.ctl'
>
> tim=25
>
> while(tim<=25)
>
> SWDOWN_rr1=0
>
> SWDOWN_rr2=0
>
> 'set t 'tim''
>
> nrr=0
>
> SWDOWN_nrr1=0
>
> SWDOWN_nrr2=0
>
> m=1
>
> while(m<=1)
>
> n=1
>
> while(n<=1)
>
> 'set x 'm''
>
> 'set y 'n''
>
> LU1=LU_index.1
>
> LU2=LU_index.2
>
> SW1=subwrd(SWDOWN.1,1)
>
> SW2=subwrd(SWDOWN.2,1)
>
> SW5=SW1+SW2 ********error
>
> SW3=1.1
>
> SW4=2.2
>
> if (LU1!=1 & LU2!=1)
>
> nrr=nrr+1
>
> SWDOWN_nrr1=SWDOWN_nrr1+'SW1' ******error
>
> SWDOWN_nrr2=SWDOWN_nrr2+'SW2' ******error
>
> endif
>
> n=n+1
>
> endwhile
>
> m=m+1
>
> endwhile
>
> SWDOWN_rr1=SWDOWN_nrr1/nrr
>
> SWDOWN_rr2=SWDOWN_nrr2/nrr
>
> *'d SWDOWN_rr1'
>
> *'d SWDOWN_rr2'
>
> 'd 'SWDOWN_nrr1''
>
> 'd 'SWDOWN_nrr2''
>
> 'fprintf 'LU1' LU1.txt'
>
> 'd 'LU2''
>
> 'fprintf 'SW1' SW1.txt'
>
> 'fprintf 'SW5' SW5.txt'
>
> 'fprintf 'nrr' nrr.txt'
>
> 'fprintf 'SWDOWN_nrr2' SWDOWN_nrr2.txt'
>
> tim=tim+1
>
> endwhile
>
> ------------------------------
> *From:* gradsusr-bounces at gradsusr.org [gradsusr-bounces at gradsusr.org] On
> Behalf Of Jeffrey Duda [jdduda at iastate.edu]
> *Sent:* Wednesday, January 05, 2011 3:34 AM
> *To:* GrADS Users Forum
> *Subject:* Re: [gradsusr] How to convert a string to a real number?
>
> As far as I'm aware, you shouldn't have to explicitly convert in grads
> scripting. Just use your quotes correctly. Here's an example from a script
> I wrote to compute theta-e:
>
> These constants are set as variables within the grads script only (i.e.,
> they don't exist in the command window...I can't display Rv or Rd etc.).
> Thus they're regarded as constants or strings.
>
> Rv = 461.5
> Rd = 287.05
> Cp = 1005
> lv = 2.5e6
>
> In the actual theta-e computation below, notice how the variables are used
> between single quotes so as not to be a part of a command that would
> otherwise be issued in the command window. This is all you should have to
> do to use a string as a number or vice versa.
>
> 'tempK = tc + 273'
> 'es = 6.11*exp((2.5e6/461.5)*((1/273) - (1/tempK)))'
> 'e = qvapor*((p+pb)/100) / (qvapor + 0.622)'
> 'equivt = tempK + 'Lv'*qvapor/'Cp'
> 'thetae = equivt*pow(1000/slp,'Rd'/'Cp')'
>
>
> I hope this helps, but ask more questions if it doesn't.
>
> Jeff Duda
>
> On Tue, Jan 4, 2011 at 1:24 PM, Murphy, Darren W <dwmurphy at nps.edu> wrote:
>
>> I’d like to second this question. I am having the same issue. I think
>> the Grads literature says that some commands can use a number as a string
>> for calculations. However, when I try and use my number “string” in a max
>> or min Grads function, it throws an error.
>>
>> Thanks,
>> Darren
>>
>>
>> On 1/4/11 6:45 AM, "qinglan" <qinglan at hku.hk> wrote:
>>
>> Dear All,
>>
>> Is there anybody know how to convert a string to a real number in Grads?
>> For example, if my string is ‘300.5’, I want to get the value of 300.5,
>> which is a real number, how to do that?
>>
>> Really appreciate your help!
>> Best regards,
>> Qinglan Li
>>
>>
>> ------------------------------
>> _______________________________________________
>> 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
>>
>>
>
>
> --
> Jeff Duda
> Iowa State University
> Meteorology Graduate Student
> 3134 Agronomy Hall
> www.meteor.iastate.edu/~jdduda <http://www.meteor.iastate.edu/%7Ejdduda>
>
> _______________________________________________
> gradsusr mailing list
> gradsusr at gradsusr.org
> http://gradsusr.org/mailman/listinfo/gradsusr
>
>
--
Jeff Duda
Iowa State University
Meteorology Graduate Student
3134 Agronomy Hall
www.meteor.iastate.edu/~jdduda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://gradsusr.org/pipermail/gradsusr/attachments/20110104/3348ace5/attachment-0003.html
More information about the gradsusr
mailing list