% 表題 地球流体電脳倶楽部 ごくらく GTOOL3   データ解析
%
% 履歴
\Drireki{92/09/21  沼口 敦}     % howtoloo.doc(92/09/21)
\Drireki{97/02/21  余田 成男}
%

\Dchapterhead

GTOOL形式のデータは, コマンド入力だけで, 簡単なデータ処理や数学演算が
可能である. それらを組み合わせれば, FORTRANプログラムを書くことなく, 
より高度なデータ解析をすることが可能となる.


\section{例題：時系列図}

\verb!t.data! は, 温度の空間3次元データが1日から40日まで順に40個入って
いる. まずは, 例題として, ホフメラーダイヤグラムなどの時系列図を描いて
みる.
\vspace{1em}

まず, \verb!gtsel! コマンドで東西平均したデータの最下層分を切り出す.
オプションの指定は, \verb!gtcont! などと同じで, \verb!x=0 z=1! とする：
\begin{verbatim}
% cd /datadisk/yoden/intg1
% gtsel x=0 z=1 t.data
output=gtool.out
** READ T                T =   1440
** WRITE T                T =   1440
** READ T                T =   2880
** WRITE T                T =   2880
(中略)
** READ T                T =   57600
** WRITE T                T =   57600
#### END OF INPUT FILE FT50F001
\end{verbatim}
これで, デフォルトの出力ファイル名 \verb!gtool.out! をもつファイル
(44.1 KB)ができる. つぎに, \verb!gtseq! コマンドで, 時系列データから
1次元大きい単一データを作成する：
\begin{verbatim}
% gtseq
 *** WARNING (GURTNF) ***  RENAMED:$GTTMPDIR/gtool.out->$GTTMPDIR/gtool.in     
output=gtool.out
** READ T                T =   1440
** READ T                T =   2880
(中略)
** READ T                T =   57600
#### END OF INPUT FILE FT50F001
** WRITE T                T =   57600
** WRITE @EXTAX01         T =   0
** WRITE @EXTAX01         T =   0
% ls -l
total 3008
-rw-r--r--  1 yoden        1200 Feb 17 18:11 GTAXLOC.@EXTAX01
-rw-r--r--  1 yoden        1200 Feb 17 18:11 GTAXWGT.@EXTAX01
-rw-r--r--  1 yoden       44160 Feb 17 18:11 gtool.in
-rw-r--r--  1 yoden        3600 Feb 17 18:11 gtool.out
-rw-r--r--  1 yoden      123520 Dec 25 21:22 ps.data
-rw-r--r--  1 yoden      451200 Dec 25 21:22 t.data
(等々)
\end{verbatim}
新たにできた \verb!gtool.out! ファイルは, 東西平均した最下層での温度の
緯度-時間2次元データである. 同時にできた \verb!GTAX???.@EXTAX01! は時
間軸の軸ファイルである. これらを用いて \verb!gtcont! コマンドで等値線
図が描ける. x軸とy軸を入れ換えるには, \verb!-exch!オプションを使う：
\begin{verbatim}
% gtcont
% gtcont -exch
\end{verbatim}
ここでは, 中間ファイル名はすべてデフォルト(\verb!gtool.out! など)を使っ
たので, ファイル名も省略できて \verb!gtcont! と入力するだけで描画する.
出力ファイル名を陽に指定したいときは, \verb!out:"t_zm1.data"! などと引
用符で囲んだ文字型データを与えると, \verb!t_zm1.data! という名前のファ
イルができる.
\vspace{1em}

上の例では, コマンドを順に入力していったが, \verb!&&! を使うと, 疑似的
なパイプ処理が可能である. 例えば, 上記の例は,
\begin{verbatim}
% gtsel x=0 z=1 t.data && gtseq && gtcont -exch
\end{verbatim}
と同じであり, 
\begin{verbatim}
% gtsel y=4 z=1 t.data && gtseq && gtcont
\end{verbatim}
とすると, 緯度49.1度, $\sigma=$0.899での温度の経度-時間断面図(ホフメラー
ダイヤグラム)が描かれる. これらの場合にも \verb!gtool.out! などのファ
イルを作っているので, UNIXのパイプと同じではないことに注意しよう. 


\section{データ処理}

