Вы находитесь на странице: 1из 49

Санкт-Петербургский Политехнический Университет Петра Великого

Физико-механический институт
Высшая школа прикладной математики и вычислительной физики

Курсовая работа по курсу


«Численное моделирование высокоскоростных течений»
Расчет одномерного невязкого течения идеального газа
Вариант 5

Выполнил
студент гр. 5040301/10201 Ле Мань Дат ___________

Проверил Булович С. В. ___________


Колесник Е.В.

«___» __________ 2022 г.

Санкт-Петербург
2022
ОГЛАВЛЕНИЕ
I. ФОРМУЛИРОВКА МАТЕМАТИЧЕСКОГО МОДЕЛИ И ЧИСЛЕННОГО
МЕТОДА..................................................................................................................3

1. Численный метод.................................................................................................3

2. Схема расщепления разности векторов потоков Роу.......................................7

3. Решение задачи Римана для системы уравнений Эйлера. Схема Русанова. .9

4. Схема повышенного порядка точности...........................................................11

5. Постановка граничных условий.......................................................................14

II. ОПИСАНИЕ РЕАЛИЗОВАННОЙ ПРОГРАММЫ И ЕЕ БЛОК СХЕМА. .15

III. ИССЛЕДОВАНИЕ И АНАЛИЗЫ..................................................................16

Част 1 – тестирование реализованных схем расчета потоков на грани...........16

Част 2 – расчет нестационарного течения в ударной трубе постоянного


сечения при разрыве диафрагмы (задача Сода). Оценка ее собственной
частоты...................................................................................................................18

Часть 3 – численное решение одномерных нестационарных уравнений


Эйлера для канала переменного сечения при разрыве диафрагмы..................29

Часть 4 – моделирование движения поршня в замкнутом канала постоянного


канала......................................................................................................................31

Часть 5 – численное решение для канала переменного сечения,


соответствующего индивидуальному варианту.................................................35

IV. ЗАКЛЮЧЕНИЕ...............................................................................................36

V. ЛИТЕРАТУРА..................................................................................................37

VI. ПРИЛОЖЕНИЕ...............................................................................................37

2
I. ФОРМУЛИРОВКА МАТЕМАТИЧЕСКОГО МОДЕЛИ И
ЧИСЛЕННОГО МЕТОДА
1. Численный метод
Рассматривается гиперболическая система уравнений газовой
динамики в переменных Эйлера. Данная система выражает три основных
закона сохранения – массы, импульса и энергии. В одномерном случае
система уравнений Эйлера выглядит следующим образом:
w ∂⃗
∂⃗ F
+ =0 (1)
∂t ∂ x
⃗ является вектором консервативных переменных, а ⃗
Вектор w F – вектор

потоков, который представляет собой функции зависимости от


консервативных переменных и задаются таким образом:

[] [ ]
ρ ρu
w = ρu ,⃗
⃗ F = ρ u2 + p , (2)
ρE ρH u

где ρ – плотность газа, u – скорость газа, p – давление газа, E – полная


энергия:

( )
2
u
E=ρ +e , (3)
2

где e – внутренняя энергия газа.


Для замыкания уравнения добавляется уравнение состояния
совершенного газа, которое задает внутреннюю энергию:
p
e=C v T = , (4)
ρ ( k −1 )

где k – показатель адиабаты.


Энтальпия H, входящая в вектор потоков, определяется следующим
выражением:
E+ p u2 a2
H= = + , (5)
ρ 2 k −1
где а – скорость звука.
Для дискретизации уравнений Эйлера сжимаемого газа используется
метод конечных объемов. Этот метод требует расчета численного потока по

3
нормали к рассматриваемой ячейке, элемента расчетной сетки. Для
одномерной декартовой сетки конечно–объемная схема с потоком в
направлении X записывается в виде консервативной схемы (для задачи
течения в канале постоянного сечения):
∆t ⃗
(
F −⃗
)
n+1 n
wi =⃗
⃗ wi − F 1 , (6)
∆ x i + 12 i−
2

⃗ ⃗
где F i+ 12 , F i−12 – численные потоки через границы ячейки i, которые могут быть

определены непосредственно решением задачи Римана о распаде разрыва


или с помощью схем расщепления [1].
Рассмотрим явный метод интегрирования по времени для задачи
течения в канале переменного сечения с учетом движения граней ячеек сетки
(рис 1.). Система уравнений Эйлера для движения сжимаемого невязкого газа
имеет вид:

