% 表題 地球流体電脳倶楽部 ごくらく AGCM5   実行
%
% 履歴
\Drireki{96/12/12  堀之内 武}
\Drireki{97/02/14  余田 成男}
%

\Dchapterhead

前章で実行ファイルができたわけであるが, 実際にagcm5を走らせるためには
初期値ファイルと境界値ファイルが必要である(後者は省略可). また, 出力結
果のグラフをgtoolで書くためには軸ファイルがいる. これも忘れないうちに
作ってしまおう. さらに, agcm5の \verb!Mkinclude! で指定した以外の実験
設定はNAMELIST入力という機能を使って可読ファイルから読み込むので,
\verb!NAMELIST! 入力ファイルも作らなければならない.
\vspace{1em}

ここまでお膳立てができたところで, コマンド実行(時間積分)は, 
\begin{verbatim}
% (実行コマンド) < (NAMELIST入力ファイル)
\end{verbatim}
という形式で行う. 初期値・境界値ファイル名を \verb!NAMELIST! 入力ファ
イルに記述しておけば, 実行時にそれが参照され, 該当するファイルがオープ
ンされて, データが読み込まれるという手順となる.


\section{軸・初期値・境界値ファイルの作成}


\subsection{軸ファイル}

軸ファイルがなくてもagcm5は走るが, 図は描けないので軸ファイルを作って
おく. この部分は実験設定に依存しないので, 最初に片ずけることにする.
\begin{verbatim}
% cd agcm5/src/prep
% make axis
\end{verbatim}
とすると, 
\begin{verbatim}
*** WARNING (REWNML) ***  UNIT 5 MAY BE A STANDARD INPUT
\end{verbatim}
というメッセージを吐いて実行が中断される. これは各層の$\sigma$座標値の
入力を求めているためである. \verb!^D! を入力することでデフォルトの値が
採用され, 軸ファイルが作られる. 実際, 次のようなファイル群である.
\begin{verbatim}
% ls -l GTAX*
-rw-r--r--  1 horinout     1064 Dec 12 21:42 GTAXLOC.CSIG5.M
-rw-r--r--  1 horinout     1060 Dec 12 21:42 GTAXLOC.CSIG5.P
-rw-r--r--  1 horinout     1104 Dec 12 21:42 GTAXLOC.GGLA16
-rw-r--r--  1 horinout     1172 Dec 12 21:42 GTAXLOC.GLON32
-rw-r--r--  1 horinout     1064 Dec 12 21:42 GTAXWGT.CSIG5.M
-rw-r--r--  1 horinout     1060 Dec 12 21:42 GTAXWGT.CSIG5.P
-rw-r--r--  1 horinout     1104 Dec 12 21:42 GTAXWGT.GGLA16
-rw-r--r--  1 horinout     1172 Dec 12 21:42 GTAXWGT.GLON32
\end{verbatim}
ここで, \verb!GTAXLOC.*! は軸の位置のデータであり, \verb!GTAXWGT.*! は
平均を取るときの重みのデータである. 分解能の指定(第\ref{ss:agcm5Mkinc}
節)で \verb!RESOLUTION=t10l5! としたので, 鉛直に$\sigma$座標で5層, 水
平の緯度経度格子が$16\times32$の分解能用の軸データができていることが見
てとれる. これらの中身はバイナリーであるので, それを表示するためには
gtoolのコマンド \verb!gtshow! を使う. (そのためには,
\verb!gt3-dcl5/Mkinclude! で指定した \verb!$(BINDEST)! にパスを通して
おくかなければならない; 第\ref{ss:gt3Mkinc}節参照).
\begin{verbatim}
% gtshow GTAXLOC.GGLA16
###### Data No.    1 ##############                
 IDFM            :             9010
 DSET            : AXLOC           
 ITEM            : GGLA16          
 FNUM            :                1
 DNUM            :                0
 TITLE           : latitude                        
 UNIT            : deg             
 TIME            :                0
 UTIM            : SEC             
 DATE            : 19900001000100  
 TDUR            :                1
 AITM1           : GGLA16          
 ASTR1           :                1
 AEND1           :               16
 ASTR2           :                1
 AEND2           :                1
 ASTR3           :                1
 AEND3           :                1
 DFMT            : UR4             
 MISS            :   -0.9990000E+03
 DMIN            :   -0.9000000E+02
 DMAX            :    0.9000000E+02
 DIVS            :    0.1000000E+02
 DIVL            :    0.3000000E+02
 STYP            :                1
 CDATE           : 19961212 214236 
 CSIGN           : horinout        
 MDATE           : 19961212 214237 
 MSIGN           : horinout        
  1,  1,  1:  8.16506E+01   2,  1,  1:  7.08346E+01   3,  1,  1:  5.99549E+01
  4,  1,  1:  4.90607E+01   5,  1,  1:  3.81612E+01   6,  1,  1:  2.72592E+01
  7,  1,  1:  1.63559E+01   8,  1,  1:  5.45204E+00   9,  1,  1: -5.45204E+00
 10,  1,  1: -1.63559E+01  11,  1,  1: -2.72592E+01  12,  1,  1: -3.81612E+01
 13,  1,  1: -4.90607E+01  14,  1,  1: -5.99549E+01  15,  1,  1: -7.08346E+01
 16,  1,  1: -8.16506E+01                                                    
