全チャンネル一括して、波動場の3次元ダンプファイルを作成します。
function dump3d_all( vx0, vy0, vz0, txx0, tyy0, tzz0, txy0, txz0, tyz0,
vx1, vy1, vz1, txx1, tyy1, tzz1, txy1, txz1, tyz1,
dim00, dim01, dim02, dim10, dim11, dim12,
x00, x01, xs0, y00, y01, ys0, z00, z01, zs0,
x10, x11, xs1, y10, y11, ys1, z10, z11, zs1,
dt, step, phydim, flag
) result(status)
パラメータ
integer, intent(in) :: arg
波動場の3次元データのマージンの大きさを指定します。
real, intent(in), target :: vx0(:,:,:)
第1領域の速度場のX成分です。
real, intent(in), target :: vy0(:,:,:)
第1領域の速度場のY成分です。
real, intent(in), target :: vz0(:,:,:)
第1領域の粒子速度場のZ成分です。
real, intent(in), target :: txx0(:,:,:)
第1領域の応力場のXX成分です。
real, intent(in), target :: tyy0(:,:,:)
第1領域の応力場のYY成分です。
real, intent(in), target :: tzz0(:,:,:)
第1領域の応力場のZZ成分です。
real, intent(in), target :: txy0(:,:,:)
第1領域の応力場のXY成分です。
real, intent(in), target :: txz0(:,:,:)
第1領域の応力場のXZ成分です。
real, intent(in), target :: tyz0(:,:,:)
第1領域の応力場のYZ成分です。
real, intent(in), target :: vx1(:,:,:)
第2領域の速度場のX成分です。
real, intent(in), target :: vy1(:,:,:)
第2領域の速度場のY成分です。
real, intent(in), target :: vz1(:,:,:)
第2領域の速度場のZ成分です。
real, intent(in), target :: txx1(:,:,:)
第2領域の応力場のXX成分です。
real, intent(in), target :: tyy1(:,:,:)
第2領域の応力場のYY成分です。
real, intent(in), target :: tzz1(:,:,:)
第2領域の応力場のZZ成分です。
real, intent(in), target :: txy1(:,:,:)
第2領域の応力場のXY成分です。
real, intent(in), target :: txz1(:,:,:)
第2領域の応力場のXZ成分です。
real, intent(in), target :: tyz1(:,:,:)
第2領域の応力場のYZ成分です。
real, intent(in) :: dim00(:)
第1領域の格子間隔ベクトルのX方向です。
real, intent(in) :: dim01(:)
第1領域の格子間隔ベクトルのY方向です。
real, intent(in) :: dim02(:)
第1領域の格子間隔ベクトルのZ方向です。
real, intent(in) :: dim10(:)
第2領域の格子間隔ベクトルのX方向です。
real, intent(in) :: dim11(:)
第2領域の格子間隔ベクトルのY方向です。
real, intent(in) :: dim12(:)
第2領域の格子間隔ベクトルのZ方向です。
integer, intent(in) :: x00, x01, xs0
第1領域のハイパースラブ情報のX方向です。
x00が出力し始める位置、x01が出力し終える位置、xs0がステップです。
integer, intent(in) :: y00, y01, ys0
第1領域のハイパースラブ情報のY方向です。
integer, intent(in) :: z00, z01, zs0
第1領域のハイパースラブ情報のZ方向です。
integer, intent(in) :: x10, x11, xs1
第2領域のハイパースラブ情報のX方向です。
integer, intent(in) :: y10, y11, ys1
第2領域のハイパースラブ情報のY方向です。
integer, intent(in) :: z10, z11, zs1
第2領域のハイパースラブ情報のZ方向です。
integer, intent(in) :: flag
チャンネル別出力フラグです。2進数で最下位ビットからチャンネル番号順にVx~Tyzとなっています。関数はビットが立っているチャンネルを全て出力します。
character(len=16), intent(in) :: phydim(9)
全チャンネルの単位名を16文字以内の文字列で指定します。physdim(1)はVx, physdim(9)はTyzの単位です。
real, intent(in) :: dt
時間差分間隔です。
integer, intent(in) :: step
出力する波動場の差分ステップを指定します。
integer, intent(in) :: ch
出力する波動場のチャンネル番号を指定します。
戻り値
関数が成功すると0が返ります。関数が失敗すると、エラーが返ります。返されるエラー値は次の通りです。
値 |
説明 |
-1 |
ファイル作成に失敗しました。 |
-2 |
グループオブジェクトの作成に失敗しました。 |
-3 |
データセットオブジェクトの作成に失敗しました。 |
-4 |
データスペースオブジェクトの作成に失敗しました。 |
-5 |
データタイプの異常です。 |
-6 |
アトリビュートオブジェクトの作成に失敗しました。 |
-7 |
プロパティーオブジェクトの作成に失敗しました。 |
-8 |
データセットの書き込みに失敗しました。 |
-9 |
アトリビュートの書き込みに失敗しました。 |
-10 |
出力チャンネルの指定が間違っています。 |
-11 |
出力グリッドの指定が間違っています。 |
-12 |
データセットの延長エラー |
-13 |
ハイパースラブのエラー |
-14 |
領域指定のエラー |
解説
dump3d()を使う際に、一括してフラグビットの立っている全チャンネル分を出力できるようにしたラッパー関数です。
空間を分割しないプログラムではマージンを意識しないで出力できるようになっていますが、空間を分割した並列化プログラムでは、ランク毎にマージンを適切に設定する必要があるため、この関数をそのまま使うことはできません。
参照