Re: ncl_convert2nc: filetype 'dat' not supported.

From: Dennis Shea <shea_at_nyahnyahspammersnyahnyah>
Date: Tue Jun 25 2013 - 08:17:18 MDT

The error message is telling you exactly what is wrong and the
approximate line where the error occurred:
     x&time = time

--
 > fatal:Coordinate variables must be the same dimension as their dimension
 > fatal:No coordinate variable exists for dimension (time) in variable (x)
 > fatal:["Execute.c":8126]:Execute: Error occurred at or near line 44
--
You read the file by specifying:
     ntim = 16314
Then you generated a 'time' array via
     time = yyyymmdd_time(1958, 2002, "integer")
If you do a
     printVarSummary(time)
you would see that
     time is size 16436 .....  not 16314. A size mismatch.
Your code does
     x&time = time
The 0-th dimension of 'x' is size 16314. So you are trying
to place and array of size 16436 into a 'space' expecting
16314 elements.
It is the user responsibility to make sure the times
and sizes are correct.
Always use 'printVarSummary' when debugging code.
==
Why do you have
     x&time@units = "hours since 1958-01-01 00:00:00"
This is not correct. The 'time' generated by function
'yyyymmdd_time' has units yyyymmdd.
If you want a time variable with units like 'time since ..."
you will have to use the cd_inv_calendar function.
attached is a script
On 6/25/13 3:26 AM, Erika Folova wrote:
> Dear  NCL,,
>
> I have already created a simple script to convert my binary file into
> *nc. Please find in the attachment. However, I still find this error:
>
> fatal:Coordinate variables must be the same dimension as their dimension
> fatal:No coordinate variable exists for dimension (time) in variable (x)
> fatal:["Execute.c":8126]:Execute: Error occurred at or near line 44
>
> but i have no clue in which part I made a mistake.
> I really appreciate for your help to look at my code.
>
> -- Erika
>
>
>
>
> On Mon, Jun 24, 2013 at 11:30 PM, Erika Folova <e.folova@gmail.com> wrote:
>
>> Thank you for the suggestion,
>>
>> I have already done up to this part:
>>
>> ncl 3> x = fbindirread("ERA40Tzm.dat", 0, (/16314,23,37/),"float" )
>> ncl 4> print(x)
>>
>>
>> Variable: x
>> Type: float
>> Total Size: 55532856 bytes
>>              13883214 values
>> Number of Dimensions: 3
>> Dimensions and sizes: [16314] x [23] x [37]
>> Coordinates:
>> (0,0,0) 251.9242
>> (0,0,1) 256.8282
>> (0,0,2) 252.724
>> (0,0,3) 256.3188
>> (0,0,4) 250.3797
>> (0,0,5) 246.536
>> (0,0,6) 257.7312
>> (0,0,7) 244.2843
>> (0,0,8) 242.4533
>> (0,0,9) 243.5882
>> (0,0,10) 251.3775
>> (0,0,11) 255.2279
>> (0,0,12) 246.0551
>> ncl 5>   x@long_name = "..."
>> ncl 6>   x@units     = "..."
>> ncl 7>
>> ncl 8>   x!0 = "time"
>> ncl 9>   x!1 = "lev"
>> ncl 10>   x!2 = "lat"
>> ncl 11>
>> ncl 12>   x@long_name = "Temperature"
>> ncl 13>   x@units     = "K"
>> ncl 14>   x!0 = "time"
>> ncl 15>   x!1 = "lev"
>> ncl 16>   x!2 = "lat"
>>
>> now a bit confused to determine th array of times, levels and latitude,
>> is there any examples or do i have to determine by myself (?).
>>
>>    x&time = ... array of times ...
>>    x&lev  = ... levels ...
>>    x&lat  = ... .....
>>
>>
>> thank you,
>>
>> - Erika,
>>
>>
>> On Tue, Jun 25, 2013 at 6:19 AM, Dennis Shea <shea@ucar.edu> wrote:
>>
>>> The nc could be created via:
>>>
>>>    x@long_name = "..."
>>>    x@units     = "..."
>>>
>>>    x!0 = "time"
>>>    x!1 = "lev"
>>>    x!2 = "lat"
>>>
>>> Ideally,
>>>
>>>    x&time = ... array of times ...
>>>    x&lev  = ... levels ...
>>>    x&lat  = ... .....
>>>
>>> Then use Method 1 at:
>>>
>>> http://www.ncl.ucar.edu/**Applications/o-netcdf.shtml<http://www.ncl.ucar.edu/Applications/o-netcdf.shtml>
>>>
>>>
>>>
>>> On 6/24/13 3:11 PM, Dennis Shea wrote:
>>>
>>>> Reading binary can be a hassle because several factors
>>>> need be explicitly know.
>>>>
>>>> The data provider (eg, whoever created the original file)
>>>> should state if the file was generated on a 'big-endian' or
>>>> 'little-endian' machine. Further, was the data written as
>>>> a flat binary file or via a fortran sequential write
>>>> statement. If the latter is true, the fortran embeds
>>>> 'hidden' record separators that result in the file
>>>> being slightly larger than is expected.
>>>>
>>>> ===
>>>> ncl 0> nlat = 37
>>>> ncl 1> klev = 23
>>>> ncl 2> ntim = 16314
>>>> ncl 3> bytes = ntim*klev*nlat*4   ; 4 is 4 bytes per float
>>>> ncl 4> print(bytes)
>>>>
>>>> Variable: bytes
>>>> [snip]
>>>> Coordinates:
>>>> (0)     55532856
>>>>
>>>> This matches the size of your file:
>>>>
>>>> 55532856 Jun 24 14:48 ERA40Tzm.dat
>>>>
>>>> Hence, it is a flat binary file. This means either
>>>> fbindirread or cbinread can be used to read the file.
>>>>
>>>> ==============================**================
>>>> Next, what endian are associated with the binary values?
>>>>
>>>> Try:
>>>> ncl 5> x = fbindirread("ERA40Tzm.dat", 0, (/16314,23,37/) )
>>>> ncl 6> print(x)
>>>>
>>>> If the numbers look good ... then you have
>>>> successfully read the binary file.
>>>>
>>>> Note it could also be: (/16314,37,23/) but this is less common.
>>>> ==============================**===================
>>>>
>>>> If the numbers do not look realistic, it likely means the file
>>>> was created on a different system than you are using.
>>>>
>>>> EG: if you are on a big-endian system then use
>>>> setfile option to tell NCL to switch the bytes:
>>>>
>>>> setfileoption("bin","**ReadByteOrder","LittleEndian")
>>>>
>>>> Please red:
>>>> http://www.ncl.ucar.edu/**Document/Functions/Built-in/**
>>>> setfileoption.shtml<http://www.ncl.ucar.edu/Document/Functions/Built-in/setfileoption.shtml>
>>>>
>>>> Good luck
>>>>
>>>>
>>>>
>>>> On 06/24/2013 02:45 PM, Erika Folova wrote:
>>>>
>>>>> I forgot to mention that
>>>>> the timestep of the data is daily from 1958 to 2002.
>>>>> in total ntime = 16314
>>>>>
>>>>> I look forward to your response,
>>>>>
>>>>> -- Erika
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Jun 25, 2013 at 5:42 AM, Erika Folova <e.folova@gmail.com
>>>>> <mailto:e.folova@gmail.com>> wrote:
>>>>>
>>>>>       Hi Everyone,
>>>>>
>>>>>       I need a bit help,
>>>>>       I have  a binary data *.dat with dimendsions (lat, level, time),
>>>>>
>>>>>       nlat =37
>>>>>       nlevel=23
>>>>>       ntime= 16314
>>>>>
>>>>>       the latitude extending from equator (0) to 90oN (only northern
>>>>>       hemisphere).
>>>>>       I have been strugling to convert this *binary file to *nc*,
>>>>>       but was still failed,, I really appreciate if anyone willing to
>>>>> help
>>>>>       me for this case,
>>>>>       I put the data in ftp cd incoming by name:
>>>>>
>>>>>       *ERA40Tzm.dat*
>>>>>       *
>>>>>       *
>>>>>       Thank you so much,
>>>>>       -- Erika,
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ______________________________**_________________
>>>>> ncl-talk mailing list
>>>>> List instructions, subscriber options, unsubscribe:
>>>>> http://mailman.ucar.edu/**mailman/listinfo/ncl-talk<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<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 Jun 25 08:17:27 2013

This archive was generated by hypermail 2.1.8 : Mon Jul 01 2013 - 12:35:42 MDT