\end{verbatim}
\vspace{1em}

次に, これらの軸ファイルを所定のディレクトリに移す. gtoolで軸ファイル
の読み込み時にそれを探すのは, カレントディレクトリ,
\verb!gt3-dcl5/Mkinclude! の \verb!GTAXLOC!, \verb!GTAXWGT! で指定した
ディレクトリの順である. 指定を自分で変えていなければ, 
後者は \verb!$(LIBDEST)/gt3! である. いまの場合, 
これは \verb!$(HOME)/dennou/gt3-dcl5/lib/gt3! というディレクトリである.
はじめての場合には, 
\begin{verbatim}
% mkdir ~/dennou/gt3-dcl5/lib/gt3  
\end{verbatim}
として, このディレクトリを作り,
\begin{verbatim}
% mv GTAX* ~/dennou/gt3-dcl5/lib/gt3
\end{verbatim}
で, 軸ファイルを移す. 


\subsection{初期値ファイル}
\label{ss:agcm5init}

オリジナルのソースで用意されているのは, 等温静止大気に微小擾乱を加えた
初期値データである. これを作るのは簡単で, 
\begin{verbatim}
% cd agcm5/src/prep
% make init
\end{verbatim}
とすると, FORTRANプログラムがコンパイル・実行される. データの名前とファ
イル名を聞いてくるので適当に入力する:
\begin{verbatim}
 DATA NAME  ?
test
 FILE NAME  ?
/datadisk/horinout/TEST.INIT
\end{verbatim}
まず, \verb!DATA NAME! には初期値データの名称 \verb!test! を入力し
た. 16文字までの適当な名前をつける.  次に,\verb! FILE NAME! で初期値デー
タのファイル名を仮に \verb!/datadisk/horinout/TEST.INIT! とした. モデ
ル分解能が細かいときには, 当然大きなファイルができるのでパスに注意しな
ければならない. ホームディレクトリではなく, 適当なデータ用
ディスク \verb!/datadisk! に置く例である. その後, ネームリスト入力など
を聞いてくるが, \verb!^D! を入力してデフォルトに委ねて構わない. 出来た
ファイルの中で, 初期値は U, V, T, PS, Q(東西風, 南北風, 温度, 地上気圧, 
水蒸気量)の順でならんでいる.
\vspace{1em}

長時間走らせて準平衡状態になってから解析するような問題では, このように
等温静止大気を初期値とすれば良い. 一方, 初期値問題として何かを解こうと
すれば, その問題にふさわしい初期場を作るために, \verb!prep/xminit.F! 
を然るべく編集しなければならない.
\vspace{1em}

