Julia CFD|12 二維泊松方程

2021-02-13 CFD之道

Poisson方程的表達式為:

與Laplace方程不同,Poisson方程帶有源項。

1 方程離散

Poisson的離散方式與Laplace方程類似:

改成迭代式形式為:

2 初始值與邊界值

假設計算區域初始條件下

對於源項

3 計算代碼
using PyPlot
matplotlib.use("TkAgg")

nx = 50
ny = 50
nt = 100
xmin = 0
xmax = 2
ymin = 0
ymax = 1

dx = (xmax - xmin) / (nx - 1)
dy = (ymax - ymin) / (ny - 1)


# 初始化
p = zeros((ny, nx));
b = zeros((ny, nx));
x = range(xmin, xmax, length = nx);
y = range(xmin, xmax, length = ny);

# 源項
b[floor(Int, ny / 4), floor(Int, nx / 4)] = 100;
b[floor(Int, 3 * ny / 4), floor(Int, 3 * nx / 4)] = -100;

function plot2D(x, y, p)
fig = PyPlot.figure(figsize=(11,7), dpi=100)
ss = PyPlot.surf(x,y,p, rstride=1, cstride=1, cmap=ColorMap("coolwarm"),
linewidth=0)
xlim(0,2)
ylim(0,1)
PyPlot.show()
end

查看初始值分布。

plot2D(x,y,p)

初始分布如下圖所示。

迭代計算代碼如下。

for it in 1:nt
pd = copy(p)
p[2:end-1,2:end-1] = ((pd[2:end-1,3:end] + pd[2:end-1,1:end-2])*dy^2 +
(pd[3:end,2:end-1]+pd[1:end-2,2:end-1])*dx^2 -b[2:end-1,2:end-1]*dx^2*dy^2)/(2*(dx^2+dy^2))

p[1,:] .= 0
p[ny,:] .= 0
p[:,1] .= 0
p[:,nx] .= 0
end

計算結果如下圖所示。

完整代碼如下。

using PyPlot
matplotlib.use("TkAgg")

nx = 50
ny = 50
nt = 100
xmin = 0
xmax = 2
ymin = 0
ymax = 1

dx = (xmax - xmin) / (nx - 1)
dy = (ymax - ymin) / (ny - 1)

# 初始化
p = zeros((ny, nx));
b = zeros((ny, nx));
x = range(xmin, xmax, length = nx);
y = range(xmin, xmax, length = ny);

# 源項
b[floor(Int, ny / 4), floor(Int, nx / 4)] = 100;
b[floor(Int, 3 * ny / 4), floor(Int, 3 * nx / 4)] = -100;
plot2D(x, y, p)

for it in 1:nt
pd = copy(p)
p[2:end-1,2:end-1] = ((pd[2:end-1,3:end] + pd[2:end-1,1:end-2])*dy^2 +
(pd[3:end,2:end-1]+pd[1:end-2,2:end-1])*dx^2 -b[2:end-1,2:end-1]*dx^2*dy^2)/(2*(dx^2+dy^2))

p[1,:] .= 0
p[ny,:] .= 0
p[:,1] .= 0
p[:,nx] .= 0
end

function plot2D(x, y, p)
fig = PyPlot.figure(figsize=(11,7), dpi=100)
ss = PyPlot.surf(x,y,p, rstride=1, cstride=1, cmap=ColorMap("coolwarm"),
linewidth=0)
xlim(0,2)
ylim(0,1)
PyPlot.show()
end

plot2D(x, y, p)

