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

subtracting variables within two different netcdf files

我有两个 netcdf 文件:名为 rsds.nc 的下行辐射和名为 rsns.nc 的受限辐射。 rsds.nc 包含一个名为 rsds 的变量,rsns.nc 包含一个名为 rsns 的变量。现在我想通过分别减去 rsds.ncrsns.nc 中的变量来得到上升流辐射 rsus.nc

我尝试了以下方法:

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

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

当你ncdiff两个文件时,只对同名变量进行操作。因此,一种解决方案是简单地重命名其中一个文件中的变量,使其相同。例如,试试这个:

ncrename -v rsds,rsns rsds.nc
ncdiff rsds.nc rsns.nc rsus.nc

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

ncks -A rsns.nc rsds.nc 
ncap2 -s 'rsus=(rsds-rsns)' rsds.nc rsus.nc

另一种 CDO 解决方案。

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

cdo sub rsds.nc rsns.nc rsus.nc

您将收到警告

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

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

cdo setname,rsus -sub rsds.nc rsns.nc rsus.nc