{
∂ρ
+¿ ( ρ ⃗
V )=0
∂t
⃗)
∂ (ρ V
+¿ ( ρ ⃗
VV ⃗ + δ kn p ) =0 (7)
∂t
∂( ρE)
+¿ ( ρ V
⃗ H )=0
∂t

Здесь ρ – плотность, ⃗
V –вектор скорости, p – давление, E–полная

энергия, H–полная энтальпия. Первое уравнение системы (7) представляет


собой закон сохранения массы в дифференциальной форме, второе – закон
сохранения количества движения, третье – закон сохранения энергии.
Запишем законы сохранения (7) для конечного постоянного объема Ω,
ограниченного поверхностью S, в интегральной форме:

{

∭ ρdΩ+∯ ρV n dS=0
∂t Ω S

∭ ρ ⃗V dΩ+∯ (ρ V n ⃗V − p ⃗n )dS=0
∂t Ω (8)
S

∂t ∭
ρEdΩ+∯ ρV n HdS=0
Ω S

4
Расписывая члены уравнений системы (8) с учетом теоремы о среднем
для объема с конечным числом граней, получим следующую систему
дифференциальных уравнений:

{
( ∂∂ ρt ) Ω+∑ (ρ V ) S =0
p f
n f f

( ∂ ∂tρ ⃗V ) Ω+∑ (ρ V ⃗V − p n⃗ ) S =0
p f
n f f (9)

( ∂∂ρEt ) Ω+∑ ( ρ V H) S =0
p f
n f f

Рисунок 1. Расчётная сетка для переменного канала с учётом движением


граней
В рамках данной работы рассматривается квазиодномерный случай. В
силу этого систему (8) можно представить в виде системы Эйлера (1) при
помощи вектора консервативных переменных и вектора потоков. Для случая
S =S
i−
1
2
i+
1
2
система (9) для ячейки i имеет вид:
∂(⃗
w i)
∂t (
Ωi + ⃗
F 1 S 1 −⃗
i+
2
i+
2
F 1 S 1 =0
i−
2
i−
2
) (10)

где векторы потоков на граня являются функциями от параметров двух


⃗ ⃗ w i−1 , ⃗
w i) и ⃗
F 1 =⃗
соседних ячеек: F i−12 =F ( ⃗ i+
2
F(⃗ wi +1) .
wi , ⃗

Запишем слагаемую производную по времени, используя явную схему


Эйлера:
n +1 n
(⃗
wi Ωi ) −( ⃗wi Ωi)
( ) =0 ,
n

+ F 1 S 1 −⃗
F 1 S 1 (11)
∆t i+
2
i+
2
i−
2
i−
2

С учётом движения граней объем схемы не является постоянной и


явная схема имеет следующий вид:
5

( −⃗
)
n+1 n+1 n n n
w i Ωi =⃗
⃗ wi Ωi −∆ t F 1 S 1 F 1 S 1 (12)
i+ i+ i− i−
2 2 2 2

В случае переменного сечения S1 ≠ S2 система (9) примет вид:


∂ ( ρΩ )i
∂t (
+ ( ρ u) 1 S 1 −( ρu) 1 S 1 =0
i+
2
i+
2
i−
2
i−
2 )
( ))
∂(ρuΩ)i ( pi−1 + pi+1 ) (13
+ ( ρu + p )i + 1 S 1 −( ρ u + p )i− 1 S 1 −
2 2
∂t 2
i+
2 2
i−
2
2
S 1 −S 1 =0
i+
2
i−
2 ( )
∂( ρEΩ)i
∂t (
+ ( ρuH ) 1 S 1 −(ρ uH) 1 S 1 =0
i+
2
i+
2
i−
2
i−
2
)
Перепишем данную систему уравнения в записи с векторами потоков
на гранях:

( ( ) )
n
0
p +p
w n+1 Ωn+1 wni Ωni −∆ t ⃗
F 1 S 1−⃗
⃗ i i =⃗
i+
2
i+
2
F 1 S 1 − i−1 i +1 S 1 −S 1
i−
2
i−
2 2 i+
2
i−
2 ( ) (14)
0

Система уравнений (13) является системой Эйлера для


квазиодномерного канала переменного сечения с учетом движением граней
сетки. В этом случае площадь грани равна ширине ячейки, а объем ячейки i
можно вычислить как площадь трапеции:
1
Ωi=
(
S +S h,
2 i− 12 i + 12 )
где h – шаг сетки.
В данной курсовой работе рассматривалось две схемы для расчета
потоков через грани: схема Роу и схема Русанова.

2. Схема расщепления разности векторов потоков Роу


Система уравнений Эйлера (1) можно переписать в другом виде с
∂F ⃗
помощь матрицы второго ранга A= :
∂x
∂⃗
w ∂⃗
w
+A =0 , (15)
∂t ∂x
Где:

6
( )
0 1 0
( k −3 ) u 2
( 3−k ) u ( k −1 )
A= 2 , (16)
2
3 ( k −1 ) u
( k−1 ) u3−kuE kE− ku
2

ρ – плотность газа, u – скорость газа в направлении X, p – давление газа, E –

полная энергия, k – показатель адиабаты.


Так как система (15) является гиперболической, матрица
коэффициентов имеет все три собственные числа λ k вещественны, и

соответствующие ими правые и левые собственные векторы. Тогда матрица


А может быть расщеплена на два матрицы:
−¿,¿

A=A
+¿+ A ¿
(17)
λk ±| λk|
где: A± =R Λ± R−1 , Λ± =diad ( λk ± ) , λk ± = . А матрица R является матрицей,
2
составленная из правых собственных векторов как из столбцов.
При этом вектор потока ⃗F расщепляется на:

F= A ⃗
w =¿ (18)
Основная идея семейства схем расщепления заключается в том, что
векторы потока на гранях расщепляются на несколько слагаемых, которые
определяется матрицей А и векторами ⃗
w двух соседних ячеек. Рассматриваем

грани i+1/2 и i-1/2 (рис.1), тогда:


−¿ ,¿
+¿ +⃗
F ¿
−¿и ⃗
F 1
=⃗
F i−1 i
¿
+¿+ ⃗
Fi+ 1 ¿
⃗ ⃗
i−

(19)
2

F 1=F i
i+
2

Расщепление может быть применимо, либо непосредственно для



вектора потока F i+ 12 (как выше показано), либо для разности векторов потоков
δ⃗
F 1 . Схема Роу основанная на последней идее, при этом вектор потока на
i+
2

грани i+1/2 записывается в виде суммы центрального потока и диссипации:


⃗ 1 ⃗ ⃗ 1
F 1 = ( F i+ F i+ 1) − ⃗D (20)
i+
2
2 2 i+ 12

С учетом (18) и (19):



D =¿
i+
1
2
(21)

7
или:

D =¿
i+
1
2
(22)

где
δ⃗
± ±
F 1 ≅A 1 δ⃗
w 1 (23)
i+ i+ i+
2 2 2

Схема Роу определяет матрица Ai + 12 как функция от осредненных

переменных параметров:
~ρ=√ ρR ρ L (24)
u=( √ ρ u + √ ρ u ) /( √ ρ + √ ρ )
~ R R L L R L
(25)
~H=( √ ρR H R + √ ρL H L ) /( √ ρR + √ ρL ) (26)
~
И так матрицу Ai + 1 ( ⃗
w ) имеет собственные числа ~
2
u, ~
u±~
c.

В итоге по схеме Роу слагаемое диссипации определяется таким


образом:
(~

D
i+
1
2
|
=A
i+
1
2

|
w) δ ⃗
w 1 =|∆ F1|+|∆ F2|+|∆ F 3|,
i+
2
(27)

Где:

)[ ]
1
∆ p−~
ρ~
| 1|
∆ F =|~
u− ~
c|
2~
c2
c∆u ~ ~
~
u− c ,
H−~c ~
u
(
(28)

[ ]
1
| 2|
∆ F =|~
u| ∆ ρ−
∆p
~c 2
~2
~
u ,
u /2
( ) (29)

)[ ]
1
∆ p+ ~ρ ~
|∆ F 3|=|~u+ ~c| ( c ∆u ~ ~
2 ~c 2
u+
~ ~~
c ,
H +cu (30)
∆ ρ=ρi+1 −ρi , ∆ p= pi+1− p i , ∆ u=ui+1 −ui

3. Решение задачи Римана для системы уравнений Эйлера. Схема


Русанова
Задача о распаде произвольного разрыва (задача Римана) состоит в
определении обобщенного (в общем случае, разрывного) решения
интегральных законов сохранения массы, количества движения и энергии
при t >0, удовлетворяющего кусочно – постоянным начальным условиям.

8
Газодинамическое решение общего вида строится на основе
комбинации элементарных решений, которые отделены друг от друга
областями с постоянными значениями параметров.
Рассмотрим задачу Римана для одномерной гиперболической системы
в консервативном виде, где w – вектор консервативных переменных, ⃗F –
вектор потоков:
w ∂⃗
∂⃗ F
+ =0 (31)
∂t ∂ x
или:
∂ u⃗ ∂ u⃗ −1
+A =0 , A=RΛ R (32)
∂t ∂x
Решается одномерная задача о распаде разрыва – полагается, что при
t=0 две области пространства с различными значениями термодинамических

параметров были разделены тонкой перегородкой, а в начальный момент


времени перегородку убирают. Требуется построить решение при
произвольных начальных значениях переменных.
Метод Годунова основан на аппроксимации потоков на границах ячеек
разностной сетки с помощью точного решении задачи Римана распада
газодинамического разрыва. Произвольный разрыв газа распадается на три
волны: на левую волну, контактный разрыв и правую волну. Левые и правые
волны могут быть в зависимости от перепада давления как волнами
разрежения, так и волнами сжатия (скачками). Точное решение задачи
Римана требует трудоемкого решения нелинейной системы уравнений
методом итераций. В связи с этим широкое распространение имеют более
экономичные схемы численного решения уравнений газодинамики на основе
приближённого решения задачи распада разрыва с возможностями сквозного
расчёта разрывных течений, приближающимися к схеме Годунова.
Схема HLL (Harten, Lax and van Leer) представлена в виде левой,
правой ударных волн, разделяющих пространство параметров на 3 области,
без рассмотрения контактного разрыва (рисунок 2).

9
Рисунок 2. Конфигурация течения
Приближенное решение задачи Римана методом HLL имеет вид:

{
x
w L при
⃗ ≤ SL ;
t
w ( x , t)= ⃗
⃗ x
w¿ при S L ≤ ≤ S R
t
(33)
x
w R при ≥ S R

t

где ⃗
wL , ⃗
wR – вектор ⃗
w на левой и правой ячейках, а значение ⃗
w ¿ определяется

соотношению:
SR ⃗ w L +⃗
w R−S L ⃗ F L −⃗
FR
w ¿=
⃗ (34)
S R −S L

где ⃗F L , ⃗F R – векторы потока на левой и правой ячейках.


Поток метода HLL определяется из соотношения:

{

F L , при 0 ≤ S L ;
⃗ ⃗
F = S R F L−S L F R + S R S L ( ⃗
⃗ w L)
w R−⃗
при S L ≤ 0 ≤ S R (35)
S R−S L

F R , при 0 ≥ S R

Для оценки скорости распространения ударных волн S L и S R, могут


использоваться различные подходы, основанные на свойствах точного
решения задачи Римана. К числу прямых методов вычисления относится
простые оценки скорости распространения ударных волн по схеме Русанова:
S L=−S +¿¿ (36)
S R=S+¿ ¿

10
+¿=max ⁡(|uL −c L|,|uR −c R|,|uL +c L|, |uR +c R|)¿
S
4. Схема повышенного порядка точности
Согласно теореме Годунова, монотонной линейной разностной схемы
2-го и более высоких порядков точности не существует. Для проведения
расчетов с высоким порядком точности при отсутствии в результатах
нефизических осцилляций следует рассматривать другие классы разностных
схем.
Вместо условия сохранения монотонности рассматриваются
разностные схемы, которые уменьшают или сохраняют полную вариацию
функции. Условие не возрастания полной вариации численного решения
(Total Variation Diminishing, TVD) является более слабым, чем требование
монотонности схемы.
Рассматриваем явную линейную схему на шаблоне из (2k+1) точек:
∆t
unj +1=Lu nj =unj −
∆x
[ ]
f ( unj−k +1 , … , unj+k ) −f ( u nj−k , … , unj +k−1 ) , (37)

где L – оператор перехода.


Полная вариация TV(u) для функции u(x) определяется следующим
образом:

1
TV (u)=lim ¿ ∫ |u ( x+ δ )−u ( x )|dx (38)
δ →0 δ −∞

Для сеточной функции суммирование проводится по всем дискретным


точкам:

TV (u)= ∑ |u j +1−u j| (39)
j=−∞

Разностная схема, удовлетворяющая свойству TV (Lu)≤ TV (u) называется


TVD. Иными словами, если соотношение (37) переписываем в таком виде:
u j =u j +C j +1/ 2 ( u j+1 −u j ) −D j−1 /2 ( u j −u j−1 ) ,
n +1 n n n n n
(40)

где C j+ 12 =С ( u j−k+1 , … , u j +k+1 ) и D j−1 /2=D ( u j−k , … ,u j +k ) ,то условие для схем TVD
n n n n

становится: C j+ 12 ≥ 0 , D j− 12 ≥ 0 и C j+ 12 + D j− 12 ≤1.

11
Для трехточечных явных схем это условие по-другому написать при
добавлении понятия ограничителя φ j ( r j ) (рис.3):

j−
2
1
2( j+
2
1
unj +1=unj−c ∆u n 1 − φ j ( 1−c ) c ∆ un 1 −φ j−1 (1−c ) c ∆ u n 1 ,
2 j−
2
) (41)
n
∆u 1
j−
2
где с – число Куранта, r j= n и:
∆u 1
j+
2

φ j ( r j ) =0 , при r j < 0 ,; φ j ( r j )=min ( 2 r j , 2 ) при r j > 0;

( )
φ j (r j ) (42)
0< , φ j ( r j ) <2
rj

Рисунок 2. Диаграмма ограничителей TVD схем


Диаграмму на рисунке 6 часто встретить для различных ограничителей:
выбор заштрихованной области приводит к решению TVD второго порядка.
На основе такого идея чтобы повысить порядок точности для
конечного объемного подхода, возникли попытки формировать линейное
распределение переменных внутри каждой расчетной ячейки (контрольного
объема) и использовать полученные значения на грани при решении задачи о
распаде разрыва. При этом потоки вычисляются с использованием
уточненных (реконструированных) значений переменных на гранях ячейки.
В литературе данный способ известен как MUSCL-подход (Monotone
Upstream-centred Schemes for Conservation Laws). Для этого в процедуру
построения кусочно-полиномиальных распределений также вводятся

12
специальные функции-ограничители. В итоге MUSCL-подход состоит из
таких этапов:
• Реконструкция переменных на двух сторонах («левой» и «правой»)
граней расчетных ячеек.
• Вычисление, исходя из реконструированных переменных, потоков
через грани ячеек. Обычно это делается путем приближенного решения
задачи о распаде разрыва между «левым» и «правым» состояниями.
• Нахождения значений переменных на новом временном слое в
центре ячейки. При этом используются значения переменных на старом
временном слое и вычисленные потоки через грани ячеек.
В результате рассмотрения MUSCL для кусочно-квадратичной
реконструкции и применения линейной односторонней экстраполяции,
получим:
L 1
u 1 =ui + ψ ( r i) ( u i−ui−1 ) ,
i+
2
2
(43)
R 1
u 1 =ui − ψ
i−
2
1
( u −u ) ,
2 r i i+1 i ()
u i+1−ui
где r j= u −u .
i i−1

Для выполнения TVD условий функция-ограничителя ψ должна быть


также удовлетворяться условиям (42), которые применимы для φ .
Для расчета в данной работе была выбрана одна и многих схем TVD
второго порядка (рис.7), в которой использовался ограничитель van Leer:
2r
ψ ( r )= ,
r +1 (44)
ψ ( r ) → 2 при r → ∞ ; ψ ( r ) =0 при r <0

13
Рисунок 7. Выборы ограничителей TVD схем второго порядка
5. Постановка граничных условий
Расчеты были проведены для канала, один конец которого открыт на
бесконечное пространство с определенным уровнем давления и температуры,
на другом конце установлен поршень (непроницаемая стенка), совершающий
колебания по синусоидальному:
x p ( t )= A+ A cos(2 πFt +φ), (45)
где A, F, φ – амплитуда, частота и начальная фаза колебания поршня.
Соответственно, скорость изменяется таким образом по времени:
u p ( t )=−2 AπF sin (2 πFt + φ) (46)
Для задания граничных условий дополнительно вводились
заграничные ячейки (рисунок 8).

Рисунок 8. Схема граничных и заграничных ячеек


Граничные условия:
1. Непроницаемую стенка: скорость на границе приобретает
противоположное направление (отражается), а остальные параметры
(давление, плотность) сохраняются:

14
Стенка неподвижна:
ρ0 =ρ1
u0 =−u1 (47)
p0 =p 1

Стенка движущая (поршень):


ρ0= ρ1
u0 =2u p−u1 (47)
p0= p 1

2. Открытый конец: условия зависят от параметров на последней


ячейки N и атмосфера (давление p0, температура T 0):
|u N|< c |u N|> c
ρ N +1=ρ N ρ N+1 =ρN
|u N|> 0 u N +1=u N u N+1 =uN
p N +1= p0 p N+1 =p N

( ) ( )
−1 −1
k−1 2 k−1 k−1
ρ N+1 =ρ0 1+ k−1
M ρ N+1 =ρ0 1+
2 2
|u N|< 0 u N+1 =uN u N +1=c 0

( ) ( )
−k −k
k−1 2 k−1 k−1
p N+1 =p 0 1+ M
k−1
p N+1 =p 0 1+
2 2
где M =u N /c N – число Маха в последней ячейке, c 0= √ kR T 0 – скорость звука в
атмосфере.
II. ОПИСАНИЕ РЕАЛИЗОВАННОЙ ПРОГРАММЫ И ЕЕ БЛОК
СХЕМА
Программа была написана на языке Fortran с помощью среды Cygwin.
Программа состоит из нескольких основных блоков по этой схеме (рис.9):

15
Рисунок 9. Описание реализованной программы и ее блоки
Исходные коды программы представлены в приложении.
III. ИССЛЕДОВАНИЕ И АНАЛИЗЫ
Част 1 – тестирование реализованных схем расчета потоков на грани
В этом пункте для тестирования разработанных схем рассматривается
несколько вариантов параметров, чтобы получить 3 вида возможных
событий при решении задачи Римана о распаде разрыва.

16
а) одна ударная волна, одна волна разрежения:
P 1=100000 [Па], ρ 1=1. 2[кг/м3], P 2=4000 [Па], ρ 2=0.047 [кг/м3], u 1=0.0
[м/с], u 2=0.0 [м/с]
Годунов Роу Русанов

F(1) 137.267 140.283 198.996

F(2) 66979.595 52000.000 52000.000

F(3) 33363585.487 41059778.004 41421548.508

Рисунок 10. Результаты расчета вектора потока на гранях для трех разных
схем для первого варианта параметров (ударная волна и волна разрежения)
b) Две волны разрежения:
P 1=100000 [Па], ρ 1=1.16 [кг/м3], P 2=100000[Па], ρ 2=1.16 [кг/м3],

u 1=−300.0 [м/с], u 2=100.0 [м/с]

Годунов Роу Русанов


F(1) -62.926 -51.328 -116.000
F(2) 48766.614 68306.652 7802.233
F(3) -15180528.503 -13087487.685 -27520223.328

17
Рисунок 11. Результаты расчета вектора потока на гранях для трех разных
схем для второго варианта параметров (две волны разрежения)
c) Две ударных волны:
P 1=100000 [Па], ρ 1=1.16 [кг/м3], P 2=100000[Па], ρ 2=1.16 [кг/м3], u 1=400.0 [м/с],

u 2=−200.0 [м/с], Udot =−50.0 [м/с] (скорость грани)

Годунов Роу Русанов


F(1) 366.430 314.167 197.280
F(2) 335443.865 365415.675 486552.765
F(3) 143762538.351 128900311.561 101070811.529

Рисунок 12. Результаты расчета вектора потока на гранях для трех разных
схем для второго варианта параметров (две ударные волны)
По представленным результатам рисунок 10-12 заметим, что схема Роу
дает хорошие результаты, в некоторых случаях они совпадают с точными
(т.е. полученными методом Годунова). Схема Русанова хуже описывает
случаи с двумя волнами разрежения или двумя ударными волнами (особенно
для второй слагаемой).
Част 2 – расчет нестационарного течения в ударной трубе постоянного
сечения при разрыве диафрагмы (задача Сода). Оценка ее собственной
частоты
В этом пункте разработана программа для расчета течения в трубе
постоянного сечения. С целю тестирования работы реализованных схем были
проведены расчеты для трубы при разрыве диафрагмы.
Параметры тестирования:
№ ρL uL PL ρR uR PR x0 t [s]

18
[кг/м3] [м/с] [Pa] [кг/м3] [м/с] [Pa] [м]
1 1.0 0.75 1.0 0.125 0.0 0.1 0.3 0.2
2 1.0 0.0 1000.0 1.0 0.0 0.01 0.5 0.012
3 5.99924 19.5975 460.894 5.99242 -6.19633 46.0905 0.4 0.035
4 1.0 -19.59745 1000.0 1.0 -19.59745 0.01 0.8 0.012
где индексы L и R обозначают параметры на левой и правой камерах, x0 –
положение диафрагмы, t – конечное время.

19
Рисунок 13. Результаты тестирования №1
(рассчитанные – сверху и точные-внизу)

20
Рисунок 14. Результаты тестирования №2
(рассчитанные – сверху и точные-внизу)

21
22
Рисунок 15. Результаты тестирования №3
(рассчитанные – сверху и точные-внизу)

23
Рисунок 16. Результаты тестирования №4
(рассчитанные – сверху и точные-внизу)
Выше приведены результаты тестирования для 4 случаев, при которых
граничные условия считаем однородными. Распределения параметров вдоль
канала, которые полученные из программы, имеют подобные фигуры с
точными результаты [1], особенно расчеты со схемами второго порядка.
24
Теперь рассматривается задача Сода: численный расчет
нестационарного течения, возникающего в ударной трубе при разрыве
диафрагмы, которая разделяет области разного уровня давления (КНД и
КВД). Ударная труба, имеющая длину равной 1 [м] и высоту равную 0. [м],
разделена на две (по длине) равные области с разными значениями плотности
и давления в начальный момент времени:
Параметры слева (КВД): P = 100000 [Па], ρ = 1.2 [кг/м3], U=0.0 [м/с]
Параметры справа (КНД): Р = 4000 [Па], ρ = 0.047 [кг/м3], U=0.0 [м/с]
На торцах трубы стоит граничное условие отражения.
При данных условиях по элементарной теорию было получено:
 Скорость ударной волны: S = 653.511 [м/с]
 Скорость головной волны разрежения: S1 = -341.565 [м/с]
 Скорость последней волны разрежения: S2 = 129.626 [м/с]
 Давление на поверхности контакта: Pp = 16060.547 Па
 Скорость газа на поверхности контакта Up = 392.659 [м/с]
 Плотность гала слева и справа поверхности контакта:
ρ L=0.325[кг/ м 3 ] ; ρR 0.118 [кг / м3 ]

На рисунке 17 показана x-t диаграмм. И так, моменты, когда волны


(ударная волна и головная волна разрежения) взаимодействуют с торцами:
 t1 = 0.000765097 [c] для ударной волны.
 t2 = 0.00146385 [c] для волны разрежения.

Рисунке 17. x-t диаграмм

25
На рисунке 18 представлено исследование сеточной сходимости для
сеток размерностью 100, 500 и 1000 для схем Роу и Русанова, время
получения распределения параметров t = t1 = 0.000765097 [c].

Рисунок 18. Распределение плотности вдоль канала: схема Роу (слева) и


схема Русанова (справа) при t = 0.000765097 [c].
Все схемы одинаково описывают разрыв, при этом с увеличением
числа узлов улучшается качество описания разрыва. Судя по графикам, при
числе ячеек равном 1000 достигается сходимость решения (с допустимым
отклонением). Параметры выбраны для дальнейшего расчета: шаг по
пространству dx = 0.001 [м] – 1000 ячеек; число Куранта CFL = сdt/dx = 0.1,
где c – максимальная скорость звука в двух камерах.
Данный разрыв распадается на бегущую вправо ударную волну и волну
разрежения, следующую в обратную сторону. Распределение параметров газа
вдоль трубы на рисунке 19 (при двух моментах t = 0.0005 и t = 0.001). В
результате было добавлены расчеты с TVD схемы второго порядка точности
по пространственной координате с использованием MUSCL подхода.

26
t1 = 0.0005 [c] t2 = 0.001 [c]

27
Рисунок 19. Распределение параметров газа (сверху - внизу): скорость,
плотность и давления вдоль трубы при разных моментах
На выше представленных графиках для удобства сравнения
пунктирные линии обозначают значения параметров, рассчитанные по
элементарной теорию. Видимо, обе схемы расчета потоков дают близкие
результаты. Расчеты с TVD- методом увеличивают точность решение,
особенно в местах разрыва.
Для нахождения главной частоты собственных колебаний трубы
задавался небольшой перепад давлений и плотностей:
 Параметры слева: P=100000 [Па], ρ=1.2 [кг/м3], U =0.0 [м/с]
 Параметры справа: Р=50000 [Па], ρ=0.6 [кг/м3], U =0.0 [м/с]

Рисунок 20. Колебания значения скорости газа в трубе в точке мониторинга x=0.5 [м ]
Колебания скорости в точках мониторинга, имеющих координаты х =
0.5 [м], представлены на рисунках 20. Очевидно, рассчитанные со схемами
повышенной точности скорости (синяя линия) диссипирует медленнее чем
результаты схем первого порядка. При этом так же важно отметит, что по
сравнению схемой Роу диссипация схемы Русанова оказывается больше.

28
Рисунок 21 Спектры частот
На рисунке 21 приведены разложения ряда Фурье для полученных
колебаний в виде спектров. Исходя из этого, можно определять собственные
частоты для разных схем:
F = 168.5 Hz (схема Роу второго порядка), 169 (схема Роу первого порядка),
170 (схема Русанова второго порядка), 170.5 (схема Русанова первого
порядка). Аналитическое значение собственной частоты можно получить по
формуле F = 1/T = 2L/c0 = 170.78 Hz, где c0=341.56 [м/с] – начальное
приближение скорости звука). Видимо, что это значение не сильно
отличается от значений, полученных по численным методам.
Часть 3 – численное решение одномерных нестационарных уравнений
Эйлера для канала переменного сечения при разрыве диафрагмы
В данном пункте реализован расчет нестационарного течения в трубе
переменного сечения (вариант 5), которая имеет форму на рисунке 22 и
правый открытый торец атмосферу.

Рисунок 22. Общий вид расчетной области


Высота канала задавалась равной H=0.1 [м], h = 0.2 [м]. Длина канала
равнялась 1 [м]. Сечение канала в программе задано по формуле (рис. 23):

29
( (
h=H 1+exp
2
−3
( 7−20|x−5|) ))

Рисунок 23. Функция изменения высоты канала


Для нахождения главной частоты собственных колебаний трубы
переменного сечения задавались одни и те же условия в предыдущем пункте
(расчет для канала постоянного сечения). На основе преимущества схемы
Роу перед схемой Русанова расчеты проведены только для схемы Роу второго
порядка.

Рисунок 24. Колебание значения скорости газа в трубе в точке


мониторинга x=0.5 [м] (слева) и спектр частоты (справа)
На рисунке 24 изображено колебание скорости газа в сечении x = 0.5
[м]. Соответственно, путем спектрального анализа полученного колебания
можно оценивать собственную частоту: F = 84 Hz. Со значениями
собственных частот (в предыдущем и этом пунктах) будем исследовать
явление резонанса в трубках, на конце которых установлен движущий
поршень.

30
С целью исследования зависимости собственной частоты колебания
газового столба от отношений высот H/h были проведены расчеты при
случаях: h = 0.22, 0.20, 0.18, 0.16, 0.14, 0.12 и 0.1 [м].

Рисунок 25. Спектры частот и зависимость собственной частоты колебания


газового столба от отношений высот h/H
На рисунке 25 представлены спектр частот колебаний и зависимость
полученных собственных частоты от отношения высоты канала h/H. По
уменьшению оцениваемого отношения частота увеличивается почти
линейно. Важно отметит, что при h/H = 1 сечение канала становится
постоянным и собственная частота канала равна 90 Hz, а ее аналитическое
значение: F = c0/(4L) = 87 Hz. При этом относительное отклонение между
численным и аналитическим решениями равно 3%.
Часть 4 – моделирование движения поршня в замкнутом канала
постоянного канала
В данном пункте разработана программа для расчета течения в
замкнутом канале постоянного сечения, на одном конце которой находится
поршень, совершающий гармонические колебания с заданной частотой и
амплитудой по закону:
x p ( t )=0.01¿

Соответственно, скорость изменяется таким образом по времени:


u p ( t )=−0.02 πF sin ( 2 πFt −π ) [ м/с ].

31
При движении поршнем используется метод деформации сетки с
фиксированным числом ячеек. При этом считаем, что в каждом моменте
координаты узлов и скорости грани сетки определяются по линейной
интерполяции. Расчет проведен для схемы Роу второго порядка.
Рассматриваем случай с заданной низкой частоты F = 5 Hz. На рисунке
26 приведены распределения скорости (слева) и давления (справа) газа вдоль
длины канала в моменте t = 0.05 s:

Рисунок 26. Распределения газодинамических функций вдоль длины канала


вдоль длины канала в моменте t = 0.05 s
Согласно графикам, в моменте t = 0.05 s распределение скорости газа
имеет линейную зависимость от координаты X, а давление меняется
незаметно (относительно отклонение << 1%) и можно считать, что его
перепад вдоль канала при этом ничтожным. Обнаруженные явления так же
можно предсказывать при обобщении аналитического решения для
акустического приближения.
В задаче о колебаниях газового столба в трубе постоянного канала под
действием возмущений, создаваемых поршнем, распределение скорости газа
имеет такую формулу:
U =[ Acos ( kx ) + Bsin ( kx ) ] sin ( ωt−π )

32
ω 2 πF
где: А, B – некоторые константы, k = c = c – волновое число, c 0- скорость
0 0

звука при начальных плотности ρ0 и давлении P0.


В данной задаче граничные условия были (во всех моментах времени):
при x = 0 - U =−0.01 ω sin ( ω t−π ), при x = L - U =0. И так, получим:

U =0.01 ω
[ sin ( kx ) cos ( kL )
sin ( kL ) ]
−cos ( kx ) sin ( ωt−π )

В рассматриваемом случае была выбрана частота F маленькая,


соответственно, величина k оказывается очень малой (k << 1) и можно
написать функцию U с учетом приближением:

U =0.01 ω ( xL −1) sin ( ωt−π )


В рассматриваемой моменте t = 0.05 с распределение скорости газа
вдоль канала имеет линейную зависимость, которая изображена пунктирной
линей на рисунке 26.
U ≈ 0.31416−0.31416 x

Рассматриваем резонансный режим, при этом в качестве частоты


колебаний поршня задана найденная в пункте 2 собственная частота канала
(F = 169 Hz).

Рисунок 27. Колебаний скорости (слева) и давления (справа) от времени в


точках монитора x = 0.5 м и x = 0.99 м.

33
На рисунке 27 представлены колебания скорости и давления газа в
точках монитора (на середине и на одном конце канала). Заметим, что в этом
случае наблюдены резонансы колебаний. Это можно объяснять тем, в данных
начальных условиях период, за который создаваемое в предыдущем шаге
возмущение дошло до замкнутого конца и отраженно обратно до поршня,
совпадает с периодом колебания внешнего действия (поршня). В силу этого
амплитуда колебаний функций постепенно усиливается по времени.

Рисунок 28. Распределения газодинамических функций вдоль длины канала


вдоль длины канала в моменте t = 0.05 s
На рисунке 28 показаны графики распределения скорости (слева) и
давления (справа) вдоль канала. В отличии от рассматриваемого случая с
маленького значения частоты F на данных картинках очевидны разрывы
функции. Иными словами, в канале cформирована бегущая ударная волна.
Движение ударной волны наглядно увидеть с помощью разверток функций
(рисунок 29).

34
Давление (Па) Скорость (м/c)
Рисунок 29. Развертки скорости и давления газа по времени и пространству
Часть 5 – численное решение для канала переменного сечения,
соответствующего индивидуальному варианту
В пункте 3 было рассмотрено течение газа в канале переменного
сечения при разрыве диафрагмы и была получена его собственная частота.
Пусть в одном (левом) торце канала двигается поршень с такими условиями,
как были применимы для канала постоянного сечения (часть 4).

Рисунок 30. Распределения газодинамических функций вдоль длины канала


вдоль длины канала в моменте t = 0.05 s
На рисунке 30 приведены распределения скорости (слева) и давления
(справа) газа вдоль длины канала при частоте колебания F = 5 Hz в моменте t
= 0.05 s. Очевидно, как в случае канала постоянного сечения давление газа

35
вдоль канала не изменяется заметно. Вогнутый участок графика скорости
возникает из-за формы канала (рисунок 22). Проходя этот участок, газа
расширяется и его скорость должна быть иметь тенденцию уменьшения.
Проводим расчеты для канала при частоте колебаний поршня F = 84
Hz, которое совпадает с собственной частоты. На рисунке 31 приведены
изменения скорости и давления газа в точках монитора X = 0.5 [м] и X = 0.99
[м].

Рисунок 31. Колебаний скорости (слева) и давления (справа) от времени в


точках монитора x = 0.5 м и x = 0.99 м.
Видимо, что резонансы также обнаружены, при этом максимальная
амплитуда скорости достигается в конце канала. Изменения
газодинамических функций по пространству и времени также можно видеть
на рисунке 32.

36
Давление (Па) Скорость (м/c)
Рисунок 32. Развертки скорости и давления газа по времени и пространству
IV. ЗАКЛЮЧЕНИЕ
В ходе работы были произведено численное моделирование течений
существенно сжимаемого газа в рамках квазиодномерного подхода на
деформируемых сетках. Использованы различные современные схемы для
расчета векторов потока в системе Эйлера на гранях, именно схема
расщепления – схема Роу и схема типа Годунова – схема Русанова, которая
лежит в основе задачи Римана. Выучил основные алгоритмы на языке
Фортран в области численного моделирования высокоскоростных течений.
Исследовано течение газа в замкнутым канале постоянного сечения при
заданном начальном условии с разрывом физических параметров, и
соответственно, получена его собственная частота. В основе этого было
исследован и обнаружен резонансный режим в канале, при котором
возникает бегущая ударная волна. Численное решение, полученное
программой, сопоставимо с аналитическим решением. На основе программы
для канала постоянного сечения, были разработаны программы для
исследования течения в канале переменного сечения, один конец которого
открыт на бесконечное пространство с определенным уровнем давления и
температуры, на другом конце установлен поршень, совершающий
колебания по синусоидальному закону.

37
V. ЛИТЕРАТУРА
1. Riemann Solvers and Numerical Methods for Fluid Dynamics: A
Practical Introduction. Front Cover. E. F. Toro. Springer, 1997 - Science - 592
pages.
2. Булович С.В., Виколайнен В.Э. Волновое движение газа в
протяженных каналах: Учеб. пособие. СПб: Изд-во Политехн. ун-та. 2006. 68
с.
3. Лойцянский Л. Г. Механика жидкости и газа. – Глав. ред. физ.-мат.
лит. изд. «Наука, М.: 1973. – 849 с.
4. Ларионов В. М, Филипов С. Е. Введение в гидродинамику. Учебное
пособие: курс лекций, решение задач. – Казань: КГУ, 2010. – 108 с.
5. Черный Г.Г. Газовая динамика: Учебник для университетов и вузов
VI. ПРИЛОЖЕНИЕ
PROGRAM PISTON
IMPLICIT NONE
CHARACTER(*),PARAMETER:: InputFile='Input2' ! names of input and output files
CHARACTER:: Input*30,OutputFile*15 ! Name of file with input parameters
! CHARACTER FileName*15 ! Name of output file
INTEGER,PARAMETER:: IO1 = 11,IO2 = 12,IO3 = 13,IO4 = 14, IO5 = 15, IO6 = 16 !
input unit
REAL,PARAMETER:: PI = 3.14159265359
REAL:: AK,CP,CV,RM,P0,R0,C0,F,A,DT,TK,L,DX,T,DOP,CFL,PRE,SC,C
REAL:: PF(2),UF(2),RF(2)
REAL,ALLOCATABLE,DIMENSION(:):: X,CE,S,VO,U,R,P,E,UDOT,VON
REAL,ALLOCATABLE,DIMENSION(:):: W(:,:),FF(:,:),WN(:,:)
INTEGER:: I,J,K,N,NT,MODE,M,OR
! READ INPUT FILE *
WRITE(*,*) 'Read input file: ', InputFile
OPEN (IO1,FILE=InputFile)
READ (IO1,*) Input ! read name of file with
CLOSE(IO1)

! READ PARAMETERS FROM INPUT FILES *


OPEN (IO2,FILE=Input)
READ (IO2,*) AK
READ (IO2,*) CP
READ (IO2,*) P0
READ (IO2,*) R0
READ (IO2,*) F
READ (IO2,*) A
READ (IO2,*) CFL
READ (IO2,*) TK

38
READ (IO2,*) L
READ (IO2,*) DX
READ (IO2,*) MODE
READ (IO2,*) SC
READ (IO2,*) OR
CLOSE(IO2)
WRITE (*,*) 'k=', AK, 'Cp=', CP
WRITE (*,*) 'L=',L
WRITE (*,*) 'Size of cell =',DX
WRITE (*,*) 'Physical time t =',TK
WRITE (*,*) 'Frequency of piston =',F
WRITE (*,*) 'Amplitude of piston =', A
RM = CP*(1.0-1.0/AK)
CV = CP-RM
C0 = SQRT(AK*P0/R0)
DT = CFL*DX/(2*PI*F*A+C0)
NT = TK/DT
N = L/DX
WRITE (*,*) 'Time step dt =',DT
WRITE (*,*) 'Number of time steps =',NT
WRITE (*,*) 'Number of cell=',N
IF (MODE.EQ.1) THEN
WRITE (*,*) 'Programe uses scheme Rusanov'
ELSE
WRITE (*,*) 'Programe uses scheme Roe'
ENDIF
WRITE (*,*) 'Order of accuracy:', OR

! ALLOCATE ARRAYS
ALLOCATE(X(N+1))
ALLOCATE(S(N+1))
ALLOCATE(UDOT(N+1))
ALLOCATE(CE(N))
ALLOCATE(VO(N))
ALLOCATE(VON(N))
ALLOCATE(U(0:N+1))
ALLOCATE(R(0:N+1))
ALLOCATE(P(0:N+1))
ALLOCATE(E(0:N+1))
ALLOCATE(W(3,0:N+1))
ALLOCATE(WN(3,0:N+1))
ALLOCATE(FF(3,N+1))
PAUSE
! INITIAL CONDITIONS OF PISTON
T = 0.0
X(1) = A + A*COS(2*PI*F*T-PI)
S(1) = 0.1
UDOT = 0.0
DO I=2,N+1
X(I) = (I-1)*(L-X(1))/N + X(1)
S(I) = S(1)+0.1*SC*EXP(-3/(2**(7-20*ABS(X(I)-0.5)))) !Law of canal's width
ENDDO

39
DO I=1,N
CE(I) = (X(I)+X(I+1))/2 !Coordinates of cell's centres
VO(I) = DX*(S(I)+S(I+1))/2 !Volume of cell
ENDDO
P = P0
R = R0
U = 0.0
E = CV*P0/(R0*RM)
!CALCULATION
OPEN(IO1,FILE='contourT.dat')
OPEN(IO2,FILE='contourP.dat')
OPEN(IO6,FILE='contourU.dat')
OPEN(IO3,FILE='contourX.dat')
OPEN(IO4,FILE='monitor50-2.dat')
OPEN(IO5,FILE='monitor99-2.dat')
DO K=1,NT
DO I=1,N
IF (ABS(CE(I)-0.50).LT.((X(I+1)-X(I))/2)) THEN
WRITE(IO4,*) T,U(I),P(I)
ENDIF
IF (ABS(CE(I)-0.99).LT.((X(I+1)-X(I))/2)) THEN
WRITE(IO5,*) T,U(I),P(I)
ENDIF
ENDDO
WRITE(IO3,*) CE
WRITE(IO2,*) P(1:N)
WRITE(IO6,*) U(1:N)
DO I=1,N
WRITE(IO1,*) T
ENDDO
T = DT*K
X(1) = A + A*COS(2*PI*F*T-PI)
UDOT(1) = -2*A*PI*F*SIN(2*PI*F*T-PI)
DO I=1,N+1
X(I) = (I-1)*(L-X(1))/N + X(1)
S(I) = 0.1+0.1*SC*EXP(-3/(2**(7-20*ABS(X(I)-0.5))))
UDOT(I)= (I-1)*(0-UDOT(1))/N + UDOT(1)
ENDDO
DO I=1,N
CE(I) = (X(I)+X(I+1))/2 !Coordinates of cell's centres
VON(I) = DX*(S(I)+S(I+1))/2 !Volume of cell
ENDDO
! CALCULATION FLOW VECTORS IN FACES
DO J=1,N+1
CALL TVD_SCHEME(P,PF,J,OR,N)
CALL TVD_SCHEME(U,UF,J,OR,N)
CALL TVD_SCHEME(R,RF,J,OR,N)
IF (MODE.EQ.1) THEN
CALL
RUSANOV_SCHEME(AK,CP,CV,RM,PF,RF,UF,FF(:,J),UDOT(J))
ELSE

40
CALL
ROE_SCHEME(AK,CP,CV,RM,PF,RF,UF,FF(:,J),UDOT(J))
ENDIF
ENDDO
PRE = P(0)
DO I=1,N
W(1,I) = R(I)
W(2,I) = R(I)*U(I)
E(I) = CV*P(I)/(R(I)*RM)
W(3,I) = R(I)*(E(I)+0.5*U(I)**2)
WN(1,I)=
(W(1,I)*VO(I)-DT*(FF(1,I+1)*S(I+1)-FF(1,I)*S(I)))/VON(I)
DOP = (PRE+P(I+1))*(S(I+1)-S(I))/2
WN(2,I)= (W(2,I)*VO(I)-DT*(FF(2,I+1)*S(I+1)-FF(2,I)*S(I)-
DOP))/VON(I)
WN(3,I)=
(W(3,I)*VO(I)-DT*(FF(3,I+1)*S(I+1)-FF(3,I)*S(I)))/VON(I)
R(I) = WN(1,I)
U(I) = WN(2,I)/R(I)
E(I) = WN(3,I)/R(I)-0.5*U(I)**2
P(I) = (E(I)/CV)*RM*R(I)
PRE = P(I)
ENDDO
U(0) = 2*UDOT(1)-U(1)
P(0) = P(1)
R(0) = R(1)
! U(N+1) = -U(N)
! P(N+1) = P(N)
! R(N+1) = R(N)
VO = VON
C = SQRT(AK*P(N)/R(N))
IF (U(N).GT.0.0) THEN
IF (U(N).LT.C) THEN
U(N+1) = U(N)
P(N+1) = P0
R(N+1) = R(N)
ELSE
U(N+1) = U(N)
P(N+1) = P(N)
R(N+1) = R(N)
ENDIF
ELSE
IF (U(N).LT.C) THEN
U(N+1) = U(N)
P(N+1) = P0*(1+(AK-1)*(U(N)/C)**2/2)**(-AK/(AK-1))
R(N+1) = R0*(1+(AK-1)*(U(N)/C)**2/2)**(-1/(AK-1))
ELSE
U(N+1) = C0
P(N+1) = P0*(1+(AK-1)/2)**(-AK/(AK-1))
R(N+1) = R0*(1+(AK-1)/2)**(-1/(AK-1))
ENDIF
ENDIF

41
ENDDO
CLOSE(IO1)
CLOSE(IO2)
CLOSE(IO3)
CLOSE(IO4)
CLOSE(IO5)
CLOSE(IO6)
! OUTPUT
IF (MODE.EQ.1) THEN
IF (OR.EQ.1) THEN
OutputFile='datarus1.dat'
ELSE
OutputFile='datarus2.dat'
ENDIF
ELSE
IF (OR.EQ.1) THEN
OutputFile='dataroe1.dat'
ELSE
OutputFile='dataroe2.dat'
ENDIF
ENDIF
WRITE(*,*) 'Output fields to file: ',OutputFile
OPEN(IO3,FILE=OutputFile)
WRITE(*,*) 'Time step=',K-1,'Time t=',T
WRITE(IO3,*) 'Time',T
DO I=1,N
WRITE(IO3,*) CE(I),R(I),U(I),P(I),E(I)
ENDDO
CLOSE(IO3)
END PROGRAM PISTON

PROGRAM TUBE
IMPLICIT NONE
CHARACTER(*),PARAMETER:: InputFile='Input1' ! names of input and output files
CHARACTER:: Input*30,OutputFile*15 ! Name of file with input parameters
! CHARACTER FileName*15 ! Name of output file
INTEGER,PARAMETER:: IO1 = 11 ! input unit
INTEGER,PARAMETER:: IO2 = 12 ! input unit
INTEGER,PARAMETER:: IO3 = 13 ! input unit
INTEGER,PARAMETER:: IO4 = 14 ! input unit
REAL::
AK,CP,CV,RM,P1,P2,R1,R2,U1,U2,C1,C2,DT,TK,L,DX,T,DOP,CFL,PRE,SC,C,C0
REAL,PARAMETER:: P0=100000,R0= 1.16
REAL:: PF(2),UF(2),RF(2)
REAL,ALLOCATABLE,DIMENSION(:):: X,CE,S,VO,U,R,P,E
REAL,ALLOCATABLE,DIMENSION(:):: W(:,:),FF(:,:),WN(:,:)
INTEGER:: I,J,K,N,NT,MODE,OR
! READ INPUT FILE *
C0 = SQRT(AK*P0/R0)
WRITE(*,*) 'Read input file: ', InputFile
OPEN (IO1,FILE=InputFile)
READ (IO1,*) Input ! read name of file with

42
CLOSE(IO1)

! READ PARAMETERS FROM INPUT FILES *


OPEN (IO2,FILE=Input)
READ (IO2,*) AK
READ (IO2,*) CP
READ (IO2,*) P1,P2
READ (IO2,*) R1,R2
READ (IO2,*) U1,U2
READ (IO2,*) CFL
READ (IO2,*) TK
READ (IO2,*) L
READ (IO2,*) DX
READ (IO2,*) MODE
READ (IO2,*) SC
READ (IO2,*) OR
CLOSE(IO2)
WRITE (*,*) 'k=', AK, 'Cp=', CP
WRITE (*,*) 'L=',L
WRITE (*,*) 'Size of cell =',DX
WRITE (*,*) 'Right Parameters: '
WRITE (*,*) 'P1=',P1,'R1=',R1,'U1=',U1
WRITE (*,*) 'Left Parameters: '
WRITE (*,*) 'P2=',P2,'R2=',R2,'U2=',U2
WRITE (*,*) 'Physical time t =',TK
RM = CP*(1.0-1.0/AK)
CV = CP-RM
C1 = SQRT(AK*P1/R1)
C2 = SQRT(AK*P2/R2)
DT = CFL*DX/MAX(ABS(U1+C1),ABS(U2+C2))
NT = TK/DT
N = L/DX
WRITE (*,*) 'Time step dt =',DT
WRITE (*,*) 'Number of time steps =',NT
WRITE (*,*) 'Number of cell=',N
IF (MODE.EQ.1) THEN
WRITE (*,*) 'Programe uses scheme Rusanov'
ELSE
WRITE (*,*) 'Programe uses scheme Roe'
ENDIF
WRITE (*,*) 'Order of accuracy:', OR

! ALLOCATE ARRAYS
ALLOCATE(X(N+1))
ALLOCATE(S(N+1))
ALLOCATE(CE(N))
ALLOCATE(VO(N))
ALLOCATE(U(0:N+1))
ALLOCATE(R(0:N+1))
ALLOCATE(P(0:N+1))
ALLOCATE(E(0:N+1))
ALLOCATE(W(3,0:N+1))

43
ALLOCATE(WN(3,0:N+1))
ALLOCATE(FF(3,N+1))
! INITIAL COORDINATE
X(0) = 0
DO I=1,N+1
X(I) = (I-1)*DX
S(I) = 0.1 +0.1*SC*EXP(-3/(2**(7-20*ABS(X(I)-0.5)))) !Law of channel's
width
ENDDO
DO I=1,N
CE(I) = (X(I)+X(I+1))/2 !Coordinates of cell's centres
VO(I) = DX*(S(I)+S(I+1))/2 !Volume of cell
ENDDO
! INITIAL CONDITIONS
DO I=0,N+1
IF (I.LE.(N/2)) THEN
U(I) = U1
P(I) = P1
R(I) = R1
ELSE
U(I) = U2
P(I) = P2
R(I) = R2
ENDIF
ENDDO
PAUSE

!CALCULATION
OPEN(IO4,FILE='monitorroe2-S1.2.dat')
T = 0.0
DO K=1,NT
WRITE(IO4,*) T,U(N/2)
T = DT*K
! CALCULATION FLOW VECTORS IN FACES
DO J=1,N+1
CALL TVD_SCHEME(P,PF,J,OR,N)
CALL TVD_SCHEME(U,UF,J,OR,N)
CALL TVD_SCHEME(R,RF,J,OR,N)
IF (MODE.EQ.1) THEN
CALL
RUSANOV_SCHEME(AK,CP,CV,RM,PF,RF,UF,FF(:,J))
ELSE
CALL ROE_SCHEME(AK,CP,CV,RM,PF,RF,UF,FF(:,J))
ENDIF
ENDDO
PRE = P(0)
DO I=1,N
W(1,I) = R(I)
W(2,I) = R(I)*U(I)
E(I) = CV*P(I)/(R(I)*RM)
W(3,I) = R(I)*(E(I)+0.5*U(I)**2)

44
WN(1,I)=
(W(1,I)*VO(I)-DT*(FF(1,I+1)*S(I+1)-FF(1,I)*S(I)))/VO(I)
DOP = (PRE+P(I+1))*(S(I+1)-S(I))/2
WN(2,I)= (W(2,I)*VO(I)-DT*(FF(2,I+1)*S(I+1)-FF(2,I)*S(I)-
DOP))/VO(I)
WN(3,I)=
(W(3,I)*VO(I)-DT*(FF(3,I+1)*S(I+1)-FF(3,I)*S(I)))/VO(I)
R(I) = WN(1,I)
U(I) = WN(2,I)/R(I)
E(I) = WN(3,I)/R(I)-0.5*U(I)**2
PRE = P(I)
P(I) = (E(I)/CV)*RM*R(I)
ENDDO
U(0) = -U(1)
P(0) = P(1)
R(0) = R(1)
! U(N+1) = -U(N)
! P(N+1) = P(N)
! R(N+1) = R(N)
C = SQRT(AK*P(N)/R(N))
IF (U(N).GT.0.0) THEN
IF (U(N).LT.C) THEN
U(N+1) = U(N)
P(N+1) = P0
R(N+1) = R(N)
ELSE
U(N+1) = U(N)
P(N+1) = P(N)
R(N+1) = R(N)
ENDIF
ELSE
IF (U(N).LT.C) THEN
U(N+1) = U(N)
P(N+1) = P0*(1+(AK-1)*(U(N)/C)**2/2)**(-AK/(AK-1))
R(N+1) = R0*(1+(AK-1)*(U(N)/C)**2/2)**(-1/(AK-1))
ELSE
U(N+1) = C0
P(N+1) = P0*(1+(AK-1)/2)**(-AK/(AK-1))
R(N+1) = R0*(1+(AK-1)/2)**(-1/(AK-1))
ENDIF
ENDIF
ENDDO
CLOSE(IO4)
! OUTPUT
IF (MODE.EQ.1) THEN
IF (OR.EQ.1) THEN
OutputFile='datarus1.dat'
ELSE
OutputFile='datarus2.dat'
ENDIF
ELSE
IF (OR.EQ.1) THEN

45
OutputFile='dataroe1.dat'
ELSE
OutputFile='dataroe2.dat'
ENDIF
ENDIF
WRITE(*,*) 'Output fields to file: ',OutputFile
OPEN(IO3,FILE=OutputFile)
WRITE(*,*) 'Time step=',K-1,'Time t=',T
WRITE(IO3,*) 'Time',T
DO I=1,N
WRITE(IO3,*) X(I),S(I),CE(I),R(I),U(I),P(I),E(I)
ENDDO
CLOSE(IO3)
END PROGRAM TUBE

SUBROUTINE RUSANOV_SCHEME(AK,CP,CV,RM,P,R,U,FLUX,UDOT)
IMPLICIT NONE
REAL AK,CP,CV,RM,P(2),R(2),U(2),UDOT,FLUX(3)
!LOCAL
REAL W(3,2),F(3,2),E(2),H(2),C(2)
!PARAMETERS FOR RUSANOV-SCHEME
REAL SL,SR,S
REAL WF(3),FF(3)
INTEGER:: I,J

!ASSIGN VECTOR W AND VECTOR F


DO I=1,2
W(1,I) = R(I)
W(2,I) = R(I)*U(I)
E(I) = CV*P(I)/R(I)/RM+0.5*U(I)**2
W(3,I) = R(I)*E(I)
F(1,I) = R(I)*U(I)
F(2,I) = R(I)*U(I)**2+P(I)
H(I) = CP*P(I)/R(I)/RM+0.5*U(I)**2
F(3,I) = R(I)*U(I)*H(I)
C(I) = SQRT(AK*P(I)/R(I))
ENDDO
!CALCULATE PARAMETERS FOR RUSANOV-SCHEME
S = MAX(ABS(U(1)-C(1)),ABS(U(2)-C(2)),ABS(U(1)+C(1)),ABS(U(2)+C(2)))
SR = S
SL = -S
!CALCULATE FV AND WF
WF = (SR*W(:,2)-SL*W(:,1)+F(:,1)-F(:,2))/(SR-SL)
FF = (SR*F(:,1)-SL*F(:,2)+SL*SR*(W(:,2)-W(:,1)))/(SR-SL)

!CALCULATE FLUX IN EDGE


IF (SL.GT.UDOT) THEN
FLUX = F(:,1) - UDOT*W(:,1)
ELSEIF (SR.LT.UDOT) THEN
FLUX = F(:,2) - UDOT*W(:,2)
ELSE
FLUX = FF - UDOT*WF

46
ENDIF
END SUBROUTINE

SUBROUTINE ROE_SCHEME(AK,CP,CV,RM,P,R,U,FLUX,UDOT)
IMPLICIT NONE
REAL AK,CP,CV,RM,P(2),R(2),U(2),UDOT,FLUX(3)
!LOCAL
REAL W(3,2),F(3,2),E(2),H(2),C(2)
!PARAMETERS FOR ROE-SCHEME
REAL PF,RF,UF,EF,HF,CF
REAL DF1(3),DF2(3),DF3(3),L(3),WF(3)
INTEGER:: I,J
!ASSIGN VECTOR W AND VECTOR F
DO I=1,2
W(1,I) = R(I)
W(2,I) = R(I)*U(I)
E(I) = CV*P(I)/R(I)/RM+0.5*U(I)**2
W(3,I) = R(I)*E(I)
F(1,I) = R(I)*U(I)
F(2,I) = R(I)*U(I)**2+P(I)
H(I) = (CP*P(I)/R(I)/RM)+0.5*U(I)**2
F(3,I) = R(I)*U(I)*H(I)
ENDDO

!CALCULATE PARAMETERS FOR ROE-SCHEME


RF = SQRT(R(1)*R(2))
UF = (SQRT(R(1))*U(1)+SQRT(R(2))*U(2))/(SQRT(R(1))+SQRT(R(2)))
HF = (SQRT(R(1))*H(1)+SQRT(R(2))*H(2))/(SQRT(R(1))+SQRT(R(2)))
PF = (AK-1.0)*RF*(HF-0.5*UF**2)/AK
CF = SQRT(AK*PF/RF)
EF = CV*PF/RF/RM+0.5*UF**2
!CALCULATE EIGNVALUES
L(1) = MAX(UDOT,UF+CF)-MIN(UDOT,UF+CF)
L(2) = MAX(UDOT,UF)-MIN(UDOT,UF)
L(3) = MAX(UDOT,UF-CF)-MIN(UDOT,UF-CF)
!CALCULATE DF1, DF2, DF3
DF1(1) = L(1)*( (P(2)-P(1))+RF*CF*(U(2)-U(1)))/(2*CF**2)
DF1(2) = L(1)*(((P(2)-P(1))+RF*CF*(U(2)-U(1)))/(2*CF**2))*(UF+CF)
DF1(3) = L(1)*(((P(2)-P(1))+RF*CF*(U(2)-U(1)))/(2*CF**2))*(HF+CF*UF)

DF2(1) = L(2)*( (R(2)-R(1))-(P(2)-P(1))/CF**2)


DF2(2) = L(2)*(((R(2)-R(1))-(P(2)-P(1))/CF**2))*UF
DF2(3) = L(2)*(((R(2)-R(1))-(P(2)-P(1))/CF**2))*UF**2/2

DF3(1) = L(3)*( (P(2)-P(1))-RF*CF*(U(2)-U(1)))/(2*CF**2)


DF3(2) = L(3)*(((P(2)-P(1))-RF*CF*(U(2)-U(1)))/(2*CF**2))*(UF-CF)
DF3(3) = L(3)*(((P(2)-P(1))-RF*CF*(U(2)-U(1)))/(2*CF**2))*(HF-CF*UF)
!CALCULATE FLUX IN FACE
DO I=1,3
FLUX(I) = 0.5*(F(I,1)+F(I,2))-0.5*(DF1(I)+DF2(I)+DF3(I))-
UDOT*0.5*(W(I,1)+W(I,2))
ENDDO

47
END SUBROUTINE

SUBROUTINE TVD_SCHEME(P,PF,J,OR,N)
INTEGER:: OR,N,J
REAL:: P(0:N+1),PF(2)
!LOCAL
REAL R1,R2,ER
ER = 1E-8
IF (OR.EQ.1) THEN
PF(1)=P(J-1)
PF(2)=P(J)
RETURN
ENDIF
!TVD-SCHEME
R1 = (P(J)-P(J-1))/(P(J-1)-P(J-2))
R2 = (P(J)-P(J-1))/(P(J+1)-P(J))
IF (J.EQ.1) THEN
PF(1) = P(J-1)
PF(2) = P(J)-PHI(R2)*(P(J+1)-P(J))/2
ELSEIF(J.EQ.(N+1)) THEN
PF(1) = P(J-1)+PHI(R1)*(P(J-1)-P(J-2))/2
PF(2) = P(J)
ELSE
PF(1) = P(J-1)+PHI(R1)*(P(J-1)-P(J-2))/2
PF(2) = P(J)-PHI(R2)*(P(J+1)-P(J))/2
ENDIF
IF ((P(J-1)-P(J-2)).LT.ER) THEN
PF(1) = P(J-1)
ENDIF
IF ((P(J+1)-P(J)).LT.ER) THEN
PF(2) = P(J)
ENDIF

END SUBROUTINE
! FUNCTION VAN-LEER
REAL FUNCTION PHI(R)
REAL R
IF (R.LT.0.0) THEN
PHI = 0.0
ELSE
PHI = 2*R/(R+1)
ENDIF
RETURN
END

FILE-INPUT1
1.4 ! AK
1005.0 ! CP
100000.0 50000.0 ! P1,P2
1.2 0.6 ! R1,R2
0.0 0.0 ! U1,U2
0.1 ! CFL

48
1.0 !T
1.0 !L
0.002 !dx
2 ! Schemes 1 or 2
1.2 !Scale dentaH/H
2 !ORDER OF ACCURACY

FILE-INPUT2
1.4 ! AK
1005.0 ! CP
100000. ! P0
1.16 ! R0
84.0 ! FREQUENCY
0.01 ! AMPLITUDE
0.05 ! CFL
0.05 !T
1.0 !L
0.005 !dx
2 ! Schemes 1 or 2
1.0 !Scale dentaH/H
2 !ORDER OF ACCURACY

49

Вам также может понравиться