关于计算时间的deltaT问题
-
仿真网格1687568,一共不到2百万的网格;
在controlDict
中的deltaT
设置为0.1
application interFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 100; deltaT 0.1; writeControl adjustableRunTime; writeInterval 5; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression uncompressed;s timeFormat general; timePrecision 6; runTimeModifiable yes; adjustTimeStep yes; maxCo 0.9; maxAlphaCo 0.9; maxDeltaT 1;
采用40核并行,一晚上一共运行了3s多的时间,按道理应该是每
0.1s
一输出,请教下这个是什么情况呢
-
@东岳 老师,我是一晚上的时间在
log
中显示的计算结果一共计算了3s,这也太慢了,我查看了tutorials中的例子和您之前讲血管的案例,都是根据deltaT
的值输出的;我这里deltaT 0.1
正常应该是Time =0.1s
一输出;
上面那个图中Time=3.11332
下一次输出的是Time=3.11357
,在之后是Time=3.11383
,这里的deltaT
也变成了log
文件中显示的deltaT=0.0002578949
;log
中显示的和我在controlDict
设置的deltaT
这相差的也太大了,我用单核计算了一下,还是这样,我已经彻底不知道哪里出问题了~ -
@东岳 谢谢老师指导
下面也给以后看帖子的人一些提示,不要犯我一样的错误:
在DTCHull
中得controlDict
application interFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 4000; deltaT 1; writeControl timeStep; writeInterval 100; purgeWrite 0; writeFormat binary; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable yes;
在这里时间步长是固定的,也就是每1s一输出;
而我采用了adjustTimeStep yes;
这样的话,这样的话为保证库朗数,自动调整时间步长,所以就会出现我图中时间步特别小的情况。这些老师在OKSS1中详细讲过,我给忘记了;
真对上面老师说的CPU几个通道,怎么设置,我再研究研究之后跟帖~ -
关于DTCHull中的controlDict,我也有疑问,这个算例没有maxCo ;maxAlphaCo ;maxDeltaT 的设置,而且我跑了之后看log.interFoam,在一般显示Courant Number mean: max: 和Interface Courant Number mean: max: 的地方,却是如图的Flow time scale min/max ,Smoothed flow time scale min/max (这两个值我不是很明白)。
我把这个算例的DTC换了另一个船后(改变了模型和水面值,controlDict没变)发现log里的这个地方显示的是Co Num,而且因为时间步长的设置保持原DTC算例的1,库朗数很大,很快就发散了:
疑问:1.第一个图中的Flow time scale min/max ,Smoothed flow time scale min/max 是什么意义,和什么设置有关;
2.第一个图的log为何没有显示库朗数Courant Number mean: max: 和Interface Courant Number mean: max;
3.原DTC算例的时间步长为1应该有很大的库朗数为何顺利收敛了?
问题也许不太成熟,希望能得到解答,先行谢过。 -
@tidedrinker 非常谢谢你的回复,长知识了
我试着两个算例就ddt的选择不一样算了一下,
选择LocalEular的时候controlDict没有设置MaxCo,maxAlphaCo ,maxDeltaT 可以顺利收敛算到最后,
选择Eular的时候,显示库朗数,需要有maxAlphaCo,增加了这个设置(值取了15)之后,算到41秒库朗数太大了崩了(exited on signal 8 (Floating point exception).)这个时候应该就需要时间步长较小。
然后看到了这个帖子
https://www.cfd-china.com/topic/412/关于时间离散euler与localeuler离散
才知道用了LocalEular的算是LTSinterFoam的意思,求解稳态问题,所以表明DTCHull这个算例因为属于稳态所以就用了LocalEular时间离散,而另一个DTCHullMoving就不是稳态问题了所以就用了Eular。
早期的OpenFOAM版本还有LTSInterFoam,https://github.com/OpenFOAM/OpenFOAM-2.0.x/tree/master/tutorials/multiphase/LTSInterFoam