このwiki内では、グリッドファイル(GrADS 4byteバイナリ、特に断らなければdirect書き込み)を〜.bin、コントロールファイルを〜.ctl、変数名をvarと表記します。
ユーザ定義関数について(東北大のGrADSのページ)
OpenGrADS
略語
・udf : user defined functions(ユーザ定義関数)
・udct : user defined commands table(ユーザ定義コマンドテーブル)
・udxt : user defined extensions table(ユーザ定義機能拡張テーブル)
NMC GrADS User-Defined Function #1 REGRID Version 2.0beta(.doc)
## GrADS2では実質的に同じ役割を果たすlterpコマンドが導入されたので、そちらを使えばよい。→GrADS2まとめ ##
使用例
regrid2(var, 2.0, 3.0, bl)
変数varについて、経度2.0、緯度3.0度間隔に線形内挿
ba : box averaging (the default does NOT have to be set)
vt : "vote" interpolation or box averaging with voting
bl : bi-linear interpolation
bs : 3rd order Bessel interpolation
※デフォルトでは730x380(~T225)以上の格子については扱えない。しかしregrid2.fの中のパラメータnimax,njmaxを書き換えれば可能。
使用例2
regrid2(var, 128, 64, gg_ig64_bl)
varを東西128x南北64(赤道上に格子の中心が無い座標)の格子に内挿
wget ftp://cola.gmu.edu/grads/sprite/udf/regrid2.tar.gz
と打ちこみ、ファイルをダウンロードする。
gunzip regrid2.tar.gz
tar xvf regrid2.tar
でファイルを解凍し、作成されたudfディレクトリを、root権限でgradsディレクトリ(例えば/usr/local/grads-1.9b4/)に移動する。
※gradsのディレクトリは適宜読み替えて下さい
※一般ユーザの場合は、自身のホームディレクトリ等、適当な場所に置けば良いです。
udf/regrid2/に移動し、"Makefile"をviなどで開く。
REGRID_DIR = /usr/local/grads-1.9b4
にする。
CFT=
LDR=
の部分は、使用するコンパイラ意外を#でコメントアウトする。
※つまりFortranコンパイラが必要なのだが、f77とg95では動作確認済。ifortではエラーが出る。コンパイルオプションかライブラリの問題?未解決。
コンパイラが無い環境でも、他のマシンにてコンパイルしてから、実行ファイル regrid2.exe をコピーすればOK。
make -f Makefile
と打ち込み、実行ファイルを作成する。udf/に
"regrid2.exe"が作成されたことを確認する。
udf/regrid2/udft.regrid2をudf/以下にudft.txtという名前でコピーする。
cp /usr/local/grads-1.9b4/udf/regrid2/udft.regrid2 /usr/local/grads-1.9b4/udf/udft.txt
viでudft.txtの3行目を
/usr/local/grads-1.9b4/udf/regrid2.exe
に書き換える。
ホームディレクトリの".bashrc"に以下の行を書き加える。
export GAUDFT=/usr/local/grads-1.9b4/udf/udft.txt
環境設定を有効にする。
source .bashrc
gradsで適当なデータを開き、例えば
d regrid2(var, 2.0)
と打ち込んで図が表示されればO.K.
IT memo/GrADS memo
EOFGRADS
EOFGRADSのダウンロード(linux)
http://www.atmos.umd.edu/~senya/EOF_GRADS/
使用例
ファイルを開き、
set x 1 144 set t 1 30 eof var
で、var_expres_eof.ctl,datというファイルとvar_expres_pc.ctl,datというファイルができる。
それぞれ固有ベクトルと標準化時係数を表す。
- eofgradsで起こるエラー
Writing data to transfer file... Executing eofudf binary ... EOFUDF Version XXX Fatal ERROR in eorudf: (Error No. -3). Errir reading 2nd record from transfer. FORTRAN STOP 1
のようなエラーが起こるとき、.bashrcなどで環境変数F_UFMTENDIANを誤って設定している可能性がある。
(例)F_UFMTENDIAN=bigをF_UFMTENDIAN=littleに変え、source .bashrcすると正常に動作する、など。
※下記ページはリンクが切れている。関連ページ:http://www.atmos.umd.edu/~senya/EOF_GRADS/
EOFGRADSのページに丁寧に書かれている。
root権限でバイナリを入手(32bitのLinuxマシンの場合)。
wget http://web.atmos.ucla.edu/~munnich/Grads/EOF/current/binaries/linux/eofudf_linux.tar.gz tar xvf eofudf_linux.tar.gz
展開されるファイルは以下の4つ。
readme.html eof.gs eofudf libcxa.so.3
eof.gsをGrADSスクリプトライブラリのディレクトリ(export GASCRP= で指定している場所)に置く。
mv eof.gs /usr/local/grads-1.9b4/lib/
実行ファイルeofudfを他のユーザ定義関数の実行ファイルと同じ場所に置く。
mv eofudf /usr/local/grads-1.9b4/udf/
ユーザ定義関数テーブル(export GAUDFT= で指定しているテキストファイル)にeofudfの実行ファイルの場所を書く。
vi /usr/local/grads-1.9b4/udf/udft.txt
以下を追加
eofudf 2 6 expr value value value value char sequential /usr/local/grads-1.9b4/udf/eofudf eofudf.in eofudf.out
ライブラリとして参照されるディレクトリに、libcxa.so.3を置く。
mv libcxa.so.3 /usr/local/
OpenGrADSによるGrADSとextensionsをインストールすることで、ユーザ定義コマンドやユーザ定義機能拡張を使用することができる。
ここではそれらのインストールとユーザ定義機能拡張の一つである流線関数の計算方法を紹介する。
※IGES/COLAからインストールしたGrADSの中では(今のところ)使用できないので、udxtを使用するときだけ、OpenGrADSによるGrADSを使用する。
例えばLinuxであれば、
http://sourceforge.net/project/showfiles.php?group...
の、grads-1.9.0-rc1-bin-i686-pc-linux-gnu.tar.gzをダウンロード。
root権限になって
gunzip grads-1.9.0-rc1-bin-i686-pc-linux-gnu.tar.gz
tar xvf grads-1.9.0-rc1-bin-i686-pc-linux-gnu.tar
として作成されたgrads-1.9.0-rc1/を、既に置いているgrads-1.9b4等/と同じ場所(例えば/usr/local/)に置く。
/usr/local/grads-1.9.0-rc1/に、/usr/local/grads-1.9b4/にあったdata/, doc/, lib/, udf/等をコピーする。
または/usr/local/grads-1.9b4/data/等へのリンクを貼ってもよい。
今度はextensionsをダウンロード、解凍し、grads-1.9.0-rc1/bin/の中のgex/を、
/usr/local/grads-1.9.0-rc1/bin/以下に置く。
.bashrc(または/etc/bashrc等)に
#set OpenGrADS export GRADSHOME=/usr/local/grads-1.9.0-rc1 export GADDIR=${GRADSHOME}/data export GASCRP=${GRADSHOME}/lib export PATH=${PATH}:${GRADSHOME}/bin export GAUDFT=${GRADSHOME}/udf/udft.txt export GABIN=${GRADSHOME}/bin export GAUDXT=${GRADSHOME}/bin/gex/udxt export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${GRADSHOME}/bin/gex alias opengrads=${GRADSHOME}/bin/gradsnc
を書き加え、
source .bashrc
等で設定を有効にする。
opengrads
で起動したGrADSで
ga-> q udct ga-> q udft
で、定義したコマンド、関数が表示され、
ga-> hello
で"Hello, World"が表示されれば成功。
詳細はこちらを参照のこと → fish.gex
子午面流線関数の算出:GrADSで気象要素を算出
東西風データと南北風データの二つを用意する。ただし
・等間隔格子
・X軸 LINEAR の始点が0.0
でないとエラーが起こる。
Error from fish: rc = 1 Operation Error: Error from fish function
というエラーが出る時は、lonとlatの間隔を揃えると解決する。re関数やlterpを使って格子間隔を揃えよう。
それぞれua.ctl, va.ctlで読むとする。
opengrads
でユーザ定義機能拡張が実行できるgradsを起動する。
流線関数の計算
open ua.ctl open va.ctl set lon 0 360 set lat -90 90 set t 1 ?? set z 6 a=fish(hcurl(ua,va.2)) (または a=fish_psi(ua,va.2)) set gxout fwrite set fwrite -le test.bin d a disable fwrite
で、全球指定した期間指定した気圧面の流線関数がtest.binに書き出される。
流線関数:fish(hcurl(u, v))
速度ポテンシャル:fish(hdivg(u, v))
速度ポテンシャル、流線関数の値は、全球平均値からの偏差を描画するとよい
http://opengrads.org/doc/udxt/fish/fish.html#fish_...
fish(UEXPR,VEXPR[,MBDCND]) - ポアソン解法
fish_psi(UEXPR,VEXPR[,MBDCND]) - 流線関数の算出
fish_chi(UEXPR,VEXPR[,MBDCND]) - 速度ポテンシャルの算出
fish_vor(UEXPR,VEXPR[,MBDCND]) - 相対渦度の算出
fish_div(UEXPR,VEXPR[,MBDCND]) - 発散の算出
コメントをかく