interPlicFoam
-
- 代码搞完了,还在测试,最近很忙,每天下班只想睡觉。
- 几何类VOF方法:
a. IsoAdvector第一次提出是在2016年,我在OpenFOAM基础上开发PLIC-VOF始于14年下半年,不过开发进度很慢,那时刚开始学习OpenFOAM。有一个完成度很高的2D版本,大家有兴趣的话我会把这个代码整理整理,供大佬们批评指正,几何运算是基于CGAL库的;
b. PLIC和IsoAdvector是两类不同的几何重构方法,具体区别在于如何表征混合单元内的interface。PLIC使用平面,IsoAdvector使用等值面。确定interface位置时PLIC求解平面方程$\vec{n} \vec{X} + D = 0$里的距离$D$,IsoAdvector求解等值面阈值。界面重构精度应该差不多,求解效率还没比较,现在很难说谁高谁低;
c. 我们求解器的公开版本advection部分直接借用了isoAdvection的,做了一些改动适配PLIC方法。主要是因为懒,不想单独开发advection部分了,不过这也符合开源精神吧,只做自己需要做和感兴趣的部分;
d. 目前PLIC方法的一个研究热点是多面体任意单元里interface的快速定位技术。这方面研究主要集中在卡塔赫纳理工大学的Dr. Lopez [López, Joaquín, et al. "A new volume conservation enforcement method for PLIC reconstruction in general convex grids." Journal of Computational Physics 316 (2016): 338-359] (他们去年开发了适配凹多面体的快速算法,不过我感觉这个学术意义更大一些,基本上网格生成都是避免凹单元的出现的),LANL的Dr. Diot [Diot, Steven, and Marianne M. François. "An interface reconstruction method based on an analytical formula for 3D arbitrary convex cells." Journal of Computational Physics 305 (2016): 63-74] 和Dr. Shashkov [Dyadechko, Vadim, and Mikhail Shashkov. "Moment-of-fluid interface reconstruction." Los Alamos Report LA-UR-05-7571 (2005)] (MOF方法本质还是PLIC方法,不过在$\vec{n} \vec{X} + D = 0$的求解上都引入了全新概念)。 - 会有算例教程,但是事情多,我尽量快一些,但是这些事只有我一个人在弄,所以会比较慢。
PS:我不大名鼎鼎哦,只是小卒,只想靠着CFD混口饭吃,学界和业界都太他妈卷了
-
@nanxuan 不好意思你九月份的留言我没注意到。多边形/多面体网格相对传统非结构网格优势就是每个体单元有了更多的面单元/相邻单元,在涉及面单元积分的变量(梯度等)计算上具有优势(https://www.semanticscholar.org/paper/The-advantage-of-polyhedral-meshes-Perić-Ferguson/51ae90047ab44f53849196878bfec4232b291d1c ),其余的还有收敛快等优点(https://www.researchgate.net/publication/292555771_New_element_lops_time_off_CFD_simulations )。缺点是生成算法复杂,主流多面体网格生成器都是将四面体网格转化为多面体网格,不能很好处理面单元翘曲,不过fluent,cfmesh等通过
六面体->四面体->多面体
的技术路线缓解了面单元翘曲,但是面对复杂几何外形的时候需要更多控制。我个人开始使用多面体网格的原因纯粹是因为多面体网格好看,可以在女朋友面前装逼 。希望这个解释能帮到你。 -
又碰到一个问题,我自己写了个函数计算网格内的液相体积, surface与网格的交点是从plicFacePoints()函数读过来的,
比较了一下计算出来的液相体积和alpha1乘以网格体积的值, 对大部分网格,两个值基本上是一致的,误差在0.1%以内,但是当alpha1接近0或者1的时候,误差有时候就比较大了。
下面是我碰到的一个误差最大的网格, 我用的是长方体的网格,PointLists_是网格的8个点,isofacePoints_ 是surface与网格的交点,VolumeIntegrate_ 是我自己写的函数计算出来的体积, alpha1_ * mesh_.V 就是这个网格内的alpha1乘以体积,test_ratio是这两个值的比值。
因为我算例是二维的,所以我自己也手算了一下,函数算出来的体积应该没有什么问题,应该是重构界面的时候出现的误差,我想请教一下有方法减少这部分的误差吗?@队长别开枪PointLists_ 8((0.0185 0.001 0.000522015) (0.0185 0.0015 0.000522015) (0.019 0.001 0.000522015) (0.019 0.0015 0.000522015) (0.0185 0.001 -0.000522015) (0.0185 0.0015 -0.000522015) (0.019 0.001 -0.000522015) (0.019 0.0015 -0.000522015)) isofacePoints_ 4((0.019 0.00144899 0.000522015) (0.0189992 0.0015 0.000522015) (0.0189992 0.0015 -0.000522015) (0.019 0.00144899 -0.000522015)) VolumeIntegrate_ = 2.11363e-14 alpha1_ * mesh_.V = 1.80361e-14 test_ratio = 0.853322