ここでは, t10l5のモデルで傾圧不安定の初期値問題を解くことにする. まず, 
ユーザー各自の資源を収めるディレクトリを \verb!src/usr/! の下につくる.
\begin{verbatim}
% cd agcm5/src/usr
% mkdir horinout
% cd horinout
% mkdir prep
% cd prep
\end{verbatim}
次に, \verb!prep! ディレクトリにある \verb!Makefile! をコピーして編集
する.
\begin{verbatim}
% cp ../../../prep/Makefile .
\end{verbatim}
\verb!Makefile! 中のパスを \verb!../include! から 
\verb!../../../include! 等に変える. 
\vspace{1em}

あとは各自が勝手に編集すれば良いのだが, ここでは堀之内のプログラムをコ
ピーして利用することにする.
\begin{verbatim}
% cp ~/dennou/agcm5/src/usr/horinout/prep/xmkinit00.F .
% cp ~/dennou/agcm5/src/usr/horinout/prep/barocli.F .
% cp ~/dennou/agcm5/src/usr/horinout/prep/ltinit.F .
\end{verbatim}
これらに対応して, \verb!Makefile! 中の \verb!OBJS_INIT! を, 
\begin{verbatim}
OBJS_INIT      = xmkinit00.o barocli.o ltinit.o
\end{verbatim}
とし, ファイルの最後に, 
\begin{verbatim}
xmkinit00.o: ../../../include/zcdim.F ../../../include/zhdim.F ../../../include/zccom.F
barocli.o: ../../../include/zcdim.F ../../../include/zhdim.F ../../../include/zccom.F
ltinit.o: ../../../include/zcdim.F ../../../include/zhdim.F
\end{verbatim}
を加える. 
\vspace{1em}

あとは, 等温静止大気の場合と同じである. 
\begin{verbatim}
% make init
\end{verbatim}
として, 聞かれるままにデータの名前やファイル名などを入力すればよい:
\begin{verbatim}
 DATA NAME  ?
barocli
 FILE NAME  ?
/datadisk/horinout/TEST.INIT
\end{verbatim}
さらなる質問は, やはり \verb!^D! でかわせばよい. これにより, 鉛直シアー
があり各層で剛体回転する基本帯状流に微小擾乱を加えた初期値データが得ら
れる. FORTRANプログラム \verb!barocli.F! 中のパラメータ TB1, TB2, U01,
U02 の値を変えれば, 傾圧性の異なる基本場が得られる.
\vspace{1em}

やはり, 出来たファイルの中で, 初期値は U, V, T, PS, Q の順でならんでい
る. これは, gtoolのコマンド \verb!gtshow! で確かめられる：
\begin{verbatim}
% cd /datadisk/horinout
% gtshow -head TEST.INIT
\end{verbatim}
ここで, オプション \verb!-head! を指定することにより, ヘッダーのみが表
示される. さらに, \verb!gtcont! で各種コンター図を描くこともできる：
\begin{verbatim}
% gtcont TEST.INIT
% gtcont y=5 TEST.INIT
% gtcont x=0 TEST.INIT
\end{verbatim}
最初の例は, \verb!gtcont z=0! と等価で, 鉛直平均した初期場の水平面図が 
U, V, $\cdots$ の順に描かれる. 二番目のように \verb!gtcont y=5! とすれ
ば, 北から5番目のグリッドにおける鉛直断面図が描かれる. また,
\verb!gtcont x=0! とすれば, 東西平均した子午面断面図が描かれる(図
\ref{f:jikkou1}). gtoolコマンドについては, 姉妹編「ごくらくGTOOL3体験」
を参照のこと.


