典型的計算例¶
ここでは、典型的計算設定について紹介する。
デカルト座標¶
小規模局所光球計算¶
Vögler et al., 2005 などで行われている小規模局所光球計算の設定を説明する。
- Makefileのオプション
指定するオプションは 光球のみ一様グリッドで計算するので, 複数方向輻射輸送で計算する。以下が指定されていたコメントアウトする。
PPC := -Done_ray
- 計算領域・解像度
計算領域は鉛直方向(R2D2ではx方向)にrsun から700 km上から5.444 Mm下までをとる。水平方向(R2D2ではyとz方向)には、6.144 Mmずつとる。
太陽光球を計算するときは、鉛直方向には少なくとも48 km, 水平方向には少なくとも192 kmの格子間隔が必要である。ここでは各方向に48 kmの格子点間隔をとることにして、各方向に128グリッドづつ格子点を用意する。ここではMPIプロセスを2×2×2プロセス使う例を示す。これらの設定は
src/all/geometry_def.F90
を編集。integer, parameter, private :: nx0 = 64, ny0 = 64, nz0 = 64 integer, parameter :: ix0 = 2, jx0 = 2, kx0 = 2 ... #ifdef deep ... (ignore this) #else real(KIND(0.d0)), parameter :: xmax = rsun + 0.7d8 real(KIND(0.d0)), parameter :: xmin = rsun - 5.444d8 #endif ... #ifndef ideal real(KIND(0.d0)), parameter :: ymin = 0.d0 real(KIND(0.d0)), parameter :: ymax = 6.144d0 real(KIND(0.d0)), parameter :: ymax = 0.d0 real(KIND(0.d0)), parameter :: ymax = 6.144d0 #endif
と設定する。念のために
integer, parameter :: xdcheck = 2 integer, parameter :: ydcheck = 2 integer, parameter :: zdcheck = 2 ... integer, parameter :: iper = 0, jper = 1, kper = 1
となっているかチェックする。全て
xdcheck
などは2に設定してあると3次元計算となる。iper
はそれぞれの方向に周期境界条件を使うかのフラグである。
- 音速抑制法
光球のみ計算の時は、音速抑制法を使う必要は無いので、音速抑制率を常に1に設定する。
src/all/background_init.F90
を編集。#ifdef ideal ... (ignore this) #else ... do i = 1,ix00 !xi00(i) = max(1.d0,160.d0*(ro00(i)/rob))**(1.d0/3.d0)*sqrt(dprdro(i)/dprdrob) xi00(i) = 1.d0 ... end do ... #endif
と設定する。
- 境界条件
水平方向は周期境界を用いるので、鉛直方向の境界条件のみを設定すれば良い。 磁場の上部境界条件はポテンシャル磁場の境界条件を用いる。他の設定はVöglerの論文を参照。
src/all/bc_all.F90
で設定している。#ifdef ideal ... (ignore this) #else #ifdef deep ... (ignore this) #else call bcx(qq) !call bcx_whole(qq) #endif
とする。
bcx(qq)
が実行されるようにする。 また、念のためcall bc_potential(qq)
がコメントアウトされていないかチェックする。
- 輻射輸送
輻射輸送は複数本の光線を解くのが良い。Makefileで
PPC: = -Done_ray
を設定しないようにする。
- 初期条件
初期条件は、鉛直方向速度(vx)にランダムな微小速度を与えている。プラージュ領域を計算したい場合は
model_init.F90
でbx = 100.d0
とすれば良い.
- 出力アウトプット
ここは本当は完全に自由だが、データの出力の設定である。粒状斑の動きを詳しく見ようと思ったら30秒ほどの時間ケーデンスで出力するのが良い。
main.F90
を編集。dtout = 30.d0 ifac = 1.d0
- その他注意事項
model_def.F90
でremap_calc.F90
で出力するスライスの位置を決定している。integer, parameter :: jc = ny*jx0/2 integer, parameter :: kc = nz*kx0/2
と領域の真ん中を出力することにしているが、状況によって違う場所が出力されている場合がある。もし変なことが起こったらここをチェックしてみると良い。
また、
io.F90
の中程に計算の途中に磁場などを追加する設定がある。ここに何か書いてあると初期条件に足してしまうので、add something で検索してcall model_*
(*は任意)のところはコメントアウトするように。
中規模黒点計算¶
Rempel, 2012 で行われている中規模光球計算の設定を説明する。
- Makefileのオプション
光球のみ一様グリッドで計算するので, :code:`PPC:= -Ddeep`を設定していないかチェック。
- 計算領域・解像度
計算領域は鉛直方向(R2D2ではx方向)にrsun から700 km上から5.444 Mm下までをとる。水平方向(R2D2ではyとz方向)には、49.152 Mmずつとる。
太陽光球を計算するときは、鉛直方向には少なくとも48 km, 水平方向には少なくとも192 kmの格子間隔が必要である。ここでは鉛直方向に48 km、水平方向に96 kmの格子点間隔をとることにして、鉛直方向に128グリッド、水平方向に512グリッドづつ格子点を用意する。ここではMPIプロセスを2×4×4プロセス使う例を示す。これらの設定は
src/all/geometry_def.F90
を編集。#ifdef deep ... (ignore this) #elif ideal ... (ignore this) #else real(KIND(0.d0)), parameter :: xmax = rsun + 0.7d8 real(KIND(0.d0)), parameter :: xmin = rsun - 5.444d8 #endif #ifndef ideal real(KIND(0.d0)), parameter :: ymin = 0.d0 real(KIND(0.d0)), parameter :: ymax = 49.152d8 real(KIND(0.d0)), parameter :: ymax = 0.d0 real(KIND(0.d0)), parameter :: ymax = 49.152d8 #endif ... integer, parameter, private :: nx0 = 64, ny0 = 128, nz0 = 128 ... integer, parameter :: ix0 = 2, jx0 = 4, kx0 = 4
と設定する。念のために
integer, parameter :: xdcheck = 2 integer, parameter :: ydcheck = 2 integer, parameter :: zdcheck = 2 ... integer, parameter :: iper = 0, jper = 1, kper = 1
となっているかチェックする。全て
xdcheck
などは2に設定してあると3次元計算となる。iper
はそれぞれの方向に周期境界条件を使うかのフラグである。
- 音速抑制法
光球のみ計算の時は、音速抑制法を使う必要は無いので、音速抑制率を常に1に設定する。
src/all/background_init.F90
を編集。#ifdef ideal ... (ignore this) #else ... do i = 1,ix00 !xi00(i) = max(1.d0,160.d0*(ro00(i)/rob))**(1.d0/3.d0)*sqrt(dprdro(i)/dprdrob) xi00(i) = 1.d0 ... end do ... #endif
と設定する。
- 境界条件
水平方向は周期境界を用いるので、鉛直方向の境界条件のみを設定すれば良い。 磁場の上部境界条件はポテンシャル磁場の境界条件を用いる。他の設定はRempelの論文を参照。
src/all/bc_all.F90
で設定している。#ifdef ideal ... (ignore this) #else #ifdef deep ... (ignore this) #else call bcx_sunspot(qq) !call bcx(qq) !call bcx_whole(qq) #endif
とする。
bcx_sunspot(qq)
が実行されるようにする。 また、念のためcall bc_potential(qq)
がコメントアウトされていないかチェックする。
ポテンシャル磁場から少しずらしたい時は、
mhd_def.F90
の中でRempel, 2012で定義されている が定義されている。real(KIND(0.d0)), parameter :: potential_alpha = 2.5d0
などとする。
- 輻射輸送
輻射輸送は複数本の光線を解くのが良い。
rte_def.F90
を編集する。推奨される設定はlogical, parameter :: rte_multiray_flag = .true. logical, parameter :: rte_linear_flag = .false. integer, parameter :: mhd_rte_ratio = 1
とするのが良い。
- 初期条件
初期条件は、鉛直方向速度(vx)にランダムな微小速度を与えている。 黒点以外は磁場をゼロにしておく。
model_init.F90
でbx = 0.d0 by = 0.d0 bz = 0.d0
とすれば良い.
黒点設置のために
model_sunspot.F90
を編集。いくつかパラメタがあるが、変えたい時はプログラムのコメントを参照すること。io.F90
を編集し、!add something time00 = 0.d0 if(ns == 0 .and. nd == 0) then call model_sunspot endif
とする。デフォルトでは、
call model_sunspot
がコメントアウトされていることが多いと思われる。
- 出力アウトプット
ここは本当は完全に自由だが、データの出力の設定である。粒状斑の動きを詳しく見ようと思ったら30秒ほどの時間ケーデンスで出力するのが良い。
main.F90
を編集。dtout = 30.d0 ifac = 1.d0
- その他注意事項
model_def.F90
でremap_calc.F90
で出力するスライスの位置を決定している。と領域の真ん中を出力することにしているが、状況によって違う場所が出力されている場合がある。もし変なことが起こったらここをチェックしてみると良い。
全対流層計算¶
課題
全対流層計算の設定例
深い部分のみの計算¶
Makefileのオプション
PPC: = -Ddeep # 深い層のみ PPC: = -Done_ray # ここでは輻射輸送は解かないがone_rayとしておくことでメモリ節約 PPC: = -Dremap_2d_assign # remapで2次元的に出力する PPC: = -Dsoundwave_suppress # 音波が暴走するのを抑える
計算領域・解像度
水平方向には太陽半径程度、鉛直方向には から 程度までがおすすめ。
integer, parameter, private :: nx0 = 64, ny0 = 64, nz0 = 64 integer, parameter :: ix0 = 2, jx0 = 2, kx0 = 2 ... #ifdef deep real(KIND(0.d0)), parameter :: xmax = 0.96d0*rstar real(KIND(0.d0)), parameter :: xmin = 0.71d0*rstar #else ... (ignore this) #endif ... #ifdef deep ! for deep CZ calculation real(KIND(0.d0)), parameter :: ymin = 0.d0 real(KIND(0.d0)), parameter :: ymax = rstar real(KIND(0.d0)), parameter :: zmin = 0.d0 real(KIND(0.d0)), parameter :: zmax = rstar #else ! for surface calculation ... (ignore this) #endif
音速抑制法
- 音速抑制法
対流層の深い部分のみを計算する場合は、音速と熱対流の比が大体同程度となるように設定する。
src/all/background_init.F90
で設定しているがやや複雑なことをしているので、このままにしておくと良いであろう。
境界条件
scr/all/bc_all.F90
を見ると良い#ifdef spherical ... (ignore this) #else call bcx_deep(qq) #endif
となっていればオーケー
- 輻射輸送
対流層の深い部分では、輻射輸送を解く必要はない。
初期条件 初期条件では、鉛直方向速度(vx)にランダムな微小速度を与えている。磁場を入れたい場合は、適当な値を
model_init.F90
で設定すれば良い。
球座標(Yin-Yang格子含む)¶
Yin-Yangで深いところのみの計算¶
Makefileのオプション
PPC:= $(PPC) -Ddeep
PPC:= $(PPC) -Done_ray
PPC:= $(PPC) -Ddeep
PPC:= $(PPC) -Dspherical
PPC:= $(PPC) -DYinYang
PPC:= $(PPC) -DnoFFTW
PPC:= $(PPC) -Dremap_2d_assign
- 格子点数
Yin-Yang gridを使うために
ny0*jx0*3=nz0*kx0
となるようにする
2次元計算¶
磁束管浮上¶
最終更新日:2024年09月04日