我正在用 C++ 为 CFD 软件 OpenFOAM 编写一个插件。对于分析的每个时间步,我的代码将从模型中的每个单元(>100k 单元)读取信息。我有一个名为 C 的双精度列表列表,它在第一个时间步中用零初始化,并在下一个时间步中发生变化,但是大小保持不变。
我的问题是第一个时间步骤中列表的初始化需要太多时间。在接下来的时间步骤中,我可以轻松地遍历列表中的所有元素并对这些值执行一些计算并再次存储它们。然而,在第一个时间步骤中,我有一个大小为 0 的空列表,这意味着我必须附加零来初始化它。我确实知道列表的最终大小,所以我可以轻松编写
Foam::List<Foam::List<double>> C (size,0.0);
在第一步中,我的问题将得到解决(这是 OpenFOAM 特定的列表类https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1List.html)
但是,如果我想定义我的列表列表一次,然后在所有时间步骤中使用它,我需要在头文件中定义它。在头文件中我不知道大小,这意味着我将它定义为
Foam::List<Foam::List<double>> C;
在头文件中,然后在 C 文件中用零填充它。这是我的问题 -如何在 C 文件中初始化已定义的列表列表,其中包含零?
如果这是 C#,我可以将它分成两行
List<List<double>> C;
C = new List<List<double>>(size);
并在头文件中写入第一行,在 C 文件中写入第二行(据我所知)。如何在 C++ 中做类似的事情?
非常感谢您对此的帮助。
谢谢,大卫