Diagmanager является одним из наиболее важных модулей в гибкой системе моделирования. Исходники модуля доступны по адресу https://github.com/NOAA-GFDL/FMS/blob/master/diag_manager.

Основные строительные блоки диспетчера диагностики, необходимые для переноса вашей модели в FMS, показаны ниже:

use diag_manager_mod, only: diag_manager_init, diag_manager_end
use diag_manager_mod, only: get_base_date, DIAG_OTHER

Официальный репозиторий github говорит следующее о diag_manager

«diag_manager_mod — это набор простых вызовов для параллельной диагностики распределенных систем. Он ориентирован на запись данных в формате netCDF».

diag_manager основан на вводе-выводе, предоставляемом FMS, и может выводить данные в файлы netcdf в виде временных интервалов выборки/усреднения во время выполнения с помощью таблицы diag_table.

Ниже приведены шаги, которые необходимо выполнить при использовании diag_manager:

  • Первым шагом является создание диагностической таблицы, также известной как diag_table.
  • call diag_manager_init инициализирует diag_manager_mod
  • вызовите register_diag_field, чтобы зарегистрировать программную переменную/поле для вывода в файл данных
  • вызовите send_data для вывода данных
  • вызовите diag_manager_end, чтобы выйти из diag_manager

Ниже приведены возможности diag_manager.

  • Он может записывать до трехмерных массивов.
  • Он имеет возможность вывода усредненных по времени полей.
  • Он может выдавать необязательное предупреждение, если register_diag_field дает сбой, проверьте, не зарегистрировано ли конкретное поле дважды или нет ли повторяющихся записей/строк в диагностической таблице.
  • Поле вывода по умолчанию записывается в глобальной сетке, однако определенные регионы можно вывести с помощью send_data.
  • В diag_table для параметра debug_diag_manager должно быть установлено значение .true. чтобы проверить, нет ли ошибок в таблице diag_table
  • Используя diag_manager, можно указать только одно имя файла и добавить строку времени, чтобы повторно использовать одно и то же имя файла снова и снова. Пример строки файла в таблице diag_table:

файл%4yr%2mo%2dy%2hr%2mi%2sc, 2, часы, 1, часы, Время, 10, дни

В приведенной выше записи в таблице diag_table мы имеем слева направо имя файла, единицу выходной частоты, формат (всегда должен быть 1), единицу оси времени, имя оси времени, частоту для создания нового файла и единицу для создания нового файла.

Следовательно, эта запись будет выводить файл каждые 10 дней, а время будет записываться каждые 2 часа. mix_snapshot_average_fieldsnamelist указывает, следует ли брать среднее значение в конце time_bound или в середине, если для него задано значение .true. среднее значение за январь помечается как Feb01, а если оно равно .false (значение по умолчанию), то оно помечается как Jan16.

Можно указать, требуется ли моментальный снимок или среднее время полей.

Подпрограмма get_base_date в diag_manager возвращает базовую дату для диагностики. Он используется как

call get_base_date(year, month, day, hour, minute, second)

Здесь все аргументы выводятся из подпрограммы
DIAG_OTHER — целочисленный параметр, определенный в diag_data_mod, и его значение равно 0.