写在前面
因为某种意外,导致下载的数据暂时无法使用。重新写一个教程方面后续再出现类似的问题。
这里以cmip6数据的月平均资料pr为例,实现完成的数据下下载教程以及预处理过程。
准备文件
打开之前准备好的txt文件,修改相应的下载信息,
数据变量为pr, 分辨率为月平均, 模式为MIROC6,CESM2,EC-Earth3,CESM2-WACCM, 场景为历史, 集合成员为r1i1p1f1
https://esgf-node.llnl.gov/esg-search/wget/?experiment_id=historical&table_id=Amon&project=CMIP6&limit=10000&variable=pr&member_id=r1i1p1f1&source_id=MIROC6,CESM2,EC-Earth3,CESM2-WACCM
复制这一串链接到浏览器中,敲下回车:
如果存在相关数据的话,会自动弹出一个shell脚本文件,
如果没有弹出可能不存在相关模式或者数据暂时不支持这种下载,需要再去网站上确认:
https://aims2.llnl.gov/search/cmip6/
打开得到的shell脚本文件,如果下载的是历史的,则得到模式从1850-2014年所有的数据链接,如果不需要这么多,可以手动删除一些链接。
打开Linux | wsl子系统
将该脚本文件上传或者移动到你要下载的目录下,这里是系统是Linux系统,在windows上使用WSL是一样的
使用nohup 结合 wget 实现脚本的后台下载:
其中,
wget-pr-monthly.sh
为脚本名称,"/Datadisk/CMIP6_daily2/prc/pr/"
为指定的下载路径,down_cmip6_historical_pr.log
为输出的下载日志
nohup bash wget-pr-monthly.sh -H -download_structure -c "/Datadisk/CMIP6_daily2/prc/pr/" > down_cmip6_historical_pr.log 2>&1 &
查看下载进程,发现速度很快,
tail -f down_cmip6_historical_pr.log
数据预处理
为了便于后续分析,这里提取nc数据为统一的时间,并进行插值。
由于这里下载的EC-Earth3模式的数据是一年一个文件,这里方面后续处理,先将其进行文件合并。
mkdir pr_backup && mv pr_Amon_EC-Earth3_historical_r1i1p1f1_gr_*.nc pr_backup && cd pr_backup
使用cdo进行文件合并,并移出文件到原始下载路径:
mv pr_Amon_EC-Earth3_historical_r1i1p1f1_gr_1997_2014.nc ../
现在每个模式的数据都是一个文件了
下面进行数据的时间截取和分辨率统一,利用shell脚本结合cdo命令实现:
#!/bin/bash
cd /Datadisk/CMIP6_daily2/prc/
output_folder="/Datadisk/CMIP6_daily2/prc/pr_interp_2x2"
if [ ! -d "$output_folder" ]; then
mkdir -p "$output_folder"
fi
for file in /Datadisk/CMIP6_daily2/prc/*.nc
do
echo "$file"
filename=$(basename -- "$file")
prefix=$(echo "$filename" | perl -pe 's/_[0-9]{6}-[0-9]{6}\.nc$//')
echo "$prefix"
# filename_no_ext="${filename%.*}"
cdo -selyear,1997/2014 $file $output_folder/$prefix"_1997_2014.nc"
done
cd $output_folder
for file in /Datadisk/CMIP6_daily2/prc/pr_interp_2x2/*.nc
do
echo "$file"
filename=$(basename -- "$file")
filename_no_ext="${filename%.*}"
cdo remapcon,r181x90, $file $output_folder/$filename_no_ext"_interp_2x2.nc"
rm $file
done
# cdo remapcon,r181x90 $output_folder/$filename_no_ext"_1997_2014.nc" $output_folder/$filename_no_ext"_1997_2014.nc"
运行脚本:
进入数据输出的文件夹,查看数据
cd /Datadisk/CMIP6_daily2/prc/pr_interp_2x2/ && ls
查看数据信息,
cdo infos pr_Amon_CESM2_historical_r1i1p1f1_gn_1997_2014_interp_2x2.nc
至此,完成数据的基本预处理工作。
总结
数据很重要,代码更重要。代码最好是和数据分开保存,或者上传到GitHub上备份一份,防止磁盘损坏丢失,损失太大了。当然了,处理的shell脚本限制还比较多,缺少灵活性,有待进一步加强调整,比如说简化文件夹的重复使用,如果数据过大的话,也可以使用nohup后台运行数据处理脚本。
关于数据预处理方便,插值是为了统一各个模式的分辨率,在评估时这非常重要。第二点,对于降水的插值要使用守恒插值,这很重要,否则部分可能格点产生异常极值。
此外,不同模式中对于一年定义的时间是不同的,计算一些指数时可能需要考虑统一时间的长度。这很容易,方法也多样,这里不再赘述,只是心中知道即可。
★Jones, P. W., 1999: First- and Second-Order Conservative Remapping Schemes for Grids in Spherical Coordinates. Mon. Wea. Rev., 127, 2204–2210, https://doi.org/10.1175/1520-0493(1999)127<2204:FASOCR>2.0.CO;2.
给我点在看的人
越来越好看