流体体积法(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 上

 ```C++
#include <iostream>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <string>
#include <sstream> using namespace std;
class vof;
class node;
class element;
extern bool judgev; double check_norline(const double nnx, const double ny, const double alpha, const double pfi, const double dx); #ifndef VOF_H
#define VOF_H
class vof
{
public:
vof();
virtual ~vof(); public:
void initial_nodes();
void calculate(const int & maxTime,int & iouput); private:
void output(int &filenum);
void advance(int & now);
void vof::check_pfi(ofstream & fcout);
void vof::check_pfi(double & fcout); private:
const double PI = 3.14159;
double xmax; //the length of calculate area
double ymax; //the wifth of calculate area
int l; //the node number in x director
int m; //the node number in y director
int ioutput; double dx;
double dy;
double dt;
vector<vector<node> > nodes;
vector<vector<element> > nelem;
}; #endif // VOF_H #ifndef ELEMENT_H
#define ELEMENT_H
class element
{
friend void vof::output(int &);
friend void vof::check_pfi(ofstream & fcout);
friend void vof::check_pfi(double & fcout); public:
element();
virtual ~element();
element& operator=(const element &rhs); public:
void init_pfi(int i, int j, const double dx, vector<vector<node> > & nodes);
void get_norline(const int & ii, const int & jj, const double & dx, vector<vector<element> > & nelem);
double element::get_alpha(const double &nx, const double & ny, const double &pfi, const double &dx);
void ele_xflux(const double &dt, const int &ii, const int &jj, const double &dx, vector<vector<node> > & nodes, int &inow);
void ele_xadvance(const int ii, const int jj, vector<vector<element> > & nelem);
void ele_yflux(const double &dt, const int &ii, const int &jj, const double &dx, vector<vector<node> > & nodes,int &inow);
void ele_yadvance(const int ii, const int jj, vector<vector<element> > & nelem); private:
double element::hea_func(const double & x);
double element::dichotomy_func(const double & aalpha, const double & area, const double & h, const double &nnx, const double& nny);
double element::sign(const double & x);
void element::crossline(const double &x1, const double y1, const double &x2, const double &y2, double &x0, double &y0); private:
const double EPS = 1.0E-9;
const double EPSpfi = 5.0E-3;
double pfi;
double nx;
double ny;
double alpha; double left_flux;
double right_flux; //vector<node> elem_node; //the four nodes of this element }; #endif // ELEMENT_H #ifndef NODE_H
#define NODE_H class node
{
friend void vof::output(int &);
friend void element::ele_xflux(const double &dt, const int &ii, const int &jj, const double &dx, vector<vector<node> > & nodes, int &inow);
friend void element::ele_yflux(const double &dt, const int &ii, const int &jj, const double &dy, vector<vector<node> > & nodes,int &inow);
public:
node(const double &xx, const double & yy);
node& operator=(const node &rhs);
node();
virtual ~node(); public:
double distance();
void initial_node(double x,double y); private:
void get_velicity(); private:
const double PI = 3.1415926;
double x;
double y;
double vx, vy; }; #endif // NODE_H ```

VOF 方法捕捉界面--粘性剪切流动算例的更多相关文章

  1. Fluent算例精选|02瞬态滑移网格分析叶轮机械内部流动

    本算例使用的软件:fluent.icem 通过学习本算例您将获得? 1.学会周期区域创建 2.学会瞬态求解器及滑移网格边界条件设置 3.学会周期面.滑移面设置 4.学会如何监测压力脉动(声学仿真) 5 ...

  2. Fluent算例精选|03利用VOF和蒸发-冷凝模型

    通过学习本算例您将获得? 1.学会基本的VOF模型设置流程 2.学会利用蒸发-冷凝模型来模拟传热沸腾 目录 1摘要4 2传热沸腾模型介绍4 3前处理4 4求解设置5 4.1启动Fluent5 4.2网 ...

  3. 【OpenFOAM】——OpenFOAM入门算例学习

    1  明确目标——为啥费老大劲儿学习OpenFOAM 学习OpenFOAM主要出于课题需要,希望实现以下几个目标: l  [ ]学会用SnappyHexMesh生成高质量网格: l  [ ]学习使用O ...

  4. CFD-Post批处理(在一系列算例同一位置截取速度云图)

    批量在一系列算例的同一位置截取面,并显示截面的速度分布云图 现在我们有一系列的算例 我们打开CFD-Post 我们编写如下的Python代码来实现在一系列算例的同一位置截面,并显示界面的速度分布云图 ...

  5. 初始化错误——从一个简单的算例看UDF各个宏的调用顺序

    感谢西安交通大学en_phert的问题和尝试 Fluent版本:Fluent 19.0 Visual Studio版本:Visual Studio 2013 在UDF的宏的调用中大家常看见下图: 这个 ...

  6. JAVA 图形开发中组件对齐方法及界面开发

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...

  7. 【iOS开发】IOS界面开发使用viewWithTag:(int)findTag方法获取界面元素

    http://blog.csdn.net/lxp1021/article/details/43952551 今天在开发OS界面的时候,遇到通过界面UIview viewWithTag:(int)fin ...

  8. Java复制文件用数据流方法,renameTO()方法是相当于剪切操作

    我想达到的效果是,一个文件复制到另一个地方,然后重命名 //判断是否存在 File file = new File("D:/tomcat9.0.12/apache-tomcat-9.0.12 ...

  9. Matlab-9:中心差分方法解常微分算例(SOR完整版)

    函数文件: function [x,n,flag]=sor(A,b,eps,M,max1) %sor函数为用松弛迭代法求解线性方程组 %A为线性方程组的系数矩阵 %b为线性方程组的常数向量 %eps为 ...

随机推荐

  1. Codeforces Round #352 (Div. 2) ABCD

    Problems     # Name     A Summer Camp standard input/output 1 s, 256 MB    x3197 B Different is Good ...

  2. CJCMS系列--demo代码篇

    CJCMS之前写了不多的文章,但是一直没有上代码,也许代码写得很乱很差,但是我觉得总得有个开始,持续改进.作为一个喜欢分享的程序员,我决定分享一下. 前面文章中的结构比较全,而此次我给出的demo,没 ...

  3. python 2.7 学习笔记--文件的基本操作

    1.打开文件的方式 file_obj = file("文件路径","模式") file_obj = open("文件路径","模式 ...

  4. 使用Open xml 操作Excel系列之一-读取Excel

    一. 安装Open Xml SDK 从微软网站下载Open xml SDK,安装SDK. 二. 在项目中添加对DocumentFormat.OpenXml库的引用

  5. input事件与change事件

    输入框的change事件: 必须等到输入框失去焦点的时候才会触发,鼠标在空白的地方点一下: 输入框的input事件: 在输入内容变化的同时,实时的触发,不需要等到失去焦点.

  6. 【CQOI2011】动态逆序对 BZOJ3295

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  7. Docker知识-1

    [编者的话]本文用图文并茂的方式介绍了容器.镜像的区别和Docker每个命令后面的技术细节,能够很好的帮助读者深入理解Docker. 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(co ...

  8. 数独 JAVA实现

    数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的 然后大二学了JAVA,看了下那个一些有关于 ...

  9. 设计模式--原型模式Prototype(创建型)

    一.原型模式 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.原型模式实现的关键就是实现Clone函数,还需要实现深拷贝. 二.UML类图 三.例子 //父类 class Resume ...

  10. cocos2d-js 学习笔记 --安装调试(2)

    对于初学者安装cocos2d-js的环境并没有教程中说的那么简单,至少笔者是这么认为的 第一步,下载cocos2d-js的SDK,(先别着急运行) 第二步,安装Cocos2d console ,(Ma ...