2017年5月12日金曜日

nclの実行時間を測定し表示させる

参考URL
get_cpu_time https://www.ncl.ucar.edu/Document/Functions/Built-in/get_cpu_time.shtml
Tracking Note: Macでプログラムの実行時間を測定する https://trackingnote-yoshi.blogspot.jp/2017/05/mac.html

昔の自分のほうが賢かった。
nclにもcpuの実行時間を返す関数がある。

cputime_min=get_cpu_time/60
print(sprintf("cputime=%f min",cputime_min))

とすれば、

(0) cputime=0.185446 min

とターミナルに返ってくる。
デフォルトは秒単位なので、上の場合は60で割って分単位に直している。


2017年5月11日木曜日

nclでwrfのアウトプットを高度面、気圧面に内挿する時はループしなくて良い

nclはスクリプト言語で、ループの数を減らすことが実行時間の短縮につながるのだが…

参考URL
wrf_user_intrp3d https://www.ncl.ucar.edu/Document/Functions/WRF_arw/wrf_user_intrp3d.shtml

今までこの関数を使う時、馬鹿正直に鉛直層数分ループして、内挿させていたが、ループしなくていいじゃないか(公式もそう書いてあった)

つまり...

height = (/1800,2000,2200/) ;meter
n_height = dimsizes(height)
do iz = 0,n_height-1,1
vv_levs(iz,:,:)   = wrf_user_intrp3d(vv(:,:,:),zz(:,:,:),"h", height(iz),0.,False)
end do

ではなく、

height = (/1800,2000,2200/) ;meter
vv_levs(:,:,:) = wrf_user_intrp3d(vv(:,:,:),zz(:,:,:),"h", height,0.,False)

で、良い。笑
これで一つループを減らせる。

2017年5月10日水曜日

Macでプログラムの実行時間を測定する

参考URL
Windows&Mac両対応 コマンド大事典 - [time]コマンドの実行時間を知りたい(Macのみ):ITpro http://itpro.nikkeibp.co.jp/atcl/column/15/042000103/080600050/?rt=nocnt

nclが実行される時間をどうやって測るのか…と思ったけど、結局timeコマンドになりそう。

$ time ncl wrf_SkewT1.ncl 
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.
(中略)
real 0m31.404s
user 0m13.747s
sys 0m3.872s

ちなみに

real:プログラムの呼び出しから終了までにかかった実時間(秒)
user:プログラム自体の処理時間(ユーザーCPU時間・秒)
sys:プログラムを処理するために、OSが処理をした時間(システム時間・秒)

基本的には、realの時間をチェックしておけば問題ない。
userもたまには必要になることがあるかな。

2017年5月7日日曜日

nclのスクリプトでmkdirする方法

参考URL
systemfunc https://www.ncl.ucar.edu/Document/Functions/Built-in/systemfunc.shtml

nclのスクリプトでmkdirする方法。
公式HPにも載っているけども。

OUT_dirc = "/Volumes/HDD01/research/ncl/wrf/track/"←directoryのパス
ret = systemfunc("test -d "+OUT_dirc+"; echo $?")
if(ret .eq. 0) then
print("--> "+OUT_dirc+": exists")                  ;-- do what you want to do
else if(ret .eq.1) then
print("--> "+OUT_dirc+": doesn't exist: create")   ;-- create the desired directory
system("mkdir " + OUT_dirc)
end if
end if

とすれば、スクリプト内でdirectoryが存在しない時に、OUT_dircをmkdirする。

ちなみに、testコマンドはこちら

Linuxコマンド集 - 【 test 】 条件式の真偽を判定する:ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230901/


githubの基本用語

ある仕事でGithubをちゃんと使うようになって、いろんな基本用語(知識)があやふやなことに気付いたのでメモ。 リポジトリ ファイルやディレクトリの状態を保存する場所。 手元の端末 にある「ローカルリポジトリ」とサーバなどネットワーク上にある「リモートリポジトリ」の...