Чтение метеоданных при помощи Фортрана

Полезные ссылки:
Метеоцентр.Азия - наш сайт с высокодетализированными прогнозами погоды по пунктам Pоссии и мира
Облегчённая версия Метеоклуба (для смартфонов)

Чтение метеоданных при помощи Фортрана

 - Начало - Статистика - Pегистрация - Поиск -

МЕТЕОКЛУБ : независимое сообщество любителей метеорологии (Европа и Азия) : ФОРУМ О ПОГОДЕ И ПРИРОДЕ / Компьютерная техника и интернет в метеорологии / Чтение метеоданных при помощи Фортрана
Автор Сообщение
Dmitri
Участник

# Дата: 6 Дек 2011 10:58


Дан набор полей следующих метеопараметров в неформатированном файле:

FI - сглаженная орография (м)
Ts - температура подстилающей поверхности (К)
SN - высота снежного покрова (в единицах жидкой воды)
Ws - влагосодержание почвы
ZO - параметр шероховатости
ALB - альбедо подстилающей поверхности
Ps - приземное давление (мб)
T - 15 уровней температуры воздуха
U - 15 уровней зональной составляющей скорости ветра
V - 15 уровней меридиональной составляющей ветра
Q - 15 уровней отношения смеси
Z - 15 уровней вихря
D - 15 уровней дивергенции

Я пытался его открыть c помощью следующих операторов:

OPEN(1, FORM='UNFORMATTED', FILE='адрес')
ISTAT=0
! DO WHILE (ISTAT.EQ.0)
DO I=1, NX
DO J=1, NY
DO K=1, NZ
READ (1) SN(I,J,K)
PRINT *, SN(I,J,K)
END DO
END DO
END DO
CLOSE (1)

Нужно считать данные для статистического анализа. При выводе на экран виден ряд небольшой ряд чисел, в основном отрицательных и сообщение: end of file encountered. Помогите, пожалуйста

Shadow
Участник

Санкт-Петербург
# Дата: 6 Дек 2011 13:10


Dmitri

Нужно точно знать, в каком виде записан каждый параметр (это может быть real*8, real*4, Integer*2 и т.д.) Ведь файл бинарный?

То есть нужно знать длину (в байтах) каждой записи этого файла.
Потом можно сделать цикл, в котором будет стоять оператор Read с адекватными переменными, куда будут считываться ваши параметры.

Чтобы предотвратить ошибку end of file encountered в ФОРТРАНе в оператор READ добавляется ключ END:

1 Read(20, END=100) N,M,K
Write(*, '(3I4)') N.M.K
goto 1
100 Print 'Все прочитано!'


Dmitri
Участник

# Дата: 7 Дек 2011 11:08


1 Read(20, END=100) N,M,K
Write(*, '(3I4)') N.M.K
goto 1
100 Print 'Все прочитано!'


Выводиться сообщение: too many bytes read from unformatted record

Shadow
Участник

Санкт-Петербург
# Дата: 7 Дек 2011 13:04


Dmitri

Ну я вам дал фрагмент этой программы как пример, демонстрирующий, как использовать ключ END в операторе READ !
Разумеется, зачитать ваш файл, не зная его точной структуры (то есть тип каждого записанного туда параметра) не получится. Если вы раздобыли файл, то должно быть где-то точное описание его формата.

Dmitri
Участник

# Дата: 8 Дек 2011 10:12


Удалось выяснить вот что. Данные объективного анализа относятся ко всему земному шару. Организованы как сечения по широтам. Одна запись имеет структуру: BUF(4488)

4488 = (64 долготы + 2 резерв) * 68 элементов

Shadow
Участник

Санкт-Петербург
# Дата: 8 Дек 2011 14:05


Dmitri

Ну этого мало- нужно знать, какой тип данных используется для каждого элемента в записи.

Например:

FI - сглаженная орография (м) - это скорее всего real*4, а может быть и Integer*2
Ts - температура подстилающей поверхности (К) - скорее всего Integer*2

и т.д.

Кстати, если будет точно известен формат, то этот файл можно будет прочитать не только на ФОРТРАНЕ, но и на любом другом языке (C, C++, например).

Dmitri
Участник

# Дата: 8 Дек 2011 15:45


Лично меня интересует высота снежного покрова. По-видимому тип REAL*4.

Shadow
Участник

Санкт-Петербург
# Дата: 8 Дек 2011 15:51


Dmitri

меня интересует высота снежного покрова. По-видимому тип REAL*4.

Не факт. Для экономии могут использовать Integer*2 (если высота СП указана в целых сантиметрах). Хотя у них там в единицах жидкой воды. Что это вообще такое?

Dmitri
Участник

# Дата: 8 Дек 2011 15:56


Это данные объективного анализа наблюдений. Тип INTEGER здесь не используется

Dmitri
Участник

# Дата: 18 Дек 2011 07:43


Нашёл схожие данные в формате .nc(NetCDF). Пожалуйста, откликнитесь, у кого есть опыт работы с этим форматом

Dmitri
Участник

# Дата: 18 Дек 2011 07:43 - Поправил: Dmitri


...

Эта тема закрыта. Ответы больше не принимаются.
 


Поддержка: miniBB forum software © 2001-2026