Академический Документы
Профессиональный Документы
Культура Документы
Физико-механический институт
Высшая школа прикладной математики и вычислительной физики
Выполнил
студент гр. 5040301/10201 Ле Мань Дат ___________
Санкт-Петербург
2022
ОГЛАВЛЕНИЕ
I. ФОРМУЛИРОВКА МАТЕМАТИЧЕСКОГО МОДЕЛИ И ЧИСЛЕННОГО
МЕТОДА..................................................................................................................3
1. Численный метод.................................................................................................3
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
( )
2
u
E=ρ +e , (3)
2
3
нормали к рассматриваемой ячейке, элемента расчетной сетки. Для
одномерной декартовой сетки конечно–объемная схема с потоком в
направлении X записывается в виде консервативной схемы (для задачи
течения в канале постоянного сечения):
∆t ⃗
(
F −⃗
)
n+1 n
wi =⃗
⃗ wi − F 1 , (6)
∆ x i + 12 i−
2
⃗ ⃗
где F i+ 12 , F i−12 – численные потоки через границы ячейки i, которые могут быть
{
∂ρ
+¿ ( ρ ⃗
V )=0
∂t
⃗)
∂ (ρ V
+¿ ( ρ ⃗
VV ⃗ + δ kn p ) =0 (7)
∂t
∂( ρE)
+¿ ( ρ V
⃗ H )=0
∂t
Здесь ρ – плотность, ⃗
V –вектор скорости, p – давление, E–полная
{
∂
∭ ρ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
( ( ) )
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
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
A=A
+¿+ A ¿
(17)
λk ±| λk|
где: A± =R Λ± R−1 , Λ± =diad ( λk ± ) , λk ± = . А матрица R является матрицей,
2
составленная из правых собственных векторов как из столбцов.
При этом вектор потока ⃗F расщепляется на:
⃗
F= A ⃗
w =¿ (18)
Основная идея семейства схем расщепления заключается в том, что
векторы потока на гранях расщепляются на несколько слагаемых, которые
определяется матрицей А и векторами ⃗
w двух соседних ячеек. Рассматриваем
(19)
2
F 1=F i
i+
2
7
или:
⃗
D =¿
i+
1
2
(22)
где
δ⃗
± ±
F 1 ≅A 1 δ⃗
w 1 (23)
i+ i+ i+
2 2 2
переменных параметров:
~ρ=√ ρ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.
Где:
)[ ]
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
8
Газодинамическое решение общего вида строится на основе
комбинации элементарных решений, которые отделены друг от друга
областями с постоянными значениями параметров.
Рассмотрим задачу Римана для одномерной гиперболической системы
в консервативном виде, где w – вектор консервативных переменных, ⃗F –
вектор потоков:
w ∂⃗
∂⃗ F
+ =0 (31)
∂t ∂ x
или:
∂ u⃗ ∂ u⃗ −1
+A =0 , A=RΛ R (32)
∂t ∂x
Решается одномерная задача о распаде разрыва – полагается, что при
t=0 две области пространства с различными значениями термодинамических
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 , при 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
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)
где 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 ) (42)
0< , φ j ( r j ) <2
rj
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
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).
14
Стенка неподвижна:
ρ0 =ρ1
u0 =−u1 (47)
p0 =p 1
( ) ( )
−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 [м/с]
Годунов Роу Русанов
Рисунок 10. Результаты расчета вектора потока на гранях для трех разных
схем для первого варианта параметров (ударная волна и волна разрежения)
b) Две волны разрежения:
P 1=100000 [Па], ρ 1=1.16 [кг/м3], P 2=100000[Па], ρ 2=1.16 [кг/м3],
17
Рисунок 11. Результаты расчета вектора потока на гранях для трех разных
схем для второго варианта параметров (две волны разрежения)
c) Две ударных волны:
P 1=100000 [Па], ρ 1=1.16 [кг/м3], P 2=100000[Па], ρ 2=1.16 [кг/м3], u 1=400.0 [м/с],
Рисунок 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 ]
25
На рисунке 18 представлено исследование сеточной сходимости для
сеток размерностью 100, 500 и 1000 для схем Роу и Русанова, время
получения распределения параметров t = t1 = 0.000765097 [c].
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 и
правый открытый торец атмосферу.
29
( (
h=H 1+exp
2
−3
( 7−20|x−5|) ))
30
С целью исследования зависимости собственной частоты колебания
газового столба от отношений высот H/h были проведены расчеты при
случаях: h = 0.22, 0.20, 0.18, 0.16, 0.14, 0.12 и 0.1 [м].
31
При движении поршнем используется метод деформации сетки с
фиксированным числом ячеек. При этом считаем, что в каждом моменте
координаты узлов и скорости грани сетки определяются по линейной
интерполяции. Расчет проведен для схемы Роу второго порядка.
Рассматриваем случай с заданной низкой частоты F = 5 Hz. На рисунке
26 приведены распределения скорости (слева) и давления (справа) газа вдоль
длины канала в моменте t = 0.05 s:
32
ω 2 πF
где: А, B – некоторые константы, k = c = c – волновое число, c 0- скорость
0 0
U =0.01 ω
[ sin ( kx ) cos ( kL )
sin ( kL ) ]
−cos ( kx ) sin ( ωt−π )
33
На рисунке 27 представлены колебания скорости и давления газа в
точках монитора (на середине и на одном конце канала). Заметим, что в этом
случае наблюдены резонансы колебаний. Это можно объяснять тем, в данных
начальных условиях период, за который создаваемое в предыдущем шаге
возмущение дошло до замкнутого конца и отраженно обратно до поршня,
совпадает с периодом колебания внешнего действия (поршня). В силу этого
амплитуда колебаний функций постепенно усиливается по времени.
34
Давление (Па) Скорость (м/c)
Рисунок 29. Развертки скорости и давления газа по времени и пространству
Часть 5 – численное решение для канала переменного сечения,
соответствующего индивидуальному варианту
В пункте 3 было рассмотрено течение газа в канале переменного
сечения при разрыве диафрагмы и была получена его собственная частота.
Пусть в одном (левом) торце канала двигается поршень с такими условиями,
как были применимы для канала постоянного сечения (часть 4).
35
вдоль канала не изменяется заметно. Вогнутый участок графика скорости
возникает из-за формы канала (рисунок 22). Проходя этот участок, газа
расширяется и его скорость должна быть иметь тенденцию уменьшения.
Проводим расчеты для канала при частоте колебаний поршня F = 84
Hz, которое совпадает с собственной частоты. На рисунке 31 приведены
изменения скорости и давления газа в точках монитора X = 0.5 [м] и X = 0.99
[м].
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)
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)
! 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
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
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