想学习interfoam在气液之间得传热,该如何在interfoam上面添加传热来实现这个求解器,多谢各位了
不知道其他同学有没有现成的代码,不过,我可以提供给你基本流程:
- 假设数学公式是这样的
\frac{\partial T}{\partial t} + \nabla\cdot(UT) = \nabla^2 (\alpha_T T)
- 创建一个场,具体可以参照 interFoam 里面的 createFields.H,这里的 T 就是公式中的 T
volScalarField T
(
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
- 读取所需的系数 alphaT
- 将数学模型翻译成 OpenFOAM 能识别的方程
solve
(
fvm::ddt(T)
+ fvm::div(phi, T) // phi 为 U 在面上的通量
- fvm::laplacian(DT, T) // DT 为公式中的 alpha
);
- 将第三步的代码插入 interFoam 相应位置,一般是在 U、p 计算完之后
- 如果 U 方程里面有涉及到的 T 变量项,可以将其列入,比如
fvVectorMatrix UEqn
(
fvm::ddt(U)
+ fvm::div(phi, U)
- fvm::laplacian(nu, U)
==
-beta*(T - T0)*g
);
只是其中的 beta T0 g 需要从文件中读取
7. 编译可以了。如果有问题再改。
由于是 interFoam ,所以你里面的一些系数都是两份,要注意读取方面的问题。
是怎么定义的?在程序中又是怎样读取的?
这个读取是直接在 transport 里面操作,而不是相的属性,你需要的是读取相的属性。
这样读比较好
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
dimensionedScalar DT1(transportProperties.subDict("water").lookup("DT"));
dimensionedScalar DT2(transportProperties.subDict("air").lookup("DT"));
volScalarField DT
(
IOobject
(
"DT",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
alpha1*DT1 + (1-alpha1)*DT2
);
记得把版本写在你前面的帖子上。
DT 这样写
DT DT [0 2 -1 0 0 0 0] 0.59;
好的,已经可以计算了,我在再添加一些其他得热特性试试,谢谢前辈,太麻烦您了。前辈如果想再加上一个粘度随温度变化,这个有没有好的思路,我想直接添加粘度随温度变化的函数这个想法可以吗
因为你使用的是 interFoam,其粘度是两相迭加的,即
\eta = \alpha_1 \eta_{10} + \alpha_2\eta_{20}
是封装在两相流模型里面的,所以不能直接应用,而是需要更深层一点的库的改写。
\eta = \alpha_1 \eta_1(T) + \alpha_2\eta_2(T)
好的,谢谢前辈,那就是我可以找到粘度的src文件在里面进行修改么
Sorry, 这几天有点忙,才上来。
两相流的粘度是两个相的组合,实际上应该到不可压缩里面找 viscosityModels
没事的,谢谢前辈哈,前辈我这样处理您觉得行吗,就是不管之前的粘度我重新声明一个粘度加到动量方程在laplac里面替换之前的nu,然后给这个新的粘度定义成为 ,这样行么
这样做也是可以的,就是新建一个场。
好的,谢谢前辈,前辈您对这个vof界面的重构有研究吗