量纲不匹配
-
求助各位大佬,本人刚学习open foam没多久,现在是在多域求解器chtMultiRegionFoam的基础上进行修改,需要把它的原能量方程改写成温度方程,
while(pimple.correctNonOrthogonal()) { fvScalarMatrix TEqn ( fvm::ddt(T) +fvm::div(phiFluid[i],T) - fvm::laplacian(alphaEff,T) == rad.ST(rhoCp , T) ); TEqn.relax(); TEqn.solve(); }
在不加辐射项的时候算例是可以计算的,但是加上辐射项后会报错(报错信息如下),已经困扰我一个月了,不知道是哪个地方的量纲不对
phiFluid[0] dimensions: [0 3 -1 0 0 0 0] --> FOAM FATAL ERROR: LHS and RHS of - have different dimensions dimensions : [1 0 -3 1 0 0 0] - [1 -1 -3 0 0 0 0] From function Foam::dimensionSet Foam::operator-(const Foam::dimensionSet&, const Foam::dimensionSet&) in file dimensionSet/dimensionSet.C at line 521. FOAM aborting
-
有可能你参数量纲单位设置错了
-
@ice_flow 谢谢老师,我今天才看见回复,我按照您的回复对量纲进行了输出
Info << "phiFluid[i] dimensions: " << phiFluid[i].dimensions() << endl; Info << "alphaEff dimensions: " << alphaEff.dimensions() << endl; Info << "rad.ST dimensions: " << rad.ST(rhoCp, T).ptr()->dimensions() << endl;
输出结果是这样的,辐射项的量纲不知道为啥输出不出来
phiFluid[i] dimensions: [0 3 -1 0 0 0 0] alphaEff dimensions: [0 2 -1 0 0 0 0] rad.ST dimensions: --> FOAM FATAL ERROR: LHS and RHS of - have different dimensions dimensions : [1 0 -3 1 0 0 0] - [1 -1 -3 0 0 0 0]
-
我对你这个方程不太熟悉,你自己可以对照原方程检查量纲。如果没弄错的话,
在 TEqn 方程中,fvm::ddt(T) 的维度应该是 [1 0 -3 1 0 0 0](即温度的时间导数,单位是 K/s)。fvm::div(phiFluid[i], T) 的维度应该是 [1 0 -3 1 0 0 0](即对流项,单位是 K/s)。
fvm::laplacian(alphaEff, T) 的维度应该是 [1 0 -3 1 0 0 0](即扩散项,单位是 K/s)。
rad.ST(rhoCp, T) 的维度应该是 [1 0 -3 1 0 0 0](即辐射源项,单位是 K/s)
要让 rad.ST(rhoCp, T) 的返回值与方程中其他项的维度一致,可以检查 rad.ST 的实现或传入的参数(rhoCp)。大概是这个思路。
-
@18190691340 是的,谢谢老师,我发现是我的0文件夹下的G的参数量纲定义错了,是从别的算例文件那一起考过来的,因为我的计算都是无重力情况下的,所以一直没考虑过是这个文件出了问题,我还以为是求解器中的变量量纲定义错了