Рассчитайте накопление за 3 декады на основе данных декады в netCDF

У меня есть декада осадков от CHIRPS в netCDF: https://data.chc.ucsb.edu/products/CHIRPS-2.0/global_dekad/netcdf/

Данные за 1 декаду в формате NC рассчитаны на 1 год, т.е. chirps-v2.0.1981.dekads.nc Затем я объединяю все файлы nc в один nc ncrcat *.nc merge.nc

Наконец, я хотел бы рассчитать накопление осадков за 3 декады (результат будет равен ежемесячному накоплению) по данным за декады, с накоплением за декады. Например:

rain1981.01.1 + rain1981.01.2 + rain1981.01.3
rain1981.01.2 + rain1981.01.3 + rain1981.02.1
rain1981.01.3 + rain1981.02.1 + rain1981.02.2
...
rain2019.12.1 + rain2019.12.2 + rain2019.12.3

Как это сделать с помощью CDO или NCO?


person user97103    schedule 07.07.2020    source источник
comment
Уточните, пожалуйста, что именно вы рассчитываете. Вы хотите рассчитать ежемесячную стоимость или скользящую статистику?   -  person Robert Wilson    schedule 07.07.2020
comment
Месячное количество осадков   -  person user97103    schedule 07.07.2020
comment
Пожалуйста, перепишите свой исходный вопрос. Что ты на самом деле хочешь делать? Это похоже на то, как будто вы хотите рассчитать ежемесячную сумму, а затем перезаписать третий временной шаг в каждом месяце этой ежемесячной суммой. Это верно?   -  person Robert Wilson    schedule 07.07.2020
comment
Просто решаю проблему кстати, решение напишу. Спасибо, что ответили на мой вопрос.   -  person user97103    schedule 07.07.2020


Ответы (1)


Я только что нашел решение своего вопроса. Вот шаг с использованием CDO.

  • Обрежьте все загруженные файлы NC, используя ограничивающую рамку: for fl in *.nc; do cdo sellonlatbox,94,145,-12,7 $fl clip"_"$fl; done
  • Объедините все обрезанные файлы NC, используя: cdo mergetime clip_*.nc timeseries.nc
  • Рассчитать ежемесячное накопление: cdo runsum,3 input.nc output.nc

Выходные данные будут производить накопление осадков за 3 декады с информацией о времени YYYY.MM.DD, а DD имеют только значения 1,11 и 21 на основе исходных входных данных. Последний шаг, я хотел бы извлечь его в 3 файла разницы (extract1.nc, extract11.nc и extract21.nc). Я использовал эту формулу: cdo selday,1 input.nc output.nc Измените значение 1 на 11 или 21 для следующего расчета.

person user97103    schedule 07.07.2020
comment
Измените и свой вопрос, и ответ, чтобы он имел ценность для других пользователей. Ни из вашего вопроса, ни из вашего ответа неясно, чего вы пытаетесь достичь. Если вам нужна ежемесячная сумма, вам просто нужно использовать monsum в cdo. - person Robert Wilson; 07.07.2020
comment
Да, я хочу рассчитать ежемесячную сумму, но с использованием декадных данных и прокатки. Я не уверен, что monsum - правильный инструмент, если данные rain1981.01.3, rain1981.02.1, and rain1981.02.2, как описано в примере выше. - person user97103; 07.07.2020
comment
Как я уже сказал, вам нужно прояснить вопрос. Если вам нужна ежемесячная сумма, нет причин для расчета скользящей суммы. Все, что вам нужно сделать, это сложить 3 числа вместе. - person Robert Wilson; 07.07.2020
comment
Вопрос все еще сбивает с толку. Если вам нужна ежемесячная сумма, вам не нужно рассчитывать скользящую статистику. Вопрос также по-прежнему вызывает впечатление, что вы хотите изменить исходные данные. - person Robert Wilson; 07.07.2020
comment
Привет, извините, я не умею писать вопрос, не могли бы вы помочь мне отредактировать его, чтобы он был понятен всем? - person user97103; 07.07.2020
comment
Как я уже сказал, мне непонятно, чего вы на самом деле пытаетесь достичь. Вы не объяснили, почему вы рассчитываете скользящие суммы, хотя, кажется, нет причин для этого. Если вам нужно только посчитать ежемесячную сумму, просто спросите об этом. - person Robert Wilson; 07.07.2020