[ncl-talk] NetCDF output file from NCL not opening in GrADS

Adam Phillips asphilli at ucar.edu
Fri Jul 7 09:41:40 MDT 2017


That line should be:
 fo->lat = in->lat(0:0)
(Note that the error message said that fn is not a valid file, alerting you
to the fact that fn is not a reference to a file.)

Again, you shouldn't need to add that line. I just put that in there to
show you that you can easily write a variable from one file to the next.

On Fri, Jul 7, 2017 at 8:59 AM, S Br <sbr.climate at gmail.com> wrote:

> Hi Adam,
> I tried to modify the code as below but I get some error for the line
> "fo->lat = fn->lat(0:0)"
>
> Variable: x
> Type: double
> Total Size: 8000 bytes
>             1000 values
> Number of Dimensions: 1
> Dimensions and sizes: [time | 1000]
> Coordinates:
>             time: [   0.. 999]
> Number Of Attributes: 4
>   lon :   0
>   lat :   0
>   _FillValue : -999000000
>   missing_value : -999000000
>
> Variable: xBPF
> Type: double
> Total Size: 8000 bytes
>             1000 values
> Number of Dimensions: 1
> Dimensions and sizes: [time | 1000]
> Coordinates:
>             time: [   0.. 999]
> Number Of Attributes: 5
>   _FillValue : -999000000
>   lon :   0
>   lat :   0
>   missing_value : -999000000
>   wgt_runave_op_ncl : wgt_runave_n
> fatal:(fn) not reference to a valid file
> fatal:["Execute.c":8575]:Execute: Error occurred at or near line 31 in
> file bandpass.ncl
>
> *The script is as below:*
> begin
>
>    fn  = "tas_aave_Asia.nc" ; define filename
>    in  = addfile(fn,"r")                                 ; open netcdf file
>     x  = in->tasmask(:,0,0)                          ; get data
>    printVarSummary(x)                                    ; x(time,lat,lon)
>
> ; ***********************************************
> ; create the filter weights and apply
> ; ***********************************************
>
>   ihp     = 2                             ; band pass
>   sigma   = 1.0                           ; Lanczos sigma
>
>   nWgt    = 201                           ; loose 100 each end
>   fca     = 1./100.                       ; start freq
>   fcb     = 1./30.                        ; last  freq
>   wgt     = filwgts_lanczos (nWgt, ihp, fca, fcb, sigma )
>   xBPF    = wgt_runave_n_Wrap ( x, wgt, 0, 0 )      ; 30-100 days
>   printVarSummary(xBPF)
>
> ; ***********************************************
> ; create new date array for use on the plot
> ; ***********************************************
>   filo = "tas_aave_Asia_bandpass30-100.nc"
>   system ("/bin/rm "+filo) ; remove any pre-existing file
>   fo = addfile(filo , "c") ; open output file
>   fo->lat = fn->lat(0:0)
>   fo->tasmask = xBPF                    ; write ud to a file
> end
>
>
>
> On Fri, Jul 7, 2017 at 3:33 PM, Adam Phillips <asphilli at ucar.edu> wrote:
>
>> One correction to Dennis' script:
>> use wgt_runave_n_Wrap instead of wgt_runave_n
>>
>> After applying the above, you should not need to do this, but note that
>> you can exactly copy variables from one file to another like so:
>> fn  = "tas_aave_Asia.nc" ; define filename
>> in  = addfile(fn,"r")
>> x  = in->tasmask(:,0:0,0:0)
>> .........
>> fo = addfile(filo , "c") ; open output file
>> fo->lat = fn->lat(0:0)     ; (0:0) needed in your case as you are
>> subsetting tasmask when reading it in
>>
>>
>> On Fri, Jul 7, 2017 at 8:19 AM, S Br <sbr.climate at gmail.com> wrote:
>>
>>> Hi Dennis,
>>> Thanks for modifying the code. Now, it easily read the time, lat and lon
>>> coordinate. However, still it couldn't generate the dimension and variables
>>> correctly in the output file. It would be nice, if NCL could generate the
>>> the variables and dimension similar to the input file.
>>>
>>> *Output file:*
>>>
>>> ncdump -h tas_aave_Asia_bandpass30-100.nc
>>> netcdf tas_aave_Asia_bandpass30-100 {
>>> dimensions:
>>> ncl0 = 1000 ;
>>> ncl1 = 1 ;
>>> ncl2 = 1 ;
>>> variables:
>>> double tasmask(ncl0, ncl1, ncl2) ;
>>> tasmask:_FillValue = -999000000. ;
>>> }
>>>
>>>
>>> *The variables and dimension in the input file is as given below.*
>>>
>>> dimensions:
>>> lon = 1 ;
>>> lat = 1 ;
>>> time = UNLIMITED ; // (1000 currently)
>>> variables:
>>> double lon(lon) ;
>>> lon:standard_name = "longitude" ;
>>> lon:long_name = "longitude" ;
>>> lon:units = "degrees_east" ;
>>> lon:axis = "X" ;
>>> double lat(lat) ;
>>> lat:standard_name = "latitude" ;
>>> lat:long_name = "latitude" ;
>>> lat:units = "degrees_north" ;
>>> lat:axis = "Y" ;
>>> double time(time) ;
>>> time:standard_name = "time" ;
>>> time:long_name = "Time" ;
>>> time:units = "years since 850-1-1 00:00:00" ;
>>> time:calendar = "standard" ;
>>> time:axis = "T" ;
>>> double tasmask(time, lat, lon) ;
>>> tasmask:_FillValue = -999000000. ;
>>> tasmask:missing_value = -999000000. ;
>>>
>>>
>>> Thanks.
>>> SB
>>>
>>>
>>> On Fri, Jul 7, 2017 at 2:20 PM, Dennis Shea <shea at ucar.edu> wrote:
>>>
>>>>    fn  = "tas_aave_Asia.nc" ; define filename
>>>>    in  = addfile(fn,"r")                                 ; open netcdf
>>>> file
>>>>     x  = in->tasmask(:,0:0,0:0)                   ; get data; avoid
>>>> elimination of degenerate dimension
>>>>     printVarSummary(x)                             ; x(time,lat,lon)
>>>> ; ***********************************************
>>>> ; create the filter weights and apply
>>>> ; ***********************************************
>>>>
>>>>   ihp     = 2                             ; band pass
>>>>   sigma   = 1.0                           ; Lanczos sigma
>>>>
>>>>   nWgt    = 201                           ; loose 100 each end
>>>>   fca     = 1./100.                       ; start freq
>>>>   fcb     = 1./30.                        ; last  freq
>>>>   wgt     = filwgts_lanczos (nWgt, ihp, fca, fcb, sigma )
>>>>   xBPF    = wgt_runave_n ( x, wgt, 0, 0 )      ; 30-100 days
>>>>   printVarSummary(xBPF)
>>>>
>>>> ***********************************************
>>>> ; create new date array for use on the plot
>>>> ; ***********************************************
>>>>   filo = "tas_aave_Asia_bandpass30-100.nc"
>>>>   system ("/bin/rm "+filo) ; remove any pre-existing file
>>>>   fo = addfile(filo , "c") ; open output file
>>>> *;;**filedimdef*
>>>> <http://www.ncl.ucar.edu/Document/Functions/Built-in/filedimdef.shtml>
>>>> (fo,"time",-1,True)       ; make 'time' unlimited
>>>>   fo->tasmax = xBPF                      ; write ud to a file
>>>>
>>>> On Fri, Jul 7, 2017 at 6:04 AM, gibies george <gibiesgeorge at gmail.com>
>>>> wrote:
>>>>
>>>>> But where is your original coordinate?
>>>>>
>>>>> On Jul 7, 2017 4:01 PM, "S Br" <sbr.climate at gmail.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>> Thanks for your reply. Now I reshaped the variable and put an
>>>>>> arbitrary lat/lon value. Still, I couldn't open the file in GrADS.
>>>>>>
>>>>>> I have checked the output file, it correctly reading the dimension
>>>>>> but may be wrong with variables.
>>>>>>
>>>>>> ncdump -h tas_aave_Asia_bandpass30-100.nc
>>>>>> netcdf tas_aave_Asia_bandpass30-100 {
>>>>>> dimensions:
>>>>>> time = UNLIMITED ; // (1000 currently)
>>>>>> lat = 1 ;
>>>>>> lon = 1 ;
>>>>>> variables:
>>>>>> double tasmaskn(time, lat, lon) ;
>>>>>> tasmaskn:_FillValue = -999000000. ;
>>>>>> int lat(lat) ;
>>>>>> int lon(lon) ;
>>>>>> }
>>>>>>
>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>
>>>>>> ; ***********************************************
>>>>>> ; create new date array for use on the plot
>>>>>> ; ***********************************************
>>>>>>   filo = "tas_aave_Asia_bandpass30-100.nc"
>>>>>>   system ("/bin/rm "+filo) ; remove any pre-existing file
>>>>>>   fo = addfile(filo , "c") ; open output file
>>>>>>   filedimdef(fo,"time",-1,True)       ; make 'time' unlimited
>>>>>>   tasmask=xBPF
>>>>>>   ntime = 1000
>>>>>>   nlat = 1
>>>>>>   nlon = 1
>>>>>>   tasmaskn = reshape(tasmask,(/ntime,nlat,nlon/))
>>>>>>   printVarSummary(tasmaskn)
>>>>>>   tasmaskn!0="time"
>>>>>>   tasmaskn!1="lat"
>>>>>>   tasmaskn&lat=nlat
>>>>>>   tasmaskn!2="lon"
>>>>>>   tasmaskn&lon=nlon
>>>>>>   fo->tasmaskn = tasmaskn ; write ud to a file
>>>>>> end
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Jul 7, 2017 at 8:45 AM, gibies george <gibiesgeorge at gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> The first step I told is to reshape "tasmask" using reshape
>>>>>>> function.
>>>>>>>
>>>>>>> Secondly what I told is to put some arbitrary lat-lon coordinate
>>>>>>> value.
>>>>>>>
>>>>>>> On 6 July 2017 at 16:29, S Br <sbr.climate at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Gibies,
>>>>>>>> Thanks for your reply. I have added as you suggested. I get some
>>>>>>>> error in the code. Do you think, I have done correctly.
>>>>>>>>
>>>>>>>> ; ***********************************************
>>>>>>>> ; create new date array for use on the plot
>>>>>>>> ; ***********************************************
>>>>>>>>   filo = "tas_aave_Asia_bandpass30-100.nc"
>>>>>>>>   system ("/bin/rm "+filo) ; remove any pre-existing file
>>>>>>>>   fo = addfile(filo , "c") ; open output file
>>>>>>>>   filedimdef(fo,"time",-1,True)       ; make 'time' unlimited
>>>>>>>>   tasmask=xBPF
>>>>>>>>   tasmask!0="time"
>>>>>>>>   tasmask!1="lat"
>>>>>>>>   tasmask&lat=*"lat" *
>>>>>>>>   tasmask!2="lon"
>>>>>>>>   tasmask&lon=*"lon"*
>>>>>>>>   fo->tasmask = tasmask ; write ud to a file
>>>>>>>> end
>>>>>>>>
>>>>>>>> I get the error as,
>>>>>>>>
>>>>>>>> fatal:Variable (tasmask) has (1) dimensions can not write to
>>>>>>>> dimension (1)
>>>>>>>> fatal:["Execute.c":8575]:Execute: Error occurred at or near line
>>>>>>>> 38 in file bandpass.ncl
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>> SB
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Jul 6, 2017 at 10:13 AM, gibies george <
>>>>>>>> gibiesgeorge at gmail.com> wrote:
>>>>>>>>
>>>>>>>>> I have seen those mails from Dr. Dennis and Dr. Adam.
>>>>>>>>>
>>>>>>>>> You can use reshape function to add additional coordinate to a
>>>>>>>>> variable. Define some single value coordinate for latitude and longitude.
>>>>>>>>>
>>>>>>>>> varname!0 ="time"
>>>>>>>>> varname!1 = "lat"
>>>>>>>>> varname&lat = .......
>>>>>>>>> varname!2 = "lon"
>>>>>>>>> varname&lon = ......
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Jul 6, 2017 2:08 PM, "S Br" <sbr.climate at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Gibies,
>>>>>>>>>> NCL also provided the same solution as you have mentioned.
>>>>>>>>>> Could you please tell me how can I add single value coordinates
>>>>>>>>>> (time, lat, lon) to the variable.
>>>>>>>>>> Hope, you can write me the command for me.
>>>>>>>>>>
>>>>>>>>>> Thanks.
>>>>>>>>>> SB
>>>>>>>>>>
>>>>>>>>>> On Wed, Jul 5, 2017 at 5:58 PM, gibies george <
>>>>>>>>>> gibiesgeorge at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Yes, you can add single value coordinates (time lat lon) to the
>>>>>>>>>>> variable before saving it to nc file.
>>>>>>>>>>>
>>>>>>>>>>> On Jul 5, 2017 9:58 PM, "S Br" <sbr.climate at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Is it possible to do something inside the NCL script so that it
>>>>>>>>>>>> can be opened by GrADS.
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Jul 5, 2017 at 5:25 PM, gibies george <
>>>>>>>>>>>> gibiesgeorge at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> This is because grads required standard file coordinates
>>>>>>>>>>>>> structure. Time lat lon etc.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Jul 5, 2017 9:43 PM, "S Br" <sbr.climate at gmail.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>> I have applied bandpass filter to my one dimentional NetCDF
>>>>>>>>>>>>>> file. I have written the output to a NetCDF file but this output file is
>>>>>>>>>>>>>> not opening in GrADS. I get the following error.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ga-> sdfopen tas_aave_Asia_bandpass30-100.nc
>>>>>>>>>>>>>> Scanning self-describing file:  tas_aave_Asia_bandpass30-100.
>>>>>>>>>>>>>> nc
>>>>>>>>>>>>>> gadsdf: SDF file has no discernable X coordinate.
>>>>>>>>>>>>>>   To open this file with GrADS, use a descriptor file with an
>>>>>>>>>>>>>> XDEF entry.
>>>>>>>>>>>>>>   Documentation is at http://cola.gmu.edu/grads/gado
>>>>>>>>>>>>>> c/SDFdescriptorfile.html
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Could you please suggest if I am doing somewhere wrong in my
>>>>>>>>>>>>>> NCL script . The input file is perfectly fine with GrADS.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 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
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    fn  = "tas_aave_Asia.nc" ; define filename
>>>>>>>>>>>>>>    in  = addfile(fn,"r")                                 ;
>>>>>>>>>>>>>> open netcdf file
>>>>>>>>>>>>>>     x  = in->tasmask(:,0,0)
>>>>>>>>>>>>>>     ; get data
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ; ***********************************************
>>>>>>>>>>>>>> ; create the filter weights and apply
>>>>>>>>>>>>>> ; ***********************************************
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>   ihp     = 2                             ; band pass
>>>>>>>>>>>>>>   sigma   = 1.0                           ; Lanczos sigma
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>   nWgt    = 201                           ; loose 100 each end
>>>>>>>>>>>>>>   fca     = 1./100.                       ; start freq
>>>>>>>>>>>>>>   fcb     = 1./30.                        ; last  freq
>>>>>>>>>>>>>>   wgt     = filwgts_lanczos (nWgt, ihp, fca, fcb, sigma )
>>>>>>>>>>>>>>   xBPF    = wgt_runave ( x, wgt, 0 )      ; 30-100 days
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    copy_VarMeta(x,xBPF)
>>>>>>>>>>>>>>    dNames= getvardims(xBPF)
>>>>>>>>>>>>>>    dSIZES=dimsizes(xBPF)
>>>>>>>>>>>>>>    print (dNames)
>>>>>>>>>>>>>>    print (dSIZES)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ; ***********************************************
>>>>>>>>>>>>>> ; create new date array for use on the plot
>>>>>>>>>>>>>> ; ***********************************************
>>>>>>>>>>>>>>   filo = "tas_aave_Asia_bandpass30-100.nc"
>>>>>>>>>>>>>>   system ("/bin/rm "+filo) ; remove any pre-existing file
>>>>>>>>>>>>>>   fo = addfile(filo , "c") ; open output file
>>>>>>>>>>>>>>   tasmax=xBPF(:)
>>>>>>>>>>>>>>   fo->tasmax = tasmax ; write ud to a file
>>>>>>>>>>>>>> end
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>> SB
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> ncl-talk mailing list
>>>>>>>>>>>>>> ncl-talk at ucar.edu
>>>>>>>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> ncl-talk mailing list
>>>>> ncl-talk at ucar.edu
>>>>> List instructions, subscriber options, unsubscribe:
>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>
>>
>> --
>> Adam Phillips
>> Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR
>> www.cgd.ucar.edu/staff/asphilli/   303-497-1726 <(303)%20497-1726>
>>
>> <http://www.cgd.ucar.edu/staff/asphilli>
>>
>
>


-- 
Adam Phillips
Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR
www.cgd.ucar.edu/staff/asphilli/   303-497-1726

<http://www.cgd.ucar.edu/staff/asphilli>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170707/9dca04bf/attachment.html 


More information about the ncl-talk mailing list