讨论 Fluent计算效率优于OpenFOAM
-
很开心看到大家这么多的观点,下面也说说我最近的%(#ff0000)[个人]看法
-
不管fluent还是OpenFOAM都只是工具,更关键的是所关注的问题及其内在的科学规律、机理。资深级CFDer应该会有判断garbage result的能力,会对结果有个大体的预期,对意想不到的结果也有分析判断的能力,甚至有的可以根据流场看出用什么软件/模型求解的。fluent设计目的是提供一个a black box solver that is robust,OpenFOAM则可以自编代码,处于食物链的上一级,更高一级的就是全部自编的in-house代码了。希望以后可以看到fluent的UDF提供更多像OpenFOAM的可操作空间。
-
fluent的非定常计算采用implicit,隐式的求解和时间无关,所以时间步长相比显式要大,不过隐式也存在迭代收敛的问题,这样的问题在OpenFOAM中也会出现,即not converged within 20 iterations。求解方法上用隐式或显式消耗的时间理论上无法比较,工程上一般隐式快一点。在fluent中用隐式进行定常计算,在计算稳定后,设置库郎数100也是可以的,因为定常的最终结果是一定的。但是非定常就不行了,这会牵涉到时间精度的问题。
-
作为新手,我学习OpenFOAM的过程是先将OpenFOAM用成fluent,然后再准备修改OpenFOAM得到属于自己的fluent。 不知道这样合不合理,主要是直接看代码,难以短期内有进展,很多情况下要求的是做错了也要有个错的结果。。。
-
回到标题,在计算三维LES时,相同网格在fluent里面计算的时间步长是10^-6,在OpenFOAM中用了runTimeModifiable 和 adjustTimeStep变为了10^-9~10^-8,不用就报错。不知道是不是就是大家所说的AMG求解器的原因。
-
-
@东岳 @wwzhao @cccrrryyy 您好!今天看到cfd-online上的链接:https://www.cfd-online.com/Forums/openfoam-solving/123586-simulations-large-time-steps-high-cfl.html 。里面讨论了 simulations with large time steps (high CFL),帖子比较老了,说原因是OPENFOAM中没有像fluent那样Pressure-velocity coupling的coupled solver。粗略的看了下文献《A fully coupled OpenFOAM® solver for transient incompressible turbulent flows in ALE formulation》,里面说Implicit + coupling 效率要高。
-
@Foamer24 我记得在哪里看到过OpenFOAM的PIMPLE算法原则上是允许大时间步的,它设计这个算法好像就是为了绕过CFL数一定要小于1的情况(印象中是有个最大数字的,好像是<3~5)。回到你前面讲的LES在fluent里面时间步长是10^-6,在OpenFOAM里面就要更小。这一点我有体会,就是感觉OpenFOAM首先是自适应时间步不好用。我现在都用给定的时间步,数值上确实比fluent里面要用的小一点,但不像你在数量级上差这么多,我一般大概用到fluent时间步的八成左右。
我计算的时候会检测最大和平均CFL数,有时候都跳到1点多了,但感觉好像也没啥问题- -我也是LES,然后速度场都用PBiCGStab加DILU,压力用PCG加DIC,不知道你用的是什么,可以分享一下么?你这个时间步我很好奇啊,这么小感觉算起来要等死人的- -
学OpenFOAM光看代码真的不行,随便找个例子做一下学起来更快(比如加个标量方程啊之类的)。当然了,最重要的就是你说的对物理问题的理解。我还想加上一点,就是对数值算法的理解。我学什么numerical diffusion, dispersion这种就感觉学的艰难,甚至到现在都不敢说完全懂。
-
@wwzhao @cccrrryyy 您好!我还处于入门阶段,一边用OpenFOAM,一边学OpenFOAMwiki上的3weeks 和编程查询,我的fvSchemes和fvSolution文件如下,目前调试经验是在fvSchemes中设置fluxScheme Tadmor;算得比设置Kurganov;要快。我后面再试下各位的设置,再过来交流。
/*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Version: 6 \\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object fvSchemes; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // fluxScheme Tadmor;// Kurganov; ddtSchemes { default Euler; } gradSchemes { grad(U) cellLimited Gauss linear 1; grad(nuTilda) cellLimited Gauss linear 1; grad(e) cellLimited Gauss linear 1; } divSchemes { default none; div(tauMC) Gauss linear; div(phi,nuTilda) Gauss linearUpwind limited; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; } wallDist { method meshWave; } // ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Version: 6 \\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { p { solver GAMG; tolerance 1e-7; relTol 0.01; smoother GaussSeidel; cacheAgglomeration off; nCellsInCoarsestLevel 20; agglomerator faceAreaPair; mergeLevels 1; } Phi { $p; } pFinal { $p; tolerance 1e-06; relTol 0; } "(k|omega|epsilon|nuTilda|U|R|v2|f|kt|kl|e)" { solver smoothSolver; smoother GaussSeidel; nSweeps 1; tolerance 1e-20; relTol 0.01; } "(rho|rhoU|rhoE)" { solver diagonal; } } // ************************************************************************* //
-
@Foamer24 感谢分享!我没用过fluxScheme,所以这里什么比较好不太清楚。时间步我一般刚开始都是1e-06,之后根据最大CFL数再去调。我个人的感觉是如果需要调到5e-07以下我就会比较注意了,这种量级感觉算的相当慢了。我的网格有内流和外流两部分,内流的话边界层在0.1mm上下,和你差不多。这个就用雷诺数估算了一下。外流(射流)的话就没care边界层了。
我觉得时间步的绝对大小参考意义比较小,毕竟也看你的硬件好坏。可能单个时间步需要的时间(我的大概在一分多钟)和总时间步数(我的大概50,000左右)比较有比较价值。另外,我的ddtScheme一般用backward,因为是二阶的。对流项我也一般不用迎风格式,迎风格式对LES好像不太好。线性求解器里面我的压力方程一直是用PCG在解,没用GAMG。这个点其实我很关心,就是PCG和GAMG到底孰优孰劣,希望有经验的来探讨下!
你这个同样的网格用Fluent只需要1e-06这种量级的时间步吗?这个感觉不科学啊,同样的网格怎么会差这么多呢。