[NCL] 提高运行效率—需要多次读取文件时使用shell脚本

NCL 提高运行效率——使用shell脚本调用程序

NCL作为一门高级语言,用起来运算速度肯定是比不上Fortran的。我们可以通过一些方法来提高ncl脚本运行的速度,比如减少循环的使用等。这篇文章我主要记录的是,在遇到大量文件需要读取时,使用shell脚本调用来提高运行效率的做法。
主要参考的是 NCL专辑 | 提高NCL代码的运行效率的各种方法

用shell脚本写循环,再在循环中调用NCL脚本

NCL在循环中读取文件时,即便删去了文件变量,系统里也是没有把这些文件释放,还会占据大量内存,严重影响运行速度(我踩了好大一个坑)。那么这种情况下,就可以使用shell来运行此类运算。
shell脚本如下:

dir=$(ls -l /raid61/CORDEX-12.5km/2020jja-CORDEX-12.5km/ |awk '/^d/ {print $NF}')  #所有文件夹的名称
export varname=PBLH  #要处理的变量名称
for i in $dir
do
    export expname=${i}  #循环得到各个实验的名称
    ncl wrfgetvar_PBLH.ncl
done
begin
  expname = getenv("expname")  ;;;调用文件目录, 从shell脚本中读出要处理的实验名称
  filedirectory = "/raid61/CORDEX-12.5km/2020jja-CORDEX-12.5km/"+expname+"/"  ;;;得到该实验的存储路径
  fs = systemfunc("ls "+filedirectory+"wrfout_d01_2020*")  ;;;得到该实验下的所有输出结果
  f = addfiles(fs, "r")

NCL脚本中的getenv是NCL自带函数,用于读取从shell脚本中声明的变量。比如该脚本中就是用getenv从shell脚本中读取了实验名称和要处理的变量名称。

你可能感兴趣的:([NCL] 提高运行效率—需要多次读取文件时使用shell脚本)