@李东岳 东岳老师您好,我后面设置了一个算例,Re=100,边界条件如下所示: ,如果把重力加速度设置为0,计算正常,但是加入重力后,计算到后面就会发散,从云图上的感受是速度堵在出口没办法出去,下面是发散前我截出来的某个时刻的云图:
能否请教一下老师,帮我分析一下问题可能出在哪呢?
王慧博
帖子
-
考虑浮力的计算中边界条件设置 -
考虑浮力的计算中边界条件设置@李东岳 感谢李老师,我看了您的笔记,上面写到了压力边界出口为prghPressure条件。那么速度出口条件是还是用零梯度就可以么
-
考虑浮力的计算中边界条件设置我想做一个管道流动,管道中间放置一个颗粒,温度高于来流。在考虑浮力的求解器,比如buoyantPimpleFoam和buoyantBoussinesqPimpleFoam中,边界条件设置时遇到了问题。我参考OpenFOAM自带的算例,发现里面与浮力相关的算例,速度边界为(0,0,0),压力边界为fixedFluxPressure。但是我在不考虑浮力的算例中设置,入口边界条件为:速度固定值,压力零梯度;出口边界条件为:速度零梯度,压力固定值。但是把这些边界条件代入到考虑浮力的条件中,会出现问题。
所以想求助一下老师们,在考虑浮力时,入口和出口的速度、压力应该采用什么样的边界条件比较合适呢?
-
wallShearStress函数量纲问题咨询@李东岳 好的,我明白啦,感谢李老师~:
-
wallShearStress函数量纲问题咨询@李东岳 感谢东岳老师哈,我也测试了一下,再乘了个密度,发现也没有报错,的确不会受量纲限制。老师我还想请教一个问题,OpenFOAM中的代码在什么情况下会考虑等式两边的量纲是否对应呢
-
wallShearStress函数量纲问题咨询@bestucan 在 wallShearStress函数量纲问题咨询 中说:
一个是可压缩的,一个是不可压缩的。
不可压缩的状况下$\rho$是个常量,方程两边同除以$\rho$。好像是压力项变成$\frac{p}{\rho}$。其他项就没有$\rho$了。
可压缩的话,方程中各项按说本身就带$\rho$,我猜的
看这个
嗯嗯,东岳老师那个帖子我也看过。但是就是上面代码写到的,如果按照上面的公式看的话,可压缩流中剪切应力计算得到的结果应该要比不可压缩中结果多乘一个$\rho$。但是wallShearStress函数中输出场的量纲是固定的(不可压缩公式中计算得到的剪切应力量纲),我就觉得很奇怪……到底对于可压缩流,如果用这个代码计算,得到的结果是量纲给错了,数值是正确的,还是是除以了一个密度后计算的结果
-
wallShearStress函数量纲问题咨询各位老师们好,我在用OpenFOAM-2.4.0版本中,需要提取可压缩流动中壁面的剪切应力,查阅了后处理程序wallShearStress,其中有一点我感到很困惑。
剪切应力场定义如下:
volVectorField wallShearStress ( IOobject ( "wallShearStress", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedVector ( "wallShearStress", sqr(dimLength)/sqr(dimTime), vector::zero ) );
其中规定量纲为$m^2/s^2$,然而在wallShearStress的计算中
在calcIncompressible函数中,是读取的$devReff()$函数
const volSymmTensorField Reff(model->devReff()); forAll(wallShearStress.boundaryField(), patchI) { wallShearStress.boundaryField()[patchI] = ( -mesh.Sf().boundaryField()[patchI] /mesh.magSf().boundaryField()[patchI] ) & Reff.boundaryField()[patchI]; }
而在calcCompressible函数中,是读取的$devRhoReff()$函数
const volSymmTensorField Reff(model->devRhoReff()); forAll(wallShearStress.boundaryField(), patchI) { wallShearStress.boundaryField()[patchI] = ( -mesh.Sf().boundaryField()[patchI] /mesh.magSf().boundaryField()[patchI] ) & Reff.boundaryField()[patchI]; }
这两个函数不是应该差了$\rho$么,为什么输入的wallShearStress场的量纲在不可压缩和可压缩下是固定的呢?我也看了其他几个版本,发现都是一样的代码。
这块没有特别理解,如果我要计算可压缩流动的剪切应力,是直接取它的值,还是在该场的基础上乘以密度呢?希望老师们能帮我解答疑惑,不胜感激!
-
传热计算中物性参数分段线性插值问题想请教一下关于热物性(如$\rho,\mu,k,c_p$)对温度压力比较敏感的问题,在计算中往往会十分容易发散,这个发散的原因本质上是由于什么呢,体现在程序中是容易造成哪一块发散。而且同样都可以使用例如buoyantPimpleFoam求解器,这种与高速可压缩流体计算的区别在哪呢?在计算中是否可以采用一些特殊的方法提高程序的收敛及稳定性呢。
-
矩阵求解器@李东岳 李老师您好,40阶的矩阵,使用LU分解速度感觉还可以,但是计算出来的结果带入Ax-b会产生很大的差,然后代码在几步内就会崩溃。之后我换了Jacobi迭代的方法,程序能够正常运行了。但是我也不是特别清楚是我的矩阵本身的问题还是LU分解不太适用于比较高阶的矩阵求解。
-
矩阵求解器我也设置了一个自己的矩阵方程求解,Ax=b,A是一个40*40的矩阵,x的求解使用了两种方法:
- 使用SVDinv(A)×b;
- 使用LUsolve(A,b)求解,最后b就是所得的x的解。
但是随着代码的运行,我发现Ax-b的值越来越大,所以想请教一下是我的设置有问题么,还是说是矩阵本身条件数的问题,或者是LU分解不太适用于这么大的矩阵呢。
希望看到的老师同学们能帮助我解答疑惑,万分感谢!!
-
可压缩浸没边界法的实现@东岳 非常感谢东岳老师!按照您的指导,我设置了新的边界条件
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];
应该是无法将基类转换为派生类,想和老师请教一下遇到这个问题要怎么解决呢,麻烦老师了!!!
-
可压缩浸没边界法的实现@Samuel-Tu 按照给出的ppt,是可以添加湍流模型的,具体到多高的雷诺数,我也不是很清楚
http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2015/HrvojeJasak/ImmersedBoundary.pdf
-
可压缩浸没边界法的实现我准备在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场更新是通过焓值进行的。目前也不知道该如何解决,所以想咨询一下各位老师,我上面提到的解决方法能否实现,或者有没有其他的解决这个问题的方法和建议,万分感谢
- 焓方程没有能够识别浸没边界条件。
-
添加超临界水物性计算方程IAPWS-IF97-OF时出现报错@Jato 我的是在OpenFOAM-2.4.0版本下编译的,没有出现你这个问题
-
关于k-w SST湍流模型边界条件设置的疑惑谢谢李老师解答疑惑,我换用了层流和kEpsilon模型,但是仍然出现计算发散的问题,使用kEpsilon模型时也出现边界值过大的问题,我怀疑可能是由于设置物性变化过于剧烈的问题。
-
关于k-w SST湍流模型边界条件设置的疑惑实在抱歉没有认真检查排版导致图片出现问题。现将图1重新上传
【附】壁面wall设置为恒定热流,这里有个疑惑,在设定恒热流边界条件指定的value uniform值会影响这个条件吗,感觉这个又有点类似恒定温度,但是删去会报错
-
关于k-w SST湍流模型边界条件设置的疑惑各位老师师兄师姐们好,我刚刚开始学习湍流模型,使用buoyantSimpleFoam求解器求解湍流流动问题,使用了k-w SST湍流模型,但是在计算过程中总是出现计算omega边界发散问题,也查阅了很多相关资料,还是没有解决,在这里列出所设置的边界条件设置及错误,希望大家能够帮助我指出问题所在,不胜感激!
ps:我在网格划分时边界层第一层网格宽度y+设置为0.5,网格拓展率1.2,Re约为5*10^5,checkMesh没有问题!
边界条件设置:1.png
错误及上一步运行结果
-
添加超临界水物性计算方程IAPWS-IF97-OF时出现报错按照OpenFOAM WIKI的教程http://openfoamwiki.net/index.php/Contrib/IAPWS-IF97-OF执行时,产生了libIAPWSRangeThermo .so和libfreesteam .so
但是按照教程在算例的controdict中添加了libs { "libIAPWSRangeThermo.so" "libfreesteam.so" }
之后,会报错:
"ill defined primitiveEntry starting at keyword 'libIAPWSRangeThermo.so' on line 49 and ending at line 56" file: /home/bobo/buoyantSimpleFoam/buoyantCavity/system/controlDict at line 56. From function primitiveEntry::readEntry(const dictionary&, Istream&) in file lnInclude/IOerror.C at line 132.
希望能够得到解答,万分感谢!