出力と読込

出力

Fortranコード

Sliceデータ

R2D2では、スライスデータも高いケーデンスで出力できるようになっている。多くのデータを出力するのには効率の悪い方法になっているので、3-4枚のスライスを出力するのに留めておくことが推奨される。 slice_def.F90 内でどの部分のスライスを出力するかを定義している。

integer, parameter :: nx_slice = 3 ! number of slice in x direction
integer, parameter :: ny_slice = 2 ! number of slice in y direction
integer, parameter :: nz_slice = 2 ! number of slice in z direction

この部分で、それぞれの方向に何枚のスライスを出力するかを定義。例えば nx_slice はスライスするy-z平面の数となる。実際にどの部分を出力するかは続く部分で指定している。

real(KIND(0.d0)), dimension(nx_slice), save :: x_slice = (/xmin,rsun,xmax/)
real(KIND(0.d0)), dimension(ny_slice), save :: y_slice = (/ymin,0.5d0*(ymin + ymax)/)
real(KIND(0.d0)), dimension(nz_slice), save :: z_slice = (/zmin,0.5d0*(zmin + zmax)/)

nx_slice で定義した数と合うように個数を指定しなければならない。

読込

読み込みについては、PythonコードとIDLコードを用意しているが、開発の頻度が高いPythonコードの利用を推奨している。

Pythonコード

PythonでR2D2で定義された関数を使うには

import R2D2

として、モジュールを読み込む。R2D2には R2D2_data クラスが定義してあり、これをオブジェクト指向的に用いてデータを取り扱う。

以下にそれぞれの関数を示すが、docstringは記入してあるので

help(R2D2)
help(R2D2.R2D2_data)

などとすると実行環境で、モジュール全体や各関数の簡単な説明を見ることができる。

クラス

class R2D2.R2D2_data(datadir)

データの読み込みには R2D2 モジュールの中で定義されている R2D2_data クラスを使う必要がある。

import R2D2
datadir = '../run/d002/data'
d = R2D2.R2D2_data(datadir)

などとしてインスタンスを生成する。

Attribute

R2D2_data.p

基本的なパラメタ。格子点数 ix や領域サイズ xmax など。 インスタンス生成時に同時に読み込まれる。

R2D2_data.t

時間を格納するデータ。 R2D2_data.read_time() では戻り値として同じ値を返すために R2D2_Data.t はあまり使われない。

R2D2_data.qs

ある高さの2次元のndarrayが含まれる辞書型。 R2D2_data.read_qq_select() で読み込んだ結果。

R2D2_data.qq

3次元のnumpy array。計算領域全体のデータ。R2D2_data.read_qq() で読み込んだ結果。

R2D2_data.qt

2次元のnumpy array。ある光学的厚さの面でのデータ。現在は光学的厚さ1, 0.1, 0.01でのデータを出力している。 R2D2_data.read_qq_tau() で読み込んだ結果。

R2D2_data.vc

Fortranの計算の中で解析した結果。 R2D2_data.read_vc() で読み込んだ結果。

R2D2_data.qc

3次元のnumpy array。計算領域全体のデータ。Fortranの計算でチェックポイントのために出力しているデータを読み込む。主に解像度をあげたいときのために使う R2D2_data.read_qq_check() で読み込んだ結果。

R2D2_data.ql

2次元のnumpy array。Fortranで定義したスライスデータ R2D2_data.read_qq_slice() で読み込んだ結果。 実際にどの位置のスライスを読み込んでいるかは R2D2.p['x_slice'], R2D2.p['y_slice'], R2D2.p['z_slice'] を参照すること。スライスの位置の配列が保存されている。

R2D2_data.p については、init.py などで

import R2D2
d = R2D2.R2D2_data(datadir)
for key in R2D2.p:
    exec('%s = %s%s%s' % (key, 'R2D2.p["',key,'"]'))

などとしているために、辞書型の key を名前にする変数に値が代入されている。例えば、 R2D2_data.p['ix']ix には同じ値が入っている。