前節の例では, \verb!gtsel! や \verb!gtseq! がGTOOL形式のデータ処理用の
コマンドである. この他にも, \verb!gtext! をはじめ様々なコマンドがある.

\subsection{gtsel}

40日分のデータ \verb!t.data! から特定の一日を切り出すには,
\begin{verbatim}
% gtsel str=20 end=20 out:"t_20.data" t.data
% gtsel str=30 end=30 out:"t_30.data" t.data
\end{verbatim}
などとすればよい. また, 空間平均や断面をとることにより次元を下げたデー
タをつくるのにも, \verb!gtsel! コマンドを用いる.
\begin{verbatim}
% gtsel x=0 out:"t_20_zm.data" t_20.data
% gtcont t_20_zm.data
\end{verbatim}
この場合, \verb!t_20_zm.data!は東西平均した緯度-高度の2次元データになっ
ているので, \verb!gtcont! コマンドで何もオプションを指定しなくても子午
面図が描かれる.


\subsection{gtseq}

時系列データから1次元大きい単一データを作成するのが, \verb!gtseq! コマ
ンドである. 前節の例を出力ファイルを指定するように変更すると, 
\begin{verbatim}
% gtsel x=0 z=1 out:"t_zm_lev1.data" t.data
% gtseq out:"t_zm_lev1_seq.data" t_zm_lev1.data
% gtcont -exch t_zm_lev1_seq.data
\end{verbatim}
となる. \verb!t_zm_lev1.data! は緯度依存性をもつ空間1次元データの40日
分の時系列データであり, それをつなぎ合わせた \verb!t_zm_lev1_seq.data!
は, 緯度-時間の2次元データとなっている. 
\vspace{1em}

同様にして, 空間2次元データの時系列から, 空間-時間3次元データも作れる：
\begin{verbatim}
% gtsel x=0 out:"t_zm.data" t.data
% gtseq out:"t_zm_seq.data" t_zm.data
% gtcont y=1 -exch t_zm_seq.data
% gtcont z=40 t_zm_seq.data
\end{verbatim}
\verb!gtcont y=1! で上の例と同じ図が描けたはずである. ここで,
\verb!z=1! ではなく \verb!y=1! とすると最下層の緯度-時間断面図が描けた
のは, 新たに作った \verb!t_zm_seq.data! のx軸が緯度, y軸が高度, z軸が
時間となっているからである. \verb!gtcont z=40 t_zm_seq.data! で, 40日
目の子午面図が描かれる.

 ？？？？？？ただし, \verb!gtseq!で実質的に
つなぎ合わせられるのは, 空間2次元データまでであることに注意すること.
？？？？？？


\subsection{gtext}

空間3次元データのある範囲だけを切り出すには, \verb!gtext! コマンドを使
う. 上のデータ \verb!t_30.data! で日本付近だけを切り出すには,
\begin{verbatim}
% gtext xstr=9 xend=17 ystr=3 yend=8 out:"t_30loc.data" t_30.data
% gtcont t_30loc.data
\end{verbatim}
などと, 格子点番号の範囲を指定する.


\subsection{gtset}

単位の換算などでデータに一定値を乗じたり, 一定値を加えたりするには
gtset を用いる.一定値を加えるには, \verb!ofs! オプションを使う：
\begin{verbatim}
% gtset ofs=-273.15 unit:"C" out:"t_20_zmC.data" t_20_zm.data
% gtcont t_20_zmC.data
\end{verbatim}
これで, データがセ氏温度に変換される. \verb!unit! オプションで単位を文
字型の C に指定しているので, \verb!gtcont! で描いた等値線図の左上に表
示される単位が, デフォルトの K から C にかわる. さらにカ氏温度に変換す
るには
\begin{verbatim}
% gtset fact=1.8 unit:"F" t_20_zmC.data  &&  gtset ofs=32.0  &&  gtcont
\end{verbatim}
とすればよい. ここでは, 中間ファイルを指定せずにパイプ処理で等値線図を
描いている.



\section{数学演算}

GTOOL形式のデータの数学演算コマンドには, 和 \verb!gtadd!, 
差 \verb!gtsub!, 積 \verb!gtmlt!, 商 \verb!gtdiv!, 
平方根 \verb!gtsqrt! などの基本演算のほかに, 
時系列の平均値を求める \verb!gtavr! や東西平均からのズレを求める 
\verb!gtedy! など, いろいろ便利なコマンドがある.


