有关Openfoam在超算并行运算的问题
-
各位好。我现在有个关于并行运算的问题想求教一下。
我现在在用interFoam求解器做一个换热器内部除垢过程的模拟。模拟的模型为一个长80 mm,高5 mm的方形管道,其中间有一块以凡士林作为模拟材料的污垢,高为0.5 mm。除垢物质为水,水流速度为1米每秒和3米每秒。先做的是2D模拟。
现在我和导师画了一个大概600*400的网格给整个管道,然后用decomposePar对网格进行分割以提高运算效率,最后我们把整个算例提交到学校Taurus超算上去做计算。但是提交上去以后发现运算速度并没有特别的提高。最后需要出一个时间长度为近600秒的算例,但是超算上算0.03秒的时间花了5个小时,用了96个核。试了很多种分割网格的办法,横向x轴24等分的做了,现在做的是x轴6份,y轴4份,速度都没有显著的提高。
不知道有没有谁有过类似的算例经验,能够指出我这中间哪里做的不对需要修改一下?或者有想法或者建议的!做了快3个月了,还是没有办法,有点着急。
非常感谢各位的帮助! -
@队长别开枪 您好!非常感谢您的回复!
1、我maxCo和maxAlphaCo分别设置的都是1,导师那边要求的以1为界值。其他的边界条件是以$tutorials/multiphase/interFoam/RAS/waterChannel这个算例作为基础设定的。
2、网格是非均匀网格,blockesh中的网格分割如下。hex () (150 40 1) simpleGrading (1 1 1) hex () (150 60 1) simpleGrading (1 6 1) hex () (300 40 1) simpleGrading (1 1 1) hex () (300 60 1) simpleGrading (1 6 1) hex() (150 40 1) simpleGrading (1 1 1) hex () (150 60 1) simpleGrading (1 6 1)
3、代数方程求解器用的Smooth,湍流模型为kOmegaSSTLowRe,对应的残差值为:
alpha.water 1e-8 p_rgh 5e-9 U|k|omega 1e-6
4、下面是log文件的一段,中间那个时间步长连续性也一直没解决。
PIMPLE: iteration 1 smoothSolver: Solving for alpha.water, Initial residual = 0.000122159, Final residual = 6.40432e-11, No Iterations 2 Phase-1 volume fraction = 0.949927 Min(alpha.water) = 0 Max(alpha.water) = 1.00072 MULES: Correcting alpha.water Phase-1 volume fraction = 0.949927 Min(alpha.water) = -6.32704e-23 Max(alpha.water) = 1.00072 GAMG: Solving for p_rgh, Initial residual = 0.966053, Final residual = 0.004155, No Iterations 3 time step continuity errors : sum local = 2.21621e-05, global = 3.2579e-08, cumulative = -0.00204445 GAMG: Solving for p_rgh, Initial residual = 0.967045, Final residual = 2.58939e-07, No Iterations 50 time step continuity errors : sum local = 1.37846e-09, global = 4.13634e-12, cumulative = -0.00204445 smoothSolver: Solving for omega, Initial residual = 0.000115323, Final residual = 2.6647e-06, No Iterations 1 smoothSolver: Solving for k, Initial residual = 2.4012e-05, Final residual = 2.34055e-06, No Iterations 6 ExecutionTime = 35841.2 s ClockTime = 36002 s surfaceFieldValue inletFlux write: sum(inlet) of rhoPhi = -0.0742279 surfaceFieldValue outletFlux write: sum(outlet) of rhoPhi = 0.0741348 Courant Number mean: 0.00867972 max: 1.07575 Interface Courant Number mean: 0.000872321 max: 1.07575 deltaT = 6.62197e-08 Time = 0.0324693
5、核心的话是这样的,Taurus使用batch系统,可以指定需要的node,task,cpu数,内存量以及每个任务task分配的cpu数,task对应分割区域的的数量,每个区域可以分配你需要的cpu数上去算。我分了24份,每一份用4个核算,就是96个核。
-
@队长别开枪
可能是我没表达好。我先是分了24个区域在decomposePar文件里面,然后在超算上预定运算资源的时候,预定了4个nodes,每个nodes上有24个cpu,然后制定每个nodes运算6个task,一个task对应一个区域分区,最后指定每个task(区域)使用4个cpu来进行计算。这样的话就是4nodes6tasks/nodes4cpus/task(区域)=96cpus,是这么得出来的。
我自己已经完成了一个cm级别的非常粗网格的计算,大概只有5000个网格的算例,结果确实是我们想要的,这个已经做出来了,计算速度很快,用自己电脑单核跑一下大概5个小时就出结果了。结果的效果很好,所以现在就需要做准确的精细计算了。 -
你运行完decomposePar后的显示是什么?手动分块容易造成有的核分了很多网格,有的分了很少,分的多的跑的很慢,所以其他核还是要等它算完了才能继续。我一般用scotch,不用输入任何参数,openfoam自动会把分区做成1、每个分区cell数目接近;2、分区之间的processor面尽量的小,从而减小数据传输的需求。
batch系统调度感觉你需要再细看一下?node是结点数,你24个分块,如果比如超算上一个结点就有24个核(4个6核cpu),那你node数量只需要1吧?这个超算是什么样的,每个结点有几个cpu,每个cpu几核呀?