用Matlab實現簡單有限體積求解器

2021-10-11 04:07:23 字數 1408 閱讀 2491

用於瞬態對流擴散pde的簡單而通用的fvm求解器

乙個簡單的有限體積工具

這段**是化學/石油工程師開發一種簡單的工具來求解對流擴散方程的一般形式的結果:

αgeneral / equationt +∇。(uϕ)+∇。( -d∇ϕ)+ βϕ =γ

在1d,1d軸對稱(徑向),2d,2d軸對稱(圓柱)和3​​d域上的簡單均勻/不均勻網格上。

該**在整個或部分邊界上接受dirichlet,neumann和robin邊界條件(可通過更改以下等式中的a,b和c來實現):

a∇ϕ.n + bϕ = c。

它還接受週期性邊界條件。

該**的主要目的是為那些嘗試使用數學模型,以1d形式數值求解模型,將其與解析解進行比較,並以最少的數量將其數字**擴充套件至2d和3d的人員提供方便的工具。一維**中的修改。

離散化方案包括

*中心差

*對流項的迎風方案

*具有許多通量限制器的對流項的 tvd方案

首先,請轉到「 test」資料夾並執行測試指令碼。

一些微積分函式(散度,梯度等)和平均技術(算術平均值,諧波平均值等)可用,特別有助於解決非線性或耦合方程式或實現顯式方案。

我已使用該**解決了pde的耦合非線性系統。您可以在examples / advanced資料夾中找到其中一些。

「 physicalproperties」資料夾中有一些函式可用於計算流體的物理屬性。其中一些不是我的,它是在檔案內部指定的。

clc; 明確;

l = 50;域長度百分比

nx = 20; %的細胞數

m = createmesh3d(nx,nx,nx,l,l,l);

bc = createbc(m); %所有neumann邊界條件結構

bc.left.a(:) = 0; bc.left.b(:)= 1; bc.left.c(:)= 1; %dirichlet用於左邊界

bc.right.a(:) = 0; bc.right.b(:)= 1; bc.right.c(:)= 0; 右邊界

d_val = 1的%dirichlet ;擴散係數的%值

d = createcellvariable(m,d_val); %將擴散係數分配給單元

d_face =諧均值(d); %計算單元表面上擴散係數的諧波平均值

。擴散項係數的%矩陣

[mbc,rhsbc] = boundarycondition(bc); bc的係數和rhs向量的混合矩陣%

= mdiff + mbc;pde係數矩陣%

= solvepde(m,m,rhsbc); %將m和rhs傳送到求解器

visualizecells(c); %視覺化結果

**獲取

體積霧的一種簡單實現

場景裡面一開始加的是預設的opengl霧效,效果不太好,看起來立體感不強,然後打算加個體積霧效果,搜了一些體積霧的實現方式,發現略複雜,就想了種比較簡單的實現方式 1 在場景的垂直高度上,一般是z軸,建立若干個水平的平面,大小要比場景大,疊在一起之後看起來效果類似乙個立方體 我是從z的 5到20,建...

怎樣用matlab實現do while

matlab 中的while迴圈只有 while statement end 這種迴圈結構。有時候由於問題的需要,使用do.while 結構能夠更好的解決問題。其實仔細分析一下,do while 的結構就是可以保證先執行一次操作,再進行判斷。而while 條件 是先對條件進行判斷來決定是否採取相應的...

用matlab實現高斯通道建模

n 10000 z 0.1 randn 1,n 服從n 0,0.01 的高斯白雜訊 figure 1 subplot 2,1,1 zi linspace 2,2,100 f ksdensity z,zi,function cdf plot zi,f title 概率分布函式 xlabel x yla...