Найти в Дзене
Блокнот математика

Станционные данные в GrADS

Привет, коллеги. Про рисовалку GrADS я уже рассказывал. Сайт, на котором она лежит и где ее документация, недоступен (санкции?), но есть альтернатива. Сегодня расскажу, как наносить на карту станционные данные. Станцией в океанологии называют точку, в которой сделаны измерения. Есть ещё станции в смысле "жилище исследователя в интересном месте", например, станция "Восток" в Антарктиде, станция "Северный Полюс" или Международная космическая станция. Есть ещё радиостанция, станция метро или на железной дороге и может быть что-то ещё. Перегруженное слово, что и говорить. Пользуясь случаем, упомяну ложного друга la stanza: это комната по-итальянски, но не всякая, а такая красивая, для гостей. Есть ещё la camera, это тоже комната, например спальня. В Ватикане не станции! Там залы, le stanze. Градс позволяет рисовать поля температуры и другие по данным из файла. Данные могут просто лежать в формате REAL, 4 байта на число с плавающей точкой. Но тогда нужен описатель: текстовый файл, в котором

Привет, коллеги. Про рисовалку GrADS я уже рассказывал. Сайт, на котором она лежит и где ее документация, недоступен (санкции?), но есть альтернатива. Сегодня расскажу, как наносить на карту станционные данные.

Станцией в океанологии называют точку, в которой сделаны измерения. Есть ещё станции в смысле "жилище исследователя в интересном месте", например, станция "Восток" в Антарктиде, станция "Северный Полюс" или Международная космическая станция. Есть ещё радиостанция, станция метро или на железной дороге и может быть что-то ещё. Перегруженное слово, что и говорить.

Пользуясь случаем, упомяну ложного друга la stanza: это комната по-итальянски, но не всякая, а такая красивая, для гостей. Есть ещё la camera, это тоже комната, например спальня. В Ватикане не станции! Там залы, le stanze.

Градс позволяет рисовать поля температуры и другие по данным из файла. Данные могут просто лежать в формате REAL, 4 байта на число с плавающей точкой. Но тогда нужен описатель: текстовый файл, в котором указаны размеры трехмерного массива, число записей по времени, маркер отсутствующих данных, которые рисовать не надо (суша, например), число собственно полей и их имена.

А часто бывает надо сравнить посчитанное и нарисованное поле с измерениями. Теми самыми станциями. Файл со станционными данными гидрологи дают, это таблица: там дата и время, идентификатор станции, координаты станции и вертикальный ряд наблюдений в виде глубина-значение.

Можно ограничиться пока только поверхностью моря и только суткаии. Тогда у нас идентификатор, дата, координаты и измеренное значение.

И хотелось бы в нужном месте поставить это число на фоне цветной карты распределения температуры воды, скажем.

Это можно, но требует некоторой подготовки. Сначала нужно переписать эти текстовые данные в двоичный файл. Это несложно: читаете из своей текстовой таблицы строку за строкой и записываете то же в двоичном формате в другой файл. Для этого надо написать программку на фортране или другом языке, умеющем писать двоичные данные в файл. Большинство языков это умеет, главное, чтобы умели вы. Но программку такую вы делаете один раз. В доке Градс есть пример.

Сначала идет заголовок. Там должны быть записаны такие данные:

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

Время позволяет указать смещение станции относительно расписания. Скажем, если данные снимаются ровно в полдень, то это нуль, а вот если опоздали и сняли в 12:15, то там будет 0.25. Для моих задач допустимо округлить всё до суток, так что я пишу туда всегда нуль.

После заголовка могут идти поверхностные данные (в этом случае флаг должен быть 1, а за ними объемные, уровень за уровнем; или сразу объемные (флаг 0). Про объемные я писать не буду, см. доку. У меня флаг 1, число уровней 1.

Потом идут просто подряд вещественные числа: поверхностные переменные, измеренные на станции.

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

Важно: в документации не сказано, что такой разделитель должен идти перед первой записью!

В общем, для простоты можно начать с такого игрушечного примера.

  1. Записать в файл 'station1', 60.0, 36.0, 0.0, 0, 1
  2. Это разделитель, так как число полей 0 (выделено жирным).
  3. Записать в файл 'station1', 60.0, 36.0, 0.0, 1, 1
  4. Это заголовок. Теперь запишем, например, три числа: 42.0, 666.666, 3.14
  5. И в конце поставим еще один разделитель.

Двоичный файл станционных данных готов.

Теперь надо создать описательный файл, аналогичный тем, что мы делаем для полей. Новое там - это STNMAP file.map для указания ещё одного файла, который создает идущая в поставке утилита stnmap. Она по файлу с данными и по его описателю создает какой-то файл, позволяющий находить данные более эффективно. Когда у вас тысячи станций, это может быть важно. Утилите надо указать файл-описатель, по нему она разберется, где файл с данными и какая у него структура.

Вот пример описателя:

DSET ^station_data_sample.dat
DTYPE station
STNMAP station_data_sample.map
UNDEF -999.0
TITLE Station Data Sample
TDEF 10 linear 12z18jan1992 12hr
VARS 1
t 0 99 Surface Temperature
ENDVARS

После имени переменной должен быть либо 0 (поверхностные данные) или 1 (по уровням). Второе число всегда 99. Описание произвольно.

Потом открываете описатель как обычно:

open mystations.ctl

И, выставив время, рисуете что хотите. Градс поставит в нужных местах маленькие числовые меточки. Как на рисунке.

Удачи, коллеги.

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022