【发布时间】:2021-10-13 18:53:33
【问题描述】:
我在 openFOAM 中编写了一个运行良好的 c++ 程序。用户可以将直径 d_p 作为输入。这个直径的数量可以变化,例如在一种情况下,它可能是d_p1、d_p2 和d_p3……在另一种情况下,它可能只是d_p1 和d_p2。我想做的是首先检查在字典中设置了哪些直径并将它们添加到我可以循环的数组中。这将帮助我解决具有索引直径的数组的方程,而不是为每个变量复制粘贴代码。
有人知道这是否/如何可能吗?我在互联网上阅读了一些关于此的帖子,但找不到解决方案:/
编辑:
更多细节:
我有一本名为 someProperties 的字典,它看起来像这样:
d_p1 d_p1 [0 1 0 0 0 0 0] 0.1E-06;
d_p2 d_p2 [0 1 0 0 0 0 0] 100.0E-06;
d_p 的数量,就像我说的,是可变的。我可以使用另一个名为 createFields.H 的头文件读取直径,并使用以下可能的代码:
IOdictionary someProperties
(
IOobject
(
"someProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
dimensionedScalar d_p1
(
CDRProperties.lookup("d_p1")
);
dimensionedScalar d_p2
(
CDRProperties.lookup("d_p2")
);
稍后我想在我的正常代码中使用这个直径。要遍历直径(所以我不需要为所有直径复制粘贴我的代码)我需要某种结构,如数组或带有维度的标量列表(这是某种 openFOAM 编码)。
提前致谢
火神
【问题讨论】:
-
直径只是直径类型的命名实例吗?
-
你为什么需要一个 dictionary/hashmap 呢?您不能将它们存储在动态扩展的
std::vector中吗?然后,您可以像通常使用数组一样遍历它。 -
openFOAM 中的字典是用来初始化用户的……意思是如果用户想运行程序,他可以在这个字典中定义参数,然后程序从中读取变量。 ..
标签: c++ initialization openfoam