座標生成¶
R2D2では中央差分法を用いているが、そのほとんどは数値フラックスを用いて書き直すことでき、提供される x
, y
, z
などは セル中心 で定義される。よって計算領域内の最初のグリッドは、計算境界から半グリッド進んだところにある。
また、R2D2では一様グリッドと非一様グリッドどちらでも計算できるようにしている。
一様グリッド¶
一様グリッドを用いるときは
格子間隔を計算する
ここで、コードでは、配列の要素数には margin
も含むので
を計算するには margin
の部分を引く必要があることに注意。
を設定。
margin
の分も考慮して計算する。do loop
で順次足していく
コードは以下のようになる
dx_unif = (xmax-xmin)/real(ix00-2*marginx)
x00(1) = xmin + (0.5d0-dble(marginx))*dx_unif
if(xdcheck == 2) then
do i = 1+i1,ix00
x00(i) = x00(i-i1) + dx_unif
enddo
endif
非一様グリッド¶
非一様グリッドを用いるときは、太陽光球付近は、輻射輸送のために一様なグリッド、ある程度の深さから格子間隔が線形に増加する非一様グリッドを使うことにしている。光球近くは、光球をちゃんと解像するために一様グリッド、光球からある程度進むと、非一様グリッドを採用することにしている。 実際の構造は以下のようになっている。非一様グリッド領域の両端2つのグリッド間隔は一様グリッドをとるようにしている。
fortranのコードの中では
→
dx00
: 一様グリッドでの格子点間隔→
ix_ununi
: 一様グリッドの格子点数→
xrange
: 領域サイズ→
xrange0
: 一様グリッドの領域サイズ→
xrange1
: 非一様グリッドの領域サイズ→
nxx
: 非一様グリッドの格子点数
一様グリッドでのグリッド間隔は として、非一様グリッドでは ずつグリッド間隔が大きくなっていくとする。
この関係式より、グリッド間隔の増分 を以下のように求めることができる。
最終更新日:2024年04月05日