% 表題 地球流体電脳倶楽部 ごくらく AGCM5   標準実験：湿潤大気大循環
%
% 履歴
\Drireki{97/02/20  堀之内 武}
\Drireki{97/03/07  余田 成男}
%

\Dchapterhead

これまでは, ほとんどの物理過程を取り除いた「力学」モデルを構成し, 傾圧
不安定初期値問題を解くという実例を述べた. しかし, これではGCMとはいえ
ないので, この章では放射や湿潤対流過程などを含む標準的な設定で, 準平衡
状態を求める実験を行う. ワークステーションでそれほど時間をかけずに計算
を行うために, 分解能は前章と同じにしたが, もっと高い分解能で計算すれば
より現実的な実験となるであろう.
\vspace{1em}

モデルの設定としては, 基本的に各物理過程の標準ルーチンを使用する. ただ
し, 重力波抵抗だけは入れないことにする. 自分でそれなりの設定をしない限
り重力波抵抗はゼロになってしまい, 余計に計算時間がかかるだけだからであ
る. 
\vspace{1em}

これまでの二つの章でのべたインストールと実行を繰り返すことになる. 同じ
ライブラリを使ったりするので, いくつかの手続きをスキップする. 今回の場
合, 実行ファイルを作り直して, 初期値・境界値を与え, 実験設定をして実行
することになる.



\section{インストール}

分解能はこれまでと同じとするので, ライブラリを新たに作り直す必要はない.
\verb!Mkinclude! ファイルを編集し直して, 実行ファイルを再コンパイルす
るだけでよい.


\subsection{Mkincludeの編集}

第\ref{ss:agcm5Mkinc}節と同様に \verb!/agcm5/src! ディレクトリ
の \verb!Mkinclude! ファイルを編集する. 「サイト依存部分」は同じなので, 
ここで書き換えるのは, 「実験設定部分」のおもに非標準ルーチンの指定部分
だけである. 以下に, 選択または変更したところを列挙する.
\begin{verbatim}
############# 実行ファイル名指定 agcm5.$(RESOLUTUON)$(MODELNAME) #####
MODELNAME       = moist         # 適当な名前をつけましょう.

############## nonstd/ (非標準ルーチン) の指定 ###########
###### 積雲パラメタリゼーション #####
CUMLUS  =                       # 標準   Kuo 方式

###### 乾燥対流調節 ######
DRYADJ  =                       # 標準  あり

###### 浅い積雲対流 ######
SHLCNV  =                       # 標準  Tiedtke

###### 重力波抵抗 ######
GRVD    =  nonstd/p2gra0.o      #       重力波抵抗なし

###### 放射 ######
RADIAT  =                       # 標準

###### 鉛直拡散 ######
VDFUS   =                       # 標準
\end{verbatim}



\subsection{実行ファイルの作成}

\verb!Mkinclude! ファイルの書き換えが終わったら, 
やはり \verb!/agcm5/src! ディレクトリで実行ファイルを再コンパイルする.
\begin{verbatim}
% make gcm 
% make clean
\end{verbatim}
これで, \verb!$(HOME)/dennou/agcm5/bin! というディレクトリの下に,
\verb!agcm5.t10l5moist! というファイルができているはずである.



\section{実行}

分解能が同じなので, 軸ファイルもつくり直す必要がない. 湿潤大気大循環実
験用に初期値ファイル・境界値ファイルを作り直して, NAMELIST入力ファイル
を再編集し, 実行すればよい.


\subsection{初期値ファイル}

長期間積分した後の準平衡状態を求めるのだから, 初期値は特に凝る必要がな
いであろう. そこで, 初期値として \verb!src/prep! ディレクトリに用意さ
れている静止等温大気に微小温度擾乱を加えたものを用いることにする. 初期
値ファイルの作り方は, 第\ref{ss:agcm5init}節のはじめに述べた通りである：
\begin{verbatim}
% cd prep
% make init
 DATA NAME  ?
rest
 FILE NAME  ?
/datadisk/horinout/Rest.init
^D
\end{verbatim}


\subsection{境界値ファイル}

境界条件としては, 地表面は全球海面とし, そこでの温度分布は気候学的SST
の分布に近い値を用いる. これも \verb!src/prep! ディレクトリに用意され
ているものを使う：
\begin{verbatim}
% make sst
 DATASET NAME? 
SST
 OUTPUT FILE NAME for SST OUTPUT ?