\begin{figure}[b]
\begin{center}
\Depsf[7.5cm]{jikkou/f:jikkou1-1.eps}
\Depsf[7.5cm]{jikkou/f:jikkou1-2.eps}
\caption{初期値ファイルのgtcont出力例より. 東西風(左)と温度(右).}
\label{f:jikkou1}
\end{center}
\end{figure}


\subsection{境界値ファイル}

境界値ファイルがなくてもモデルは走る. この場合, 大気下端境界は全球が海
面で覆われている仮定され, 海面温度(SST)は初期値の最下層の温度がそのま
ま用いられる.
\vspace{1em}/s08d1c   

SSTファイルは \verb!make sst! で作ることができる. 初期場と同様に
NAMELIST入力は \verb!^D! でデフォルトにすれば, 仮想的な緯度分布の東西
に一様なSST分布を与えるファイルができる.
\begin{verbatim}
% cd agcm5/src/prep
% make sst
 DATASET NAME? 
SST
 OUTPUT FILE NAME for SST OUTPUT ?
sst.data
^D
\end{verbatim}
\vspace{1em}

やはり, 出来た境界値ファイルは, gtoolのコマンドで確かめられる：
\begin{verbatim}
% gtcont sst.data
% gtcurv x=1 sst.data
\end{verbatim}
\verb!gtcont! で水平分布のコンタ─図が描かれ, \verb!gtcurv! で南北分布
の折れ線図が描かれる. 



\section{NAMELIST入力ファイルの作成}

いよいよ最終段階である. ここで実験設定用のNAMELIST入力ファイルさえ作れ
ば, あとは走らせるだけである. NAMELIST入力は, おもにデフォルトの設定値
を変更するために使われる. 変更の必要のない項目は記述しなくてもよい.
NAMELIST入力機能そのものについてはFORTRANのマニュアル類を参照のこと.
\vspace{1em}

NAMELIST入力ファイルの例は \verb!agcm5/sample! に収められているので, 
適当なものをコピーして加工すると良い(例えば,
\verb!agcm5/sample/sh.Sun/INDATA!). 
ここではディレクトリ \verb!/datadisk/horinout/! に \verb!INDATA! とい
う名前のNAMELIST入力ファイルを作ることにする.
\begin{verbatim}
% cd agcm5/sample/sh.Sun
% cp INDATA /datadisk/horinout/
\end{verbatim}
\vspace{1em}

以下は, 上記の傾圧不安定の初期値問題に対するNAMELIST入力
ファイル \verb!INDATA! の例である：
\begin{verbatim}
% cd /datadisk/horinout/
% ls -l 
total 141
-rw-r--r--  1 horinout     1858 Dec 13 02:11 INDATA
-rw-r--r--  1 horinout   141536 Dec 12 23:35 TEST.INIT
% cat INDATA
 &NMRUN  RUN='TEST01',     SIGN='horinouchi'          &END
 &NMINTG TUNIT='MIN',      DELT=90,
         INISTP=3,         TFIL=0.05             &END
 &NMTIME TUNIT='DAY',
         START=0,          END=40,
         INTRST=0                               &END
 &NMINIT FILE='TEST.INIT'                 &END
 &NMRSTR FILE='TEST.RST', DFMT='UR8'      &END
 &NMINIG FILE=' '                                &END
 &NMRSTG FILE=' ',               DFMT='UR8'      &END
 &NMDATE IDATEI=1996,12,12,0,0,0                  &END
 &NMCALN OPERPT=F                                &END
 &NMDAYL TUNIT='HOUR',     DAYLEN=24             &END
 &NMHDIF TUNIT='HOUR',     TEFOLD=48,
         ORDER=6                                 &END
 &NMVDF0 DFMCON=0.01, DFHCON=0.01, DFECON=0.01      &END
 &NMBFIL HGRSST=' ', HGRHC=' ',
         HGRALB=' ',      HGRBET=' ',
         HGRZ0=' ',       HGRZSD=' ',
         HIDSFC=' '                             &END
 &NMPHIS HPHIS=' '                              &END

 &NMDIAG FILE='CON',       UNIT='HOUR',
         INTDIA=6,         IDIAG=16,
         JDIAG=100,         KDIAG=-1,
         NCOLS=80                                &END
 &NMHISD FILE=' ','CON',   TUNIT='HOUR','DAY',
         INTOUT=24,2,       INTSUM=0,0,
         AVRTYP=' ',       DFORM='UR4',
         INTEND=0                                &END
 &NMMONI IINT=10,          JINT=100,
         KINT=100,           NCOLS=133             &END
 &NMHIST ITEM='U',
         FILE='intg1/u.data',             &END
 &NMHIST ITEM='V',
         FILE='intg1/v.data',             &END
 &NMHIST ITEM='T',
         FILE='intg1/t.data',             &END
 &NMHIST ITEM='PS',
         FILE='intg1/ps.data',            &END
 &NMHIST ITEM='SIGDOT',
         FILE='intg1/sigdot.data',        &END
 &NMHIST ITEM='VOR',
         FILE='intg1/vor.data',           &END
 &NMHIST ITEM='DIV',
         FILE='intg1/div.data',           &END
