% 表題   らくらく DCPAM5 --- 出力する変数を増やすには
%
% 履歴
%\Drireki{2012/02/24 竹広真一}
%
\section[出力する変数を増やす]
        {出力する変数を増やすには}

  この節では, 出力する変数を増やすための
  ソースプログラムを改変と実行ファイルを作成するための手順を記す. 
  具体的な例題として Held and Schuarz (1994) のベンチマーク実験で
  を追加出力することを試みる. 
  実際の改造は, 
  %
  \begin{verbatim}
     HistoryAutoAddVariable   ! 出力変数の定義
     HistoryAutoPut           ! データ出力
  \end{verbatim}
  %
  の 2 項目を追加することになる. 
  そのほかに実験設定ファイルにおいて, 
  新たに出力したい変数名を追加する必要がある. 

  以下の例では, 実際に改造するソースプログラムが
  モジュールソースファイル \\
  "src/held\_suarez\_1994/held\_suarez\_1994.f90" であるが,
  他のモジュールプログラムにおいても同様の手順で出力データの
  追加をしたプログラムを作成・実行できるだろう. 

  また, 前章「設定ファイルを用いた実験設定の変更」での
  「出力設定を変更するには」の節, 
  あるいは「ごくらく \Dmodel」の「実験条件の変更/出力設定の変更」
  \url{https://www.gfd-dennou.org/GFD_Dennou_Club/dc-arch/takepiro/dcpam5-cvs/doc/gokuraku/changesetup.htm#label-4}も参照されたい. 
  
  \subsection{準備}

    インストールガイド
    (\url{http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5_latest/INSTALL.htm})
    にしたがって, 
    \Dmodel をコンパイルしてライブラリ (lib/libdcpam5.a) と
    モジュールファイル (include/*.mod 等)を作成しておく. 

  \subsection{作業用ディレクトリ作成}

    まず \Dmodel ソースのトップディレクトリ(以下の例では dcpam5-YYYYMMDDとする)に移動しておく. 
    次にソース変更作業と実験用ディレクトリを \Dmodel ソースツリー外部に作成する. 
    ここでは \Dmodel ソースツリーの隣に dcpam5-exp/addoutput ディレクトリを作成し, 
    その中で作業を行うことにする. 
    %
    \begin{verbatim}
      % mkdir -p ../dcpam5-exp/addoutput
    \end{verbatim}
    %
    作成した実験用ディレクトリに移り, その下に実験専用のソースファイル置き場
    設定ファイル (NAMELIST ファイル) 置き場を作成する. 
    %
    \begin{verbatim}
      % cd ../dcpam5-exp/addoutput
      % mkdir -p src/main
      % mkdir src/held_suarez_1994
      % mkdir conf
   \end{verbatim}
    %
    初期値作成のソースプログラムと
    モデル本体のソースプログラムを "src/main" ディレクトリにコピーする. 
    用いる設定ファイル(の元)を "conf" ディレクトリにコピーする. 
    %
    \begin{verbatim}
      % cp ../../dcpam5-YYYYMMDD/src/main/dcpam_main.f90 src/main
      % cp ../../dcpam5-YYYYMMDD/src/main/init_data.f90 src/main
      % cp ../../dcpam5-cvs/src/held_suarez_1994/held_suarez_1994.f90 \
        src/held_suarez_1994
      % cp ../../dcpam5-YYYYMMDD/exp_setup_files/dcpam_hs94_T21L20.conf conf
      % cp ../../dcpam5-YYYYMMDD/exp_setup_files/init_data_hs94_T21L20.conf conf
    \end{verbatim}

  \subsection{ソースプログラムの編集}

    コピーしたプログラムソースファイルを編集し出力する変数を追加する. 
    例として, "src/held\_suarez\_1994/held\_suarez\_1994.f90" を編集して, 
    温位 $\theta = T(p_0/p)^\kappa$ を出力に追加してみよう

    まず, ヒストリデータ出力のためのへの変数登録箇所において
    温位を出力変数として追加する. 'subroutine Hs94Init' 中の
    %
    \begin{verbatim}
      call HistoryAutoAddVariable( 'TempEQHS94', &
        & (/ 'lon ', 'lat ', 'sig ', 'time' /), &
        & 'equilibrium temperature', 'K' )
   \end{verbatim}
    %
    の下の行(507 行目あたり)に 
    "HistoryAddVariable" の項目を次のように追加する. 
    %
    \begin{verbatim}
      call HistoryAutoAddVariable( 'PTemp' , &
        & (/ 'lon ', 'lat ', 'sig ','time' /), &
        & 'potential temperature', 'K' )
    \end{verbatim}
    %
    次に変数の出力を追加する. 'subroutine HS94Forcing' 中の
    ヒストリーデータ出力の箇所
    %
    \begin{verbatim}
      ! ヒストリデータ出力
      ! History data output
      !
      call HistoryAutoPut( TimeN, 'DUDtHS94',    xyz_DUDt )
      call HistoryAutoPut( TimeN, 'DVDtHS94',    xyz_DVDt )
      call HistoryAutoPut( TimeN, 'DTempDtHS94', xyz_DTempDt )
      call HistoryAutoPut( TimeN, 'TempEQHS94',  xyz_TempEQ )
   \end{verbatim}
    %
    の下に, 次の行を追加する. 
    %
    \begin{verbatim}
      call HistoryAutoPut( TimeN, 'PTemp', xyz_Temp*(1.0d5/xyz_Press)**Kappa)
   \end{verbatim}
    %

  \subsection{設定ファイルの編集}

    実験用設定ファイルに, 新たに出力したい変数名を追加する. 
    ./conf/dcpam\_hs94\_T21L20.conf の最後の方の「ヒストリデータ出力の個別設定」
    のリストに "PTemp" を追加する. 
    %
    \begin{verbatim}
      !
      ! ヒストリデータ出力の個別設定
      ! Individual settings about history data output
      !
      &gtool_historyauto_nml
        Name = 'U, V, Temp, Ps, QVap, SigDot, OMG, TempEQHS94, PTemp'
      /
   \end{verbatim}

  \subsection{実験実行用のディレクトリのセットアップ}

    さて, ファイルの準備が整ったら, 実験実行用のディレクトリを
    セットアップする. そのためには \Dmodel のソースツリートップに戻って
    "make expdir" を実行する. 
    すると, 作業ディレクトリトップの名前と非標準ソースディレクトリ名
    並びに実験ディレクトリの名前をきかれるので, それらを入力する. 
    %
    \begin{verbatim}
      % cd ../../dcpam5-YYYYMMDD
      % make expdir
      sh ./setup_expdir_nonstd.sh

      ****** Setup a directory for a experiment ******

      Enter top directory name []: ../dcpam5-exp
      Enter experimet directory name []: addoutput

      *** "../dcpam5-exp/addoutput" is already exist ***

        Directory in which non-standard files are prepared
          [../dcpam5-exp/addoutput/src]:   Creating "../dcpam5-exp/addoutput/Makefile" ...   done.
        Creating "../dcpam5-exp/addoutput/src/Makefile" ...   done.
        Creating "../dcpam5-exp/addoutput/src/main/Makefile" ... ls: ../dcpam5-exp/addoutput/src/main/*.F90: そのようなファイルやディレクトリはありません
        done.
        Creating "../dcpam5-exp/addoutput/src/held_suarez_1994/Makefile" ... ls: ../dcpam5-exp/addoutput/src/held_suarez_1994/*.F90: そのようなファイルやディレクトリはありません
        done.
        Creating "../dcpam5-exp/addoutput/Config.mk" ...   done.
        Creating "../dcpam5-exp/addoutput/rules.make" ...   done.

      *** Setup of "../dcpam5-exp/addoutput" is complete ***

   \end{verbatim}
    %
    すると, ../dcpam5-exp/addouput/ に Config.mk と rules.make 
    ならびに src 以下の各サブディレクトリの Makefile が作成される. 

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

    実行ファイルを作成しよう. そのためには
    実験ディレクトリ "../dcpam5-exp/addoutput" に移って
    "make" を行う
    \footnote{
      環境変数 FFLAGS を 
      \Dmodel ライブラリを作成したときと同じ値にしておく
      必要があるかもしれない. 
    }.
    %
    \begin{verbatim}
      % cd ../dcpam5-exp/addoutput
      % make
   \end{verbatim}
    %
    コンパイルエラーが出てしまったら, 先程編集したファイルを修正し, 
    再び "make" を行う. エラーがなくなるまでこの作業を繰りかえす. 

    めでたくエラーがなくなり, 実行ファイルができ上がったら
    %
    \begin{verbatim}
      % make install
   \end{verbatim}
    %
    を実行する. すると実行ファイルが "bin" ディレクトリに
    インストールされる. 

  \subsection{実験の実行}

    実行の仕方はごくらく \Dmodel の Held and Suarez (1994) 実験の手順と一緒である. 
    まず初期値データを作成する. 
    %
    \begin{verbatim}
      % bin/init_data -N=./conf/init_data_hs94_T21L20.conf
   \end{verbatim}
    %
    そして, 実験を実行するには, 
    %
    \begin{verbatim}
      % bin/dcpam_main -N=./conf/dcpam_hs94_T21L20.conf \
        >& dcpam_hs94_T21L20.log &
   \end{verbatim}
    %
    といった具合である. "PTemp.nc" が作成されていたら成功である. 

    簡単な解析と可視化については, 「ごくらく \Dmodel」 の「簡単な解析・可視化」を
    参照のこと. 

  \subsection{最後に}

    実験のために修正したファイルらは別の場所に
    コピー保存しておくことを勧める. 
    %
    \begin{verbatim}
      % cp src/held_suarez_1994/held_suarez_1994.f90 [somewhere]
      % cp conf/dcpam_hs94_T21L20 [somewhere]
      % cp ...
   \end{verbatim}


%%% Local Variables: 
%%% mode: japanese-latex
%%% TeX-master: "../rakuraku"
%%% End: 