/datadisk/horinout/SST.data
^D
\end{verbatim}


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

NAMELIST入力ファイルを再編集する. 以下の例で行っているのは, おもに入出
力のファイルに関する設定だけあり, モデルの物理にかかわる設定の変更は 
何もしてない. 
\begin{verbatim}
% cd /datadisk/horinout
% ls -l
total XXX
-rw-r--r--  1 horinout     1994 Mar  6 22:43 INDATA
-rw-r--r--  1 horinout   182432 Mar  6 22:14 Rest.init
-rw-r--r--  1 horinout     3088 Mar  6 22:15 SST.data
drwxr-xr-x  2 horinout      512 Mar  7 09:25 intg1/
% cat INDATA
 &NMRUN  RUN='AP.KUO.T10L5',    SIGN='horinouchi' &END
 &NMINTG TUNIT='MIN',      DELT=60,
         INISTP=3,         TFIL=0.05              &END
 &NMTIME TUNIT='DAY',
         START=0,          END=50,
         INTRST=0                                 &END
 &NMINIT FILE='Rest.init'                         &END
 &NMRSTR FILE='Rst.day50', DFMT='UR8'             &END
 &NMDATE IDATEI=0,1,1,0,0,0                       &END
 &NMBFIL HGRSST='SST.data',                       &END

 &NMDIAG FILE='CON',       UNIT='HOUR',
         INTDIA=24,        IDIAG=100,
         JDIAG=100,         KDIAG=-1,
         NCOLS=80                                 &END
 &NMHISD FILE=' ','CON',   TUNIT='HOUR','DAY',
         INTOUT=24,10,     INTSUM=0,0,
         AVRTYP=' ',       DFORM='UR4',
         INTEND=0                                 &END
 &NMMONI ISTR=1,           IINT=10,
         JSTR=4,           JINT=100,
         KSTR=1,           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='Q',      FILE='intg1/q.data',      &END
 &NMHIST ITEM='RAIN',   FILE='intg1/rain.data',   &END
 &NMHIST ITEM='SENS',   FILE='intg1/sens.data',   &END
 &NMHIST ITEM='EVAP',   FILE='intg1/evap.data',   &END
 &NMHIST ITEM='QCNDC',  FILE='intg1/qcndc.data',  &END
 &NMHIST ITEM='VOR',   TUNIT='HOUR', INTOUT=48, INTSUM=0
                        FILE='intg1/vor.data',    &END
 &NMHIST ITEM='DIV',   TUNIT='HOUR', INTOUT=48, INTSUM=0
                        FILE='intg1/div.data',    &END
 &NMHIST ITEM='OLR',   TUNIT='HOUR', INTOUT=48, INTSUM=0
                        FILE='intg1/olr.data',    &END
 &NMHIST ITEM='QRADL', TUNIT='HOUR', INTOUT=48, INTSUM=0
                        FILE='intg1/qradl.data',  &END
\end{verbatim}
ここで, ランの名前AP.KUO.T10L5は, 「Aqua-Planetで, 積雲パラメタリゼー
ションがKUOスキームのT10切断5層のモデル」にちなんでつけたものであ
る. 結果の出力は, 風速(U,V)や温度(T), 地表気圧(PS)といった量以外に, 降
水量(RAIN), 顕熱・潜熱フラックス(SENS,EVAP), 積雲による加熱(QCNDC), 長
波放射(OLR)なども出すようにしている. ほとんどの物理量は１日間隔で出力
するが(ヒストリーデフォルト設定 \verb!&NMHISD! の行を参照),渦度(VOR)な
ど一部のファイルはサンプリング間隔を粗くして2日としている.



\subsection{実行}

実行方法は前章の例と同様である.
\begin{verbatim}
% cd /datadisk/horinout/
% mkdir intg1
% ~/dennou/agcm5/bin/agcm5.t10l5moist < INDATA | & tee std.out
\end{verbatim}
これで, \verb!INDATA! が読み込まれて, \verb!agcm5.t10l5moist! が実行さ
れる. ここではコマンド \verb!tee! を使って標準出力を
ファイル \verb!std.out! にも落としている. 実行時間は Sun ワークステー
ション SS5 で以下の通りであった.
\begin{verbatim}
% tail -11 std.out
 ############## CPU TIME SUMMARY ################
 SETUP              0.276667D+01   0.271667D+01
 TIMCON             0.540115D+01   0.535109D+01
 PHYSCS             0.488534D+03   0.488317D+03
 DYNMCS             0.584149D+03   0.584066D+03
 PADJST             0.134199D+03   0.134165D+03
 TFILT              0.209024D+02   0.208690D+02
 MISC               0.350037D+00   0.300049D+00
 HISTIN             0.265144D+02   0.264976D+02
 HISTOU             0.983353D+01   0.911698D+01
    TOTAL TIME =    0.127353D+04   0.127187D+04
