数值风云

关于如何学习OpenFOAM中浸没边界法(IBM)的问题

各位大佬,目前在学习用OpenFOAM模拟波浪与植物的相互作用,在参考这篇文章(Eulerian–Lagrangian flow-vegetation interaction model using immersed
boundary method and OpenFOAM https://doi.org/10.1016/j.advwatres.2019.02.006
后发现柔性植物的实现需要采用浸没边界法(IBM,Immersed-boundary methods) 我在foam-extend 4.0版本中找到了IBM的tutorials算例,但是才疏学浅,未能从算例中看出门道 :sweat:

想请问,有无相关的教程或者文献推荐,感谢各位!

3 个赞

我虽然不知道openfoam怎么搞,但我知道有个很棒的开源的matlab库https://github.com/nickabattista/IB2d 。里面是对于三篇论文的实现。以及这个网页https://www.math.nyu.edu/~peskin/ib_lecture_notes/index.html。
不过这个库的代码很多,我之前用python参考这个库写了一个100多行的二维版本在这里https://github.com/clatterrr/NumericalProjectsCollections/blob/master/WaterFlowFluid/ImmersedBoundary/ib2d.py
我所理解的浸没边界法,大致就是先解NavierStokes方程,求解出每个网格的力。而固体由一堆粒子组成,求出网格上的力后,再用插值方法计算固体上每个点的力,然后根据弹簧质点或有限元,或者其它什么模型,算出固体上质点的位移。比如上面那个库里还有NeoHookean模型。然后再由固体质点的位移再算回出网格上需要变化的物理量。
如果只讨论怎么把物理量从网格变换到质点,再从质点变换到网格的话,我觉得和混合网格粒子法挺像的…

5 个赞

十分感谢大佬的分享!

如果你安装了foam-extend3.1及以上版本的话(没有的话推荐4.0版本),可以看到里面的算法框架和具体的实现代码,IBM总体上分为连续力方法和离散力方法,这块可以参考论文 Mittal-2005-Immersed Boundary Method,你给的那篇文章里我觉得用的是连续力IBM,extend版本里实现的是离散力IBM。
如果你有兴趣的话可以参考这个Presentation foamextend-IBM,他讲了如何由真实物理边界条件(如无滑移、零梯度等BC)以及周围流体单元的值来插值得到IB单元的值,这是离散力IBM方法的关键,里面提到的最小二乘权重插值方法LSWM可以参考Mittal的文章 Mittal-2011-JCP,这篇JCP里插值时变量放在网格顶点,而openfoam里变量放在网格体心,推导一下公式再看代码思路就会清晰很多。

5 个赞

贴一个上面提到的presentation里的图,流体单元、固体单元、IB单元、IB点

1 个赞

感谢大佬的详细说明,学习了! :star_struck:

可以参考以下知乎问题,还有人给出了LBM-IBM的实现代码说明。
如何快速入门浸入边界法(Immersed Boundary Method)及相关资料? - 知乎

1 个赞

你好:wave:,我也是在做流固耦合,装foam-extend4.0(unbuntu18.04)的时候一直出错,请问有什么靠谱安装的方法吗?

我是根据wiki上的步骤安装的,也是ubuntu1804。 Installation/Linux/foam-extend-4.0/Ubuntu - OpenFOAMWiki
另外东岳流体网站上也有安装好的虚拟机,可以先试用一下。 OpenFOAM安装 (dyfluid.com)

我也是按照wiki 来的,我装到最后总是报错,有一个HUGE,已经试了好几天了,还没解决😮‍💨😮‍💨

目前没有遇到过这个提示,不太清楚原因。不过在cfdOnline上看到过这个帖子 [foam-extend.org] Problems on installing Foam-extend 4.0/ swak4Foam on ubuntu18.0.4 – CFD Online Discussion Forums (cfd-online.com)

我搞定了,foam-extend 4.0一直有问题,但是4.1成功装好了,谢谢:pray: