1. DCPAM5 を走らせよう

  1. DCPAM5 を走らせよう
  2. [付録1] make と Makefile
  3. [付録2] ターミナルプレクサ
  4. [付録3] DCPAM に必要な資源をインストールする方法
  5. [付録4] DCPAM をビルドしているとき裏で行われていること

[1.0] はじめに

今回は,地球惑星科学の情報化に関する「知の集積」の一例であるDCPAM という数値モデルを用いた実習を行います.

[1.0.1] DCPAM とは

DCPAM とは,地球流体電脳倶楽部が開発している数値モデルの一つで, 惑星大気の循環や変動を計算機上でシミュレートするための大気大循環モデル(AGCM) です.(図 1 参照)

DCPAM の特徴は,

  • 地球以外の惑星 (火星,木星) の大気循環を同じモデルで計算可能
  • FORTRAN 言語で書かれたプログラムを読みやすいようにプログラム全体 (例 : 数式) の書き方を工夫
  • フリーソフトウェアとして公開
  • が挙げられます.

    FORTRAN は,1954 年に IBM のジョン・バッカスによって考案され, 現在では主に科学計算に用いられている高級プログラム言語です.
    高級プログラム言語は, プログラム言語のうち, より自然語に近く, 人間にとって理解しやすい構文や概念を持った言語の総称です. 高級な言語は FORTRAN の他にも BASIC, C, C++, Java などがあります.
    その人間が理解しやすい高級プログラム言語をコンパイラ(人間が読める言葉から, 計算機が読める言葉に翻訳(変換)し, 実行可能な形式のファイルを作成するプログラム) を介して人間が計算機にプログラムを実行させます.これを「コンパイルする」と言います.

     DCPAM 概要
    図.1.0 大気大循環モデルの概要.
    (https://www.gfd-dennou.org/library/dcpam/plan/about_GCM-2016-05-30.pdf より)

    今回は DCPAM5 をビルドして数値積分を実行します.
    ちなみに, DCPAM "5" はバージョン名(Debian GNU/Linux "jessie" のようなもの) を表しています.
    ビルドとは, プログラムファイルのコンパイルやライブラリのリンク([付録4.1] 参照) などを行い, 最終的な実行ファイルを作成することを指します.

    ちなみに,本ページのタイトルにあるように, 数値モデルの実行することを「モデルを走らせる」という言い方をすることがあります. これは, 英語の "run the model" という表現がもとになっています. では以下の説明をよく読んで DCPAM5 を走らせてみましょう!

    DCPAM5 をビルドする方法はdcpam5 インストールガイドにまとめられています. 計算機環境によっては DCPAM を動かすためのソフトウェアから自分でインストールする必要があります. その場合はインストールガイド[付録3] を参照してください. 以下では, あらかじめ TA, VTA によってある程度必要なソフトウェアがインストールされている情報実験機用におけるビルドの手順を示します.

    [1.0.2] 事前準備

    今回の実習の作業はどなたか 1 人のアカウントで行なってください. ユーザ毎に DCPAM を走らせる準備を行なってもらうためです. もし他のアカウントでも同じ作業を行ないたい場合には授業時間外にやってください.

    インストールされているパッケージに更新が無いか確認を行ってください.
    (この作業の目的は,第 8 回 「0. 今後, 情報実習を受講するにあたってのお願い 」を参照)

    $ sudo apt-get update
    
    $ sudo apt-get upgrade
    

    [1.1] 必要なライブラリの確認

    まず DCPAM のコンパイルを行う前に,ライブラリファイルがちゃんと存在することを確認しましょう.
    情報実験機の場合, 依存するライブラリは Debian パッケージのものをインストールしてあります. 以下では, Debian パッケージを用いてインストールしたライブラリの確認を行ないます.
    初めに, gtool5 ライブラリが正しくインストールされているかを確認してみます. dpkg でパッケージがインストールされているかを調べます.

    $ dpkg -l | grep gtool5
    

    これで
    wii  gtool5  20160613-2 amd64  Fortran90 netCDF I/O library with ....
    
    というものが出力されていれば OK です.

    次に, gtool5 のライブラリのファイルを確認しましょう. ここで用いる gtool5 のライブラリファイルは /usr/lib/x86_64-linux-gnu/gtool5/lib/libgtool5.a です. このファイルが gtool5 の Debian パッケージの中に入っていたかどうかを確認しましょう.

    $ dpkg -L gtool5 | less
    

    これで出力されるリストの中に /usr/lib/x86_64-linux-gnu/gtool5/lib/libgtool5.a はあるでしょうか? あるならば, 実際にライブラリファイルが入っているディレクトリに cd で移動して ls コマンドでファイルが存在していることを確認しましょう.

    更に, ライブラリファイルの中身が空っぽでないことを確認しましょう.確認するには,ar コマンドを使用します ( ar コマンドは,[付録4] 補足2 参照).

    $ ar -t libgtool5.a
    

    これで
        …
    historyautoputaxis.o
    historyautoputaxismpi.o
    historyautoaddvariable.o
    historyautoaddattr.o
    historyautoput.o
    historyautoallvarfix.o
    historyautochkoutput.o
    
    と出力されます. これは libgtool5.a に結合されているオブジェクトファイルのリストになっています.
    オブジェクトファイルについては[付録4]5-1 を参照してください.

    gtool5 について確認できたら, spml のライブラリ /usr/lib/x86_64-linux-gnu/spml/lib/libspml-lapack-lapack.a についても同様に確認をしてみましょう.

    [1.2] アーカイブファイルの取得・確認

    次に,作業を行う作業ディレクトリを作成しましょう. ここでは dcpam/ という名前のディレクトリを作ることにしましょう.

    $ mkdir dcpam
    $ cd dcpam
    

    DCPAM5 のアーカイブファイルを取得します.

    $ wget http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20170306.tgz
    

    tar コマンドを使ってアーカイブファイルを展開します.

    $ tar xvf dcpam5-20170306.tgz
    

    tar については第三回の実習資料を参照してください.

    展開してできたディレクトリに移動します.

    $ cd dcpam5-20170306
    

    doc/, exp_setup_files/, src/ などのディレクトリができていることを ls コマンドで確認しましょう. またそれぞれのディレクトリにどのようなファイルが格納されているかは, README ファイルを見てください.
    README ファイルは, プログラム (ソフトウェア) を配布する際にプログラムの一般的な情報を記載した添付文書のことです.
    $ less README
    

    README ファイルを確認したら, 続いてドキュメントを眺めてみましょう.

    $ cd doc/basic_equations/pub
    $ firefox basic_equations.pdf
    

    上で見たのは DCPAM の基礎方程式と離散化に関するドキュメントです. 必要に応じて doc/ ディレクトリにある他のドキュメントも参照してください. プログラムのサブルーチンの機能を記述したコード解説もあります.

    FORTRAN プログラムのファイルは src/ 以下に格納されています. src/ 以下の構造は,SRC_LIST ファイルを参照してください. メインプログラムのファイルは src/main/ に, それ以外のファイルは他のディレクトリに格納されています.

    ここではメインプログラムの中身をのぞいてみます. メインプログラムが格納されているディレクトリに移動します.

    $ cd ~/dcpam/dcpam5-20170306/src/main
    

    このディレクトリにはDCPAM のメインプログラムが記述された dcpam_main.f90, dcpam_init_data.f90, dcpam_init_data_surface.f90 の 3 つの FORTRAN ファイルが格納されています. dcpam_main.f90 は数値時間積分を行うメインプログラム dcpam_init_data.f90 は大気の初期値データを作成するメインプログラム, dcpam_init_data_surface.f90 は地表面の初期値データを作成するメインプログラムです.
    では,時間積分を行うメインプログラムをのぞいてみましょう.
    $ less dcpam_main.f90
    

    メインプログラムにはいくつかコメント行 (行頭が! の行) が存在しています. コメント行を見てどこでどのようなことをやっているのか大雑把に眺めてみてください. また, プログラムの長さについてはどう思いましたか? 長いと感じましたか? それともたいしたことないと思ったでしょうか?
    ともかく, このようなプログラムが組み合わさって DCPAM は走ります.

    [1.3] DCPAM5 のビルド

    展開したディレクトリの直下に戻ります.

    $ cd ~/dcpam/dcpam5-20170306
    

    最初に, FORTRAN プログラムをコンパイルするためのコマンドを環境変数 FC に設定します. ここでは spml パッケージに入っている spmfrt を使います. 情報実験機では, spmfrt の内部で FORTRAN コンパイラとしてGFortran (GNU FORTRAN Compiler)を用いるようになっています. これにより, 後で実行する configure において FOTRAN コンパイラに関する設定が適切になされます.

    $ export FC=spmfrt
    

    以下のように configure コマンドを実行します.
    $  ./configure --with-netcdf=/usr/lib/libnetcdf.a --with-netcdff=/usr/lib/libnetcdff.a  --with-netcdf-include=/usr/include/netcdf --with-ispack=/usr/lib/x86_64-linux-gnu/libispack.a --with-gtool5=/usr/lib/x86_64-linux-gnu/gtool5/lib/libgtool5.a --with-spml=/usr/lib/x86_64-linux-gnu/spml/lib/libspml-lapack-lapack.a
    

    正しく終了したでしょうか? 以下のように
      Execute GNU make in the current directory, as follows.
    
        make
     
    と表示され, Config.mk ファイルが作成されていたら OK です. いよいよ DCPAM5 をビルドします.
      $ make
    

    これで
            You have successfully built dcpam5.
    
    と出れば成功です.

    [1.4] テスト実験

    地球設定の数値実験を行ないます. この実験では, 自転角速度や太陽定数などの外部パラメータとして地球の値を与え, 地球の観測で得られた海面温度, 地形分布, 植生分布などを入力データとして読みこんで, 地球の気候を再現する計算を行ないます.

    基本的に, ごくらく DCPAM の地球実験 の記述にもとづいて作業をしてください. まずは, このページに行き, 説明をよく見ながら地球実験にとりかかってください.

    なお, 上記ページの「実験用データの準備」の項において使用するサンプルデータファイルは以下のようにして直接取得することもできます.

    $ wget http://www.gfd-dennou.org/library/dcpam/sample/2015-02-11_tutorial/Earth/O3_CMIP5_climatology_zonalmean_T021.nc
    $ wget http://www.gfd-dennou.org/library/dcpam/sample/2015-02-11_tutorial/Earth/sic_amipII_bc_clim_T021.nc
    $ wget http://www.gfd-dennou.org/library/dcpam/sample/2015-02-11_tutorial/Earth/sp_for_Earth_T021.nc
    $ wget http://www.gfd-dennou.org/library/dcpam/sample/2015-02-11_tutorial/Earth/sst_amipII_bc_clim_T021.nc
    

    サンプルデータファイルは上から順に,オゾン分布,海表面密度,地面特性,海表面温度のデータファイルです.これらのデータファイルはNetCDF 形式で保存された,バイナリファイルです.
    サンプルデータファイルに書かれているデータを覗いてみたい方は,
      $ ncdump sp_for_Earth_T021.nc
    
    と打ち込んでみてください.ちなみに,ncdump コマンドはNetCDF ファイルを表示するためのコマンドです.

    「実験の実行」の項目まで終了したら, 計算が正常に終了したかどうかを確認しましょう. 最初にコンソールに出力されているものを確認しましょう. DCPAM が最後まで走って終了したのであれば,

                   … 
     check_prog_vars        0.279828E-01
     output_freq_used_var   0.968020E+00
     timefilter_williams2   0.495951E+00
     others                 0.521201E+01
     ------------------------------------------------
            TOTAL TIME =    0.142704E+03  (2.38 minutes)
    
    のようなものが表示されているはずです.

    次に数値実験によって複数のデータファイル (*.nc) が作成されているはずです.ls コマンドでどのようなファイルができたのか確認しておきましょう.

    では, DCPAM が意図した計算を正しく行なったかどうかを調べるため, ごくらく DCPAM の地球実験 のページにある 「結果の可視化」の項目を参照して, 掲載されているものと同様の図を書くことができるかを確認しましょう.
    結果の可視化にあたり,Gphys というデータ解析,可視化ソフトウェアを用いています.
    詳しいことは,次回,下の[1.5] で行う結果のデータを用いて説明します.

    [1.5] 長時間積分の実行 (宿題)

    今回は最後に地球設定実験でもっと長時間の積分を行う計算を投入するところまでやりましょう. この計算で生成されるデータを使った解析作業を来週行ないます.

    まず, vi で設定ファイル dcpam_E_T21L26.conf を編集をします.

    $ vi conf/dcpam_E_T21L26.conf
    
    地球実験 の 「実験の実行 その2」の記述を参考にして, 3 年間の数値積分を実行するように設定を変更しましょう.

    この 3 年計算は時間がかかる (1 日程度) ため, ログアウトしても計算が走り続けるようにします. そのためにいくつか方法がありますが, ここでは nohup コマンドを用いてバックグラウンドジョブとして実行する方法を紹介します.
    以下のようにして DCPAM を実行してください.

    $ nohup ./bin/dcpam_main -N=./conf/dcpam_E_T21L26.conf  &
    

    上記のように nohup をつけてコマンド実行すると, ターミナルを終了してもコマンドの処理が続行されます. これで長時間の実行を行うことができるわけです. nohup をつけて実行するとその出力結果は nohup.out という名前のファイルに保存されます. なお, nohup.out ファイルが存在していた場合には, コマンドの出力結果は既存の hohup.out ファイルに追記されていきます. nohup.out を消去せずに DCPAM の実行を繰りかえすとそれらの出力結果の全て nohup.out に記録され nohup.out ファイルのサイズがどんどん大きくなっていきますので, 注意してください.

    上記の方法以外にも, ターミナルプレクサを使用するという方法もあります. 詳しくは [付録2] ターミナルプレクサ を参照してください.

    ターミナルを終了しても計算が継続されていることを確認してみましょう. まず, DCPAM を実行したターミナルを終了させます. 新たにターミナルを起動して, そこで

    $ ps aux | grep dcpam
    

    と入力します. これで
    momoko    4592 76.3  3.1 567244 247216 pts/0   Rl   10:45   2:59 ./dcpam_main -N=./dcpam_E_T21L26.conf
    
    などの表示が出てくれば OK です(ちなみに例にある momoko は石渡さんがよく使うユーザアカウント名). ps コマンドの出力結果の意味に関してはman で調べてみてください. 他にも top コマンドを使用する, ログファイル (上記の場合だと Earth_3year.log) が時間とともに更新されていることを確認する (時々 less コマンドでファイルの中を見てみる) という方法もあります.

    時々計算が走っているか確認すると良いです. もし計算が最後まで走らなかった場合は設定ファイルなどを再度確認し, 実行し直してください(些細なミスによって, 計算が途中で止まってしまうことは決して珍しくありません...).

    今回の実技はこれで終了です. 次回は 3 年計算で出力されるデータを用いて解析・描画を行ないます. 情報実験機の電源を落さず, ログアウトだけしてください.



    >> 次ページへ

    最終更新日: 2017/07/14 村橋 究理基 更新 Copyright © 2000-2017 inex