Method

データ読み込み

メソッドで指定する datadir はデータの場所を示す変数。R2D2の計算を実行すると data ディレクトリが生成されて、その中にデータが保存される。この場所を指定すれば良い。

R2D2_data.__init__(datadir)

インスタンス生成時に実行されるメソッド。計算設定などのパラメタが読み込まれる。 R2D2_data.p にデータが保存される。

パラメータ:

datadir (str) -- データの場所

R2D2_data.read_qq_select(xs, n, silent=False)

ある高さのデータのスライスを読み込む。戻り値を返さない時も R2D2_data.qs にデータが保存される。

パラメータ:
  • xs (float) -- 読み込みたいデータの高さ

  • n (int) -- 読み込みたい時間ステップ

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

R2D2_data.read_qq(n, silent=False)

3次元のデータを読み込む。戻り値を返さない時も R2D2_data.qq にデータが保存される。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

R2D2_data.read_qq_tau(n, silent=False)

光学的厚さが一定の2次元のデータを読み込む。R2D2_data.qt にデータが保存される。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

R2D2_data.read_time(n, tau=False, silent=False)

時間を読み込む。 R2D2.t にもデータは格納されるが戻り値としても使うことができる。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • tau (bool) -- 光学的厚さ一定のデータ(高ケーデンス)に対する時間を読むかのフラグ。デフォルトはFalse。

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

戻り値:

時間ステップでの時間

R2D2_data.read_vc(n, silent=False)

Fortranコードの中で解析した計算結果を読み込む。戻り値を返さない時も R2D2_data.vc にデータが保存される。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

R2D2_data.read_qq_check(n, silent=False, end_step=False)

チェックポイントのための3次元データを読み込む。主に解像度をあげるときに使う。 R2D2_data.qc にデータが保存される。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

  • end_step (book) -- Falseの時は、 n で指定された時間ステップのデータを読み込むが3次元データはそれほど高頻度ではな出力していない。Trueの時は、 qq.dac.e もしくは qq.dac.o という最後の1ステップの出力データを読み込む。こちらは常に上書きされてしまっているが、毎ステップ必ず書き込むので最後のステップのデータを読み込みたい時はこちらをTrueにする。

R2D2_data.read_qq_slice(n, n_slice, direc, silent=False)

slice_def.F90 で指定したスライスデータを読み込む。R2D2_data.ql にデータが保存される。

パラメータ:
  • n (int) -- 読み込みたい時間ステップ

  • n_slice (int) -- 何枚目のスライスを読み込むか

  • direc (str) -- スライスの方向 'x', 'y', 'z'のどれか

  • silent (bool) -- 読み込み時にどの変数に格納されたかメッセージの表示を抑制するフラグ。デフォルトはFalseで、Trueだとメッセージは表示されない。

データダウンロード

スパコンなどで計算した後に、ローカルの環境にデータをダウンロードするメソッドも提供している。堀田と全く同じようにディレクトリ構造を作ってないといけないので注意。

R2D2.sync.set(server, caseid, project=os.getcwd().split('/')[-2], dist='../run/')

設定のみをダウンロードするメソッド。ひとまずGoogleスプレッドシートに書き込みたい時などに有用。

パラメータ:
  • server (char) -- ダウンロード先のサーバー名。sshで使うサーバー名を用いれば良い。

  • server -- ダウンロードしたいcaseid。'd001'などとする。

  • project (char) -- プロジェクト名。'R2D2'など。何も入力しなければ一個上のディレクトリの名前をプロジェクト名と判断する。

  • dist (char) -- データダウンロード先。特別な用途がなければデフォルトのままとする。

R2D2_data.sync_tau(server, project=os.getcwd().split('/')[-2])

光学的厚さ一定の面上でのデータをダウンロードするメソッド。

パラメータ:
  • server (char) -- ダウンロード先のサーバー名。sshで使うサーバー名を用いれば良い。

  • project (char) -- プロジェクト名。'R2D2'など。何も入力しなければ一個上のディレクトリの名前をプロジェクト名と判断する。

