NCL 提高運行效率——使用shell腳本調(diào)用程序
NCL作為一門高級語言,用起來運算速度肯定是比不上Fortran的沟使。我們可以通過一些方法來提高ncl腳本運行的速度言缤,比如減少循環(huán)的使用等焦匈。這篇文章我主要記錄的是德绿,在遇到大量文件需要讀取時,使用shell腳本調(diào)用來提高運行效率的做法玫鸟。
主要參考的是 NCL專輯 | 提高NCL代碼的運行效率的各種方法
用shell腳本寫循環(huán)导绷,再在循環(huán)中調(diào)用NCL腳本
NCL在循環(huán)中讀取文件時,即便刪去了文件變量屎飘,系統(tǒng)里也是沒有把這些文件釋放妥曲,還會占據(jù)大量內(nèi)存,嚴(yán)重影響運行速度(我踩了好大一個坑)钦购。那么這種情況下檐盟,就可以使用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} #循環(huán)得到各個實驗的名稱
ncl wrfgetvar_PBLH.ncl
done
begin
expname = getenv("expname") ;;;調(diào)用文件目錄, 從shell腳本中讀出要處理的實驗名稱
filedirectory = "/raid61/CORDEX-12.5km/2020jja-CORDEX-12.5km/"+expname+"/" ;;;得到該實驗的存儲路徑
fs = systemfunc("ls "+filedirectory+"wrfout_d01_2020*") ;;;得到該實驗下的所有輸出結(jié)果
f = addfiles(fs, "r")
NCL腳本中的getenv是NCL自帶函數(shù)押桃,用于讀取從shell腳本中聲明的變量葵萎。比如該腳本中就是用getenv從shell腳本中讀取了實驗名稱和要處理的變量名稱。