\subsection{gtsub}

2つのデータの差をとるには, \verb!gtsub! コマンドを用いる：
\begin{verbatim}
% gtsub out:"t_30-20.data" t_30.data t_20.data
% gtcont x=0 title:"T(day30)-T(day20)" t_30-20.data
\end{verbatim}
30日めの3次元データ \verb!t_30.data! から20日めのデータ 
\verb!t_20.data! を引いて, \verb!t_30-20.data! というデータを作ってい
る. これも空間3次元データなので, \verb!gtcont! コマンドでは \verb!x=0! 
として東西平均の子午面図を描いている. 図のタイトルもオプションで指定し
ている.
\vspace{1em}

同様にして, 2つのデータの和, 積, 商などをとれる.


\subsection{gtavr}

時系列データで時間平均を作るには, \verb!gtavr! コマンドを用いる：
\begin{verbatim}
% gtavr str=30 end=40 out:"t_avr30~40.data" t.data
% gtcont x=0 title:"mean T(day30~day40)" t_avr30~40.data
\end{verbatim}
\verb!t_avr30~40.data! はやはり空間3次元データであり, \verb!gtcont! コ
マンドでは \verb!x=0! として東西平均の子午面図を描いている.


\subsection{gtedy}

データを東西平均値とそれからのズレに分けることは, 全球的な(気象)データ
解析の基本である. \verb!gtedy! コマンドを用いる：
\begin{verbatim}
% gtedy out:"t_20edy.data" t_20.data
% gtcont z=3 t_20edy.data
\end{verbatim}
\verb!t_20edy.data! はやはり空間3次元データであり, \verb!gtcont! コマ
ンドでは \verb!z=3! として水平断面図を描いている. 



\section{データ解析スクリプト}

これまで紹介したデータ処理と数学演算コマンドを組み合わせれば, より高度
なデータ解析が簡単に行なえる. 傾圧不安定実験データを用いて, 南北熱輸送
における擾乱の働きを解析してみよう. 温度($T$)と南北風($v$)のデータ 
\verb!t.data!, \verb!v.data! をもとに, 擾乱による熱フラックス
($\overline{T'v'}$)を計算するGTOOLコマンドスクリプト 
\verb!eddy_heat_flux! を作ることにする：
\begin{verbatim}
% ls -l eddy_heat_flux
-rwxr-xr-x  1 yoden         272 Mar  3 11:53 eddy_heat_flux*
% cat eddy_heat_flux
### GTOOL3 application script: eddy_heat_flux
### computation of eddy heat flux
gtedy out:"tedy.data" t.data
gtedy out:"vedy.data" v.data
gtmlt out:"teve.data" tedy.data vedy.data
/bin/rm -f tedy.data vedy.data
gtsel x=0 out:"e_h_flux.data" teve.data
/bin/rm -f teve.data
\end{verbatim}
これを実行すると, まず, \verb!gtedy! コマンドで$T'$と$v'$の時系列デー
タができ, \verb!tedy.data! と \verb!vedy.data! という名前のファイルに
保存される. つぎに, \verb!gtmlt! コマンドでこれらの積$T'v'$が計算され,
\verb!vedy.data! という名前のファイルに保存される. 作業用ディスクの容
量が小さければ, このようにこまめに中間データファイルを消去したほうがよ
い. 最後に, \verb!gtsel! コマンドで \verb!x=0! オプションを指定するこ
とにより東西平均が計算され, \verb!e_h_flux.data! という名前のファイル
に保存される.  これは, 擾乱による熱フラックス$\overline{T'v'}$の緯度-
高度2次元データが40日分の時系列データとなったものである. この緯度-高度
分布を等値線図でみたり, \verb!gtseq! コマンドを通していろいろな時系列
図を作ってみよう：
\begin{verbatim}
% gtcont cont=5 str=20 end=40  title:"eddy heat flux" unit:"Km/s" e_h_flux.data
% gtseq out:"e_h_flux_seq.data" e_h_flux.data
% gtcont y=1 cont=5 title:"eddy heat flux" unit:"Km/s" -exch e_h_flux_seq.data
% gtcurv x=4 y=1    title:"eddy heat flux" unit:"Km/s"       e_h_flux_seq.data
\end{verbatim}

