# 表題  2D 非弾性系対流モデル "deepconv" の手引き
#
# 履歴  1998/09/01  小高正嗣
#       1998/09/20  小高正嗣
#       1998/10/01  小高正嗣
#       1998/10/08  小高正嗣
#       1999/02/02  小高正嗣
#       1999/06/10  小高正嗣
#

1.はじめに

  この文書は2次元非弾性系対流モデル "deepconv" の手引である.

  本ディレクトリ内には以下のファイルが展開される.

	./README	README ファイル
	./Makeile	コンパイル用 Makefile
	./Mkinclude	Makefile インクルードファイル

	./doc		ドキュメント(Texファイル)ディレクトリ

	./dynamics	主要計算用プログラムディレクトリ
	./include	インクルードファイルディレクトリ
	./io		io 関連プログラムディレクトリ
	./main		main プログラムディレクトリ
	./monit		診断用プログラムディレクトリ
	./physics	物理過程(雲物理, 放射, 地表摩擦)プログラムディレクトリ
	./rad		放射過程(CO2 15μm)
	./setup		初期設定プログラムディレクトリ
	./util		下位ルーチンプログラムディレクトリ

	./tools		解析用サンプルプログラムディレクトリ

	./rand_seed	乱数表ファイル(rand.8192)格納ディレクトリ


  プログラムのリストはこの文書の末尾にある.
  またメインプログラム及びサブルーチンプログラムの解説は ./doc 以下の
  ドキュメントを参照のこと.


2.インストール

  2-1 Mkinclude ファイルの編集

    Mkinclude ファイルには Makefile が参照するマクロが定義してある.
    必要に応じて内容を変更する. 以下変更の可能性が高い点を中心に説明する.


    ・コンパイルコマンドとオプションの指定

	SHELL	= /bin/sh	シェルの指定

	FC= g77			オブジェクトファイル生成用コマンド
	FFLAGS= -O 	  	オブジェクトファイル生成用コマンドオプション
	FFLAG_AUTODBL=		FTT プログラム倍精度コンパイルオプション

	LD= $(FC)		実行ファイル生成用コマンド
	LDFLAGS=  		実行ファイル生成用コマンドオプション
	LDLIBS=			実行ファイル生成時に用いるライブラリ名

	CPP	= cpp		コンパイラプリプロセッサ名

	LATEX	= ajlatex	Tex ファイルコンパイルコマンド
	DVI2PS	= dvi2ps	ps ファイル生成コマンド

	RM	= /bin/rm	ファイル削除コマンド


    ・ソースファイル格納ディレクトリ名の指定

	ソースファイルを格納したディレクトリ名が定義される.

	DEEPCONVDIR	= 	deepconv を展開したディレクトリ名

	デフォルトではカレントディレクトリ (.) が指定される.

	この他マクロについては, 別途にサブルーチンを作成しそれを新しい
	ディレクトリに格納してモデルに含めない限り編集する必要はない.


    ・作業ディレクトリの指定

	WORKDIR	= data		乱数ファイルのコピー先ディレクトリ 
				計算実行はここで行う.

 
    ・使用プログラムファイルの指定

	以下コンパイルするプログラムファイルが指定される.
	変更されうる頻度の高いマクロは

	MAIN	= 		メインプログラム
	EXEC	= $(EXECDIR)/$(MAIN).exe
				実行ファイル名
	GRIDSIZE= 		インクルードファイル

	及び以下の初期設定ファイル指定マクロである.
	
	DAINIT	= 		
	EVSAT	= 
	HUMID	= 
	PSETUP	= 
	TEMPZ	= 
	SETCS2	= 
	SETCST	= 
	SETGRD	= 
	TEMPZ	= 
	UBAR    = 
	VBASIC2	= 

	たとえば物理パラメータを変更した計算を行いたい場合には, 新たに
	設定ファイルを作成しそれを SETCST で指定するようにすればよい. 


  2-2 コンパイル

	% make

    とすれば ./exec 以下に実行ファイルが用意され, 作業ディレクトリに乱
    数表がコピーされる.

    オブジェクトファイルを消去する場合には

	% make clean

    とすればよい. 
    
	% make clean.all

    とすると実行ファイルまで消去される.


  2-2 ドキュメントのコンパイル

    ./doc ディレクトリに移動してコンパイルする.

	% cd ./doc
	% make

    これで dvi ファイルが作成される. ps ファイルを作成するには更に

	% make ps 

    とする. 

    dvi ファイル, ps ファイルなど全ての生成物を消去するには

	% make clean.all

    とすればよい.


