level set method reinitialization (水平集方法的重初始化)
来源:互联网 发布:盘古数据 编辑:程序博客网 时间:2024/06/04 08:56
1 回顾
水平集方法LSM使用了背景网格。不同于VOF,MPM等采用背景网格节点插值界面的构造方式,在于LSM采用 phi 函数隐式描述界面, phi函数是从微分几何过来的,图像学里面叫,曲线演化。LSM对于几何信息(诸如法向量,曲率)描述精确。界面演化由全局演化方程描述,(即上一篇中使用的演化方程,并不局限解界面演化,实际上是用来更新全域演化信息。所以它需要将已知在界面上的速度场扩展到全局的速度场,当然为了计算节省。采用窄带LSM等,就是限制计算域在界面附近的区域,而不跟新远场信息)
演化方程迭代若干步,若水平集函数梯度 phi_grad 变化剧烈,就需要reinitialization. 一般通过求解 d phi/ dt = sig(phi_0) (1 - norm(phi_grad)) 得到新 phi。该方程的稳态解自动满足 norm(phi_grad) = 1 ,即意味着在重初始化计算中,界面不用改变。这正是所希望的。
Kevin T. Chu LSMLIB
UCB LSM
2 重初始化方程
d phi/ dt + sig(phi_0) ( 1- norm(phi_grad)) = 0 该方程形式类似上一篇的演化方程,故可采用Godunov格式解。需要注意的是 符号函数 sig(phi_0) 的离散化:
if ( phi < -eps) sig(phi_0) = -1;
elseif(phi > eps) sig(phi_0) = 1;
else sig(phi_0) = 0 ;
重初始化方程重写如下,
d phi / dt + w . phi_grad = sign(phi_0)
w 是单位法向,由0水平集指向 phi >0 的区域。这是一个有源对流方程,可采用相关数值解法。速度w = 1。 那么, 求解至 T 时刻, DSF phi(x, T)给出了到边界距离不超过为 T的所有网格节点的水平集值。
2.1 PDE重初始化方程数值解
重初始化的基本要求,是新 phi =0 与 原 phi =0 描述同一界面线。即要求在重初始化过程中,界面保持不变。当界面经过网格点,符号函数为0,自然满足;但是当界面穿过网格线,对于一维情况将出现 sig(phi(i-1)),sig(phi(i)), 均不为0. 此时的重初始化方程中 d phi /dt 项将驱动 界面更新,而不能保持不变。
即1D 情况下, 当界面附近出现 phi(i-1) . phi(i) < 0 或者 phi(i) . phi(i+1) < 0,上文所给的迎风格式(Godunov) 不能正确应用。 或者说, 上文的迎风格式,实际上只能更新界面点位于网格点这种情况。 对于更普遍的情况, 必须采用单侧差分。
此时 backward 差分形式为 phi_x ^ - = (phi - 0) / norm (D_i) % D 是符号距离, 表示 i/i-1 网格节点到界面的符号距离
此时sig(phi_i) = D_i / h % h 是网格间距
整理方程如下: phi_i^(n+1) = phi_i^n - dt / h { (sig(D_i) norm(phi_i^n) - D_i }
关于sig(D_i) 的处理,一般默认 sig(D_i) = sig(phi_i^n)
即方程如下:
phi_i^(n+1) = phi_i^n - dt / h { (sig(phi_i^n) norm(phi_i^n) - D_i }
这里D_i 采用三次拟合得到, phi(i-2), phi(i-1), phi(i), phi(i+1) 四点三次插值函数 p(x), 求解在 x(i-1) < x < x(i) 区间的解,即位界面点x_p。同时 距离 d_i = x(i) - x_p
2.2 插值型重初始化
- level set method reinitialization (水平集方法的重初始化)
- level-set method vs. immersed boundary method (水平集方法与沉浸元方法比较)
- level set method 水平集方法基本问题
- 水平集(Level Set)的基本方法
- level set 介绍4(水平集方法)
- level set 介绍4(水平集应用)
- 『分享』水平集算法简介(Level Set)
- Level-Set Method
- GO Method set方法集
- Level Set方法简介
- Particle Level Set + Lattice Boltzmann Method
- c++中set的使用:初始化和去重、排序
- 计算机视觉之图像分割——水平集Level Set
- 重构Oc的get,set方法
- jbuilder的set!方法重构接口
- 曾经的一篇关于用水平集分割血管的paper---A Level Set Based Predictor-Corrector Algorithm for Vessel Segmentation.pdf
- Medical Image Segmentation Using New Hybrid Level-Set Method
- init-method和destroy-method指定的方法是该类里的哪个方法初始化和那个方法是销毁
- C语言中.C头文件和.H头文件的概念以及关系
- 关于用户态协议栈的思考
- hdu4031之树状数组
- vim插件系列之taglist
- 在页面中调用搜索引擎
- level set method reinitialization (水平集方法的重初始化)
- [WPF]DataGridTemplateColumn使用ComboBox绑定Dictionary细节记录
- 看完前八十回了
- 股票知识学习
- 【JS】类型转换 Object->valueOf()->toString()
- UVa 10067 - Playing with Wheels
- 君君学Linux设备驱动第二天之硬件基础
- Mac OS Terminal 基本指令(全)
- 程序员如何找私活