流体体积法(Volume ofFluid)是一种典型的界面追踪方法,这种方法选取流体体积分数为界面函数S。它通过定义一个体积分数$ C $(指定的流体体积分数占网格体积的百分比)来描述界面。因此只有所在网格体积分数来描述 $ 0<C<1 $ ,而界面两侧的网格内体积分数分别满足 $ C=0 $ 和$ C=1 $。体积分数 $ C $的输运方程为: $$ {\partial C \over \partial t}+ \vec v \cdot \nabla C =0 $$
由体积分数的物理意义可知,可以采取精确的数值算法来构造体积分数的对流量,这样就可以保证VOF方法有很好的守恒性。VOF 方法中对满网格和空网格是容易的,关键问题是够着界面所在的网格即$ 0<C<1 $ 处的数值通量。我们采用两次界面推进两次界面重构的方法,分两次在x 和 y 方向进行推进。
不同网格下计算的结果:
1. 50X50
2. 100 X 100 网格
3. 200 X100 网格
4. 不同网格情况下,一定时间步长时质量损失图。
分析:
可以看出,VOF方法对界面的捕捉能力较好,通过加密网格可以有效的减少质量的损失。
附代码:
其中类和头文件的定义如下:
详细的代码托管在 githup 上
1 ```C++ 2 #include <iostream> 3 #include <vector> 4 #include <fstream> 5 #include <stdlib.h> 6 #include <string> 7 #include <sstream> 8 9 using namespace std; 10 class vof; 11 class node; 12 class element; 13 extern bool judgev; 14 15 double check_norline(const double nnx, const double ny, const double alpha, const double pfi, const double dx); 16 17 #ifndef VOF_H 18 #define VOF_H 19 class vof 20 { 21 public: 22 vof(); 23 virtual ~vof(); 24 25 public: 26 void