Как сделать переменную времени непрерывной в файле принудительной климатологии netcdf? - PullRequest
1 голос
/ 02 ноября 2019

У меня принудительный файл климатологии NetCDF, который имеет 4 измерения: время, широта, долгота и лев. Я читаю этот файл, используя Гибкую систему моделирования (FMS) из GFDL. Я хочу сохранить время непрерывным или что-то вроде периодического граничного условия. Например, я должен предоставить только один год ежемесячный файл, и модель должна напрямую выбрать соответствующий месяц из моего файла без точной проверки конкретного года. Я выполняю некоторые эксперименты, в которых некоторые принудительные действия остаются фиксированными, а другие меняются (чтобы представить контекст, почему я хочу это сделать).

Ответы [ 2 ]

2 голосов
/ 02 ноября 2019

Вы можете использовать следующую команду nco для добавления атрибута по модулю к вашему измерению времени

ncatted -a modulo,time,c,c," " filename.nc
0 голосов
/ 04 ноября 2019

Вы можете создать файл 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 лет с фиктивными «поддельными» годами, которые затем легко читаются так же, как и другие файлы драйверов.

edit: Что касается обсуждения выше о високосных годах, то, очевидно, для ежемесячных данных это не проблема, но если вы хотите выполнить эту задачу с ежедневными данными, тогда с этим решением вы должны выбрать примерный год, которыйвисокосный год или вставьте фиктивный день для 29 февраля. Я также подозреваю, что приведенное выше решение по модулю страдает от проблемы високосного года применительно к ежедневному вводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...