\end{verbatim}
ここで, 各行の \verb!&! の前の空白は, Sunの場合には必要である(Convexで
は要らない). \verb!&NMHIST! で指定したように, 
データは \verb!/datadisk/horinout! の下の \verb!intg1! のディレクトリ
に納めることにする：
\begin{verbatim}
% mkdir intg1
\end{verbatim}
\verb!intg1! としたのは, 時間積分を延長したくなったら別の
ディレクトリ \verb!intg2! を用意することを想定しているからである(第
\ref{ss:restart}節参照).  


\section{実行}

\subsection{実行}
いよいよ実行である. 
\begin{verbatim}
% cd /datadisk/horinout/
% ~/dennou/agcm5/bin/agcm5.t10l5test < INDATA
\end{verbatim}
これで, \verb!INDATA! が読み込まれて, \verb!agcm5.t10l5test! が実行さ
れる. 以下は, 標準出力への出力結果の一部分である.
\begin{verbatim}
 &nmrun  run='TEST01          ', sign='horinouchi      '
 &end
 &nmintg  tunit='MIN ', delt=  120, inistp=  3, tfil=    5.0000000000000D-02
 &end
 &nmtime  tunit='DAY ', start=  0, end=  40, intrst=  0
 &end
 &nmfile  vmiss=   -999.00000000000

(中略)

############## CPU TIME SUMMARY ################
 SETUP              0.880000D+00   0.800000D+00
 TIMCON             0.293013D+01   0.291012D+01
 PHYSCS             0.114790D+03   0.114500D+03
 DYNMCS             0.259960D+03   0.259840D+03
 PADJST             0.355302D+02   0.353902D+02
 TFILT              0.751009D+01   0.749007D+01
 MISC               0.249985D+00   0.189987D+00
 HISTIN             0.929989D+01   0.927989D+01
 HISTOU             0.574001D+01   0.461004D+01
    TOTAL TIME =    0.437140D+03   0.435170D+03
\end{verbatim}
これで, 無事時間積分が終わったわけである. このCPU TIME SUMMARYは, 左列
のルーチンにかかった時間が秒単位で示されており, 
中央列は \verb!usr + sys!, 右列は \verb!usr! での時間である. 
この実行例では, CPU timeは合計で437秒かかっている.
\vspace{1em}

\verb!intg1! の下にちゃんとデータが出来ているか確認しておく.
\begin{verbatim}
% ls -l intg1
total 2952
-rw-r--r--  1 horinout      451200 Dec 12 23:55 div.data
-rw-r--r--  1 horinout      123520 Dec 12 23:55 ps.data
-rw-r--r--  1 horinout      533120 Dec 12 23:55 sigdot.data
-rw-r--r--  1 horinout      451200 Dec 12 23:55 t.data
-rw-r--r--  1 horinout      451200 Dec 12 23:55 u.data
-rw-r--r--  1 horinout      451200 Dec 12 23:55 v.data
-rw-r--r--  1 horinout      451200 Dec 12 23:55 vor.data
\end{verbatim}


