浸没边界法+超音速自定义求解器出现“浮点数例外,核心已转储”
-
想请问一下大家,我采用的是rhoCentralFoam求解器,在里面耦合了浸入边界法(IBM)(直接力法),参考的是这篇文献《A pressure-corrected Immersed Boundary Method for the numerical simulation of compressible flows》(https://doi.org/10.1016/j.jcp.2018.07.033)。
在求解二维圆柱绕流自激振荡问题时,当运行了一段时间后,出现了“浮点数例外,核心已转储”,当求解固定的二维圆柱和二维圆柱受迫振荡时不会出现该问题。
运动方程如下:
主要代码为:if(structure_scheme == "HHT") { body.geometric_center_anp1.y() = - ( ( (1-body.hht_alpha)*dt*(1-body.newmark_gamma)*body.damping.y() + pow(dt,2)*(1-body.hht_alpha)*(0.5-body.newmark_beta)*body.spring.y() ) *body.geometric_center_an.y() + ( body.damping.y() + dt*(1-body.hht_alpha)*body.spring.y())*body.speed.y() + body.spring.y()*(body.geometric_center.y()-Equilibrium_mass_spring_damper_system.y()) + (1-body.hht_alpha)*Force_corrected.y() + body.hht_alpha*body.old_global_force.y() )/ (body.mass + dt*(1-body.hht_alpha)*body.damping.y()*body.newmark_gamma + pow(dt,2)*(1-body.hht_alpha)*(body.newmark_beta)*body.spring.y() ); displacement -= body.geometric_center; if(body.moving_direction.y() == 1) { body.geometric_center.y() = body.geometric_center.y() + body.speed.y()*dt+ (pow(dt,2)/2)*( (1-2*body.newmark_beta)*body.geometric_center_an.y() + 2*body.newmark_beta*body.geometric_center_anp1.y()); body.speed.y() = body.speed.y() + dt* ( (1-body.newmark_gamma)*body.geometric_center_an.y() + body.newmark_gamma*body.geometric_center_anp1.y()); } else { body.geometric_center.y() = body.geometric_center.y(); body.speed.y() = 0; } displacement += body.geometric_center; body.geometric_center_an = body.geometric_center_anp1; }
想问一下出现浮点数溢出是什么原因呀?如果进一步缩短时间步长会有帮助嘛?
-
@李东岳 李老师,我把时间步长缩短为原来的1/10,现在能够计算下去啦,不会出现“浮点数例外,核心已转储”的问题
-
我看了一下这个直接力方法。挺有意思。直接力方法里面有一个desired velocity,这个速度对于固定的边界,是不是0?
-
@李东岳 是的,李老师。
据我了解,目前常用的浸入边界法主要有直接力法、虚拟点法(the ghost-cell method)等,还有将玻尔兹曼方法与IBM方法相结合的玻尔兹曼-浸入边界法(IB-LBM)。
罗等人(2020 https://doi.org/10.1515/revce-2019-0076)根据D2区域将IBM方法分为the artificial boundary method和the authentic boundary method,对5种IBM做了总结。
-
@李东岳 李老师,我对直接力法的理解是这样子的,可能不是很全面。
对于两相场(包含固体颗粒占据的区域)其控制方程为:
(其中f为内嵌边界对流体的作用力,与纯流场控制方程相比仅仅多了f项)
对于LFP(拉格朗日力点)处的流场应满足如下关系(将其他项用RHS(U)表示,定义在LFP上的流场变量用相应的大写字母表示,定义在EGP(固定欧拉网格点)上的流场变量用小写字母表示):
随后引入一个中间速度(假定其满足纯流场控制方程)
纯流场:
Ud就是您上述提到的desired velocity,对于固定的body,我们希望其满足Ud=0
通过插值函数,可以实现F->f
得到f后便可更新流体场,得到相应的速度和压力:
-
@Rachel0096 多谢多谢,我研究研究,要把细节扣一下
-
@李东岳 您可以看一下Uhlmann(2005)的这篇文章,An immersed boundary method with direct forcing for the simulation of particulate flows (https://www.sciencedirect.com/science/article/pii/S0021999105001385) ,目前很多直接力法都是在他的工作上进行改进的
-
3/12