相關焦點

  • Julia教程1:Julia學習資料與工作環境
    可以直接從julia的官網上找到julia的官方手冊:http://docs.julialang.org/en/release-0.4/ 。此外,由於Julia的開發團隊有中國人的身影,所以Julia的文檔對中國使用者也非常友好,中文版的文檔可以從http://julia-zh-cn.readthedocs.org/zh_CN/latest/ 找到。
  • EDTA標準曲線回歸方程
    回歸方程是根據樣本資料通過回歸分析所得到的反映一個變量(因變量)對另一個或一組變量(自變量)的回歸關係的數學表達式。回歸直線方程用得比較多,可以用最小二乘法求回歸直線方程中的a,b,從而得到回歸直線方程。
  • Excel居然能解方程?
    在正式開始之前,我們先做幾道題:解方程:1、1/3{1/3[1/3(1/3x-3)-1]-1} =02、x^10-2x-3=03、x^x^x^x^x-x^x^x=100    相信大家看到這些題之後,一定是心態崩了,這**怎麼解啊!第一題還好是一元一次方程。
  • Excel怎麼計算方程的解呢?
    已知方程ax^2+bx+c=0。abc屬於R,現要求方程的解,怎麼辦?
  • 用EXCEL來搞藝術之方程求解
    但循環引用是求解一元方程的好辦法,但這種方法只能求出一個值,對於有多個值的情況就沒辦法了。如果X處於分母,很明顯從0開始計算時會出現錯誤,為了避免這種情況,須在起始值輸入1,待方程解有第一次迭代後,再令C10=D10,從而實現迭代計算。對於方程的求解有很多種辦法,比如對於一元二次方程,我們在數學上學過求根公式,就很容易用函數來解決。
  • 3種擬合曲線方程的比較
    在前文——如何藉助Excel圖表進行預測——提到,通過散點圖的3種趨勢線相對應的擬合曲線方程,可以進行一元線性預測,那麼這3個公式,哪一個預測的結果更精準
  • 利用EXCEL的矩陣函數解多元一次方程
    今天這個願望終於實現了,而且不止是二元一次方程,多元一次方程都能解。今天我們使用的工具是EXCEL,利用函數公式,將方程的常量設成矩陣,然後進行矩陣的逆轉,然後相乘,得出結果。先簡單介紹一下矩陣,矩陣就是數列方陣,兩個矩陣相乘如下圖操作,原理簡單,計算繁瑣。
  • 這兩個Excel函數竟然可以秒解多元方程!
    其它Excel還可以做更複雜的數據運算,比如今天用到的兩個函數可以秒解多元一次方程。隨便一組三元一次方程,現求x,y,z的值解題步驟:1、先列出x,y,z的值,如下圖D:F列所示。最終的x、y,z的結果如下圖F12:F14所示:蘭色說:今天介紹的公式是一個固定的模式,它可以解n元一次方程
  • 只會Vlookup、Sumif太out了,這兩個Excel函數竟然可以秒解多元方程!
    其它Excel還可以做更複雜的數據運算,比如今天用到的兩個函數可以秒解多元一次方程。隨便一組三元一次方程,現求x,y,z的值蘭色說:今天介紹的公式是一個固定的模式,它可以解n元一次方程,如四元,五元方程...公式中用到的MINVERSE和MMULT函數你不必懂,只要會操作即可。
  • 學會了單變量求解,讓Excel來幫你解方程
    不知道解方程是不是你曾經在數學試卷上一個難以逾越的痛。但我知道,要是沒有計算設備,我覺得一般人是很難手算出這個答案。(至少我不會,
  • 12周=一年
    看到段硯的分享,明白了,一不留神又和美國執行力公司創始人布萊恩· P.莫蘭和其副總裁邁克·萊寧頓合著的《超高效時間管理:用12周完成12個月的工作》的觀點撞上了。有時候,思想放長遠是對的,讓自己站在一定的高度和深度,有利於豁達看待問題和拓寬心境,但做事就要短視了,一點一滴地把眼下的事情做好,腳踏實地,慢慢積累,四個12周,一年的計劃就達成了。
  • 12月增員利益分析
    1、推薦新人獎:新人籤訂代理合同的第1-12個月,每月按該新人當月FYC的一定比例,向其直接推薦人計發推薦新人獎。2、伯樂獎:若新人籤訂代理合同後第7-12個月的個人累計FYC達到4800元,且最近一次考核達到業務主任職級維持條件(或當前職級高於業務主任),則在第13個月向其直接推薦人發放1000元的伯樂獎