修改湍流模型,定义表达式的问题
-
@King_RVM
Foam::T()
是用来求张量场转置的全局函数。如果你的代码没有直接的调用该函数类似V1.T(),那就是在场运算的过程中间接调用了该函数。我试了一圈下来,下面是编译的情况tensor I(1, 0, 0, 0, 1, 0, 0, 0, 1); volScalarField::Internal divU(fvc::div(fvc::absolute(phi, U))()()); volTensorField::Internal sij(-0.33*I*divU); volTensorField ss(fvc::grad(U)); DimensionedField<tensor, volMesh> y(sij); DimensionedField<tensor, volMesh> yCopy(sij); Foam::T(yCopy,y); //OK //y.T(); //compiled Error, no matching function ss.T(); //OK //sij.T(); //compiled Error, no matching function
volTensorField::Internal
的类型实际就是DimensionedField<tensor, volMesh>
,不知道为什么他的成员函数T()编译无法通过(目前我没找到原因)。但volTensorField
的成员函数T()可以编译通过。
所以我建议你将你所有的场变量都声明称volTensorField
类型 -
@Cr 是的,我定义I1 I2的时候调用了转置函数,但是我现在发现实际上我不需要,于是删去了转置计算。关于量纲的问题,你说的很对,虽然sij omegeij、标量I1 I2和张量V1 V2 V3没有量纲,但是定义过程中S 与 Omega有量纲,为了减少量纲的问题,我定义如下
sij 与 omegaij的无量纲化是通过除以omega_实现的。现在的报错是与定义的张量I 有关,在sij中,场离散的项symm(tgradU())不能直接与单位对角矩阵I相加减,该怎样把I转换成一样的类型呢?我想通过volTensorField定义I,但是报错。我定义单位对角阵是因为定义sij中1/3*partU/partx需要乘以狄拉克函数,实际计算中就是单位对角阵。
目前报错如下: