[ncl-talk] a question about assigning value mode?

Alan Brammer abrammer at albany.edu
Wed Oct 22 09:54:31 MDT 2014


As well as what Dennis said, if your question boils down to why would these
sets of lines produce different outputs


lon=new((/dims(2)/),float,"No_FillValue")
lon!0 = "lon"
lon=tofloat(slon)
print(lon(0)+" "+lon(539))
delete(lon)
lon=new((/dims(2)/),float,"No_FillValue")
lon!0 = "lon"
lon&lon=tofloat(slon)
print(lon(0)+" "+lon(539))


In the 2nd set you still haven't defined what lon is when you print, just
what it's coordinates are.  By telling new() to have no FillValue NCL seems
to fill the array with seemingly random numbers that may be close to zero.
I don't think many people would recommend initialising an array without a
_FillValue.  In the 2nd example if you were to go that way, you need to
also set lon=tofloat(slon)  or follow Dennis' cleaner method.

Also rearranging an array through nested do loops will be archaically
slow.  You'll be much better using the named convention like you have
commented out.



On Wed, Oct 22, 2014 at 10:20 AM, Dennis Shea <shea at ucar.edu> wrote:

> I have not looked carefully at your code.
>
> [1] The 'tofloat' function does *NOT* preserve meta data. The contributed
> function 'dble2flt' does preserve meta data.
>
>
> [2]
>
> 7   files = systemfunc("sh sortname.sh")
> 8   setfileoption("nc","Format","LargeFile")
> 9   fallvars = addfiles(files,"r")
> 10 ListSetType(fallvars,"cat")
> 11 runoff = fallvars[:]->runoff
>
> After line 11:
>
>   printVarSummary(runoff)                   ; <=== please look at this
>                                                             ; it should
> have all meta data
>
> FYI: NCL does not care if latitude/longitude/time are double
>
>   printVarSummary(runoff&latitude)    ; double with meta data (eg: units)
>   printVarSummary(runoff&longitude) ; double
>   printVarSummary(runoff&time)         ; double
>
>   LAT = runoff&latitude      ; save double
>   delete( runoff&latitude )   ; delete double values in coordinate array
> but not dimension name
>   runoff&latitude = dble2flt(LAT)
>
>   print(runoff&latitude)  ; <== should be type float
>
> Do similar things with longitude and time
>
>
>
>
>
> To change the double to float, you do not need to do all the steps you
>
> On Wed, Oct 22, 2014 at 4:09 AM, dyjbean at gmail.com <dyjbean at gmail.com>
> wrote:
>
>>
>> i'm processing merra-land daily production, the variable latitude and
>> longitude are both double.
>> the below is my code :
>>
>> +++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>> 2 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>> 3 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>> 4 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
>> 5
>> 6 begin
>> 7 files = systemfunc("sh sortname.sh")
>> 8 setfileoption("nc","Format","LargeFile")
>> 9 fallvars = addfiles(files,"r")
>> 10 ListSetType(fallvars,"cat")
>> 11 runoff = fallvars[:]->runoff
>> 12 slat = fallvars[:]->latitude(0:360)
>> 13 slon = fallvars[:]->longitude(0:539)
>> 14
>> 15 dims=dimsizes(runoff)
>> 16
>> 17 lat=new((/dims(1)/),float,"No_FillValue")
>> 18 lon=new((/dims(2)/),float,"No_FillValue")
>> 19 time=new((/dims(0)/),integer,"No_FillValue")
>> 20 srunoff=new((/dims(2),dims(1),dims(0)/),float,runoff at _FillValue)
>> 21
>> 22 lon!0="lon"
>> 23 lon at long_name="longitude"
>> 24 lon at units="degrees-east"
>> 25 lon=tofloat(slon)
>> 26 print(slon(0)+" "+slon(539))
>> 27 print(lon(0)+" "+lon(539))
>> 28
>> 29 lat!0="lat"
>> 30 lat at long_name="latitude"
>> 31 lat at units="degrees-north"
>> 32 lat=tofloat(slat)
>> 33
>> 34 time!0="time"
>> 35 time at long_name="time"
>> 36 time at units="days since 1980-1-1 0"
>> 37 time=yyyymm_time(1980,2013,"integer")
>> 38
>> 39 srunoff!0="lon"
>> 40 srunoff!1="lat"
>> 41 srunoff!2="time"
>> 42 srunoff&lon=lon
>> 43 srunoff&lat=lat
>> 44 srunoff&time=(/time/)
>> 45 srunoff at units = "kg.m-2.s-1"
>> 46 srunoff at long_name = "Overland runoff"
>> 47 ;srunoff=(/runoff(longitude|:,latitude|:,time|:)/)
>> 48 do i=0,dims(0)-1
>> 49 do j=0,dims(1)-1
>> 50 do k=0,dims(2)-1
>> 51 srunoff(k,j,i)=(/runoff(i,j,k)/)
>> 52 end do
>> 53 end do
>> 54 end do
>> 55
>> 56 printVarSummary(runoff)
>> 57 printVarSummary(srunoff)
>> 58 end
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
>> in the line 25,32,37, if i change them with the following fashion:
>>
>> lon&lon=tofloat(slon)
>> lat&lat=tofloat(slat)
>> time&time=yyyymm_time(1980,2013,"integer")
>>
>> then, the wrong result will generate from line 26 and 27,
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>
>> (0) -180 179.3333282470703
>> (0) -254807 0
>>
>> ......
>>
>> Variable: srunoff
>> Type: float
>> Total Size: 318142080 bytes
>> 79535520 values
>> Number of Dimensions: 3
>> Dimensions and sizes: [lon | 540] x [lat | 361] x [time | 408]
>> Coordinates:
>> lon: [-180..179.3333]
>> lat: [-90..90]
>> time: [-931605192..0]
>> Number Of Attributes: 3
>> long_name : Overland runoff
>> units : kg.m-2.s-1
>> _FillValue : 1e+15
>>
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>
>> if i change them with direct assignment, like the line 25,32,37,the right
>> result will appear
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> (0) -180 179.3333282470703
>> (0) -180 179.333
>>
>>
>> Variable: srunoff
>> Type: float
>> Total Size: 318142080 bytes
>> 79535520 values
>> Number of Dimensions: 3
>> Dimensions and sizes: [lon | 540] x [lat | 361] x [time | 408]
>> Coordinates:
>> lon: [-180..179.3333]
>> lat: [-90..90]
>> time: [198001..201312]
>> Number Of Attributes: 3
>> long_name : Overland runoff
>> units : kg.m-2.s-1
>> _FillValue : 1e+15
>>
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>
>> i want to know why the "lon&lon, lat&lat, time&time" style gave wrong
>> results?
>>
>> thanks
>> ------------------------------
>>  dyjbean at gmail.com
>>
>> _______________________________________________
>> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20141022/6ae60a4e/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bg.jpg
Type: image/jpeg
Size: 46225 bytes
Desc: not available
Url : http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20141022/6ae60a4e/attachment.jpg 


More information about the ncl-talk mailing list