構造ファイルを読み込みます。
function struct_read( tr_file, nmrgn,
x00, x01, y00, y01, z00, z01
x10, x11, y10, y11, z10, z11,
mesh0, mesh1, dim00, dim01, dim02, dim10, dim11, dim12,
vp, vs, rrho, attenuation, dt, info_grid
) result(status)
パラメータ
character(len=*), intent(in) :: str_file
構造ファイルのファイル名を指定します。
integer, intent(in) :: nmrgn
構造のマージン量を指定します。
integer, intent(in) :: x00, x01
第1領域のX方向の読み込み範囲を指定します。
integer, intent(in) :: y00, y01
第1領域のY方向の読み込み範囲を指定します。
integer, intent(in) :: z00, z01
第1領域のZ方向の読み込み範囲を指定します。
integer, intent(in) :: x10, x11
第2領域のX方向の読み込み範囲を指定します。
integer, intent(in) :: y10, y11
第2領域のY方向の読み込み範囲を指定します。
integer, intent(in) :: z10, z11
第2領域のZ方向の読み込み範囲を指定します。
integer, intent(out) :: mesh0(1-nmrgn:,1-nmrgn:,0:)
第1領域の構造が代入されます。
integer, intent(out) :: mesh1(1-nmrgn:,1-nmrgn:,0:)
第2領域の構造が代入されます。
real, intent(out) :: dim00(0:)
第1領域のX方向の格子間隔配列が代入されます。
real, intent(out) :: dim01(0:)
第1領域のY方向の格子間隔配列が代入されます。
real, intent(out) :: dim02(0:)
第1領域のZ方向の格子間隔配列が代入されます。
real, intent(out) :: dim10(0:)
第2領域のX方向の格子間隔配列が代入されます。
real, intent(out) :: dim11(0:)
第2領域のY方向の格子間隔配列が代入されます。
real, intent(out) :: dim12(0:)
第2領域のZ方向の格子間隔配列が代入されます。
real, intent(out) :: vp(:)
P波速度配列が代入されます。
real, intent(out) :: vs(:)
S波速度配列が代入されます。
real, intent(out) :: rrho(:)
密度配列が代入されます。
real, intent(out) :: attenuation(:)
減衰係数配列が代入されます。
real, intent(in) :: dt
Q値から減衰係数に換算するときに用いる時間差分量を指定します。
integer, intent(out) :: info_grid
格子が等間隔のとき0, 不等間隔のとき1が代入されます。
戻り値
関数が成功すると0が返ります。関数が失敗すると、エラーが返ります。返されるエラー値は次の通りです。
値 |
説明 |
-1 |
ファイルオープンに失敗しました。 |
-2 |
HDF5データセットのオープンに失敗しました。 |
-3 |
HDF5データタイプの作成エラーです。 |
-4 |
FdmToolIDに不整合があります。 |
-5 |
HDF5データセットの読み込み処理でエラーが発生しました。 |
-6 |
密度が0の物性値があるため、ゼロ除算エラーが発生します。 |
-7 |
配列の数がそろっていません。 |
-8 |
範囲指定が不正です。 |
-15 |
メモリアロケーション処理でエラーが発生しました。 |
解説
構造ファイルから、構造データ、格子間隔データ、物性値データを読み取ります。それぞれのデータの配列は、あらかじめstruct_sizeを用いて適切なサイズで確保しておく必要があります。mesh0, mesh1は差分の次数に応じてマージン量が異なることに注意してください。
並列化したプログラムで用いる場合は、x00, x01などの引数を用いて、読み込み範囲を指定してください。構造データのみ、指定した範囲で読み取ることができます。
参照