\end{verbatim}
CPU時間の合計は21分ちょっとであり, 要したメモリーは8MB弱であった.  各
項を見ると, 力学過程(\verb!DYNMCS!)と物理過程(\verb!PHYSCS!)に多くの時
間を要していることがわかる.


\subsection{再実行}

前小節の実行がうまくいっていることを確認すれば, 第\ref{ss:restart}節
参考にして, さらに時間積分を続けよう. 
\begin{verbatim}
% cd /datadisk/horinout/
% mkdir intg2
\end{verbatim}
また, 再実行用のNAMELIST入力ファイル \verb!INDATA2! を用意する. 
\begin{verbatim}
% diff INDATA INDATA2
5c5
<          START=0,          END=50,
---
>          START=50,          END=200,
7,8c7,8
<  &NMINIT FILE='Rest.init'                         &END
<  &NMRSTR FILE='Rst.day50', DFMT='UR8'             &END
---
>  &NMINIT FILE='Rst.day50'                         &END
>  &NMRSTR FILE='Rst.day200', DFMT='UR8'            &END
24,33c24,33
<  &NMHIST ITEM='U',      FILE='intg1/u.data',      &END
(中略)
<  &NMHIST ITEM='QCNDC',  FILE='intg1/qcndc.data',  &END
---
>  &NMHIST ITEM='U',      FILE='intg2/u.data',      &END
(中略)
>  &NMHIST ITEM='QCNDC',  FILE='intg2/qcndc.data',  &END
(以下略)
\end{verbatim}
\vspace{1em}

あとは,
\begin{verbatim}
% ~/dennou/agcm5/bin/agcm5.t10l5test < INDATA2
% ~/dennou/agcm5/bin/agcm5.t10l5moist < INDATA2 | & tee std.out2
\end{verbatim}
で, 時間積分の延長(再実行)が行なわれる. できたファイルを繋げるには次の
ようにすれば良い.
\begin{verbatim}
% cd intg1
% foreach file ( *data )
foreach? gtsel -apnd ../intg2/$file out:$file
foreach? end
\end{verbatim}
これで, \verb!intg1/! の各ファイルの後ろに \verb!intg2/! の同名のファ
イルが付く. \verb!gtsel!はgtoolコマンドのひとつで, \verb!-apnd! オプショ
ンを使っている. 


\section{gtool解析}

AGCM5の標準的な設定で湿潤大気大循環モデルを200日間走らせることができた.
得られた結果をgtoolを用いて見ておこう.


\subsection{アニメーション}

まず, 帯状平均量の変遷を \verb!gtcont! アニメーションで見てみよう. 
\begin{verbatim}
% cd /datadisk/horinout/intg1
% gtcont -sw:lalt=t -sw:lwait=f str=2 step=2 x=0 t.data \
    cont=2.5,10 range=200,300 color=40 cpat=20999,2000
\end{verbatim}
この例では, 帯状平均(\verb!x=0)した温度(\verb!t.data!)の子午面コンター
図を2日目(\verb!str=2!)から2日毎(\verb!step=2!)にアニメーション表示
(\verb!-sw:lalt=t -sw:lwait=f!)している. 2行目では等高線図でカラートー
ンを貼る指定をいろいろ行っている. コンタ─の間隔はマイナーラインが2.5K
でメジャーラインが10K(\verb!cont=2.5,10!)とし, 表示する範囲は200Kから
300Kまで(\verb!range=200,300!)である. また, トーンの数は40
(\verb!color=40!)で, カラーマップの番号20999から2000番おき
(\verb!cpat=20999,2000!)の色をつけている.
\vspace{1em}

トーンを以下のように陽に指定することもできる.
\begin{verbatim}
% gtcont -sw:lalt=t -sw:lwait=f str=2 step=2 x=0 t.data \
    tone=-999,240,270 pat=9999,0,8999
