可压缩浸没边界法的实现
-
我准备在foam-extend-4.0中的immersedBoundary代码的基础上,修改可压缩求解器rhoPisoFoam以实现对可压缩浸没边界法的实现,对于浸没边界的设置如下所示:
ibCylinder { type immersedBoundary; refValue uniform (0 0 0); refGradient uniform (0 0 0); fixesValue yes; setDeadCellValue yes; deadCellValue (0 0 0); }
目前在原不可压缩浸没边界法的求解器上加入温度方程成功运行,但是在修改可压缩求解器的过程中,在温度方程的求解时程序会提示浮点数溢出。
针对出现的问题,我猜测可能的问题出现在- 焓方程没有能够识别浸没边界条件。
因为源代码部分是这样的:
Foam::wordList Foam::basicThermo::hBoundaryTypes() { const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField(); wordList hbt = tbf.types(); forAll(tbf, patchi) { if (isA<fixedValueFvPatchScalarField>(tbf[patchi])) { hbt[patchi] = fixedEnthalpyFvPatchScalarField::typeName; } else if ( isA<zeroGradientFvPatchScalarField>(tbf[patchi]) || isA<fixedGradientFvPatchScalarField>(tbf[patchi]) ) { hbt[patchi] = gradientEnthalpyFvPatchScalarField::typeName; } else if (isA<mixedFvPatchScalarField>(tbf[patchi])) { hbt[patchi] = mixedEnthalpyFvPatchScalarField::typeName; } } return hbt; }
那如果上述假设成立,那我是否能够在代码中添加
else if (isA<immersedBoundaryFvPatchScalarField>(tbf[patchi])) { hbt[patchi] = immersedBoundaryFvPatchScalarField::typeName; }
来实现在焓方程中施加浸没边界条件呢?可是这样做的话也没有办法在0文件夹中设定h的浸没边界的固定焓值……
2. 可能需要直接求解温度方程。但是我看basicThermo中温度的读取是constconst Foam::volScalarField& Foam::basicThermo::T() const { return T_; }
如果我使用
const volScalarField& T = thermo.T();
,这样求解器编译时会报错。感觉在OpenFOAM中的T场更新是通过焓值进行的。目前也不知道该如何解决,所以想咨询一下各位老师,我上面提到的解决方法能否实现,或者有没有其他的解决这个问题的方法和建议,万分感谢
- 焓方程没有能够识别浸没边界条件。
-
@Samuel-Tu 按照给出的ppt,是可以添加湍流模型的,具体到多高的雷诺数,我也不是很清楚
http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2015/HrvojeJasak/ImmersedBoundary.pdf
-
@东岳 非常感谢东岳老师!按照您的指导,我设置了新的边界条件
immersedboundaryEnthalpyFvPatchField
,其他部分的设置目前都正常,但是想要使用浸没温度边界上的函数来更新焓值时会报错,我的程序部分如下所示:const label patchi = patch().index(); wordList type = thermo.T().boundaryField().types(); if(isA<immersedBoundaryFvPatchScalarField>(type[patchi])) { immersedBoundaryFvPatchScalarField& TIb = thermo.T().boundaryField()[patchi]; scalarField & Tref = TIb.refValue(); }
之后程序就会报错,
error: invalid initialization of reference of type ‘Foam::immersedBoundaryFvPatchScalarField& {aka Foam::immersedBoundaryFvPatchField<double>&}’ from expression of type ‘const Foam::fvPatchField<double>’ thermo.T().boundaryField()[patchi];
应该是无法将基类转换为派生类,想和老师请教一下遇到这个问题要怎么解决呢,麻烦老师了!!!