[1.1] はじめに
今回は,地球惑星科学に関する知見を集積したものである数値モデルに触れてみます.DCPAM というモデルを使用します.
DCPAM とは,地球流体電脳倶楽部が開発している数値モデルの一つで,惑星大気の循環や変動を計算機上でシミュレートするための大気大循環モデル(AGCM) です.(図 1 参照)
DCPAM の特徴として,

図.1 大気大循環モデルの概要.
(https://www.gfd-dennou.org/library/dcpam/plan/about_GCM-2016-05-30.pdf より)
今回は DCPAM5 をビルドして数値積分を実行します.
ちなみに, DCPAM "5" はバージョン名(Debian GNU/Linux "stretch" のようなもの) を表しています.
ビルドとは, プログラムファイルのコンパイルやライブラリのリンク([付録5.1] 参照) などを行い, 最終的な実行ファイルを作成することを指します.
ちなみに,本ページのタイトルにあるように, 数値モデルの実行することを「モデルを走らせる」という言い方をすることがあります. これは, 英語の "run the model" という表現がもとになっています. では以下の説明をよく読んで DCPAM5 を走らせてみましょう!
DCPAM5 をビルドする方法はdcpam5 インストールガイドにまとめられています. 計算機環境によっては DCPAM を動かすためのソフトウェアから自分でインストールする必要があります. その場合はインストールガイドや [付録4] を参照してください. 以下では, あらかじめ TA, VTA によってある程度必要なソフトウェアがインストールされている情報実験機用におけるビルドの手順を示します.
今回は実技時間内での作業は 1 つのアカウントで行い,適宜入力する人を交代して進めてください.他のアカウントでも同じ作業を行ないたい場合には授業時間外にやってください.
[1.2] 最初の作業
まず,インストールされているパッケージに更新が無いか確認を行ってください.
(この作業の目的は,第 8 回 「0. 今後, 情報実習を受講するにあたってのお願い 」を参照)
$ sudo apt update $ sudo apt upgrade
[1.3] 必要なライブラリの確認
まず DCPAM のコンパイルを行う前に,ライブラリファイルがちゃんと存在することを確認しましょう.
情報実験機の場合, 依存するライブラリは Debian パッケージのものをインストールしてあります.
以下では, Debian パッケージを用いてインストールしたライブラリの確認を行ないます.
初めに, gtool5 ライブラリが正しくインストールされているかを確認してみます. dpkg でパッケージがインストールされているかを調べます.
$ dpkg -l | grep gtool5
これで
ii gtool5 20160613-2+0~20190321105526.15~1.gbp4ea4a7 amd64 Fortran90 netCDF I/O library .....というものが出力されていれば 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 コマンドでファイルが存在していることを確認しましょう.
gtool5 について確認できたら, spml のライブラリ /usr/lib/x86_64-linux-gnu/spml/lib/libspml-lapack-lapack.a についても同様に確認をしてみましょう.
[1.4] ソースコードの取得・確認
次に,作業を行う作業ディレクトリを作成しましょう. ここでは dcpam/ という名前のディレクトリを作ることにしましょう.
$ mkdir dcpam $ cd dcpam
DCPAM5 のアーカイブファイルを取得します.
$ wget http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20180304-2.tgz
tar コマンドを使ってアーカイブファイルを展開します.
$ tar xvf dcpam5-20180304-2.tgz
tar については第三回の実習資料を参照してください.
展開してできたディレクトリに移動します.
$ cd dcpam5-20180304-2
doc/, exp_setup_files/, src/ などのディレクトリができていることを ls コマンドで確認しましょう.
[1.5] DCPAM5 のビルド
展開したディレクトリの直下に戻ります.
$ cd ~/dcpam/dcpam5-20180304-2
最初に, FORTRAN プログラムをコンパイルするためのコマンドを環境変数 FC に設定します. ここでは spml パッケージに入っている spmfrt を使います. 情報実験機では, spmfrt の内部で FORTRAN コンパイラとして GFortran (GNU FORTRAN Compiler)を用いるようになっています. これにより, 後で実行する configure において FOTRAN コンパイラに関する設定が適切になされます.
$ export FC=spmfrt
以下のように configure コマンドを実行します.
$ ./configure --with-netcdf=/usr/lib/x86_64-linux-gnu/libnetcdf.so --with-netcdff=/usr/lib/x86_64-linux-gnu/libnetcdff.a --with-netcdf-include=/usr/include --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.6] テスト実験
地球設定の数値実験を行ないます. この実験では, 自転角速度や太陽定数などの外部パラメータとして地球の値を与え, 地球の観測で得られた海面温度, 地形分布, 植生分布などを入力データとして読みこんで, 地球の気候を再現する計算を行ないます.
基本的に, ごくらく 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 形式で保存された,バイナリファイルです.
「実験の実行」の項目まで終了したら, 計算が正常に終了したかどうかを確認しましょう. 最初にコンソールに出力されているものを確認しましょう. 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 コマンドでどのようなファイルができたのか確認しておきましょう.
[1.7] 計算結果の確認
解析・描画の作業を開始する前に, 使用する netCDF ファイルの中身を見ておくことにします. まず実験を行なったディレクトリに行ってください. そして, 以下のようにしてファイルの中身を見てください.
$ cd ~/dcpam/dcpam5-exp/Earth-exp/ $ ncdump Temp.nc | less
データの軸変数を見ておきましょう. Temp.nc の variables: の項目を見てください. 軸に関する変数の中には以下のものがあります.
- lon : 経度
- lat : 緯度 DCPAM はスペクトル法で計算を行なっていますが, データファイルには格子点値に変換されたものが出力されます. 格子点の間隔はおよそ何km になっているかわかりますか?
- sig : σ=p/ps (ps は地表面気圧). DCPAM の鉛直座標は気圧に基づいた ものになっています. 対流圏界面は σ=0.15 付近にあります. 対流圏 (高さおよそ 10km) の 中に鉛直格子点はいくつあるでしょうか?
- time : 時刻
次に, time の値を確認してください.
time = 0, ......, 2
となっていれば 2 日目まで計算ができています. ここに並んでいる数字はデータ出力された時刻を表しています. ここでは時刻の単位として「日」が使われているので 2 日分分のデータが格納されていることになります.
次に,
DCPAM が意図した計算を正しく行なったかどうかを調べるため,
gpview というrubyスクリプトを使って図を描いてみましょう.
このコマンドは Dennou Ruby Project で開発されている
Gphys というデータ解析,可視化ソフトウェアに入っているものです.
詳しいことは,次回,下の[1.6] で作成するデータを用いて説明します.
次のコマンドを打ってみましょう.
$ gpview Temp.nc@Temp,time=2,lon=0
以下のような図を描くことができたはずです.
[1.8] 長時間積分データを眺めてみよう
地球の気候状態を計算で求めるには数年の実験が必要になります. ここではそのような長時間の実験を実際におこなう時間はありませんので, あらかじめ計算で作っておいたデータを使ってみましょう. 以下は, 3年積分を実行して作成したデータです.- Temp.nc : 大気の温度[K}.
- U.nc : 東西風[m/sec]. 西から東に吹く風.
- V.nc : 南北風[m/sec]. 南から北に吹く風.
- SigDot.nc : σ速度(鉛直風)[1/sec]. 負値が上昇流をあらわす.
- PRCP.nc : 降水量[kg/m2/sec].
- EvapU.nc : 蒸発量[kg/m2/sec].
$ gpview U.nc@U,time=731:1095 --mean time,lon
これで以下のような図を描くことができるはずです.
図2: 3年計算で得られる大気の東西風分布. 3 年目の1年平均の東西平均した東西風の緯度・σ面内の分布(子午面分布).
>> 次ページへ