\end{verbatim}
この例ではコンターはデフォルトに任せ, トーンは270K以下と290K以上とに貼っ
ている. \verb!tone! の最初の引数 \verb!-999! はデフォルト($- \infty$)
で, これを省略して \verb!,! からはじめても良い. 
\vspace{1em}

帯状流も見てみよう. 
\begin{verbatim}
% gtcont -sw:lalt=t -sw:lwait=f str=2 step=2 x=0 u.data \
    cont=2.5,10 range=-25,60 color=34 cpat=20999,2000
% gtcont -sw:lalt=t -sw:lwait=f str=2 step=2 x=0 u.data tone=,0 pat=14
\end{verbatim}
徐々に亜熱帯ジェットが形成していく様がわかるはずである. 実行結果が同じ
かどうか確認するために, 200日目の帯状平均した温度と帯状流の子午面図を
図\ref{f:hyoujun1}に示しておく.
\vspace{1em}

\begin{figure}[tb]
\begin{center}
\Depsf[7.5cm]{hyoujun/f:hyoujun1-1.eps}
\Depsf[7.5cm]{hyoujun/f:hyoujun1-2.eps}
\caption{湿潤大気大循環の200日積分結果のgtcont出力例より. 温度(左)と帯
状風(右).}
\label{f:hyoujun1}
\end{center}
\end{figure}

ところで, 雨はどう降っているのだろうか. 
\begin{verbatim}
% gtcont -sw:lalt=t -sw:lwait=f rain.data \
    tone=50,200,800 pat=98999,5999,2999
\end{verbatim}
激しい降水は低緯度に多いことが見てとれる. その他の物理量も見ておこう. 
\begin{verbatim}
% gtcont -sw:lalt=t -sw:lwait=f vor.data z=1 
% gtcont -sw:lalt=t -sw:lwait=f vor.data z=4
% gtcont -sw:lalt=t -sw:lwait=f div.data z=1
% gtcont -sw:lalt=t -sw:lwait=f div.data z=4
\end{verbatim}
渦度擾乱は主に中緯度に, 発散擾乱は主に低緯度にできているのがわかる. 



\subsection{データ解析}

\verb!gtsel!, \verb!gtseq! を使って各種物理量の時系列を作って眺めよう. 
\begin{verbatim}
% gtsel x=0  rain.data && gtseq out:zm_rain_seq.data
% gtcont -exch -greset              zm_rain_seq.data
% gtsel x=0 z=4 u.data && gtseq out:zm_u_z4_seq.data
% gtcont -exch                      zm_u_z4_seq.data
% gtsel str=100 y=4 z=3 v.data && gtseq out:y4_v_z3_seq.data
% gtcont -greset                            y4_v_z3_seq.data
% gtsel str=50  y=8   olr.data && gtseq out:y8_olr_seq.data
% gtcont -greset                            y8_olr_seq.data
% gtsel x=0 y=0 olr.data && gtseq out:global_olr_seq.data
% gtcurv y=1                          global_olr_seq.data
\end{verbatim}
切り方によって帯状平均量の時間発展やホフメラ─ダイアグラムが描けるはず
である. 図\ref{f:hyoujun2}は帯状平均降水量の緯度-時間断面図であ
る. ITCZ が形成され, 不規則に時間変動しているのがわかる(なぜ堀之内君の
結果と微妙に違うのだろう? あなたの結果もこれと違っていますか?).  最後
の例は, OLRの全球平均値を計算して, その時間変化を折れ線で図示するもの
である. \verb!gtcurv! では本来 \verb!y=1! と指定しなくてもうまく行くべ
きであろうが, 現状ではこれが必要である.
\vspace{1em}

\begin{figure}[tb]
\begin{center}
\Depsf[10cm]{hyoujun/f:hyoujun2.eps}
\caption{湿潤大気大循環モデルで得られた帯状平均降水量の緯度-時間断面図.}
\label{f:hyoujun2}
\end{center}
\end{figure}


最後に「ごくらくGTOOL3体験」で作った, 擾乱による南北熱フラックス
($\overline{T'v'}$)を計算するGTOOLコマンドスクリプトを順にかけてみる.
\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
rm -f tedy.data vedy.data
gtsel x=0 out:"e_h_flux.data" teve.data
rm -f teve.data
% eddy_heat_flux
\end{verbatim}
\verb!e_h_flux.data! は, 擾乱による熱フラックス$\overline{T'v'}$の緯度-
高度2次元データが200日分の時系列データとなったものである. この緯度-高
度分布を等値線図でみたり, \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}

