CDO - 处理 CMIP6 实战

本篇随笔将介绍 CDO 处理 CMIP6 常用的操作,包括插值、合并时间、选取时间、计算集合平均等

假设需要将 CMIP6 模式的历史降水数据(如下图所示),插值到 的经纬度网格中,并合并时间维度,选取 1959 年至 2014 年 MJJAS 的数据,最后计算模式的集合平均

数据目录

插值操作

1
cdo remapbil,r360x181 infile outfile

对多个文件进行批量插值操作

1
2
3
4
5
6
7
#!/bin/bash
models=(MODEL1 MODEL2)
for m in ${models[*]}; do
for i in $(ls ./${m}); do
cdo remapbil,r360x181 ${i} remap_${i}
done
done

合并时间

1
cdo mergetime var_MODEL_*.nc var_MODEL.nc

插值并合并时间

1
cdo mergetime -apply,remapbil,r360x181 [ nvar_MODEL_*.nc ] var_MODEL.nc

对不同模式进行批量插值并合并时间

1
2
3
4
5
#!/bin/bash
models=(MODEL1 MODEL2 MODEL3)
for m in ${models[*]}; do
cdo mergetime -apply,remapbil,r360x181 [ ./${m}/var_${m}_*.nc ] ./var_${m}.nc
done

选取时间

选取 1959 年至 2014 年 MJJAS 的数据

1
cdo selyear,1959/2014 -selmonth,5/9 infile outfile
1
cdo select,year=1959/2014,month=5/9 infile outfile

对不同模式进行批量选取时间的操作

1
2
3
4
5
#!/bin/bash
models=(MODEL1 MODEL2 MODEL3)
for m in ${models[*]}; do
cdo select,year=1959/2014,month=5/9 var_${m}.nc var_${m}_1959-2014_MJJAS.nc
done

对不同模式进行批量插值、合并时间并选取时间的操作

1
2
3
4
5
#!/bin/bash
models=(MODEL1 MODEL2 MODEL3)
for m in ${models[*]}; do
cdo select,year=1959/2014,month=5/9 -mergetime -apply,remapbil,r360x181 [ ./${m}/var_${m}_*.nc ] ./var_${m}.nc
done

集合平均

对不同模式求集合平均

1
cdo ensmean var_{MODEL1,MODEL2,MODEL3}.nc var_ENSM.nc

参考

CDO 官方文档: https://code.mpimet.mpg.de/projects/cdo/embedded/cdo.pdf