Hi Dennis and Mary,
Many thanks for details. Now it works.
Why a mix of _Wrap ond not other functions => I got this script from a resource person; I have little knowledge about ncl so can't comment on content of the script.
Thanks once again
Jagadish
>________________________________
> From: Dennis Shea <shea_at_ucar.edu>
>To: jagadish karmacharya <j_karmacharya_at_yahoo.com>
>Cc: "ncl-talk_at_ucar.edu" <ncl-talk_at_ucar.edu>
>Sent: Tuesday, August 21, 2012 8:47 PM
>Subject: Re: [ncl-talk] Assignment type mismatch
>
>Assuming
> 'p' is type float
> 'lat' is type double
>
>Both of the following are type float
> pt = p(lat|:,lon|:,time|:) ; (lat,lon,time)
> ptw = pt
>
>If 'lat' is double then
> lat=p&lat
> wgt = sqrt(cos(lat*0.01745329))
>will result in wgt being double.
>
>Then
> ptw = pt*conform(pt,wgt,0)
>the right hand side will be double (float*double=>double)
>Since ptw is previously defined as float NCL will (currently)
>not allow this. For debug you could do
> xxx=sqrt(cos(lat*0.01745329))
> print(typeof(xxx))
>
>The simplest soltion is
> wgt = sqrt(cos(tofloat(lat)*0.01745329))
>
>
>The message below is a awrning ... not a fatal error.
>
>===
>Why a mix of _Wrap ond not other functions
>
>> eof = eofunc_Wrap(ptw,neval,optEOF)
>> ts = eofunc_ts(ptw,eof,optEOF)
>> reof = eofunc_varimax_Wrap(eof, 1)
>> rts = eofunc_ts(ptw,reof,optEOF)
>
> eof = eofunc_Wrap(ptw,neval,optEOF)
> ts = eofunc_ts_Wrap(ptw,eof,optEOF)
> reof = eofunc_varimax_Wrap(eof, 1)
> rts = eofunc_ts_Wrap(ptw,reof,optEOF)
>
>
>On 8/21/12 1:14 PM, jagadish karmacharya wrote:
>> Thanks Dave,
>>
>> But, it still gives same error.
>> By the way, with ptw =tofloat(pt) on the previos line it gives follwing
>> warning.
>> warning:Dimension (0) has not been defined
>> warning:Dimension (1) has not been defined
>>
>> Jagadish
>>
>> =====================
>> Here is the script:
>>
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>>
>> begin
>>
>> ;-- INPUT-----------------
>>
>> ;input="noaa.slp.djf.abs.nc"
>> ;neval=10
>> ;type=1 ; 1=correlation matrix , 0=covariance matrix
>> ;output-> loading: out.load.nc
>> ; pc : out.pc.nc
>> ;------------------------
>>
>> f = addfile (input, "r")
>> p =f->$var$
>>
>> ; calculate the weights using the square root of the cosine of the
>> latitude and
>> ; also convert degrees to radians
>> lat=p&lat
>> wgt = sqrt(cos(lat*0.01745329))
>>
>> ; reorder data so time is fastest varying
>> pt = p(lat|:,lon|:,time|:) ; (lat,lon,time)
>> ptw = pt ; create an array with metadata
>>
>> ; weight each point prior to calculation.
>> ; conform is used to make wgt the same size as pt
>> ptw = pt*conform(pt,wgt,0)
>>
>> optEOF = True
>> optEOF_at_jopt = type ; correlation / covariance matrix
>> ; optEOF_at_pcrit = 85
>>
>> eof = eofunc_Wrap(ptw,neval,optEOF)
>> ts = eofunc_ts(ptw,eof,optEOF)
>> reof = eofunc_varimax_Wrap(eof, 1)
>> rts = eofunc_ts(ptw,reof,optEOF)
>>
>> ; output
>> system("rm out.load.nc")
>> eof!0="time" ; reformat dimension for grads
>> eof&time_at_units=p&time_at_units
>> reof!0="time"
>> reof&time_at_units=p&time_at_units
>> g = addfile("out.load.nc","c")
>> g->eof=eof
>> g->reof=reof
>>
>> pc=new((/1,1,neval,dimsizes(p&time)/),"double",-9999)
>> pc!0="lat"
>> pc&lat=0.0
>> pc&lat_at_units=p&lat_at_units
>> pc&lat_at_long_name=p&lat_at_long_name
>> pc!1="lon"
>> pc&lon=0.01
>> pc&lon_at_units=p&lon_at_units
>> pc&lon_at_long_name=p&lon_at_long_name
>> pc!2="lev"
>> pc&lev=ispan(1,neval,1)
>> pc&lev_at_units=""
>> pc&lev_at_long_name="pc"
>> pc!3="time"
>> pc&time=doubletoint(p&time)
>> pc&time_at_units=p&time_at_units
>>
>> pc(0,0,:,:)=(/ts/)
>> rpc=pc
>> rpc(0,0,:,:)=(/rts/)
>> pc_at_long_name="rotate pc"
>> pc_at_units=p_at_units
>> rpc_at_long_name="rotate pc"
>> rpc_at_units=p_at_units
>>
>>
>> system("rm out.pc.nc")
>> g = addfile("out.pc.nc","c")
>> g->pc=pc(time|:,lev|:,lat|:,lon|:)
>> g->rpc=rpc(time|:,lev|:,lat|:,lon|:)
>> system("cdo -s -r -f nc copy out.pc.nc foo.nc ; mv foo.nc out.pc.nc")
>>
>> end
>>
>>
>> ------------------------------------------------------------------------
>> *From:* Dave Allured <dave.allured_at_noaa.gov>
>> *To:* jagadish karmacharya <j_karmacharya_at_yahoo.com>
>> *Cc:* ncl-talk_at_ucar.edu
>> *Sent:* Tuesday, August 21, 2012 7:39 PM
>> *Subject:* Re: [ncl-talk] Assignment type mismatch
>>
>> Without seeing more of your script, I think this is what you want:
>>
>> ptw = pt ; make new array with all metadata
>> ptw = pt * conform (pt, tofloat (wgt), 0))
>>
>> The tofloat function could be inserted in three different places here,
>> to get the same effect. There are other ways to do this, but this way
>> is cleanest, I think. HTH.
>>
>> --Dave
>>
>> On Tue, Aug 21, 2012 at 10:46 AM, jagadish karmacharya
>> <j_karmacharya_at_yahoo.com <mailto:j_karmacharya_at_yahoo.com>> wrote:
>> > Hi,
>> >
>> > I have received a script to compute eof, which works fine on a
>> demonstation
>> > dataset. But when I attemped the same on my datasets it gave
>> following
>> > error:
>> >
>> > fatal:["NclVar.c":1376]:Assignment type mismatch, right hand side
>> can't be
>> > coerced to type of left hand side
>> > fatal:Execute: Error occurred at or near line 30 in file
>> denosing1.ncl
>> >
>> > The corresponding line of the script is as follows:
>> > ptw = pt*conform(pt,wgt,0)
>> >
>> > I found, in response to a query, that NCL is a "strongly typed
>> language", it
>> > will not allow a float variable
>> > on the left hand side to be over written with a variable of type
>> double and
>> > suggested solutoin was following:
>> > eof_ts = eof_ts/tofloat(sumWgt)
>> >
>> > When I tried the same for "ptw" on previous line ( i.e replaced
>> ptw = pt
>> > with ptw =tofloat(pt) ) the script runs OK but the trouble is
>> axes of the
>> > resulting file lacks latitude or longitude information.
>> >
>> > How can I solve the problem?
>> >
>> > Thanks in advance.
>> >
>> > Jagadish
>>
>>
>>
>>
>> _______________________________________________
>> ncl-talk mailing list
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>
>
>
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Aug 21 15:25:30 2012
This archive was generated by hypermail 2.1.8 : Thu Aug 23 2012 - 16:16:15 MDT