- 网格质量如何?如果网格太差(checkMesh有严重报错,最大非正交大于85,skewness 超过20,等),建议回炉重造。
- k 和 epsilon 的对流项离散格式用 linearUpwind,grad(k) 和 grad(epsilon) 用 cellimited,如果还不行,直接上 upwind试试。也可以先用upwind算一段时间再换成 linearUpwind。
- 边界条件的设置取决于你使用的湍流模型,对于高雷诺数模型,入口 k 和 epsilon 给固定值,根据湍流度来估算;壁面上 k 用 kqrWallFunction,epsilon 用 epsilonWallFunction,nut 用 nutUSpaldingWallFunction。高雷诺数k-epsilon湍流模型还要注意壁面 y+,一般认为需要 y+>30,如果y+太小,结果反而不好,也可能会引起计算不稳定。
xpqiu
帖子
-
-
@金石为开 本质上是 hashTable 的使用。在基类里调用宏函数 declareRunTimeSelectionTable 创建了一个 hashTable,其 key 的类型为 “word”,value 类型为函数指针,这个函数指针指向一个返回派生类临时对象的智能指针(autoPtr)。
在派生类里,每次调用 addToRunTimeSelectionTable 的时候,相当于往 hashTable 里添加一组元素。
在求解器里,创建的是基类的智能指针,这个指针指向基类中定义的 New 函数的返回值。New 的作用是选择具体的派生类,这里涉及到C++的一个特性,即基类指针可以指向派生类。New 函数根据你在算例里提供的模型的名字(typeName),去 hashTable 里匹配,然后将匹配到的派生类的对象返回。这样,就实现了模型的选择。
-
@子仲无未 用CAD画一个多面体,坐标要跟你的网格适配,保证这个多面体刚刚好包围了你想要的网格。然后将该多边形导出成 STL 格式,然后用 topoSet 将改多边形所包围的网格提取到一个 cellSet,topoSetDict大致是这样写:
{ name c0; type cellSet; action delete; source surfaceToCell; sourceInfo { file "constant/triSurface/block.stl"; outsidePoints (( 1.012 0.01 0.902)); //includeCut false; includeCut true; includeInside true; includeOutside false; nearDistance 0.0; curvature 0; } }
最后,在 setFieldsDict里,这样写:
defaultFieldValues ( volScalarFieldValue alpha 0 ); regions ( cellToCell { set c0 ; fieldValues ( volScalarFieldValue alpha 0.60 ) ; } );
用这种方法,可以做到对任意形状的网格区块设置初始场。
-
functions { cellSource1 { type cellSource; functionObjectLibs ("libfieldFunctionObjects.so"); enabled yes; outputControl outputTime; log yes; valueOutput yes; source all; operation max; fields ( T ); } }
这个加到 controlDict 里就能输出最大值了。
其实还有一种办法,既然你说在终端的输出信息中包括了最大和最小温度,那么如果你保存了终端输出信息,你还可以用 linux 的工具来从那些众多的信息中将你想要的最大和最小信息提取出来,
比如,假设你的文件名为 logcat log | grep "max(" | sed 's/^\ *//g' | cut -d ' ' -f 5
感兴趣的话可以试试这个命令,可能不能完全适合你的情况,你需要做些修改。
-
PS:一直不清楚为什么在.bashrc里的那4句注释掉就可以,之前从来没有对这4句太在意,而是直接添加OF的环境变量就好了。。。
这里解释了为什么:http://www.evernote.com/l/AYvYUlXKzfxBIZ5sJbyk-cREUR1SGcAPIto/
-
@wwzhao 在OpenFOAM-2.1的时候,程序里写的就是“CrankNicholson” ,所以controlDict里也应该写“CrankNicholson”,虽然这个拼写确实是不正确的。但是从OpenFOAM-2.3开始,这个名字改成了正确的拼写:“CrankNicolson”,相差一个字母。所以这就导致了2.1和2.3的算例会在这里不兼容。
-
常用出入口边界条件:
https://cpp.openfoam.org/v4/a11022.html壁函数:
https://cpp.openfoam.org/v4/a11020.html每一个边界条件都附有简短的说明以及使用示例。
-
@random_ran
是 GAMG 在拖你的后腿,这么多核的情况下,你可以试试用 PCG + DIC 来求解 p 方程,这个方法并行效率会高一些。 -
@qjh888 在 OpenFOAM中kOmegaSST和yPlusRAS 中说:
yPlus要在30~200之间才可以使用wallFunction,
这个说的是标准壁函数,OpenFOAM中的omegaWallfunction是混合的,所以理论上对omega的边界处理是可以适用于较大范围的yPlus的。但是其他的湍流变量并没有这种混合,此外,yPlus太大,边界处网格必然变粗,精度也会相应下降。所以,yPlus取多少还是要根据实际情况来决定
还有一个问题,为什么计算yPlusRAS一定要使用nutWallFunction?
那是因为yPlus的计算是依赖于你所使用的湍流模型以及nut的边界条件处理的,所以,yPlusRAS需要调用nutWallFunction类中的一个函数来计算 yPlus
-
@lixh 在热物理属性那个文件里设置(thermoPhysicsProperties.air)。是否需要设置密度和年度,取决于你的热物理模型的选择,如果equationOfState设置的是 perfaceGas,那么,流体将遵循理想气体状态方程,这时不需要设置密度,因为密度是根据压力算出来的。如果设为rhoConst,这时需要指定流体的密度。粘度的设置取决于 transport 的设置,如果设置为 const,即粘度为常数,则需要指定粘度的值,如果选择其他粘度模型,则会有不同的设置,具体可以参考UserGuide的 thermoPhysics 这一章。
-
@cfd-china
grep 选择指定后缀可以用通配符,比如grep "domainIntegrate" --exclude="*.dep" -R -n -C 5
如 @wwzhao 上面提到的,ag 使用上更方便。grep 的好处是所有linux都自带,ag 需要额外安装。
可以通过自定义alias 来简化命令grep 命令。另,vim 也是个神奇的东西,欢迎入坑:lol:
-
@cfd-china
你用的是自己编译的 doxygen?在线版的能查到
除了用doxygen,还可以用grep来全局搜,比如,去src目录下,运行grep "domainIntegrate" * -R -n -C 5
会返回所有的用了这个函数的地方,并且输出关键字所在的上下文(-C 5 表示输出5行上下文)。凭借一点经验,就能定位 domainIntegrate 的定义所在为:
finiteVolume/finiteVolume/fvc/fvcVolumeIntegrate.C
除了 用 grep 还可以用 ack 和 ag ,这两个用法跟 grep 差不多,只是默认的输出更友好一点。
-
@金石为开 refineMesh,topoSet,setFields这些工具,有很多OpenFOAM自带的算例就用到了。
大致的功能是,topoSet将网格的一部分(面,或者网格)提取出来,放到faceSet或者cellSet里;refineMesh 是对网格进行局部(或者全局)加密的,你需要先指定你想要加密的局部网格,比如先用topoSet将一部分网格提取到一个cellSet,然后,让refineMesh来只对属于这个cellSet的网格来加密。snappyHexMesh是用来画网格的,可以参考OpenFOAM自带的算例,还有openfoamwiki上的 这个页面 上也有很多实例可以参考。
tips:可以用以下命令来找到哪个算例用了refineMesh
find $FOAM_TUTORIALS -name refineMeshDict
topoSet,以此类推。
找到以后,试着运行这些算例,然后用paraview来查看结果。运行一步,查看这一步产生的变化,通过这样的即时反馈,掌握这些工具的使用不是问题。
bounding k,bounding epsilon,均超限,连续性方程不收敛
怎么理解OpenFoam中的runTimeSelection机制?
openfoam set fields
如何输出场最大温度值这个文件
Ubuntu集群跨节点并行问题
OpenFOAM的一个bug
关于边界条件
并行效率疑问
OpenFOAM中kOmegaSST和yPlusRAS
有关twophaseeulerfoam中的问题
一些有用的看代码命令
一些有用的看代码命令
关于openfoam网格工具,如refineMesh,topoSet,snappyHexMesh