【问题标题】:chaining operators in cdocdo 中的链接运算符
【发布时间】:2021-07-16 09:33:23
【问题描述】:

我正在使用以下公式计算 C 因子:

C 因子 =1,覆盖率 = 0
C 因子 =-0.083 xlg(coverfraction) + 0.417, 0 78.3%,

为了计算总 C 因子,我应用了部分等式 C 因子 = 0.417 - 0.083 × lg(覆盖率)。但我不知道如何使用 cdo 在脚本中应用覆盖分数的条件。在这种情况下,计算所有值的对数,包括 0 和大于 78.3% 的值。

代码是:

echo "Log: " $gc_ofile
cdo -O -L -log inputfile.nc ofilelog.nc
cdo -O -L "-mulc,-0.083" outputlogfile.nc ofilemulti.nc
cdo -O -L "-addc,0.417" ofilemulti.nc cfactor.nc

【问题讨论】:

  • 感谢您的更新。但是,这仍然不能提供完整的minimal reproducible example。我想还提供一组最小输入文件以及实际输出与预期输出的比较会很有用。

标签: netcdf cdo-climate


【解决方案1】:

对于这些类型的操作,使用 cdo 命令 expr 通常更容易

如果 netcdf 文件(称为coverfrac.nc)中的coverfraction 的名称正是这样,那么您可以像这样使用expr:

cdo expr,'cfactor=0.417−0.083*log(coverfraction)' coverfrac.nc out1.nc

这将根据需要创建一个新变量“cfactor”。

另一方面,这就是 cdo 屏蔽的用武之地(我将很快在我的 youtube 气候未装箱频道上发布有关此主题的视频,并在链接可用时更新此帖子)。

因此,您可以在覆盖率高于 78.3% 的任何地方创建一个为 0 的文件,否则为 1。

cdo lec,78.3 coverfrac.nc mask.nc

现在您需要将其乘以第一个输出文件以将结果设置为零,其中coverfrac> 78.3%,否则保持不变。

cdo mul out1.nc mask.nc myfunction.nc 

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2016-08-21
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多