\subsection{gtool解析}

出力結果をgtoolのアニメーションで見てみる.
\begin{verbatim}
% cd intg1
% gtcont -sw:lalt=T -sw:lwait=F -greset z=4 v.data
\end{verbatim}
ここで, \verb!-sw:lalt=T -sw:lwait=F!は, dclのswpackが管理する内部変数
を置き換えるオプションで, \verb!lalt! を \verb!T!(rue),
\verb!lwait! を \verb!F!(alse) と指定することにより, アニメーション表
示が可能となる(1ページの画面が比較的短時間で作画できる場合). 詳細は, 
地球流体電脳ライブラリ GRPH1 第7章を参照のこと. また, \verb!-greset! 
は, 風速のコンター間隔を結果の値に応じて変えるようにするためのオプショ
ンである. デフォルトでは, 風速のコンタ─間隔が2.5m/sに固定されてい
る. \verb!z=4! で下から4レベル目を選択し, 南北風 V の水平面コンター図
を描いている(図\ref{f:jikkou2}).

\begin{figure}
\begin{center}
\Depsf[7.5cm]{jikkou/f:jikkou2-1.eps}
\Depsf[7.5cm]{jikkou/f:jikkou2-2.eps}
\caption{出力結果のクイックルック(gtcont出力)例より. 南北風 V の水平面図.}
\label{f:jikkou2}
\end{center}
\end{figure}


\begin{verbatim}
% gtcont -sw:lalt=T -sw:lwait=F str=20 step=2 x=0 u.data
\end{verbatim}
この例では, \verb!str! と \verb!step! で,時系列データの読み込の始めと
間隔をそれぞれ指定している. また, \verb!x=0! で帯状平均値の子午面分布
のコンター図を描くようにしでいる. データは, 東西風 U である.
\verb!x=n! などで, \verb!n! が0のときは\verb!x!方向の平均値を,
$n$($>0$)のときは $n$ 番目のグリッドでの値を描くことになる.
\vspace{1em}

また, ポストスクリプト(ps)ファイルを作るには, 
\begin{verbatim}
% gtcont  str=28 end=28 x=0 wsn=2 u.data
\end{verbatim}
などとして, \verb!wsn! でdclのワークステーション番号2を指定する.


\subsection{再実行}
\label{ss:restart}

\verb!intg1! の結果に続けて積分を行ないたい場合には, 
別のディレクトリ \verb!intg2! を用意する：
\begin{verbatim}
% cd /datadisk/horinout/
% mkdir intg2
\end{verbatim}
また, 再実行用のNAMELIST入力ファイル \verb!INDATA2! を用意する. これ
と \verb!INDATA! との \verb!diff! をとった結果が次であるので, 該当部分
を書き換えればよい.
\begin{verbatim}
% diff INDATA INDATA2
5c5
<          START=0,          END=40,
---
>          START=40,          END=80,
7,8c7,8
<  &NMINIT FILE='TEST.INIT'                 &END
<  &NMRSTR FILE='TEST.RST', DFMT='UR8'      &END
---
>  &NMINIT FILE='TEST.RST'                 &END
>  &NMRSTR FILE='TEST.RST2', DFMT='UR8'      &END
34c34
<          FILE='intg1/u.data',             &END
---
>          FILE='intg2/u.data',             &END
(中略)
46c46
<          FILE='intg1/div.data',           &END
---
>          FILE='intg2/div.data',           &END
\end{verbatim}
\vspace{1em}

あとは,
\begin{verbatim}
% ~/dennou/agcm5/bin/agcm5.t10l5test < INDATA2
\end{verbatim}
で, 時間積分の延長(再実行)が行なわれる.