R2D2_data.sync_select(xs, server, project=os.getcwd().split('/')[-2])

2次元データをダウンロードするメソッド

パラメータ:
  • xs (float) -- ダウンロードする高さ。

  • server (char) -- ダウンロード先のサーバー名。sshで使うサーバー名を用いれば良い。

  • project (char) -- プロジェクト名。'R2D2'など。何も入力しなければ一個上のディレクトリの名前をプロジェクト名と判断する。

R2D2_data.sync_vc(server, project=os.getcwd().split('/')[-2])

計算実行中に解析した物理量をダウンロードするメソッド

パラメータ:
  • server (char) -- ダウンロード先のサーバー名。sshで使うサーバー名を用いれば良い。

  • project (char) -- プロジェクト名。'R2D2'など。何も入力しなければ一個上のディレクトリの名前をプロジェクト名と判断する。

R2D2_data.sync_check(n, server, project=os.getcwd().split('/')[-2], end_step=False)

チェックポイントデータをダウンロードするメソッド

パラメータ:
  • n (int) -- ダウンロードしたい時間ステップ。

  • server (char) -- ダウンロード先のサーバー名。sshで使うサーバー名を用いれば良い。

  • project (char) -- プロジェクト名。'R2D2'など。何も入力しなければ一個上のディレクトリの名前をプロジェクト名と判断する。

解像度・計算領域変更

R2D2のPythonの機能を用いて, 解像度や計算領域を変更することができる.

以下の手順に従う

  1. fortranコードで何らかの計算を実行

  2. pythonで読み込み。解像度変換を実行

  3. fortranで再度, 計算を実行

pythonでの解像度変換には R2D2_data.upgrade_resolution() メソッドを用いる.

R2D2_data.upgrade_resolution(caseid, n, xmin, xmax, ymin, ymax, zmin, zmax, ix, jx, kx, ix_ununi=32, dx00=48e5, x_ununif=False, endian='<', end_step=False, memory_saving=False)

データの解像度や計算領域を変更するためのメソッド

パラメータ:
  • caseid (char) -- 出力先のcaseid e.g. 'd002'

  • n (int) -- 何番目のデータの解像度・計算領域を変換するか. データが必ずしもあるとは限らないので end_step=True が推奨される.

  • xmax (float) -- max location in x direction

  • xmin (float) -- min location in x direction

  • ymax (float) -- max location in y direction

  • ymin (float) -- min location in y direction

  • zmax (float) -- max location in z direction

  • zmin (float) -- min location in z direction

  • endian (char) -- endian, "<" もしくは, ">"

  • ix (int) -- updated grid point in x direction

  • jx (int) -- updated grid point in y direction

  • kx (int) -- updated grid point in z direction

  • memory_saving (bool) -- If true, upgraded variables are saved in memory separately for saving memory

  • end_step (bool) -- end_step=True のときは, パラメータ n は無視されて持っている一番最後のステップのデータの解像度・計算領域変更がされる. end_step=False のときは n ステップのデータが利用される.cd .

これより下のパラメタは x_ununif=True を用いたときのみ有効となる.

パラメータ:
  • ix_ununi (int) -- number of grid in uniform grid region

  • dx00 (float) -- grid spacing in uniform grid region

  • x_ununif (bool) -- whethere ununiform grid is used

例えば, caseid='d001' のデータの解像度を変更して caseid='d002' へと出力する時は

d = R2D2.R2D2_data('../run/d001')
d.upgrade_resolution('d002',...)

として, 出力された結果を参考にd002のプログラムを変更する.

IDLコード

GitHubの公開レポジトリ に簡単な説明あり

バージョン履歴

  • ver. 1.0: バージョン制を導入

  • ver. 1.1: 光学的厚さが0.1, 0.01の部分も出力することにした。qq_in, vcをconfigのグローバル変数として取扱うことにした。

  • ver. 1.2: データ構造を変更。

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