注:部分参考,全文请见https://code.mpimet.mpg.de/projects/cdo/embedded/cdo.pdf
1.2 用法
cdo [ Options ] Operator1 [ -Operator2 [ -OperatorN ] ]
1.2.1 选项
所有选项都需要放在第一个操作符之前。对于所有操作符,以下选项是可行的:
-a
生成一个绝对时间轴Generate an absolute time axis.
-b <nbits>
设置输出经度的位数。合理的精度取决于文件格式:
格式 | 位数 |
grb1, grb2 nc1, nc2, nc4, nc4c grb2, src, ext, ieg |
P1 - P24 I8/I16/I32/F32/F64 F32/F64 |
对于srv, ext 和 ieg 格式,可以用字母L或B将位序分别设置为小端或大端。
- -cmor
CMOR符合NetCDF输出
-C, - -color
彩色输出消息
- -eccodes
使用ecCodes来解码/编码GRIB1 messages
-f <format>
设置输出文件格式。合理的文件格式有:
文件格式 | 格式 |
GRIB version 1 GRIB version 2 NetCDF NetCDF version 2 (64-bit offset) NetCDF-4 (HDF5) NetCDF-4 classic NetCDF version 5 (64-bit data) SERVICE EXTRA IEG |
grb1/grb |
GRIB2仅适用于,如果cdo编译时启用了ecCodes支持,并且所有的NetCDF文件支持需要在编译时开启NetCDF支持才可用!
-g <grid>
定义默认格点描述以名称或者从文件中(参见11页1.3章)。可用的格点名称有: r<NX>x<NY>, lon=<LON>/lat=<LAT>, n<N>, gme<NI>
-h, - -help
关于操作符的帮助信息
- -no_history
不要附加到NetCDF历史全局属性
- -netcdf_hdr_pad, - -hdr_pad, - -header_pad <nbr>
使用nbr字节填充NetCDF输出头
-k <chunktype>
NetCDF4块类型:auto,grid或lines
-L
I/O 锁(顺序访问)
-M
切换以指示I / O流具有缺测值。-m <missval> 设置非NetCDF文件的缺测值(默认值:-9e + 33)
-O
如果选中,则覆盖现有输出文件。 仅检查现有输出文件:ens <STAT>,merge,mergetime
- -operators
所有操作符的列表
-P <nthreads>
设置OpenMP线程数(仅在编译OpenMP支持时可用)
- -percentile <method>
Percentile方法:nrank nist numpy numpy_lower numpy_higher numpy_nearest
- -reduce_dim
减少NetCDF维度
-R, - -regular
将GRIB1数据从global缩减转换为常规高斯网格(仅限cgribex lib)
-r
生成相对时间轴
-S
为模块TIMSTAT创建额外的输出流。此流包含每个输出时段的非缺失值的数量
-s, -silent
无声模式
- -sortname
NetCDF参数名称的字母数字排序
-t <partab>
设置GRIB1(cgribex)默认参数表名称或文件(请参阅第16页的第1.6章)。预定义的表格是:echam4 echam5 echam6 mpiom1 ecmwf remo
- -timestat_date <srcdate>
目标时间戳(时间统计):源数据时间步中的first, middle, midhigh 或者 last
-V, - -version
打印版本号
-v, - -verbose
为某些操作符打印额外的详细信息
-W
打印额外的警告信息
-z szip SZIP压缩GRIB1记录
jpeg JPEG压缩GRIB2记录
zip [_1-9] 缩小NetCDF4变量的压缩率
1.2.3 操作符
有超过700个操作符。对于所有的操作符的一个详细的描述可以在参考手册一节找到。
1.2.4 操作符链
所有操作符有一个固定的输入流和一个输出流可以将结果直接管道到一个其它的操作符。操作符必须用“-”开头,用以和其它操作符组合。这个可以通过以下操作提升性能:
- 减少不必要的磁盘I/O
- 并行处理
使用
cdo sub -dayavg infile2 -timavg infile1 outfile
而不是
cdo timavg infile1 tmp1
cdo dayavg infile2 tmp2
cdo sub tmp2 tmp1 outfile
rm tmp1 tmp2
所有的 单输入流的操作符 将只会在输入流中处理一次!将这些运算符 与一个 具有任意数量输入流的运算符混合时,需要注意。 以下示例说明了此问题。
1. cdo info -timavg infile?
2. cdo info -timavg infile1 infile2
3. cdo timavg infile1 tmpfile
cdo info tmpfile infile2
这三个例子都产生相同的结果。 仅在第一个输入文件上计算时间平均值。
如果这些运算符与多个输入流一起使用,则具有任意数量的输入流(infiles)的所有运算符都不能与其他运算符组合。 以下是这些运算符的不完整列表:
copy,cat,merge,mergetime,select,ens <STAT>
如果输入流名称与单个通配符表达式匹配,请使用单引号。 在这种情况下,CDO将进行模式匹配,输出可以与其他运算符组合。 以下是此功能的示例:
cdo timavg -select,name=temperature ’infile?’ outfile
CDO内部通配符扩展使用glob()函数。 因此,没有glob()函数的操作系统上不能使用内部通配符扩展! 支持以下通配符:
*,?,[]
注意:运算符链接是通过POSIX线程(pthreads)实现的。 因此,如果没有POSIX Threads支持,此CDO功能在操作系统上不可用!
1.2.5 并行化操作符
一些CDO操作符可以用OpenMP共享内存并行化。要使用此功能,需要支持OpenMP的C编译器。 用户可以使用'-P'开关请求特定数量的OpenMP线程nthreads。
以下是在8个OpenMP线程上分布双线性插值的示例:
cdo -P 8 remapbil,targetgrid infile outfile
许多CDO操作符受I/O约束。 这意味着大部分时间都花在阅读和写入数据上。 仅计算密集型CDO操作符是并行化的。 OpenMP并行化运算符的不完整列表可以在附录B中找到。
附:B. Parallelized operators
The following CDO operators are parallelized with OpenMP:
Module | Operator | Description |
Detrend |
detrend | Detrend |
Ensstat | ensmin | Ensemble minimum |
Ensstat | ensmax | Ensemble maximum |
Ensstat | enssum | Ensemble sum |
Ensstat | ensmean | Ensemble mean |
Ensstat | ensavg | Ensemble average |
Ensstat | ensvar | Ensemble variance |
Ensstat | ensstd | Ensemble standard deviation |
Ensstat | enspctl | Ensemble percentiles |
Filter | bandpass | Bandpass filtering |
Filter | lowpass | Lowpass filtering |
Filter | highpass | Highpass filtering |
Fourier | fourier | Fourier transformation |
Genweights | genbil | Generate bilinear interpolation weights |
Genweights | genbic | Generate bicubic interpolation weights |
Genweights | gendis | Generate distance-weighted average remap weights |
Genweights | gennn | Generate nearest neighbor remap weights |
Genweights | gencon | Generate 1st order conservative remap weights |
Genweights | gencon2 | Generate 2nd order conservative remap weights |
Genweights | genlaf | Generate largest area fraction remap weights |
Gridboxstat | gridboxmin | Gridbox minimum |
Gridboxstat | gridboxmax | Gridbox maximum |
Gridboxstat | gridboxsum | Gridbox sum |
Gridboxstat | gridboxmean | Gridbox mean |
Gridboxstat | gridboxavg | Gridbox average |
Gridboxstat | gridboxvar | Gridbox variance |
Gridboxstat | gridboxstd | Gridbox standard deviation |
Remapeta | remapeta | Remap vertical hybrid level |
Remap | remapbil | Bilinear interpolation |
Remap | remapbic | Bicubic interpolation |
Remap | remapdis | Distance-weighted average remapping |
Remap | remapnn | Nearest neighbor remapping |
Remap | remapcon | First order conservative remapping |
Remap | remapcon2 | Second order conservative remapping |
Remap | remaplaf | Largest area fraction remapping |
1.2.6 操作符参数
一些操作符需要一个或多个参数。参数列表用分隔符','表示
- 字符串
不带引号的字符不能包含有空格和tab。下面的命令利用变量名pressure和tsurf选择了变量:
cdo selvar,pressure,tsurf infile outfile - 浮点数
浮点数可以用任何形式表示。下列的命令将0到273.15之间范围的所有长设置成缺失值:
cdo setrtomiss,0,273.15 infile outfile - 布尔类型
布尔参数,需要如下所示:TRUE / FALSE,T / F 或 0/1。 在计算一个场的平均值时,要禁用网格单元格区域的权重,请使用:
cdo fldmean,weights = FALSE infile outfile - 整数
可以通过first / last [/ inc]指定一系列整数参数。 选择第5天,第6天,第7天,第8天和第9天,可以使用:
cdo selday,5/9 infile outfile
使用以下命令结果相同:
cdo selday,5,6,7,8,9 infile outfile