struct_read

構造ファイルを読み込みます。

 

 

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などの引数を用いて、読み込み範囲を指定してください。構造データのみ、指定した範囲で読み取ることができます。

 

参照

struct_size