0

を使用して地震キューブからすべてのサンプルを読み取りました

int NumI = InputSCube.NumSamplesIJK.I;
                int NumJ = InputSCube.NumSamplesIJK.J;
                int NumK = InputSCube.NumSamplesIJK.K;
                double[, ,] InputSeismicCubeData = new double[NumI, NumJ, NumK];


for (int i = 0; i < NumI; i++)
                {
                    for (int j = 0; j < NumJ; j++)
                    {
                        ITrace Trace = InputSCube.GetTrace(i, j);
                        for (int k = 0; k < NumK; k++)
                        {
                            InputSeismicCubeData[i, j, k] = Trace[k];
                        }
                    }

                }

いくつかのアルゴリズムを適用した後、InputSeismicCubeData と同じサイズの 3D 配列でもある出力地震データを生成しました

そして、データを次のようにキューブに書き込みます

using (ITransaction trans1 = DataManager.NewTransaction())
                    {

                        SeismicCollection Sc = InputSCube.SeismicCollection;
                        trans1.Lock(Sc);
                        if (Sc.CanCreateSeismicCube(InputSCube))
                        {
                            SeismicCube NewCube = Sc.CreateSeismicCube(InputSCube, InputSCube.Template);
                            if (!NewCube.IsWritable)
                            {
                                PetrelLogger.ErrorBox("Unable to Write to the Cloned Cube");
                                return;
                            }



                            for (int i = 0; i < NumI; i++)
                            {
                                for (int j = 0; j < NumJ; j++)
                                {

                                    ITrace trace = NewCube.GetTrace(i, j);
                                    for (int k = 0; k < trace.Length; k++)
                                    {
                                        trace[k] = (float)OutPutSeismicCubeData[i, j, k];
                                    }

                                }
                            }

                            trans1.Commit();
                            arguments.OutputSCube = NewCube;
                        }
                    }

コードはコンパイルして実行していますが、意味がありません。すべてのサンプルがごちゃ混ぜになっているようです。任意のヘルプ Appricated

4

1 に答える 1

1

配置されているコードに問題はありません。SeismicCube の Ocean API には、パフォーマンス向上に役立つツールがいくつかあります。

まず、メソッド GetSubCube( Index3, Index3 ) を見てください。SeismicCube のインメモリ部分を作成します。ToArray というメソッドがあり、キューブ サンプルの 3 次元配列を提供します。もう 1 つのメソッド CopyFrom は、サンプルを 3 次元配列から ISubcube にコピーします。元の SeismicCube (この場合の出力) がロックされている場合、ISubCube データ値は SeismicCube に戻されます。

したがって、出力用のデータを生成するまでの処理は同じです。出力キューブを作成した後、(0,0,0) から (numI-1, numJ-1, numK-1) までの ISubCube を作成します。CopyFrom メソッドを使用して出力配列を ISubCube にコピーします。出力 SeismicCube は作成時にロックされているため、ISubCube のデータを配置する必要があります。

于 2014-11-03T12:00:27.747 に答える