1. DCPAM5 を走らせよう

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

[1.1] はじめに

今回は,地球惑星科学に関する知見を集積したものである数値モデルに触れてみます.DCPAM というモデルを使用します.

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

DCPAM の特徴として,

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

     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: の項目を見てください. 軸に関する変数の中には以下のものがあります.

    次に, time の値を確認してください.

        time = 0, ......, 2
    

    となっていれば 2 日目まで計算ができています. ここに並んでいる数字はデータ出力された時刻を表しています. ここでは時刻の単位として「日」が使われているので 2 日分分のデータが格納されていることになります.

    次に, DCPAM が意図した計算を正しく行なったかどうかを調べるため, gpview というrubyスクリプトを使って図を描いてみましょう. このコマンドは Dennou Ruby Project で開発されている Gphys というデータ解析,可視化ソフトウェアに入っているものです.
    詳しいことは,次回,下の[1.6] で作成するデータを用いて説明します.

    次のコマンドを打ってみましょう.

    $ gpview Temp.nc@Temp,time=2,lon=0
    

    以下のような図を描くことができたはずです.

    images/ExampleTemp.png
    図1: テスト計算で得られた大気の温度分布. 2日目の経度0度における温度の緯度・σ面内の分布(子午面分布).

    [1.8] 長時間積分データを眺めてみよう

    地球の気候状態を計算で求めるには数年の実験が必要になります. ここではそのような長時間の実験を実際におこなう時間はありませんので, あらかじめ計算で作っておいたデータを使ってみましょう. 以下は, 3年積分を実行して作成したデータです. 実習時間中には東西風のデータをとってきて以下のようにして 731日目から1095 日目まで (3 年目の1年間) の時間平均した東西平均をした東西風 の図をかいてみましょう.
    $ gpview U.nc@U,time=731:1095 --mean time,lon
    

    これで以下のような図を描くことができるはずです.

    images/ExampleU.png
    図2: 3年計算で得られる大気の東西風分布. 3 年目の1年平均の東西平均した東西風の緯度・σ面内の分布(子午面分布).

    他にもいろいろな図をかいてみましょう. それらをもとに課題に取り組んでください.
    >> 次ページへ
    情報実験第 11 回のページへ戻る

    最終更新日: 2018/07/12 石渡 正樹 更新
    Copyright © 2000-2018 inex