在两个不同的 netcdf 文件中减去变量

Dav*_*ley 2 variables subtraction netcdf nco cdo-climate

我有两个 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
Run Code Online (Sandbox Code Playgroud)

他们都产生了一个,rsus.nc但是这个文件中的变量 rsus 丢失了。知道为什么会这样吗?

Adr*_*ins 8

两种替代 CDO 解决方案。

1. 大锤法

cdo 子命令可以在一行中完成此操作:

cdo sub rsds.nc rsns.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)

你会收到警告

cdo sub(警告):输入流具有不同的参数!

但你可以忽略这一点。请注意,您可能希望将变量名称更改为更合适的名称,因此您可以在一行中执行此操作,如下所示:

cdo setname,rsus -sub rsds.nc rsns.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)

2.expr方法

这只是模仿已接受的答案,但在 cdo 等效命令中

cdo cat rsds.nc rsns.nc tmp.nc
cdo expr,"rsus=rsds-rsns" temp.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)

顺便说一句,对于周四页面上的所有解决方案,您可能需要使用cdo chgattr或 nco 等效项来确保元数据对于您的新字段是正确的,特别是如果您打算长期保留文件或将它们传递给其他人。


N1B*_*1B4 5

作为@RichSignell 答案的替代方法,您可以将变量合并到一个文件中,并使用 ncap2 执行减法而不重命名变量。

ncks -A rsns.nc rsds.nc 
ncap2 -s 'rsus=(rsds-rsns)' rsds.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)