感谢老师,这下在主程序能找到创建的场变量了
T
tgstar
@tgstar
帖子
-
如何将new出来的volScalarField手动添加到objectRegistry? -
如何将new出来的volScalarField手动添加到objectRegistry?如下所示,在固体力学求解器的编写中,我希望根据材料类型创建不同数量材料参数的volScalarField,进而用于主程序的求解:
List<volScalarField*> matConstList(0); if (materialType == "elastic") { // 构造出Evalue和nuvalue两个volScalarField matConstList.setSize(2); // new两个volScalarField出来,将Evalue和nuvalue都保存下来 matConstList[0] = new volScalarField("E", Evalue); matConstList[1] = new volScalarField("nu", nuvalue); } else if (materialType == "plastic") { // 类似上面的代码创建塑性参数 }
然而,在将各种材料参数的volScalarField new出来并保存到matConstList之后,主程序中使用lookupObject函数无法找到这些volScalarField,如下所示:
const volScalarField& E = mesh.lookupObject<volScalarField>("E"); // 这样会显示mesh没有名为"E"的objectRegistry
请教一下各位大佬,有没有什么办法,能将这些volScalarField手动添加到objectRegistry,使得主程序求解的时候lookupObject函数能找到他们?
-
请教各位波浪理论适用图中三阶波与五阶波重合部分应该怎么选择呢?
如图所示,这是非常经典的Le Méhauté (1976)波浪理论适用图,但我有点迷糊,主要有两方面疑问:- 图中红色部分看起来是Stokes三阶波/四阶波与五阶波的交接处,那么我应该选择用三阶波/四阶波还是五阶波呢?同样地,图中浅蓝色和五阶波也有交集,那么在既是浅蓝色又是五阶波的区域应该用cnoidal还是五阶波呢?
- 我还注意到图中五阶波下面还有一个流函数理论,但我看olaFlow的用户手册,用流函数的话需要输入一大堆参数(如下图所示),这些参数应该怎么选取呢?本菜鸡在此请教一下各位
-
OpenFOAM如何在一个时间步内执行一次计算又把所有量恢复到上一时间步的结果?如题,本人目前正在进行流固耦合相关研究,流体基于interFoam+olaFlow造波功能,固体基于solidDisplacementFoam。基本算法为Tuković et al. (2018)的算法,即一个时间步内流体先算,算完通过边界条件把流固耦合界面的应力加到固体上,固体再算,固体算完把流固耦合界面的速度加到流体上,就这么来回捣,直至收敛。但我遇到了两个问题:
- 这种迭代算法的核心在于一个迭代步内流体与固体的试算,试算结果就这么留在流体与固体里了,对结果有很大影响,我感觉有必要擦除流体与固体的试算结果,再进入下一个迭代步。固体好说,只有一个D,我令D=D.oldTime();就能把D的试算结果消去,但流体就很麻烦,因为有很多个变量,我试了半天也不知道该怎么把所有变量的值都擦除掉,恢复迭代前的值,各位大佬有什么建议吗?
- 我图方便,没有开动网格,也就意味着流固耦合界面是不动的,固体对流体的影响通过把界面移动速度加到流体边界上实现,我想问一下各位大佬,开不开动网格对计算结果的影响大吗?