添加源项fvOptions编译出错
-
各位老师好,大家好:
最近在twoLiquidMixingFoam中添加fvOptions项后wmake时出现了如下错误,显示我的fvOptions没有定义:In file included from my_twoLiquidMixingFoam.C:78:0: alphaDiffusionEqn.H: In function ‘int main(int, char**)’: alphaDiffusionEqn.H:11:10: error: ‘fvOptions’ was not declared in this scope == fvOptions(alpha1)//add ^~~~~~~~~ alphaDiffusionEqn.H:11:10: note: suggested alternative: ‘fvOption_H’ == fvOptions(alpha1)//add ^~~~~~~~~ fvOption_H
但是,我在C文件的开头中添加了fvOptions头文件,此外,Make文件夹中options中也有lfvoptions:
#include "pimpleControl.H" #include "fvOptions.H"//add this
EXE_LIBS = \ ...... -lfvOptions \ -lmeshTools
请问大家这是什么原因?有什么解决办法吗?
期待大家的回复和解答。此外,我还有一个问题,fvOptions和fvOption_H有什么区别呢?我没有找到fvOption_H的文件
另外,我的alphaDiffusionEqn.H是这样写的
{ fvScalarMatrix alpha1Eqn ( fvm::ddt(alpha1) - fvc::ddt(alpha1) - fvm::laplacian ( volScalarField("Dab", Dab + alphatab*turbulence->nut()), alpha1 ) == fvOptions(alpha1)//add ); fvOptions.constrain(alpha1Eqn);//add this alpha1Eqn.solve(); fvOptions.correct(alpha1);//add this alpha2 = 1.0 - alpha1; rhoPhi += alpha1Eqn.flux()*(rho1 - rho2); } rho = alpha1*rho1 + alpha2*rho2;
-
@东岳 老师您好,添加这个项就是想在不改变网格的条件下,在某个位置设置一个新的入口,设置fvOptions后就能通过只修改topoSet中的区域划分来不断修改新的入口的位置。不然的话,没改变一次新的入口的位置就需要重新划分一下网格,太麻烦了。(/ω\)
之前在pisoFoam中是成功实现了,但是在这里却失败了
pisoFoam中UEqn改的地方:fvm::ddt(U) + fvm::div(phi, U) + MRF.DDt(U) + turbulence->divDevReff(U) == fvOptions(U) ); UEqn.relax(); fvOptions.constrain(UEqn);//
-
@马乔 老师您好,非常感谢老师您的指点,我仔细对比了一下,pisoFoam的createFields.H中本来就包含了createFvOptions.H这个文件,现在我加上createFvOptions.H后已经编译成功了。
但是,现在又出现了一个问题,alpha的fvOptions已经可以计算了,但是U在计算过程中却出现了单位不一致的问题, 但是我却检查不出来问题,还请老师您能再指点一下
报错:
--> FOAM FATAL ERROR: incompatible dimensions for operation [U[1 -2 -2 0 0 0 0] ] == [U[0 1 -2 0 0 0 0] ] From function void Foam::checkMethod(const Foam::fvMatrix<Type>&, const Foam::fvMatrix<Type>&, const char*) [with Type = Foam::Vector<double>] in file /home/dyfluid/OpenFOAM/OpenFOAM-6/src/finiteVolume/lnInclude/fvMatrix.C at line 1283.
UEqn.H代码:
fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) + turbulence->divDevRhoReff(rho, U) == fvOptions(U)//add this ); UEqn.relax(); fvOptions.constrain(UEqn);//add this if (pimple.momentumPredictor()) { solve ( UEqn == fvc::reconstruct ( ( - ghf*fvc::snGrad(rho) - fvc::snGrad(p_rgh) ) * mesh.magSf() ) ); fvOptions.correct(U);//add this }
-
对了,如果还有同伴也需要用到fvOptions的话,有一个网站推荐给大家:
https://caefn.com/openfoam/fvoptions里面写了在算例中添加fvOptions的一些方法,希望对大家有帮助
-
@东岳 非常感谢老师的指点,已经成功编译了UEqn
tmp<fvVectorMatrix> tUEqn//fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) + turbulence->divDevRhoReff(rho, U) == fvOptions(rho,U)//add this ); fvVectorMatrix& UEqn = tUEqn.ref();//add UEqn.relax(); fvOptions.constrain(UEqn);//add this
但是,还想请问一下老师,怎样才能在rho方程上添加fvOptions?rho不是只由alpha1和rho1,2决定吗?
rho = alpha1*rho1 + alpha2*rho2;
-
@merlinizlf 是的。另一个角度,连续性方程一般是跟压力方程有关。但是,在压力方程中添加密度的源项,这就变成了对压力产生影响,进一步影响速度,再影响质量。不清楚这个路子怎么样。所以。可能需要思考一下。目前我没有详细琢磨。
你可以先试试在alpha方程上加,加小一点的数值,要不容易越界。
-
@东岳 非常感谢老师 !
就是这样迂回的话好像有些难,我还要再思考思考,再尝试尝试