3.実行

  以下の作業は作業ディレクトリ(${WORK})に移動して行う.


  3-1 乱数データファイルのリンクファイルを作成

    乱数表(rand.8192)のシンボリックリンクファイル作る.

	% ln -s rand.8192 @T11.RAND.DATA


  3-2 計算条件指定ファイルの作成

    時間刻, 計算時間などを指定するファイル(計算条件指定ファイル)を作成
    する. このファイルの書式は以下のようになっている.

	% cat (計算条件指定ファイル名)
	IRUN
	TIME0, NLOOP1, NLOOP2, DTIME, NMONI, NTKUMU

    それぞれのフィールドには以下の条件を記入する.

	IRUN	実験番号(整数値)
		新しい条件で開始する場合には 1,
		以前の計算結果を初期値とする場合には 1 以降を記入する. 
	TIME0   計算開始モデル時刻(実数値)
	NLOOP1	出力回数(全時間積分ステップ数, 整数値)
	NLOOP2  出力あたりの時間ステップ数(整数値)
	DTIME	時間刻(単位: 秒, 実数値)
	NMONI	診断変数出力ステップ数(整数値)
	NTKUBU	雲・雨領域出力ステップ数(整数値)

    例えば新しい条件の計算を時間刻を 1 秒, 出力間隔を 10 分, 全計算時間を
    3 時間 として行なう場合は,

	% cat (計算条件指定ファイル名)
	1
	0.0, 18, 1200, 1.0, 1200, 1200

    とする. 出力間隔は NLOOP x DTIME /2 (秒)であることに注意.


  3-3 実行

    計算は以下のようにして行う.
  
	% (実行ファイル名) < (計算条件指定ファイル名) > (log ファイル名) &

    実行が始まると以下のファイルが作成される:

	@T11.KUBU.DATA	雲・雨領域の区分(診断用)
	@T11.PPAI.DATA	圧力
	@T11.QCLW.DATA	雲水混合比
	@T11.QRAI.DATA	雨水混合比
	@T11.QVAP.DATA	水蒸気混合比
	@T11.TPOT.DATA	potential temperature
	@T11.TSFC.DATA	地表面フラックス積算値(診断用)
	@T11.TURB.DATA	乱流拡散係数
	@T11.U.DATA	風の x 成分
	@T11.V.DATA	風の y 成分
	@T11.VB.DATA	基本場の変数の鉛直分布
	@T11.VPRF.DATA	各種変数の水平平均(診断用)
	@T11.W.DATA	風の z 成分


