вычитание переменных в двух разных файлах netcdf

У меня есть два файла netcdf: нисходящее излучение с именем rsds.nc и ограниченное излучение с именем rsns.nc. rsds.nc содержит переменную с именем rsds, а rsns.nc содержит переменную с именем rsns. Теперь я хотел бы получить излучение апвеллинга rsus.nc путем вычитания переменных в пределах rsds.nc и rsns.nc соответственно.

Я пробовал следующие методы:

ncdiff rsds.nc rsns.nc rsus.nc
ncbo op_typ=diff rsds.nc rsns.nc rsus.nc

Все они создали rsus.nc, но переменная rsus в этом файле отсутствует. Есть идеи, почему это так?


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


Ответы (3)


В качестве альтернативы ответу @ RichSignell вы можете объединить переменные в один файл и использовать ncap2 для выполнения вычитания без переименования переменных.

ncks -A rsns.nc rsds.nc 
ncap2 -s 'rsus=(rsds-rsns)' rsds.nc rsus.nc
person N1B4    schedule 05.01.2017

Когда вы ncdiff два файла, работают только с переменными с одинаковыми именами. Таким образом, одним из решений было бы просто переименовать переменную в одном из файлов, чтобы она была такой же. Например, попробуйте это:

ncrename -v rsds,rsns rsds.nc
ncdiff rsds.nc rsns.nc rsus.nc
person Rich Signell    schedule 04.01.2017
comment
Да, я согласен с этим. Но я надеялся, что у кого-то есть идея, как это сделать, не пытаясь изменить имя переменной. Спасибо, Рич! - person David Halley; 04.01.2017

Альтернативное решение CDO.

Подкоманда cdo может сделать это в одной строке:

cdo sub rsds.nc rsns.nc rsus.nc

Вы получите предупреждение

cdo sub (Предупреждение): входные потоки имеют разные параметры!

Но вы можете игнорировать это. Обратите внимание, что вы можете изменить имя переменной на более подходящее, поэтому вы можете сделать это в одной строке как:

cdo setname,rsus -sub rsds.nc rsns.nc rsus.nc
person Adrian Tompkins    schedule 03.04.2017