R2D2を使い始めるには

ディレクトリ構造の準備

R2D2は公開していないので、各自 R2D2.zip のようなファイルを受け取るはずである。研究を実施する際には、以下のようなディレクトリ構造を構成することを推奨する。

project_name/
           ├─ run/
           │    ├─ d001/
           │    ├─ d002/
           │    ├─ d003/
           │    ├─ ...
           │
           ├─ py/
           └─ idl/

pyには R2D2_py をクローンしてきたもの、idlには R2D2_idl をクローンしてきたものを配置する。ここは名前が変わっても問題ない。python(py) とidlのどちらかを使えば解析は可能である(両方ダウンロードする必要はない)。

堀田から受け取った R2D2.zip ファイルをそれぞれ run/ ディレクトリの d001 と名前を変えて配置する。新しい設定で計算する際は d002, d003 とコピーしていくのが良いであろう。

R2D2ディレクトリの中は以下のようなディレクトリ構造を持つ。ファイル出力もプリプロセッサで制御しているため、指定によっては、 data/ 以下の構造は変更される。

R2D2/
   ├─ F90_deps.py
   ├─ Makefile
   ├─ README.md
   ├─ gen_time.py
   ├─ copy_caseid.py
   ├─ data/
   │     ├─ param/
   │     │      ├─ nd.dac
   │     │      ├─ back.dac
   │     │      ├─ params.dac
   │     │      └─ xyz.dac
   │     │
   │     ├─ qq/
   │     │   ├─ qq.dac.e
   │     │   ├─ qq.dac.o
   │     │   ├─ qq.dac.00000000
   │     │   ├─ qq.dac.00000001
   │     │   ├─ ...
   │     │
   │     ├─ tau/
   │     │   ├─ qq.dac.00000000
   │     │   ├─ qq.dac.00000001
   │     │   ├─ ...
   │     │
   │     ├─ remap/
   │     │      ├─ remap_info.dac
   │     │      ├─ qq/
   │     │      │   ├─ qq.dac.00000000.00000000
   │     │      │   ├─ qq.dac.00000001.00000000
   │     │      │   ├─ ...
   │     │      │
   │     │      └─ vl/
   │     │          ├─ c.dac
   │     │          ├─ vla.dac.00000000
   │     │          ├─ vla.dac.00000001
   │     │          ├─ vla.dac.00000002
   │     │          ├─ ...
   │     │
   │     ├─ slice/
   │     │   ├─ qqx.dac.00000000.000000000
   │     │   ├─ ...
   │     │   ├─ qqy.dac.00000000.000000000
   │     │   ├─ ...
   │     │   ├─ qqz.dac.00000000.000000000
   │     │   ├─ ...
   │     │
   │     └─ time/
   │           ├─ mhd/
   │           │    ├─ t.dac.00000000
   │           │    ├─ t.dac.00000001
   │           │    ├─ ...
   │           │
   │           └─ tau/
   │                ├─ t.dac.00000000
   │                ├─ t.dac.00000001
   │                ├─ ...
   │
   ├─ input_data/
   ├─ make/
   ├─ sh/
   └─ src/
        ├─ all/
        └─ include/

それぞれのファイル、ディレクトリの簡単な説明は以下に示す。

  • F90_deps.py

    make/Makefile 生成のためのpythonスクリプト。Fortranコードの依存性を調べて、make/R2D2.deps に出力する。新しいプログラムを作成したときは

    python F90_deps.py
    

    として make/R2D2.deps を更新する。

  • Makefile

    makeをするときに make ディクレクトリに移動する為のファイル。編集する必要はない。編集すべき Makefilemake/Makefile に配置してある。

  • README.md

    GitHubに表示する為の説明ファイル。情報が古くなっている可能性があるので、 README.md を見るよりは、このウェブページの情報を参照されたい。

  • gen_time.py

    他のモデルから計算結果をもらったときにdataディレクトリや時間のファイルを生成する為のpythonスクリプト

  • copy_caseid.py

    ディレクトリを変えて続きの計算を行うためのスクリプト

  • data/

    fortranプログラムを実行した後に、データが保存されるディレクトリ。fortranプログラムを実行すると自動的に生成される。

    • data/param/

      基本的な計算設定パラメタを出力する為のディレクトリ

    • data/qq/

      チェックポイントのための3次元データを出力するためのディレクトリ

    • data/remap/

      解析のためのリマッピングをしたあとのデータを格納するディレクトリ

      • data/remap/qq/

        計算データをリマッピングして扱いやすくした三次元データを格納するディレクトリ。単精度で出力。解析には主にこのデータを使う。

      • data/remap/vl/

        計算実行中の解析データを格納するディレクトリ

    • data/slice/

      slice_def.F90 で定義したスライスデータを格納するディレクトリ

    • data/time/

      出力した時間を記録したファイルを格納するディレクトリ。3次元データの出力の時間を記録する mhd と光学的厚さ一定の場所の出力の時間を記録する tau のディレクトリがある。

      • data/time/mhd/

        MHD量のアウトプットの時間データ

      • data/time/tau/

        光学的厚さ一定の面アウトプットの時間データ

    • input_data/

      プリプロセスで用意したデータの格納ディレクトリ

    • make/

      Makefile が配置してあるディレクトリ。 make によって生成されたファイルもここに格納される

    • sh/

      スーパーコンピュータでのジョブ投入のためのシェルスクリプトを格納するディレクトリ

    • src/

      ソースファイルを格納するディレクトリ

      • all/

        メインのソースファイルを格納するディレクトリ

      • include/

        includeファイルを格納するディレクトリ

