[ncl-talk] binary file

Dave Allured - NOAA Affiliate dave.allured at noaa.gov
Fri Oct 9 16:21:36 MDT 2020


Oops, I see a mistake.  Earlier I said to use *fbinrecread*, but you used
*fbindirread*.  These do two different things.  Please use only
*fbinrecread*, including in instruction (1) that I just sent.


On Fri, Oct 9, 2020 at 4:11 PM Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:

> Debasish,
>
> (1)  Since you already know the dimensions of the 2-D array, save yourself
> some trouble and read the file directly into a new 2-D array by inserting
> the actual dimensions into the third argument of *fbindirread*.  Replace
> "-1" with (/nlat,mlon/), and remove the *onedtond* conversion.
>
> (2)  You have a plain binary file with no metadata.  NCL does not know the
> grid coordinates until you add them by one method or another.  This is why
> we prefer Netcdf files with metadata conveniently included.
>
> For one way to add coordinates, please see example 2 on the *Read binary
> data* example page.  In particular, notice the way that *fspan* is used
> to generate linear coordinate arrays.  You do not need to write a new
> Netcdf file like the example shows, but add lat and lon coordinate arrays
> before going to NCL plot functions.  Do you know what the coordinates are
> supposed to be?
>
> Use *printVarSummary* and *printMinMax* to evaluate your data array at
> different processing stages.  Use *printMinMax* to check that your data
> to plot is in the expected numeric range.  Also, missing value handling can
> be added if you think you might have missing values in the array.
>
>
> On Fri, Oct 9, 2020 at 3:21 PM Debasish Hazra <debasish.hazra5 at gmail.com>
> wrote:
>
>> Thanks Dave. When I use fbinrecread as shown below , I am still getting
>> warning and generated figure does not show any value.
>> setfileoption("bin","readbyteorder","littleendian")
>>  d1 = fbindirread("./Test/modelout.dat",0,-1,"float")
>>
>>            printVarSummary(d1)
>>            print(d1(0:100))
>>             nlat  = 384
>>            mlon  = 384
>>            UNDEF = -999.0
>>
>>            N1d   = dimsizes(d1)
>>             M1d   = N1d-(nlat*mlon)
>>            print("N1d="+N1d+"  M1d="+M1d)
>>
>>            x     = onedtond(d1(1:), (/nlat,mlon/))
>>            x at _FillValue = UNDEF                     ;
>>            printVarSummary(x)
>>           printMinMax(x,0)
>>
>>     Variable: d1
>> Type: float
>> Total Size: 589832 bytes
>>             147458 values
>> Number of Dimensions: 1
>> Dimensions and sizes:   [147458]
>> Coordinates:
>>
>> Variable: d1 (subsection)
>> Type: float
>> Total Size: 404 bytes
>>             101 values
>> Number of Dimensions: 1
>> Dimensions and sizes:   [101]
>> Coordinates:
>> (0)     8.265195e-40
>> (1)      0
>> .....[SNIP]
>>
>>
>> *(0)     N1d=147458  M1d=2warning:onedtond : output dimension sizes have
>> fewer elements than input, some data not copied*
>> Variable: x
>> Type: float
>> Total Size: 589824 bytes
>>             147456 values
>> Number of Dimensions: 2
>> Dimensions and sizes:   [384] x [384]
>> Coordinates:
>> Number Of Attributes: 1
>>   _FillValue :  -999
>> (0)     min=0   max=6.12579e-07,
>>
>> On Fri, Oct 9, 2020 at 2:55 PM Dave Allured - NOAA Affiliate <
>> dave.allured at noaa.gov> wrote:
>>
>>> That looks like fortran unformatted sequential format, not flat binary.
>>> Confirm by seeing if the first four bytes are 00 00 09 00, the same as the
>>> last four bytes that you showed.  This would be the record size as a
>>> little-endian 4-byte integer, which would be correct for this format.  This
>>> would also explain the 8-byte difference.
>>>
>>> Read in NCL with fbinrecread, not cbinread.  Please see the function
>>> docs and follow the prototype.
>>>
>>>
>>> On Fri, Oct 9, 2020 at 12:34 PM Rick Brownrigg via ncl-talk <
>>> ncl-talk at mailman.ucar.edu> wrote:
>>>
>>>> Well I don't think you want to read it as double, particularly not if
>>>> you are certain the dimensions are 384x384. I'm wondering if you can safely
>>>> ignore that last 8 bytes (and ignore the warning).  A quick plot would
>>>> reveal whether the data seem reasonable or definitely misaligned.
>>>>
>>>> RB
>>>>
>>>> On Fri, Oct 9, 2020 at 12:14 PM Debasish Hazra <
>>>> debasish.hazra5 at gmail.com> wrote:
>>>>
>>>>> Thanks Rick.Should I read it as double?
>>>>>
>>>>> On Fri, Oct 9, 2020 at 1:39 PM Rick Brownrigg <brownrig at ucar.edu>
>>>>> wrote:
>>>>>
>>>>>> Well, the math works out: 4x384x384=589824.  Further, the last 8
>>>>>> bytes of that file do not look like valid floating point values. They are:
>>>>>>
>>>>>>  00 00 00 00 00 00 09 00
>>>>>>
>>>>>> Do you have reason to believe the data is not being read correctly,
>>>>>> or are you mostly concerned about the warning message?
>>>>>>
>>>>>> BTW - the data are mostly zeros.
>>>>>>
>>>>>> Rick
>>>>>>
>>>>>>
>>>>>> On Fri, Oct 9, 2020 at 11:09 AM Debasish Hazra via ncl-talk <
>>>>>> ncl-talk at mailman.ucar.edu> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> I am trying to read binary file (attached in the email) through NCL
>>>>>>> and file size is 589832 bytes. I am reading it as float but it coming out
>>>>>>> to be 589824. I am not sure what needs to be done to read it.
>>>>>>>
>>>>>>>  setfileoption("bin","readbyteorder","littleendian")
>>>>>>>  d1 = cbinread("./Test/modelout.dat",(/4,384,384/),"float")
>>>>>>>
>>>>>>> warning:cbinread: The size implied by the dimension arrays is less
>>>>>>> that the size of the file.
>>>>>>>  Only the first 589824 contiguous bytes of the file will be read in.
>>>>>>> Note dimensions and values may not be aligned properly
>>>>>>>
>>>>>>> Any help on this is appreciated.
>>>>>>> Thanks
>>>>>>> Debasish
>>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20201009/a5955997/attachment.html>


More information about the ncl-talk mailing list