1. DCPAM5 を走らせるには

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

※ 2020 年度は「1. DCPAM5 を走らせるには」 は一通り読んだ後に, 「2. DCPAM5 の出力データを見る」 は手元で実行してください. それをもとに課題に取り組んでください. 更に, 応用課題に取り組む場合には, 情報実験機にログインして 「1. DCPAM5 を走らせるには」 の [1.3] から [1.7] までを実際に実行してください.
資料中の "#" は "$" と同じくプロンプトを意味していますが, 実行には管理者権限が必要になります.

[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.2] 最初の作業

    2020 年度は, この項目の作業は行わないでください.

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

    $ sudo apt update
    $ sudo apt upgrade
    

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

    応用課題に取り組む場合は, 情報実験機にログインして [1.3] から [11.7] までを実際に実行してください.

    以下では, 情報実験機において DCPAM をビルドして実行する方法を紹介します.

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

    $ dpkg -l | grep gtool5
    

    これで
        ii gtool5 20160613-2+0~20200406153552.16~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 というデータ解析,可視化ソフトウェアに入っているものです.

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

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

    これで, dcl.pdf という名前の pdf ファイルが出力されます. gphys で出力される pdf ファイルは 90 度回転したものに なってしまっていますので, convert というコマンドを使って 正しい向きに変換したファイルを作ります.
    $ convert -rotate 90 dcl.pdf Temp.pdf 
    

    ここで, Temp.pdf は出力するファイル名で, 好きなものに 変えることができます. 生成された pdf ファイル (上の例では Temp.pdf) を手元の パソコンに転送して見てみましょう. 以下のような図になっているはずです. 同じ図が描けていれば, DCPAM を正しくインストールし実行できたことになります.

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

    温度は (経度, 緯度, 高度, 時間) の 4 次元のデータ(空間は 3 次元のデータ) ですが, DCPAM では (経度, 緯度, 時間) の 3 次元のデータ(空間は 2 次元のデータ) も出力されます. それらには表面温度 (SurfTemp.nc), 降水量 (PRCP.nc), 表面気圧 (Ps.nc) などがあります. それらの3 次元のデータ(空間は 2 次元のデータ) の図を描くには以下のようにします.
    $ gpview SurfTemp.nc@SurfTemp,time=1 --wsn=2
    

    これで, 1 日目における表面温度の (経度, 緯度) 分布を 描くことができます.
    >> 次ページへ
    情報実験第 10 回のページへ戻る

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