使用3D阵列写入海洋中的地震立方体

时间:2014-11-01 03:13:19

标签: ocean petrel

我使用

从地震立方体中读取了所有样本
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;
                        }
                    }

代码正在编译和运行,但它没有意义,好像所有样本都是混乱的。 任何帮助Appriciated

1 个答案:

答案 0 :(得分:1)

我认为您所拥有的代码没有任何问题。 Ocean API的Ocean API中有一些工具可以帮助并提高性能。

首先,看一下GetSubCube方法(Index3,Index3)。它创建了SeismicCube的内存部分。它有一个方法ToArray,它将提供您正在进行的立方体样本的三维数组。另一种方法CopyFrom将样本从三维数组复制到ISubcube。如果原始SeismicCube(在您的情况下为输出)被锁定,则ISubCube数据值将被放回到SeismicCube中。

因此,通过为输出生成数据来进行处理将是相同的。创建输出立方体后,您将创建一个从(0,0,0)到(numI-1,numJ-1,numK-1)的ISubCube。使用CopyFrom方法将输出数组复制到ISubCube,并且由于输出SeismicCube在创建时已锁定,因此应将ISubCube中的数据放入其中。