一维黎曼c语言,一维黎曼问题数值解及计算程序.docx
實用標準文案
一維 Riemann 問題數值解與計算程序
一維 Riemann問題,即激波管問題,是一個典型的一維可壓縮無黏氣體動力
學問題,并有解析解。對它采用二階精度MacCormack兩步差分格式進行數值求
解。同時,為了初學者入門和練習方便
,這里給出了用
C
語言和
編寫的
Fortran77
計算一維 Riemann問題的計算程序,供大家學習參考。
A-1 利用 MacCormack兩步差分格式求解一維Riemann問題
1.一維 Riemann問題
一維 Riemann問題實際上就是激波管問題。激波管是一根兩端封閉、內部充
滿氣體的直管,如圖A.1 所示。在直
管中由一薄膜將激波管隔開, 在薄膜兩
側充有均勻理想氣體(可以是同一種氣
體,也可以是不同種氣體) ,薄膜兩側
氣體的壓力、密度不同。當t0 時,
氣體處于靜止狀態。當t0 時,薄膜
圖 A.1 激波管問題示意圖
瞬時突然破裂, 氣體從高壓端沖向低壓端,同時在管內形成激波、 稀疏波和接觸
間斷等復雜波系。
2.基本方程組、初始條件和邊界條件
設氣體是理想氣體。一維Riemann問題在數學上可以用一維可壓縮無黏氣體
Euler方程組來描述。在直角坐標系下量綱為一的一維Euler方程組為:
u
f
1
x 1
(A.1)
t
0,
x
u
其中
u
u
, f
u 2
p
(A.2)
E
(E
p)u
文檔
實用標準文案
這里、 u 、 p 、 E 分別是流體的密度、速度、壓力和單位體積總能。理想氣體
狀態方程:
p
1
e
1 E
1
u2
v2
(A.3)
2
初始條件: 1
1, u1
0, p1
1 ; 2
0.125, u2
0, p2
0.1。
邊界條件: x
1 和 x
1 處為自由輸出條件,
u0 u1 , uN
uN 1 。
3.二階精度 MacCormack差分格式
兩步差分格式:
MacCormack
n
1
unj
r f jn
f jn 1
u j
2
11 unj
n
1
1
n
1
(A.4)
u nj
n
u j
2
1 r f j 1 2
f j
2
2
2
t
。
計算實踐表明,
兩步差分格式不能抑制激波附近非物
x
理振蕩。因此在計算激波時,必須采用人工黏性濾波方法:
un
un
1
un
2u n
un
(A.5)
i , j
i , j
2
i 1, j
i, j
i 1, j
為了在激波附近人工黏性起作用,而在光滑區域人工黏性為零, 需要引入一個與
密度(或者壓力)相關的開關函數:
i
1
i
i
i
1
(A.6)
i
1
i
i
i
1
由式 (A.6) 可以看出,在光滑區域,密度變化很緩,因此值也很小;而在激波
附近密度變化很陡,值就很大。帶有開關函數的前置人工黏性濾波方法為:
uin, j
uin, j
1
uin
1, j 2uin, j uin 1, j
(A.7)
2
其中參數往往需要通過實際試算來確定,也可采用線性近似方法得到:
t | a | 1
t | a |
(A.8)
x
x
文檔
實用標準文案
由于聲速不會超過3 ,所以取 | a | 3 ,在本計算中取0.25 。
4.計算結果分析
計算分別采用標準的C 語言和 Fortran77語言編寫程序。計算中網格數取
1000 ,計算總時間為 T0.4。計算得到在 T0.4 時刻的密度、速度和壓力分布
如圖 A.2 ( C 語言計算結果)和圖A.3 ( Fortran77語言計算結果)所示。采用兩
種不同語言編寫程序所得到的計算結果完全吻合。
從圖 A.2 和圖 A.3 中可以發現,MacCormack兩步差分格式能很好地捕捉激波,
計算得到的激波面很陡、 很窄,計算激波精度是很高的。 采用帶開關函數的前置
人工濾波法能消除激波附近的非物理振蕩,計算效果很好。
從圖 A.2 和圖 A.3 中可以看出通過激波后氣體的密度、壓力和速度都是增加
的;在壓力分布中存在第二個臺階,表明在這里存在一個接觸間斷,在接觸間斷
兩側壓力是有間斷的, 而密度和速度是相等的。 這個計算結果正確地反映了一維
Riemann問題的物理特性,并被激波管實驗所驗證。
圖 A.2
采 用
C
語言程序得到的一維
圖 A.3
采用
Fortran77
語言程序得到的一維
Riemann問題密度、速度和壓力分布Riemann問題密度、速度和壓力分布
文檔
實用標準文案
A-2一維 Riemann問題數值計算源程序
C 語言源程序
// MacCormack1D.cpp :定義控制臺應用程序的入口點。
//
/*--------------------------------
總結
以上是生活随笔為你收集整理的一维黎曼c语言,一维黎曼问题数值解及计算程序.docx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Echarts实战案例代码(59):ge
- 下一篇: 直方图均衡化(Matlab实现)