今回は,地球惑星科学の情報化に関する「知の集積」の一例であるDCPAM という数値モデルを用いた実習を行います.
DCPAM とは,地球流体電脳倶楽部が開発している数値モデルの一つで,
惑星大気の循環や変動を計算機上でシミュレートするための大気大循環モデル(AGCM) です.(図 1 参照)
DCPAM の特徴は,
FORTRAN は,1954 年に IBM のジョン・バッカスによって考案され, 現在では主に科学計算に用いられている高級プログラム言語です.
高級プログラム言語は, プログラム言語のうち, より自然語に近く, 人間にとって理解しやすい構文や概念を持った言語の総称です. 高級な言語は FORTRAN の他にも BASIC, C, C++, Java などがあります.
その人間が理解しやすい高級プログラム言語をコンパイラ(人間が読める言葉から, 計算機が読める言葉に翻訳(変換)し, 実行可能な形式のファイルを作成するプログラム) を介して人間が計算機にプログラムを実行させます.これを「コンパイルする」と言います.
今回は DCPAM5 をビルドして数値積分を実行します.
ちなみに, DCPAM "5" はバージョン名(Debian GNU/Linux "jessie" のようなもの) を表しています.
ビルドとは, プログラムファイルのコンパイルやライブラリのリンク([付録4.1] 参照) などを行い, 最終的な実行ファイルを作成することを指します.
ちなみに,本ページのタイトルにあるように, 数値モデルの実行することを「モデルを走らせる」という言い方をすることがあります. これは, 英語の "run the model" という表現がもとになっています. では以下の説明をよく読んで DCPAM5 を走らせてみましょう!
DCPAM5 をビルドする方法はdcpam5 インストールガイドにまとめられています. 計算機環境によっては DCPAM を動かすためのソフトウェアから自分でインストールする必要があります. その場合はインストールガイドや [付録3] を参照してください. 以下では, あらかじめ TA, VTA によってある程度必要なソフトウェアがインストールされている情報実験機用におけるビルドの手順を示します.
今回の実習の作業はどなたか 1 人のアカウントで行なってください. ユーザ毎に DCPAM を走らせる準備を行なってもらうためです. もし他のアカウントでも同じ作業を行ないたい場合には授業時間外にやってください.
インストールされているパッケージに更新が無いか確認を行ってください.
(この作業の目的は,第 8 回 「0. 今後, 情報実習を受講するにあたってのお願い 」を参照)
$ sudo apt-get update |
$ sudo apt-get upgrade |
まず DCPAM のコンパイルを行う前に,ライブラリファイルがちゃんと存在することを確認しましょう.
情報実験機の場合, 依存するライブラリは Debian パッケージのものをインストールしてあります.
以下では, Debian パッケージを用いてインストールしたライブラリの確認を行ないます.
初めに, gtool5 ライブラリが正しくインストールされているかを確認してみます. dpkg でパッケージがインストールされているかを調べます.
$ dpkg -l | grep gtool5 |
wii gtool5 20160613-2 amd64 Fortran90 netCDF I/O library with .... |
次に, gtool5 のライブラリのファイルを確認しましょう. ここで用いる gtool5 のライブラリファイルは /usr/lib/x86_64-linux-gnu/gtool5/lib/libgtool5.a です. このファイルが gtool5 の Debian パッケージの中に入っていたかどうかを確認しましょう.
$ dpkg -L gtool5 | less |
更に, ライブラリファイルの中身が空っぽでないことを確認しましょう.確認するには,ar コマンドを使用します ( ar コマンドは,[付録4] 補足2 参照).
$ ar -t libgtool5.a |
… historyautoputaxis.o historyautoputaxismpi.o historyautoaddvariable.o historyautoaddattr.o historyautoput.o historyautoallvarfix.o historyautochkoutput.o |
gtool5 について確認できたら, spml のライブラリ /usr/lib/x86_64-linux-gnu/spml/lib/libspml-lapack-lapack.a についても同様に確認をしてみましょう.
次に,作業を行う作業ディレクトリを作成しましょう. ここでは dcpam/ という名前のディレクトリを作ることにしましょう.
$ mkdir dcpam $ cd dcpam |
DCPAM5 のアーカイブファイルを取得します.
$ wget http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20170306.tgz |
tar コマンドを使ってアーカイブファイルを展開します.
$ tar xvf dcpam5-20170306.tgz |
展開してできたディレクトリに移動します.
$ cd dcpam5-20170306 |
$ less README |
README ファイルを確認したら, 続いてドキュメントを眺めてみましょう.
$ cd doc/basic_equations/pub $ firefox basic_equations.pdf |
FORTRAN プログラムのファイルは src/ 以下に格納されています. src/ 以下の構造は,SRC_LIST ファイルを参照してください. メインプログラムのファイルは src/main/ に, それ以外のファイルは他のディレクトリに格納されています.
ここではメインプログラムの中身をのぞいてみます. メインプログラムが格納されているディレクトリに移動します.
$ cd ~/dcpam/dcpam5-20170306/src/main |
$ less dcpam_main.f90 |
展開したディレクトリの直下に戻ります.
$ cd ~/dcpam/dcpam5-20170306 |
最初に, FORTRAN プログラムをコンパイルするためのコマンドを環境変数 FC に設定します. ここでは spml パッケージに入っている spmfrt を使います. 情報実験機では, spmfrt の内部で FORTRAN コンパイラとしてGFortran (GNU FORTRAN Compiler)を用いるようになっています. これにより, 後で実行する configure において FOTRAN コンパイラに関する設定が適切になされます.
$ export FC=spmfrt |
$ ./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 |
$ make |
You have successfully built dcpam5. |
地球設定の数値実験を行ないます. この実験では, 自転角速度や太陽定数などの外部パラメータとして地球の値を与え, 地球の観測で得られた海面温度, 地形分布, 植生分布などを入力データとして読みこんで, 地球の気候を再現する計算を行ないます.
基本的に, ごくらく 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 |
$ ncdump sp_for_Earth_T021.nc
「実験の実行」の項目まで終了したら, 計算が正常に終了したかどうかを確認しましょう. 最初にコンソールに出力されているものを確認しましょう. 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] で行う結果のデータを用いて説明します.
今回は最後に地球設定実験でもっと長時間の積分を行う計算を投入するところまでやりましょう. この計算で生成されるデータを使った解析作業を来週行ないます.
まず, vi で設定ファイル dcpam_E_T21L26.conf を編集をします.
$ vi conf/dcpam_E_T21L26.conf |
この 3 年計算は時間がかかる (1 日程度) ため, ログアウトしても計算が走り続けるようにします.
そのためにいくつか方法がありますが, ここでは nohup コマンドを用いてバックグラウンドジョブとして実行する方法を紹介します.
以下のようにして DCPAM を実行してください.
$ nohup ./bin/dcpam_main -N=./conf/dcpam_E_T21L26.conf & |
上記の方法以外にも, ターミナルプレクサを使用するという方法もあります. 詳しくは [付録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 |
時々計算が走っているか確認すると良いです. もし計算が最後まで走らなかった場合は設定ファイルなどを再度確認し, 実行し直してください(些細なミスによって, 計算が途中で止まってしまうことは決して珍しくありません...).
今回の実技はこれで終了です. 次回は 3 年計算で出力されるデータを用いて解析・描画を行ないます. 情報実験機の電源を落さず, ログアウトだけしてください.
最終更新日: 2017/07/14 村橋 究理基 更新 | Copyright © 2000-2017 inex |