2

CFD ソフトウェア OpenFOAM のプラグインを C++ で作成しています。私のコードは、分析の時間ステップごとに、モデル内の各セル (>100k セル) から情報を読み取ります。最初の時間ステップでゼロで初期化され、次の時間ステップで変化する C という double のリストのリストがありますが、サイズは同じままです。

私の問題は、最初のステップでのリストの初期化に時間がかかりすぎることです。次のタイム ステップでは、リスト内のすべての要素を簡単にループし、それらの値に対していくつかの計算を実行して、再度保存することができます。ただし、最初のステップでは、サイズ 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# だった場合、次のように 2 つの行に分割できます。

List<List<double>> C;
C = new List<List<double>>(size);

ヘッダーファイルに1行目、Cファイルに2行目を書きます(私が理解している限り)。C++で同様のことを行うにはどうすればよいですか?

これについて助けてくれてとても感謝しています。

ありがとう、デビッド

4

3 に答える 3

0

単純なリストの場合は、サイズを変更する必要があるか、または既に正しいサイズであるかに応じて、次のいずれかを使用できます。

mylist.resize(size, Zero);
mylist = Zero;

リストのリストがある場合は、それらが正しいサイズであると想定し、それらをゼロにします。

for (auto &lst : mylistlist)
{
    lst = Zero;
}

私はZeroむしろ定数を使用します0.0-それは意味を明確にし、将来必要に応じてベクトル/テンソルおよびその他のベクトル空間の量にうまく適用されます.

于 2020-01-11T15:55:16.843 に答える