Система Grid Analysis and Display System (GrADS) - это интерактивный инструмент для удобного доступа, обработки и визуализации научных данных о Земле. GrADS имеет две модели данных - для данных на сетках и данных по станциям. GrADS знает много форматов, включая бинарные (потоковые или последовательные), GRIB (версий 1 и 2), NetCDF, HDF (версий 4 и 5) и BUFR (для данных по станциям). GrADS релизован для множества популярных платформ и свободно распространяется в Сети
GrADS использует 5-мерную схему для массивов данных: четыре измерения обычных, долгота, широта, вертикальный уровень и время, плюс еще одно необязательное измерение. Оно реализовано как общее (и Вы можете его употребить для своих надобностей), но предназначено для ансамблей. Данные распределяются по пятимерному массиву согласно описательному файлу. (На самом деле, массивы шестимерные, поскольку еще есть дискртеное измерение - отдельные переменные, например, температура и соленость или три компоненты вектора скорости - ИЧ). Сетки могут быть регулярные, с нелинейными промежутками, гауссовы, или переменного разрешения. Данные из разных наборов могут графически перекрываться, с корректным отображением во времени и пространстве. Операции проводятся интерактивно путем введения Фортран-подобных команд в командной строке. Богат набор встроенных функций, и можно добавлять свои внешние функци, написанные на любом языке.
Данные отображаются с помощью множества графических схем: линейные графики, столбцовые диаграммы, диаграммы рассеяния, сглаженные линии уровня, линии уровня с цветовой заливкой, линии тока, векторные поля, сетки и сетки с заливкой, а также графики станционных данных. Картинки сохраняются в Постскрипте или растровом формате. GrADS предоставляет геофизически интуитивные значения по умолчанию, однако пользователь способен управлять всеми ньюансами графического вывода.
GrADS имеет программируемый интерфейс (язык сценариев), позволяющий проводить изощренный анализ данных и разрабатывать графические приложения. Сценарии могут отрисовать кнопки и меню помимо собственно графики, и затем реагировать на действия пользователя. GrADS может работать в пакетом режиме, а программируемость позволяет решать емкие задачи "на всю ночь". [переведно с официального сайта - И.Ч.].
Простыми словами. Вы запускаете GrADS из командной строки и получаете командную строку самого градса плюс графическое окошко. Его лучше не загораживать - я сделал узкую полосу консоли внизу и окошко над ним. У Вас есть файл, куда записана, скажем, температура и соленость воды моря, среднемесячная, за год. 50 точек по долготе, 40 по широте, 16 уровней глубины. 12, стало быть, записей по времени. Две переменные. Ансамблевого измерения нет. В Фортране у нас массивы типа REAL (4-байтные, одинарная точность!) 50x40x16, мы каждый месяц записываем в последовательный бинарный файл температуру и соленость. Все это надо сообщить градсу - через описательный файл с расширением ctl. Там указано имя файла, число точек по долготе и широте и шаг, то же со временем (в стиле минута-час-день-месяц-год), сетка уровней, имена переменных - пусть T и S. Еще undef - значение, которое маркирует отсутствующее значение. Вещь полезная - позволяет исключить точки, попадающие на сушу, а также те, что лежат ниже дна. Примеров - масса. В командной строке пишете open имя ctl-файла. Если все хорошо, вам доложат: долгота от и до, широта от и до, уровень ноль, время - самое первое. Можете что-то поменять, например set time 00:00Z15may1978 Теперь рисуем. d T - рисует линии уровня температуры. Я делаю обычно так: сначала set gxout shaded - это линии уровня с заливкой. Теперь d T - нарисовал. set gxout contour - линии уровня с подписями. d T - поверх. Перед тем полезно для нас, северян, поменять проекцию: set mproj scaled - чтобы море было квадратное, а не вытянутое, градус долготы-то у нас мелкий. Предыдущую картинку сотрем - clear или просто c. Нравится - сохраняем: enable print buf - печатаем в Постскрипт в файл buf; print - собственно, акт сохранения; disable print - отключились. Теперь можно перегнать buf в EPS специальной утилитой.
Собственно, все здесь. На английском, правда, но все понятно и учебник есть. Вот еще ресурс
Может, потом и я размещу немного примеров для тех, кто по-английски не умеет.
Самые основы GrADS
Запускаем grads из командной строки: grads . В командном окне теперь приглашение GrADS, а еще появляется окошко, в которое выводится графика. Файл в формате netCDF открываем командой sdfopen - если все правильно, он открывается и нам доступны все описанные переменные. Стандартные измерения - lon, lat, lev, time. Есть еще ансамбль, но я им пока не пользовался. Изначально они как-то установлены, обычно долгота и широта имеют диапазон, уровень нулевой, время - самое первое. Можно задавать эти значения: set lon 34 41.2
set lat 67
set lev 0 100
Время задается хитрее: set time 00:00Z10may1978 - время в часах и минутах, потом номер дня в месяце, потом три буквы месяца, и год. Но можно и просто set time jul - если, например, в файле данные по месяцам.
Если диапазон задан для двух измерений, рисуется карта. Если дли одного - график. Собственно рисует команда draw или сокращенно d . Например, d T рисует переменную T . Стиль отрисовки задается параметром gxout. set gxout contour - линии уровня, shaded - они же, но с заливкой, vector - векторное поле (после d указываем пару переменных через точку с запятой, а можно и три - тогда третья определяет цвет стрелочек), stream - линии тока (к которым векторное поле касательно). Примеры:
set gxout shaded
d T
set gxout contour
d T
set gxout stream
d u;v;mag(u,v)
set gxout vector
d u;v;mag(u,v)
Функция mag вычисляет длину вектора. Множество параметров детализирует отрисовку линий уровня (шаги, максимальное и минимальное значение и т.п.), векторных полей, контура моря (грубый, средний, точный), проекции (mproj, значение scaled рисует реальные градусы, в отличие от значения по умолчанию, в котором градусы по осям одинаковые - плохо для северных широт) и т.п.
Команда clear, она же c, очищает окошко. Без нее карты накладываются одна на другую - это полезно, как в примерах выше, для прорисовки одних и тех же данных разными способами, но неуместно при рисовании различных полей.
close 1 - закрывает файл номер один. Если открыто более одного файла, закрывать нужно с конца списка.
enable print файл - открывает "принтер" в данный файл. Затем можно "напечатать" текущий рисунок туда: print и затем закрыть устройство disable print .
В Постскрипт, точнее, в EPS, этот файл конвертируется утилитой gxeps, которая принимает ряд параметров. Описывать я их не буду, а просто приведу форму, которой пользуюсь сам: gxeps -a -o файл.eps файл
Команда printim печатает картинку в растровый файл. Например, printim файл.jpg jpeg x1500 y1000 . Поодерживается jpeg, gif, png... а что еще надо? Растры удобны для склейки в анимацию. Для этого отлично подходит стандартная утилита Linux: convert. Она вообще много чего может делать с графикой, но вот как делать мультики:
convert -delay 20 -loop 0 T1953??.jpg T1953.gif
Задана задержка между кадрами, отключена зацикленность, указаны файлы и файл-результат.
Этого уже достаточно, чтобы начать рисовать. Но потом захочется автоматизировать действия. Для этого можно писать скрипты GrADS. Дело нехитрое: команды GrADS на отдельных строках, заключены в апострофы: 'd T'. Команды системы можно вызывать через восклицательный знак (и из GrADS тоже): !ls *.nc. Параметры извне передавать можно, но неочевидным образом. В документации я этого не нашел, только в примерах где-то, раскрываю секрет на примере:
function main(file)
'sdfopen ' file
'c'
'set time aug'
'd T'
То есть скрипт - это функция. Если бы имя файла было раз навсегда задано, то его бы указали после sdfopen в апострофах и все, функция не нужна; но так скрит - это фукнция, у нее есть параметр - это и есть параметр скрипта. Теперь можно рисовать поля температуры августа просто: dT T1978 - при условии, что скрипт сохранен в файл dT.gs. Расширение gs игнорируется GrADS, а если другое - то его надо указывать.
Вообще скриптовый язык довольно мощный, есть переменные, арифметика, циклы и условия, работа со строками, можно рисовать кнопки и другие GUI-ки. Но мне достаточно просто пакетировать команды и элементарные параметры типа имени файла. Разумеется, существует интерфейс Перла к GrADS, так что сложные скрипты надо писать там.
Некоторые функции: sum - сумма полей по измерению, например - по уровню; ave - усреднение по измерению, aave - усреднение по поверхности, const - заполняет участок сетки константой, maskout - заполняет участок сетки UNDEF, так что данные не отрисовываются; skip - пропускает данные через один, полезно для разрежения стрелочек на векторных полях; основные элементарные функции - тригонометрия, логарифм+экспонента, корень.
Параметры задаются оператором set: set mproj scaled . Полезные параметры: mproj - проекция, latlon (по умолчанию), scaled и еще ряд значений; gxout - способ отрисовки, contour, shaded, vector, stream и т.д.