NCL批量处理数据及作图

科研中不免要与大量的数据打交道,NCL 中倒也内置了比较好用的 do 循环等,可以方便地批量处理数据,但 NCL 内置的循环批量画图就比较麻烦一些,毕竟涉及 workspace 的 open 与 close(当然,如果画图到 pdf 文件也无所谓,pdf 多页支持还是很好的)。

结合 shell 脚本与 NCL 的命令行参数接收变量赋值的特性,可以方便地批量画图。

例如,若要批量处理 2000 年到 2010 年十年的逐日资料并把每天的日均气温画出来,那么可以写一个如下的 NCL 脚本 [runwithargs.ncl] 以及相应的 Bash 脚本:

NCL:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

begin
   ;;date is a variable from command line args
   print("The current date is "+sdate)
   ;; Following is other code

end

其中,sdate 这个变量在 NCL 中并没有赋值,而是要在运行时指定。

上面的 NCL 脚本应配合以下的 shell 脚本 [runnclargs.sh] 运行:

#!/bin/bash
basedate="20000101"
for idate in `seq -w 1 3653`
do
    thedate=`date +%Y%m%d -d "$basedate + $idate"`
    ncl runwithargs.ncl "sdate=$thedate" |grep date
done

如此,只需通过运行 ./runnclargs.sh, 10 年的数据就处理完了。:-0