Cdo | 下载 | 批量处理cmip6数据完整教程

文摘   2024-12-16 16:20   北京  

写在前面

因为某种意外,导致下载的数据暂时无法使用。重新写一个教程方面后续再出现类似的问题。

这里以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.


给我点在看的人

越来越好看



气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章