У меня есть принудительный файл климатологии NetCDF, который имеет 4 измерения, то есть время, широту, долготу и лев. Я читаю этот файл, используя гибкую систему моделирования (FMS) от GFDL. Я хочу, чтобы время было непрерывным или что-то вроде периодического граничного условия. Например, я должен предоставить месячный файл только за один год, и модель должна напрямую выбрать соответствующий месяц из моего файла без точной проверки конкретного года. Я провожу несколько экспериментов, в которых одни воздействия остаются фиксированными, а другие изменяются (чтобы объяснить, почему я хочу это сделать).
Как сделать переменную времени непрерывной в файле форсирования климатологии netcdf?
Ответы (2)
Вы можете использовать следующую команду nco, чтобы добавить атрибут по модулю к вашему измерению времени.
ncatted -a modulo,time,c,c," " filename.nc
Вы можете создать файл netcdf с одним и тем же годом, повторяющимся много раз, и отметкой времени, перезаписанной, чтобы получить «фиктивный» год, используя cdo. Допустим, в вашем примере файла netcdf "oneyear.nc" указано время для 2002 года, тогда как другие ваши "изменяющиеся" файлы охватывают годы с 1980 по 2010 (если я поймите ваш вопрос, некоторые переменные будут меняться из года в год, это всего лишь один конкретный файл, который вы хотите сохранить неизменным).
Затем вы можете создать набор файлов года с фиктивной отметкой времени таким образом.
for offset in $(seq -22 8) ; do
cdo shifttime,${offset}years oneyear.nc year${offset}.nc
done
и затем вы можете объединить их в один файл, используя время слияния:
cdo mergetime year*.nc mydriverfile.nc
mydriverfile.nc теперь должен содержать одни и те же ежемесячные данные, повторяющиеся в течение 30 лет с фиктивными «фальшивыми» годами, которые затем легко читать так же, как и другие ваши файлы драйверов.
редактировать: Что касается обсуждения выше о високосных годах, очевидно, что для месячных данных это не проблема, но если вы хотите выполнить эту задачу с ежедневными данными, то с помощью этого решения вы должны выбрать год выборки, который является високосным, или вставить фиктивный день для 29 февраля. Я также подозреваю, что приведенное выше решение по модулю страдает от проблемы високосного года при применении к ежедневному вводу.