Скопируйте последний день месяца и добавьте его в конец в файле netcdf с помощью nco

Я работаю в nco и столкнулся с этой сложной проблемой. Мне нужно преобразовать 360-дневный календарь в обычный грегорианский календарь из 365 дней. В каландре на 360 дней в каждом месяце 30 дней. Моя идея заключалась в том, чтобы добавить один день к месяцу, который должен состоять из 31 дня в григорианском календаре, и убрать один или два дня с февраля (високосный или невисокосный год). Я знаю, как убрать дни (просто скопировав то, что вам нужно, в другой файл с помощью ncks).

Есть ли простой способ скопировать последний день определенного месяца и в конце добавить его к тому же месяцу?

Мои файлы хранятся в течение года с разрешением 3 часа, и я хочу работать с переменной tas (температура). Ниже я привел самую важную часть ncdump:

dimensions:
rlon = 424 ;
rlat = 412 ;
time = UNLIMITED ; // (2880 currently)

variables:
double rlon(rlon) ;
    rlon:standard_name = "grid_longitude" ;
    rlon:long_name = "longitude in rotated pole grid" ;
    rlon:units = "degrees" ;
    rlon:axis = "X" ;
double rlat(rlat) ;
    rlat:standard_name = "grid_latitude" ;
    rlat:long_name = "latitude in rotated pole grid" ;
    rlat:units = "degrees" ;
double time(time) ;
    time:standard_name = "time" ;
    time:units = "days since 1949-12-01 00:00:00" ;
    time:calendar = "360_day" ;
    time:long_name = "time" ;
    time:axis = "T" ;
float tas(time, rlat, rlon) ;
    tas:grid_mapping = "rotated_pole" ;
    tas:_FillValue = 1.e+20f ;
    tas:missing_value = 1.e+20f ;
    tas:standard_name = "air_temperature" ;
    tas:long_name = "Near-Surface Air Temperature" ;
    tas:units = "K" ;
    tas:coordinates = "lon lat height" ;
    tas:cell_methods = "time: point" ;

Я с нетерпением жду идей.


person David Halley    schedule 09.06.2017    source источник


Ответы (2)


Решил эту проблему более длинным методом. Сначала я разбил годовые файлы на месяцы. Для каждого месяца я добавлял и удалял необходимые дни, а затем объединял полученные месяцы.

Если у кого-то есть более быстрый метод, поделитесь

person David Halley    schedule 09.06.2017

Если данные за 360 дней хранятся в двенадцати ежемесячных файлах, вы можете использовать запись ncrcat append функция вместе с отрицательными индексами гиперпластинки для обратного отсчета от конца и добавления последней записи к самой себе.

ncrcat --rec_apn -d time,-1 in.nc in.nc

Обязательно сначала сделайте резервную копию ваших данных, так как это перезаписывает ввод.

person Charlie Zender    schedule 21.09.2017