コンパイル

コンパイルはR2D2のディクレトリで

make

とするのみである。使う計算機によって設定が違うので make/Makfile を編集する必要がある。 このファイルの1行目に

SERVER=FUGAKU

などと書いてある部分がある。計算機に応じてこの部分を書き換える。 それぞれ以下のような対応になっている。すでに使用できない計算機については説明しない。

  • XC: CfCA XC50

  • FX: 名大不老

  • FUGAKU: 富岳

以下、堀田の個人環境なので、使用は推奨されない。どうしても個人の環境で使いたい時は堀田まで相談されたい。

  • LOCAL: UbuntuのGCC

  • LOCAL_ifort: UbuntuのIntel fortran ifort

  • MAC: MacのGCC

初期条件

初期条件は、 src/all/model_init.F90 で設定している。基本的な光球計算などは、鉛直速度にランダムな値を入れて計算を始めている。

追加条件

ある程度計算を行った後に、続きの計算として少し設定を変えたい場合の手続きを示す。 例えば、磁場なしの熱対流計算を行った後に、磁場を加える場合などに有効である。

run/d001 での計算を run/d002 に移す場合について説明する。 run/d001 の下に copy_caseid.py というスクリプトがあるのでそれを実行する(なければ堀田からもらう)

python copy_caseid.py

実行すると

Q1. Input destination caseid for copy, like d001

と質問されるので、データを移す先のcaseidを d002 などと入力する。

次に

Q2. Input time step for copy, like 10 or end

と質問されるので、移動したいデータの時間ステップを 10 などと入力する。 チェックポイントのデータはデフォルトでは、10回に一回しか出力していないので注意すること。

また、現在行った計算の最後の時間ステップのデータを移動したい時は 10 などの代わりに end と入力する。 するとプログラム・データのコピーが始まる。すでに移動先(今回場合は d002data ディレクトリがある場合は、コピーが始まらないので、削除してからコピーすること)。

また、コピーが終わると移動先の data/cont_log.txt に元データの情報が記載してある。

データをコピーした後に、磁場などを付け加えたい時は src/all/model_add.F90 を編集する.

do k = 1,nzg
do j = 1,nyg
do i = 1,nxg
   qq(5,i,j,k) = qq(5,i,j,k) + 200.d0
   qq(6,i,j,k) = qq(6,i,j,k)
   qq(7,i,j,k) = qq(7,i,j,k)
enddo
enddo
enddo

などと書いてある。この例では鉛直磁場に200 Gが足されている。次に src/all/io.F90 を編集する。中ほどに

! add something
time00 = 0.d0
if(ns == 0 .and. nd == 0) then
!if(ns == 0) then
   !call model_sunspot
   !call model_fe_pff
   !call model_add
endif

と書かれている部分があるので、 call model_add の部分のコメントアウトを外す。 ns は現在の計算のステップ数(続きの計算では引き継がれない)、 nd は計算全体のデータアウトプット回数(続きの計算で引き継がれる)。この二つの変数が0の時は、計算の一番はじめもしくは、データを引き継いだ時のみなので、その時のみ追加条件が発動する。

スーパーコンピュータでのシェルスクリプト

いくつかのスーパーコンピュータでジョブを投入するためのシェルスクリプトも sh ディレクトリに用意している。 使用コア数などを変えたい時は、それぞれのスーパーコンピュータの使用説明書などを参照すること。 今後使うことのできるものだけをあげる。

  • fx.sh : 名大FX100

  • ofp.sh : Oakforest-PACS

  • xc.sh : CfCA XC50

  • fg.sh : 富岳

初期条件データを受け取った場合

熱対流が統計的定常に達するまでは非常に時間がかかるために、この計算が非常に困難になる。そのため、堀田がデータを提供することがある。堀田は data ディレクトリを丸ごと提供する。

このディレクトリに cont_log.txt というファイルがあるので、そこに示されている計算設定の情報を見て同じようになるように計算を設定する。

このディレクトリを書く実行のディレクトリの配下におき、実行すると続きの計算が始まる。

最終更新日:2024年04月05日