4. プログラムリスト

	./dynamics:
		ADDIF0.f	基本場の移流
		ADDIF1.f	基本場からの偏差の移流
		ADDIFK.f
		CDCOEF.f	乱流拡散係数の計算
		CLBUOY.f	浮力の計算
		CLCONM.f	格子点での質量収束(ゴミ堆積対策)
		CLCORIRD.f	レイリー摩擦(下と排他)
		CLCORIS.f	コリオリ力
		CLPRES.f	圧力方程式を解く
		CLTURB.f	乱流強度の時間変化
		CLVISC_E.f	乱流粘性係数の計算
		CLVISC_M.f	
		CLWADV.f	風から質量フラックスへの換算(温度の格子点)
		CLWFLX.f	風から質量フラックスへの換算(風の格子点)
		CLWMID.f	風の場の補間
		FARAIN2_E.f	雨の落下
		FARAIN2_M.f
		NLDIFF2.f	人工非線形拡散(ノイズ対策)
		NLDIFV.f
		NLDIFV2.f
		NLVISC.f	人工非線形粘性(ノイズ対策)
		QNFILL.f	穴埋め(負の水蒸気など)

	./include:
		grid_size_E.f	配列サイズ
		grid_size_M.f

	./io:
		FCLOSE.f	各種 file close
		FLREAD.f	継続計算などからの data 読み込み
		FLREADNV.f
		FLREADNV_m.f
		FLWRIT.f	計算した data の書きだし
		FOPEN_E.f	各種 file open

	./main:
		MAIN_E_1.f	メインルーチン及び  one time step の計算
				ドライバ(SUBROUTINE TSTEP)
		MAIN_M_1.f
		MAIN_M_1_fk.f
		MAIN_M_1s.f
		MAIN_M_1s_fk.f

		MAIN2_M_1.f	メインルーチン及び  one time step の計算
				ドライバ(SUBROUTINE TSTEP):
				CLDRAG.f を呼ぶ
		MAIN3_M_1.f	
	
		MAIN_M_rd.f	メインルーチン及び  one time step の計算
				ドライバ(SUBROUTINE TSTEP):
				放射スキーム(./rad 以下)を呼ぶ


	./monit:
		CLZPRF.f	水平平均量の計算
		KUBUN.f		雲・雨領域の決定(診断用)
		KUBUN_null.f
		MONIT.f		力学的診断量の書きだし
		MONITW.f	湿潤変数の診断量の書きだし
		CLZPRF.f
		KUBUN.f

	./physics:
		CLDRAG.f	バルク係数計算
		CLDRAG_M_std.f
		CLPHYSB_E.f	雲物理(凝結を含む)
		CLPHYSB_M.f
		CLRAD_E_1.f	放射冷却(一様固定)
		CLRAD_M_54.f
		CLRAD_M_dayf.f	日変化放射強制(一様固定)
		CLRICH.f	バルクリチャードソン数計算
		FXSURF2_E_1.f	地表面フラックス計算
		FXSURF2_M_std.f
		FXSURF3_M_std.f	地表面フラックス計算(CLDRAG.f使用)
		FXSURF3_M_nodust.f

	./rad:
		CLEQWD.f	等価幅の計算
		CLBBRAD_M.f	プランク関数の計算
		CLFXRDU_M.f	上向き放射フラックスの計算
		CLFXRDD_M.f	下向き放射フラックスの計算
		CLFXRDN.f	正味の放射フラックスの計算
		CLQRAD.f	放射強制の計算
		CLRAD.f		放射ルーチン:
				CLBBRAD.f,CLFXRDU.f,CLFXRDD.f,CLFXRDN.f,
				CLQRAD.f を呼ぶ
		RBASIC		放射場の基本設定:
				SETOPL.f,CLEQWD.f を呼ぶ
		SETOPL		光路長の計算

	./setup:
		DAINIT_E.f	初期条件の設定
		DAINIT_M.f
		EVSAT_E.f	飽和蒸気圧を計算する関数(雲物理からも呼ばれる)
		EVSAT_M.f
		HUMID_E.f	基準となる湿度鉛直分布
		HUMID_M.f
		PSETUP_E.f	圧力方程式解法ルーチンの初期設定
		PSETUP_M.f
		SETCS2_E.f	地表面条件・コリオリ定数の設定
		SETCS2_M.f
		SETCS2_M_5.f
		SETCST_E.f	物理定数の設定
		SETCST_M.f
		SETGRD3_E.f	差分格子設定
		SETGRD3_M.f
		SETGRD3_Mv.f
		TEMPZ_E.f	基本場の鉛直温度
		TEMPZ_M.f
		TEMPZ_M_dayf.f
		UBAR0.f		基本場の風速(レイリー摩擦の計算でも呼ばれる)
		VBASIC.f	基本場の計算
		VBASIC_M.f

	./util:
		ACLEAR.f	配列変数のクリア
		BOUND.f		境界条件の設定
		ADUMP.f		配列変数のデバッグ用出力
		lasubset.f	LAPACK のサブセット(逆行列・固有値問題)
		vfftorig.f	FFT(倍精度に精度拡張してコンパイル)