Попытка прочитать файл ieee, созданный wgrid, с помощью фортрана. Я получаю странные записи

Я пытаюсь прочитать двоичный файл ieee, созданный wgrib. У меня есть куча файлов GRIB из центра ECMWF, и я конвертирую их в двоичный файл ieee. Я пытаюсь прочитать его с помощью фортрана, но никак не могу получить правильные значения (огромные значения для количества строк (Nlon) и столбцов (Nlat) сетки). Вот команды, которые я использую для создания файла ieee из строки DOS:

 'wgrib C:\gribs\IGD01211200012112001 -d 6 -ieee -big_endian IGD01211200012112001.bin   

А это команды фортрана

 open(12,file='IGD01211200012112001.bin',form='binary',status='old')
 read(12) Nlon
 read(12) Nlat

я тоже пробовал

 open(12,file='IGD01211200012112001.bin',access='stream')

но ничего не изменилось. Никаких улучшений при использовании open(12,file='IGD01211200012112001.bin',form='unformatted',status='old'), но если хорошо помнить, что последний использует некоторые отступы слева и справа от значений.

Я также пробовал играть с опциями -little_endian или -big_endian, ничего не меняется. Любое предложение? Я также пытался сохранить его как bin с флагом -bin вместо -ieee, но ничего не изменилось. На веб-сайте wrib ftp://ftp.cpc.ncep.noaa.gov /wd51we/wgrib/grib2ieee.txt сказано немного. Кое-что сказано здесь для wgrib2 http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/ieee.html, но это не очень помогает. Спасибо.


person Millemila    schedule 17.10.2014    source источник


Ответы (1)


Согласно документации на http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/index.html записываемый файл не соответствует вашим ожиданиям. Для вывода bin или ieee вы получите данные в одном из следующих форматов:

Binary and IEEE, no header

(grid 1)  (binary float value)        grid value
          (binary float value)
          ...
          (binary float value)        nx*ny values

(grid 2)  (binary float value)
          (binary float value)
          ...
          (binary float value)        nx*ny values
  
etc

or

Binary and IEEE, with header

(grid 1)  (binary integer)    nx*ny*sizeof(float)
          (binary float value)
          ...
          (binary float value)    nx*ny values
          (binary integer)    nx*ny*sizeof(float)

(grid 2)  (binary integer)    nx*ny*sizeof(float)
          (binary float value)
          ...
          (binary float value)    nx*ny values
          (binary integer)    nx*ny*sizeof(float)

Вы пытаетесь считать длины размеров перед сеткой, но это работает только в том случае, если вы укажете параметр вывода -text вместо двоичного формата или формата ieee.

person casey    schedule 17.10.2014