FVTool: Matlab有限体积工具箱
小文件.
这是一个有限容量的工具箱(玩具)化学/石油工程师。目前,它可以求解具有变速度场/扩散系数的瞬态对流扩散方程。离散化方案包括:
- 中心差分扩散项
- 中心差对流项
- 逆风对流项
- 具有各种通量限制器的TVD对流项
- 瞬态项
- Dirichlet, Neumann, Robin和周期性边界条件
你解的是哪个方程?
信不信由你,上述方程描述了化工、石油工程和类似领域的大多数输运现象。
如何开始
下载包,启动matlab,并运行FVToolStartUp
灵感
我在玩过之后开始编写这个工具FiPy,一个神奇的基于python的有限体积求解器。这个matlab解算器不是一个克隆,与FiPy相比确实非常有限。我写它是为了有一个非常方便的工具来测试新的想法(新的数学模型),通过在一维统一的笛卡尔网格中求解它们。然后我将代码扩展为
- 一维轴对称(径向)
- 2D径向(r,)
- 二维笛卡尔
- 三维笛卡尔
- 二维轴对称(圆柱,r, z)
- 三维圆柱(r,, z)
我重载了一些matlab运算符,以简化从1D代码到2D和3D代码的转换。
一个简单的例子
你可以解一个扩散方程,即$ \nabla。(-D \nabla \phi) = 0 $在Matlab中运行以下代码:
clcl=50;%域的长度Nx=20.;%单元格数量米=createMesh1D(Nx,l);公元前=createBC(米);%全诺伊曼边界条件结构公元前.左.一个(:)=0;公元前.左.b(:) =1;公元前.左.c(:) =1;%左边边界的狄利克雷函数公元前.正确的.一个(:)=0;公元前.正确的.b(:) =1;公元前.正确的.c(:) =0;%右边界D_val=1;%扩散系数的值D=createCellVariable(米,D_val);%将扩散系数分配给单元D_face=harmonicMean(D);%计算单元表面扩散系数的谐波平均Mdiff=diffusionTerm(D_face);%扩散项的系数矩阵[Mbc,RHSbc]=boundaryCondition(公元前);%系数矩阵和RHS向量的BC米=Mdiff+Mbc;%偏微分方程的系数矩阵c=solvePDE(米,米,RHSbc);%将M和RHS发送给求解器visualizeCells(c);%可视化结果
将第三行改为m = createMesh2D(Nx,Nx, L,L);
或m = createMesh3D(Nx,Nx,Nx, L,L,L);
然后亲眼看看结果。
例子
中有一些简单的例子教程文件夹中。中也可以找到一些更高级的例子(向非均质油田注水,两个非线性偏微分方程,耦合全隐式解)先进的文件夹中。
文档
找一些初步文件在这里.
但是Matlab不是一个自由软件吗?
您可以使用的代码倍频程.新的(面向对象的)代码版本在Octave 4.0中工作classdef
功能)。
我重写了代码茱莉亚.它工作得很好,但是在Windows操作系统上的可视化仍然有一些问题。
问题和错误报告
你可以在这里创建一个新问题,或者在这里写下评论我的博客.你也可以在网站上提问Matlab文件交换页面这段代码。非常感谢您的反馈和/或贡献。
如何引用:
如果你在工作中使用过该软件包,并觉得它很有用,请在以下位置注明:
@misc{ali_akbar_eftekhari_2015_32745,作者= {Ali Akbar Eftekhari and Kai Schüller and Ferran Brosa Planella and Martinus Werts and Behzad Hosseinzadeh}, title = {FVTool: Matlab的有限体积工具箱},月= oct,年= 2015,doi = {10.5281/zenodo。32745}, url = {https://doi.org/10.5281/zenodo.32745}}
如果你能给我写几行关于你在研究中如何使用它的文字,我也会很感激。它鼓励我维护代码。
化学式용양식
Eftekhari, A.A.等人(2015)。FVTool: Matlab的有限体积工具箱。Zenodo。http://doi.org/10.5281/zenodo.32745