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

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

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

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


«Механика гетерогенных сред»
Моделирование движения пробной частицы в стационарном
потоке вязкой несжимаемой жидкости

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

Проверил Колесник Е.В. ___________


Махнов А.В

«___» __________ 2022 г.

Санкт-Петербург
2022
Оглавление

1. Постановка задачи. Расчёт полей течения несущей фазы. Исследование


сеточной сходимости решения...............................................................................3
2. Формулировка математической модели для задачи о движении пробной
частицы в поле течения вязкой несжимаемой жидкости....................................7
2.1 Уравнение движения, замыкающие соотношения для описания
силового взаимодействия частицы с потоком..................................................7

2.2 Модели столкновения со стенкой................................................................9

3. Основные алгоритмы, обеспечивающие связь расчета поля течения


несущей фазы с расчетом движения частицы....................................................11
3.1 Алгоритм определения ячейки, в которой находится частица...............11

3.2 Алгоритм определения пересечения траектории движения частицы с


границами...........................................................................................................12

4. Численные методы для решения системы уравнений движения частицы.. 14


4.1 Численная схема продвижения по времени..............................................14

4.2 Численные методы для расчета силового взаимодействия.....................15

5. Описание реализованной программы и ее блок схема..................................16


6. Результат исследований....................................................................................17
6. Заключение........................................................................................................27
7. Приложения.......................................................................................................28
Список литературы...............................................................................................41

2
1. Постановка задачи. Расчёт полей течения несущей фазы.
Исследование сеточной сходимости решения.

В данной работе рассматривается течение в U-образном канале


(рисунок 1) со следующими параметрами:

Рис. 1. Схема U-образного канала

 Размеры (в сантиметрах): H = 4, L = 20, a1 = 5, a2 = 6, b1 = 5


 Физические свойства среды: ρc = 1.25 кг/м3, μc = 0.02 мПа.с (воздух)
 Скорость потока на входе: V = 4 см/с (Re = 100)
 Плотность материала частицы: ρd = 2000 кг/м3 (песок)

На искривленном участке стенки канала представляют собой дуги


эллипсов: для внутренней стенки полуоси эллипса равны a1 и b1, для внешней
стенки a2 и (b1+H).
По данной схеме в программе FLOS был построена расчетная сетка
(рисунок 2). Вдоль каждого прямого участка стенки (нижняя и верхняя части)
был задан 51 узел без сгущения. На эллиптических стенках вдоль канала был
задан 41 узел со сгущением к середине поворота. На входе и выходе
количество узлов равно 17.

3
Рис. 2. Расчетная сетка

Расчет был проведен со схемой QUICK, методом AC/SIMPLEC и


числом Куранта CFL = 0.1.

Рис 3. Сходимость решения

4
Рис 4. Полученные поля модуля скорости (слева) и давления (справа)

На рисунке 4 представлены стационарные поля модуля скорости и


давления течения вязкой несжимаемой жидкости. Изначально число
Рейнольдса было специально установлено достаточно большим, чтобы было
получено течение с областью рециркуляции. Видим, что в полученном
течении после поворотного участка обнаружена требуемая область (область
рециркуляции). С данным полем течения в дальнейшем будем исследовать
поведение пробной частицы при различных начальных условиях.
Для исследования сеточной сходимости исходная сетка была
измельчена в два раза по каждому направлению. Сечение, в котором
проведено сравнение, находится на стыке между верхним прямым и
поворотным участками. Результат исследования приведен на рисунке 5.
Максимальное отклонение между результатами около 1%, при этом
измельченная сетка требует больше вычислительных ресурсов, а выигрыш в
точности решения минимален. Таким образом, исходная сетка оказывается
наиболее предпочтительной для решения данной задачи.

5
Рис 5. Проверка сеточной сходимости

6
2. Формулировка математической модели для задачи о движении
пробной частицы в поле течения вязкой несжимаемой жидкости.

В данной работе использован дискретно-траекторный метод пробных


частиц (лагранжев подход) для моделирования движения одной частицы в
подвижной среде другой фазы. В качестве лагранжевых координат
индивидуальной частицы используется время t движения частицы вдоль
траектории и радиус-вектор r p 0 точки начала траектории частицы.

2.1 Уравнение движения, замыкающие соотношения для описания


силового взаимодействия частицы с потоком.

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


следующим уравнением:

d⃗vp
mp =⃗
F (1)
dt
Левая часть этого уравнения представляет силу инерции частиц, правая часть
отражает влияние различных силовых факторов.
Движение частицы в общем случае определяется действием силы
тяжести и гидродинамических сил, обусловленных взаимодействием частицы
с газом. Учет силы тяжести необходим, если скорость витания частицы и
скорость потока являются величинами одного порядка. В высокоскоростных
потоках силой веса обычно пренебрегается. В рамках данной работы
рассматриваются действия гидродинамических сил, таких как, силы Стокса,
силы плавучести, силы Магнуса, Сэффмена, присоединённых масс и силы
Бассе. И так, правую часть уравнения (1) можно записать в виде:


F =⃗
FD+ ⃗
F bouyancy + ⃗
F Mag ,i + ⃗
F Saff ,i + ⃗
F add + ⃗
F Basset ,i ,
mass (2)

где:
7
⃗ 1
 F D = C D ρg S m|⃗ v p| ( ⃗v g−⃗v p ) – cила Стокса, действующая со стороны
v g− ⃗
2

потока на частицу. Она учитывает скорость частицы относительно


потока. Коэффициент C D =f ∙ 24 /R p
f =1+0.179 √ R p +0.013 R p
d p ρ g|⃗v g −⃗v p|
Rp= ,
μ
−4
 ⃗F bouyancy= 3 π r p ⃗
3
∇p – сила плавучести (или сила Архимеда),

учитывающая перепад давления в несущей среде.


3
−π d p
 ⃗F Mag ,i = ρ g ( ⃗v g −⃗v p ) × ( ⃗ ω p)
ω g−⃗ – cила Магнуса, обусловленная
8
вращением частиц
6.46 ∙ √ 2 2
ω g| [ ( ⃗v g −⃗v p ) × ω
⃗g ]
−1/ 2
 ⃗F Saff , i= 4 ∙ d p ( μ g ρg ) |⃗
1/ 2
– сила Сеффмана,

обеспеченная поперечным градиентом скорости несущей фазы.

( )
2 3 d ⃗v p
 ⃗F add =− 3 π r p ρg dt
mass
– сила присоединённых масс, учитывающая

движение жидкости, вокруг частицы, вызванное ускорением самой


частицы
d
t ( ⃗v p−⃗v g )
 ⃗F 3 2 dt' - сила Бассе, учитывающая
Basset ,i = d p √ π ρ g μ g∫ dt'
2 0 √t−t '

предысторию движения частицы (из-за нестационарности вязкого слоя


смешения вокруг частицы) и дополнительное сопротивление движения
частицы со стороны жидкости, вызванное изменением её
относительной скорости.
Уравнение движения (1) дополняется кинетическим соотношением,
позволяющем вычислить радиус-вектор центра масс частицы.

d r⃗p
=⃗v p (3)
dt

8
Уравнение изменения угловой скорости вращения частицы
записывается в виде:

d⃗
ωp
M =I , (4)
dt

где M – момент аэродинамической силы, а I – момент инерции.


Момент инерции для сферической частицы можно определить по
формуле:

1
I= π d 5p ρ p , (5)
60

Момент аэродинамической силы:


1
C ρ π d p|⃗ ω P|( ⃗
5
M= ω g−⃗ ωP ) ,
ω g −⃗ (6)
64 L g

64 μ
где С L = R , Rω=d p|ω ω P| g
2
⃗ g −⃗
ω ρ g

2.2 Модели столкновения со стенкой.

2.2.1 Зеркальное отражение.

При описании жесткого столкновения частицы со стенкой


рассматривается 2 компоненты вектора скорости частицы. Первая
компонента – нормальная, направлена перпендикулярно к стенке, вторая
компонента – тангенциальная, направлена по касательной к стенке. V n=⃗v ∙ n⃗ ,
V τ =⃗v ∙ ⃗τ . После столкновения тангенциальная компонента остаётся
неизменной, а нормальная меняет знак. Вращение частицы прекращается.
Скорости по модулю остаются неизменными. Таким образом, для расчёта x-
и y-компонент скорости, используются следующие выражения
9
v x '=V τ τ x −V n n x

v y ' =V τ τ y −V n n y

ω ' =0

Данную модель также следует использовать для описания прохождения


частицы через плоскость симметрии. При этом направление вращения
частицы меняет знак.

2.2.2 Отражение с потерей скорости и вращением.

Для описания упругого взаимодействия частиц используется следующая


модель:

( )
M p2
Для скорости ⃗
v 1 '=⃗ ⃗ ) n⃗ + 2 |⃗
v 1 − ( 1+e ) ( ⃗n ∙ U U ct|⃗t , где ⃗
v 1 ' - скорость
7 M p1+ M p2

после столкновения, а ⃗
v1 – до столкновения; e=0.7 – коэффициент

восстановления, индексы 1 и 2 относятся к разным частицам; ⃗


U =⃗ v1 –
v 2−⃗

относительная скорость частиц до столкновения. ⃗ ⃗ c −( ⃗


U ct =U U c ∙ ⃗n ) ⃗n, a
⃗ ⃗ + r1 ⃗
U c =U ω2 × n⃗ .
ω1 × ⃗n +r 2 ⃗

5 ⃗ M p2
Для вращения ⃗
ω1 '=⃗
ω1−
7 r1
|U ct|( n⃗ × t⃗ )
M p1+ M p2
. При моделировании

взаимодействия частицы со стенкой считаем стенку как “второй частицы”.


Его масса M p2 принимается равной бесконечности, соответственно,
M p2
отношение M + M =1.
p1 p2

10
3. Основные алгоритмы, обеспечивающие связь расчета поля
течения несущей фазы с расчетом движения частицы.

3.1 Алгоритм определения ячейки, в которой находится частица.

При движении в канале на разных временных шагах пробная частица


попадает в разных ячейках. Зная координаты ячейки, в которой находится
частица, можем определять параметры несущей среды в точке нахождения
частицы (скорость, давление…). Определение координат ячейки реализуется
путем сравнения суммарной площади треугольников, вершинами которых
являются вершины ячейки и самой пробной частицей.
На каждом временном шагом сравнение проводится для всех ячейки.
Если суммарная площадь образовавшихся треугольников примерно равна
площади ячейки, то это ячейка, содержащая частицу. Схема алгоритма
представлена на рисунке 6. Когда частица находится в точке p1, алгоритм
выдаст результат, что ячейка (I, J) является искомой. В другом случае точка
p2 будет считаться за пределами ячейки (I,J).

p2
p1 (I, J)

Рисунок 6. Способ определения ячейки, в которой находится частица

11
3.2 Алгоритм определения пересечения траектории движения частицы
с границами.

При движении частица не должна выходить за пределы


рассматриваемого канала. Это обеспечивается алгоритмом “проверки
границы” в конце каждого временного шага.
Изначально нужно узнать в какой ячейке будет располагаться частица
на следующем временном шаге. Если не найдена ячейка, соответствующая
критерию, описанному в пункте 3.1, то частица в следующем шаге улетит за
границу канала.
На приведенной ниже рисунке изображена схема нахождения точки, в
которой траектория частицы пересечет границу канала. Для каждых двух
узлов на границе записывается линейное уравнения в векторной форме:

r⃗ =⃗r I + ( ⃗r I +1−⃗r I ) ∙u
(7)

Пусть сначала частица находится в точке с вектором-радиусом ⃗p1 и на


следующем временном шаге будет в точке - ⃗p ' . Уравнение траектории между
двумя точками имеет вид:

⃗p=⃗p1 + ( ⃗p ' −⃗p1 ) ∙t


(8)

⃗p '

r⃗ I r⃗ I+1
⃗p2
p1 (I, J)

⃗p1

Рисунок 7. Способ определения точки пересечения траектории с границей


канала.
12
В случае уравнения (7) и (8) пересекаются с параметрами t ,u ∈ [ 0,1 ],
точка пересечения находится на траектории p1 p ' . В противном случае,
считаем, что траектория не пересекает границу канала (например, начальное
положение в точке p2).

13
4. Численные методы для решения системы уравнений движения
частицы.

4.1 Численная схема продвижения по времени.

В рамках двумерной задачи данной работы уравнения поступательного


и вращательного движения частиц (1), (3) и (4) можно записать в
сокращённой форме:

d⃗
X ⃗
=F , (9)
dt

где:

() ( )
x u
y v

X= u и ⃗
F = F x /m p ,
v F y /m p
ω M z/ I

и: x, y – координаты пробной частицы; u, v – составляющие продольная и


поперечная скорости; ω – угловая скорость; F x , F y – составляющие
продольная и поперечная силы; M z – момент силы; m p, I – масса и момент
инерции частицы.
При использовании явной схемы Адамса – Башфорта второго порядка
дискретизация дифференциального уравнения (9) выражается таким образом:


X n+1=⃗ ( 3 ⃗ 1⃗
X n+ ∆ t ∙ F − F
2 n 2 n−1),
(10)

где n – число выполненной итерации, ∆ t – выбранное время продвижения.

14
4.2 Численные методы для расчета силового взаимодействия.

Для расчета составляющих гидродинамических сил и момента силы,


перечисленных в пункте 2.1, были использованы разные характеристики
(скорость, давление…) потока несущей фазы. Однако, кроме параметров,
полученные с помощью пакета FLOS, в соотношениях рассматриваемых сил
входят еще поля градиента давления (gradP) и угловой скорости вихрей (rot ⃗v
). С целю получения этих характеристик потока разработанная программа
дополняется блоками, решающие поля gradP и rot ⃗v по методу конечных
объемов.
Еще одно важное замечание на этапе расчета силовых взаимодействия.
Так как формула силы Бассэ имеет интегральную форму, ее значение нужно
определить путем дискретизации данного интеграла. И так, формула силы
Бассэ:

d
' ( p
t ⃗v −⃗v g )
3 2 dt
F Basset ,i= d p √ π ρ g μ g∫
⃗ '
dt
2 0 √t−t '

можно записывать в виде:

i i−1
3 2
n
( ⃗v p−⃗v g ) −( ⃗v p −⃗v g )
F Basset ,i= d p √ π ρ g μ g ∑
⃗ (11)
n
,
2 i=1 √n ∆t−(i−1)∆ t

где ∆ t – выбранное время продвижения, n – число выполненной итерации


(при n = 0 – начальное условие)

15
5. Описание реализованной программы и ее блок схема.

Программа была написана на языке Fortran с помощью среды Cygwin.


Программа состоит из нескольких основных блоков:
• главный, который читает файлы данных из пакета FLOS и выполняет
итерационный процесс для нахождения траектории пробной частицы
по времени. Он также взаимодействует с остальными блоками.
• готовый блок вычисления геометрических характеристик.
• готовые блоки для вычисления необходимых пространственных
операторов (grapP, rot ⃗v).
• блок, определяющий ячейку, где находится частица на данном
временном шаге.
• блок, в котором рассчитаются составляющие силы и момент силы.
• блок, определяющий точки пересечения траектории частицы с
границей канала (в случае частица улетит за пределы расчетной
области). В нем также реализуется изменения координат и скорости
частицы после столкновения со стенками.
• блок вывода данных.
Исходные коды программы представлены в приложении.

16
6. Результат исследований.

Сначала проведена проверка сходимости решения по величине


временного шага. Для этого были смоделированы траектории частицы
диаметра d p=1.5∙ 10−3 м, соответственно, число Стокса равно:

2
ρp d pV 0
Sk= ≈ 0.833 ,
18 μ g L0

кг
где: ρ p =2000 3 – плотность частицы; μ=2∙ 10−5 Па. с - вязкость несущей среды;
м
V 0=0.04 м /c – скорость потока на входе канала; L0 ≈ 0.6 м – длина канала.

Ниже представлены траектории движения частицы с начальными


условиями: x0 = 0 м, y0 = 0.02 м, u = 0.04 м/c, v = 0 м/c, ω = 0 рад/с. Временные
шаги были выбраны ∆ t=0.1; 0.05 ;0.01 ; 5∙ 10−3 ; 1 ∙10−3 ; 5 ∙10−4 с (рисунок 8).
Судя по траекториям с разными временными шагами, заметим, что
сходимость решения достигается при шаге по времени меньше 5 ∙10−3 с. Для
дальнейших исследований в расчётах задавался шаг по времени ∆ t=5 ∙ 10−3 с .

∆ t=0.1с ∆ t =0.05 с

17
∆ t=0.01с ∆ t=5 ∙10−3 с

−3 −4
∆ t=1 ∙10 с ∆t=5 ∙ 10 с
Рисунок 8. Результат исследования сходимости решения по величине
временного шага

Число Стокса играет важную роль в задаче о движении пробной


частицы. С целью исследования поведения частицы при разных режимах
были найдены траектории движения частиц с разными диаметрами
−4 −4 −4 −3
d p=1∙ 10 ; 5 ∙10 ; 15 ∙10 ; 4 ∙ 10 м, соответственно, числа Стокса равны
−3 −2
Sk=3.7 ∙ 10 ; 9.3 ∙10 ; 0.833 ; 5.925 . На рисунке 9 представлены результаты
моделирования с начальными условиями: x0 = 0 м, y0 = 0.02 м, u = 0.02 м/c, v
= 0 м/c, ω = 0 рад/с.

18
−3 −2
Sk=3.7 ∙ 10 Sk =9.3 ∙10

Sk=0.833 Sk=5.925
Рисунок 9. Траектории движения частицы при разных режимах

По вышеприведенным рисункам заметим, что при режиме с числом


Sk ≪ 1 (равновесный режим) частица двигается без заметных отклонений от

линии тока. При повышении числа Стокса масса частицы увеличивается,


соответственно, увеличивается и инерция частицы и она начинает заметно
отклоняться от движения по линии тока, ударяясь о стенки канала. При Sk ≫ 1
(замороженный режим) наблюдается сложная траектория движения частицы,
так как было затребовано определенное время, чтобы сила сопротивления
потока преодолела инерцию частицы и протолкнула частицу через канал.
На рисунке 10 представлены соответствующие разным режимам
графики зависимости от времени для сил, действующих на частицу.
19
−3 −2
Sk=3.7 ∙ 10 Sk =9.3 ∙10

Sk=0.833 Sk=5.925
Рисунок 10. Действующие на частицу силы (по модулю) как функции
времени

Рассматриваем случаи, при которых частица попадает в области


больших градиентов параметров потока (пограничные слои или области

20
рециркуляции). Для этого были выбраны два разных начальных состояния
частицы:
1. x0 = 0 м, y0 = 0.0395 м, u = 0 м/c, v = 0 м/c.
2. x0 = 0.12 м, y0 = 0.15 м, u = 0 м/c, v = 0 м/c.
Результаты исследования для варианта 1 изображаются на рисунке 11,
графики изменения действующих на частицу сил для данных случаев
представлены на рисунке 12.

Sk=3.7 ∙ 10−3 Sk =9.3 ∙10−2

Sk=0.833 Sk=5.925
Рисунок 11. Траектория движения частицы для варианта 1

21
−3 −2
Sk=3.7 ∙ 10 Sk =9.3 ∙10

Sk=0.833 Sk=5.925
Рисунок 12. Действующие на частицу силы (по модулю) как функции
времени

Заметим, что при движении в области с поперечным градиентом


скорости (пограничный слой) на частицу действует сила Сеффмана. Тем

22
более, с увеличением числа Стокса эта сила повышается и заставляет частице
летать вниз и ударяться к нижней стенке канала.
Для исследования движения частицы в зоне рециркуляции начальные
условия были заданы в соответствии с вариантом 2. Результаты исследования
приведены на рисунках. При движении в зоне рециркуляции частица с
меньшим числом Стокса двигается вдоль линий тока и вращается вокруг
центра зоны рециркуляции. При большем числе Стокса частица обладает
большей инерцией и за счёт этого быстрее выходит из зоны рециркуляции.
Важно подчеркнуть, что в замороженным режиме наблюдено заметные
действия сил Магнуса и Сеффмана (графики зависимость сил по времени на
рисунке 14).

Sk=3.7 ∙ 10−3 Sk =9.3 ∙10−2

Sk=0.833 Sk=5.925
Рисунок 13. Траектория движения частицы для варианта 2
23
Sk=3.7 ∙ 10−3 Sk =9.3 ∙10−2

Sk=0.833 Sk=5.925
Рисунок 14. Действующие на частицу силы (по модулю) как функции
времени

В следующей части исследования начальные условия были заданы


таким образом, чтобы траектория частицы включала значительное
количество столкновений со стенками. Для этих вариантов было проведено
исследование влияния типа граничных условий: модель жесткого упругого

24
отражения и модель с коэффициентом восстановления 0.7 и учетом
вращения. На рисунках 15 и 16 приведены результаты исследования для
случаев с начальными условиями: x0 = 0 м, y0 = 0.02 м, u = 0.01 м/c, v = 0.05
м/c (при Sk = 0.833 и Sk = 5.925). Заметим, что в случаях с учетом
коэффициента восстановления и вращения количество столкновений заметно
уменьшается. Траектории движения становятся более искривленными, так
как вращение частицы после столкновения порождает силу Магнуса,
действующую поперечно относительно направления движения самой
частицы.

Sk=0.833 Sk=5.925
Модель жесткого упругого отражения

Sk=0.833 Sk=5.925
Модель с коэффициентом восстановления 0.7 и учетом вращения

25
Рисунок 15. Исследование влияния модели отражения в случаях с большим
числом столкновений

Sk=0.833 Sk=5.925
Модель жесткого упругого отражения

26
Sk=0.833 Sk=5.925
Модель с коэффициентом восстановления 0.7 и учетом вращения
Рисунок 16. Действующие на частицу силы (по модулю) как функции
времени

27
6. Заключение

В ходе работы были произведены моделирования и исследования


движения пробной частицы в U-образном канале дискретно-траекторным
методом. В работе также использованы пространственные операторы,
вычисленные по методу конечных объемов, для расчета силового
взаимодействия. Выучил основные алгоритмы на языке Фортран в области
вычислительной гидродинамики и механике гетерогенных сред. Исследовал
двухфазного течения при разных режимах, соответствующие разным числам
Стокса. При режиме Sk << 1 (равновесный режим) частица двигается вдоль
линиям тока, при этом сила сопротивления (сила Стокса) является
доминирующей. При повышении числа Sk, масса (инерция) частицы
увеличивается, частицы начинают отрываться из линий тока, ударяясь о
стенке канала. Увеличение диаметра и объема частицы также приводит к
возникновению других составляющих сил, такие как силы Сеффмана и
Магнуса, особенно когда частица двигается в характерных областях
(пограничный слой и зона рециркуляцию).

28
7. Приложения

Коды из Фортрана:
MAIN
Program Main

character(*), parameter:: InputFile='input.txt',OutputFile='data.plt' ! names of input and output


files
character MeshFile*30, Solution*30,ctmp ! name of file with computational mesh
REAL,allocatable,dimension(:,:):: X, Y, P, CellVolume,rotV,V_P,V_G !scalar arrays
REAL,allocatable,dimension(:,:,:):: CellCenter, IFaceCenter, IFaceVector, JFaceCenter,
JFaceVector, GradP, V ! vector arrays
REAL::rtmp, ro1, ro2, mu, dp, x0, y0, u0, v0, w0, dt, Vref, Lref,Sk,FX0,FY0,MZ0
REAL:: X_M,Y_M,U_M,V_M,W_M,X_M1,Y_M1,U_M1,V_M1,W_M1,FX,FY,MZ
INTEGER :: it, Niter, NT, IP, JP, JP1, IP1,ST,MO

!=== READ INPUT FILE ===


WRITE(*,*) 'Read input file: ', InputFile
OPEN(1,FILE='input.txt')
READ(1,*) MeshFile ! read name of file with computational mesh
READ(1,*) Solution ! read name of solution file
CLOSE(1)

!=== READ NODES NUMBER (NI,NJ) FROM FILE WITH MESH ===
WRITE(*,*) 'Read nodes number from file: ', MeshFile
OPEN(1,FILE = MeshFile)
READ(1,*) NI,NJ,rtmp
WRITE(*,*) 'NI, NJ = ',NI,NJ

!=== ALLOCATE ALL ARRAYS ===


WRITE(*,*) 'Allocate arrays'
allocate(X(NI,NJ)) ! mesh nodes X-coordinates
allocate(Y(NI,NJ)) ! mesh nodes Y-coordinates
allocate(P(0:NI,0:NJ)) ! Pressure
allocate(CellVolume(NI-1,NJ-1)) ! Cell Volumes
allocate(CellCenter(0:NI,0:NJ,2)) ! Cell Centers
allocate(IFaceCenter( NI,NJ-1,2)) ! Face Centers for I-faces
allocate(IFaceVector( NI,NJ-1,2)) ! Face Vectors for I-faces
allocate(JFaceCenter( NI-1,NJ,2)) ! Face Centers for J-faces
allocate(JFaceVector( NI-1,NJ,2)) ! Face Vectors for I-faces
allocate(GradP(0:NI,0:NJ,2)) ! Vector Gradient P
allocate(V(0:NI,0:NJ,2))
allocate(rotV(0:NI,0:NJ))

!=== READ GRID ===


WRITE(*,*) 'Read mesh from file: ', MeshFile
READ(1,*) ((X(I,J),Y(I,J),rtmp,I=1,NI),J=1,NJ)

29
CLOSE(1)

!=== CALCULATE METRIC ===


WRITE(*,*) 'Calculate metric'
Call
B_CalcMetric(NI,NJ,X,Y,CellCenter,CellVolume,IFaceCenter,IFaceVector,JFaceCenter,JFaceV
ector)

!=== READ SOLUTION ===


WRITE(*,*) 'Read solution data from file solution: '
OPEN(1,FILE=Solution)
READ(1,*) ctmp
READ(1,*) ctmp
READ(1,*) ((rtmp,rtmp,V(I,J,1),V(I,J,2),rtmp,P(I,J),rtmp,rtmp,I=0,NI),J=0,NJ)
CLOSE(1)

!=== CALCULATE GRADIENT ===


WRITE(*,*) 'Calculate gradient'
Niter=100
GradP=0.0
DO it=1,Niter
Call
B_CalcGradient(NI,NJ,P,GradP,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JF
aceVector)
Enddo

!=== CALCULATE ROTOR ===


WRITE(*,*) 'Calculate Rotor'
Call
B_CalcRotor(NI,NJ,V,RotV,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JFace
Vector)

!=== READ PARAMETERS FOR PARTICLE===


WRITE(*,*) 'Read Parameters for particle from file: '
OPEN(1,FILE='input_particle.txt')
READ(1,*) ro1,ro2
READ(1,*) mu
READ(1,*) dp
READ(1,*) x0,y0
READ(1,*) u0,v0
READ(1,*) w0
READ(1,*) dt
READ(1,*) NT
CLOSE(1)

! FOR BASSE FORCE


ALLOCATE(V_P(0:NT,2),V_G(0:NT,2))

!===NUMBER STOKES
Vref=0.04

30
Lref=0.6
Sk=ro2*dp**2*Vref/(18*mu*Lref)

WRITE(*,*) 'PARTICLE: ', 'd=', dp, 'ro=', ro2


WRITE(*,*) 'Stokes numbers Sk=', Sk
WRITE(*,*) 'Interation process: ', 'NT=', NT, 'dt=', dt
WRITE(*,*) 'Enter reflection model (1 OR 2): '
READ(*,*) MO

!=== CACULATION COORDINATES OF PARTICLE===


x_m = x0
y_m = y0
u_m = u0
v_m = v0
w_m = w0
FX=0.0
FY=0.0
MZ=0.0

OPEN(1,FILE='output_particle.txt')
WRITE(1,*) 'it,t,x,y,u,v,w,Fx,Fy,Mz'

!FORCES
OPEN(2,FILE='force.txt')
WRITE(2,*) 'it,t,fd,fa,fm,fc,fad,fb,mz'

DO IT=0,NT
! LOCATION
CALL C_Location(x_m,y_m,NI,NJ,X,Y,CellVolume,IP,JP)

FX0=FX
FY0=FY
MZ0=MZ
! FOR BASSE FORCE
V_P(IT,1)=U_M
V_P(IT,2)=V_M
V_G(IT,:)=V(IP,JP,:)
! CALCULATE FORCES AND MOMENTS ===
CALL
C_FORCE(RO1,RO2,MU,DP,U_M,V_M,W_M,V_P,V_G,FX,FY,MZ,DT,IT,NI,NJ,IP,JP,V,GR
ADP,ROTV,NT)

WRITE(1,*) it, it*dt, x_m, y_m, u_m, v_m, w_m, Fx, Fy, Mz
WRITE(*,*)
'it=',it,'x=',x_m,'y=',y_m,'IP=',IP,'JP=',JP,'u=',u_m,'v=',v_m,'w=',w_m,'Fx=',Fx,'Fy=',Fy,'Mz=',Mz

x_m1 = x_m + dt*(3/2.*U_M-1/2.*U0)


y_m1 = y_m + dt*(3/2.*V_M-1/2.*V0)
u_m1 = u_m + dt*(3/2.*FX-1/2.*FX0)
v_m1 = v_m + dt*(3/2.*FY-1/2.*FY0)
w_m1 = w_m + dt*(3/2.*MZ-1/2.*MZ0)

31
! CHECK BOUNDARY
! CORRECT x_m1,y_m1,u_m1,v_m1,w_m1
CALL C_Location(x_m1,y_m1,NI,NJ,X,Y,CellVolume,IP1,JP1)
IF(IP1.EQ.-1.AND.JP1.EQ.-1) THEN
CALL
C_BOUNDARY(X,Y,JFACEVECTOR,NI,NJ,X_M,Y_M,U_M,V_M,W_M,X_M1,Y_M1,U_M
1,V_M1,W_M1,IP1,JP1,ST,MO,DP,RO2)
IF ((ST.EQ.3).OR.(ST.EQ.4)) THEN
WRITE(*,*)'PARTICLE LEFT CHANNEL THROUGH', ST
EXIT
ENDIF
ENDIF

X_M = X_M1
Y_M = Y_M1
U0 = U_M
V0 = V_M
U_M = U_M1
V_M = V_M1
W_M = W_M1

ENDDO
CLOSE(1)
CLOSE(2)

!=== OUTPUT FIELDS ===


WRITE(*,*) 'Output fields to file: ', OutputFile
Open(1,FILE=OutputFile)
Call B_OutputFields(NI,NJ,X,Y,P,V,GradP,rotV)
Close(1)

END PROGRAM Main

GEOMETRY

SUBROUTINE
B_CalcMetric(NI,NJ,X,Y,CellCenter,CellVolume,IFaceCenter,IFaceVector,JFaceCenter,JFaceV
ector)
REAL X(NI,NJ),Y(NI,NJ),& ! input: nodes coordinates
CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),& ! output: cell centers and volumes
IFaceCenter( NI,NJ-1,2),IFaceVector(NI,NJ-1,2),& ! ace centers and vectors for I-faces
JFaceCenter( NI-1,NJ,2),JFaceVector(NI-1,NJ,2) ! face centers and vectors for J-faces
REAL r(2)
!=== FACE CENTERS AND FACE VECTORS ===
! I-DIRECTION
DO J = 1,NJ-1
DO I = 1,NI
r(1) = X(I,J+1) - X(I,J) ! r = vector from one node to another
r(2) = Y(I,J+1) - Y(I,J)
IFaceVector(I,J,1) = r(2) ! IFaceVector = r rotated on 90 degree
IFaceVector(I,J,2) =-r(1) ! IFaceVector directed to increasing I-index
IFaceCenter(I,J,1) = 0.5*(X(i,j)+x(i,j+1))
32
IFaceCenter(I,J,2) = 0.5*(Y(i,j)+Y(i,j+1))
ENDDO
ENDDO

! J-DIRECTION
DO J = 1,NJ
DO I = 1,NI-1
r(1) = X(I+1,J) - X(I,J) ! r = vector from one node to another
r(2) = Y(I+1,J) - Y(I,J)
JFaceVector(I,J,1) =-r(2) ! JFaceVector = r rotated on -90 degree
JFaceVector(I,J,2) = r(1) ! JFaceVector directed to increasing J-index
JFaceCenter(I,J,1) = 0.5*(X(i,j)+x(i+1,j))
JFaceCenter(I,J,2) = 0.5*(Y(i,j)+Y(i+1,j))
ENDDO
ENDDO

!=== CELL VOLUMES ===


DO J = 1,NJ-1
DO I = 1,NI-1
r(1)=X(I+1,J+1) - X(I,J)
r(2)=Y(I+1,J+1) - Y(I,J)
!norm2(cross_product())
CellVolume(I,J) = 0.5*DOT_PRODUCT(IFaceVector(I,J,:),r)& ! sum surfaces of two
triangles
+ 0.5*DOT_PRODUCT(JFaceVector(I,J,:),r)
ENDDO
ENDDO

!=== CELL CENTERS ===


! FOR INNER CELLS: CENTER OF CONTOUR (sum of FaceCenter*FaceLength/Perimeter)
DO J = 1,NJ-1
DO I = 1,NI-1
CellCenter(I,J,:) = ( IFaceCenter(I ,J,:)*Norm2(IFaceVector(I ,J,:))+&
IFaceCenter(I+1,J,:)*Norm2(IFaceVector(I+1,J,:))+&
JFaceCenter(I,J ,:)*Norm2(JFaceVector(I,J ,:))+&
JFaceCenter(I,J+1,:)*Norm2(JFaceVector(I,J+1,:)) )&
/( Norm2(IFaceVector(I,J,:))+Norm2(IFaceVector(I+1,J,:))+&
Norm2(JFaceVector(I,J,:))+Norm2(JFaceVector(I,J+1,:)) )
ENDDO
ENDDO

! FOR DUMMY CELLS ON BOUNDARIES: CELL CENTER = FACE CENTER! I-


BOUNDARIES -----------------------------------------------------
DO NBOUND = 1,2
IF (NBOUND.EQ.1) THEN
IBOUND = 1; IOUT = 0
ELSE
IBOUND = NI; IOUT = NI
ENDIF
DO J = 1,NJ-1
CellCenter(IOUT,J,:) = IFaceCenter(IBOUND,J,:)

33
ENDDO
ENDDO

! J-BOUNDARIES -----------------------------------------------------
DO NBOUND = 1,2
IF (NBOUND.EQ.1) THEN
JBOUND = 1; JOUT = 0
ELSE
JBOUND = NJ; JOUT = NJ
ENDIF
DO I = 1,NI-1
CellCenter(I,JOUT,:) = JFaceCenter(I,JBOUND,:)
ENDDO
ENDDO

END SUBROUTINE

CALCULATION GRADIENT

Subroutine
B_CalcGradient(NI,NJ,P,GradP,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JF
aceVector)
INTEGER NI,NJ
REAL P(0:NI,0:NJ), GradP(0:NI,0:NJ,2)

REAL CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),&
IFaceCenter(NI,NJ-1,2),IFaceVector(NI,NJ-1,2),&
JFaceCenter(NI-1,NJ,2),JFaceVector(NI-1,NJ,2)
! local
INTEGER I,J,I1,J1
REAL VOL,RC(2),RF(4,2),SF(4,2),NCELL(4,2),PFace, GP(2), RN(2),PE,GPE(2),RE(2)
! Cell Centers
Do I=1,NI-1
Do J=1,NJ-1
!Coordinates of the cell Centers, which surround the Cell Cennter under consideration
NCEll(1,:)=[I-1,J]
NCELL(2,:)=[I,J-1]
NCELL(3,:)=[I+1,J]
NCELL(4,:)=[I,J+1]
! Coordinates of the centers of the surroungding facecs
RF(1,:)=IFaceCenter(I,J,:)
RF(2,:)=JFaceCenter(I,J,:)
RF(3,:)=IFaceCenter(I+1,J,:)
RF(4,:)=JFaceCenter(I,J+1,:)
! Vectors at Face Centers
SF(1,:)=-IFaceVector(I,J,:)
SF(2,:)=-JFaceVector(I,J,:)
SF(3,:)=IFaceVector(I+1,J,:)
SF(4,:)=JFaceVector(I,J+1,:)
! Vollume & Coordinate of Centers
VOL=CellVolume(I,J)
RC(:)=CellCenter(I,J,:)

34
! Pressure at Face Centers
GP(:)=0
Do IFace=1,4
I1=NCELL(IFace,1)
J1=NCELL(IFace,2)
RN(:)=Cellcenter(I1,J1,:)
PE=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-RF(IFace,:)),P(I,J),P(I1,J1))
RE(1)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),RC(1),RN(1))
RE(2)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),RC(2),RN(2))
GPE(1)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),GRadP(I,J,1),GradP(I1,J1,1))
GPE(2)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),GRadP(I,J,2),GradP(I1,J1,2))
PFace=PE+Dot_product(RF(IFace,:)-RE(:),GPE(:))
GP(:)=GP(:)+PFace*SF(IFace,:)
ENDDO

! Count Gradient at Cell Centers


GradP(I,J,:)=GP(:)/VOL
ENDDO
ENDDO
End Subroutine
Function RlinearInterp(d1,d2,x1,x2)
REAL D1,D2,X1,X2
RlinearInterp = (x1*d2+x2*d1)/(d1+d2)
End Function

CALCULATION ROTOR

Subroutine
B_CalcRotor(NI,NJ,V,rotV,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JFace
Vector)
INTEGER NI,NJ
REAL RotV(0:NI,0:NJ), V(0:NI,0:NJ,2)
REAL CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),&
IFaceCenter(NI,NJ-1,2),IFaceVector(NI,NJ-1,2),&
JFaceCenter(NI-1,NJ,2),JFaceVector(NI-1,NJ,2)
! local
INTEGER I,J
REAL VOL,RC(2),RF(4,2),SF(4,2),NCELL(4,2),VFace(4,2)
! Cell Centers
Do I=1,NI-1
Do J=1,NJ-1
!Coordinates of the cell Centers, which surround the Cell Cennter under consideration
NCEll(1,:)=CellCenter(I-1,J,:)
NCELL(2,:)=CellCenter(I,J-1,:)
NCELL(3,:)=CellCenter(I+1,J,:)
NCELL(4,:)=CellCenter(I,J+1,:)
! Coordinates of the centers of the surroungding facecs
RF(1,:)=IFaceCenter(I,J,:)

35
RF(2,:)=JFaceCenter(I,J,:)
RF(3,:)=IFaceCenter(I+1,J,:)
RF(4,:)=JFaceCenter(I,J+1,:)
! Vectors at Face Centers
SF(1,:)=-IFaceVector(I,J,:)
SF(2,:)=-JFaceVector(I,J,:)
SF(3,:)=IFaceVector(I+1,J,:)
SF(4,:)=JFaceVector(I,J+1,:)
! Vollume & Coordinate of Centers
VOL=CellVolume(I,J)
RC(:)=CellCenter(I,J,:)
! Velocity at Face Centers
VFace(1,1)=RLinearInterp(norm2(RC(:)-RF(1,:)),norm2(NCELL(1,:)-
RF(1,:)),V(I,J,1),V(I-1,J,1))
VFace(1,2)=RLinearInterp(norm2(RC(:)-RF(1,:)),norm2(NCELL(1,:)-
RF(1,:)),V(I,J,2),V(I-1,J,2))
VFace(2,1)=RLinearInterp(norm2(RC(:)-RF(2,:)),norm2(NCELL(2,:)-
RF(2,:)),V(I,J,1),V(I,J-1,1))
VFace(2,2)=RLinearInterp(norm2(RC(:)-RF(2,:)),norm2(NCELL(2,:)-
RF(2,:)),V(I,J,2),V(I,J-1,2))
VFace(3,1)=RLinearInterp(norm2(RC(:)-RF(3,:)),norm2(NCELL(3,:)-
RF(3,:)),V(I,J,1),V(I+1,J,1))
VFace(3,2)=RLinearInterp(norm2(RC(:)-RF(3,:)),norm2(NCELL(3,:)-
RF(3,:)),V(I,J,2),V(I+1,J,2))
VFace(4,1)=RLinearInterp(norm2(RC(:)-RF(4,:)),norm2(NCELL(4,:)-
RF(4,:)),V(I,J,1),V(I,J+1,1))
VFace(4,2)=RLinearInterp(norm2(RC(:)-RF(4,:)),norm2(NCELL(4,:)-
RF(4,:)),V(I,J,2),V(I,J+1,2))
! Count Rotor at Cell Centers
RotV(I,J)=0
Do IFace=1,4
RotV(I,J)=RotV(I,J)+(VFace(IFace,2)*SF(IFace,1)-VFace(IFace,1)*SF(IFace,2))/VOL
ENDDO
ENDDO
ENDDO
End Subroutine

CALCULATION LOCATION OF PARTICLE

Subroutine C_Location(x_m1,y_m1,NI,NJ,X,Y,CellVolume,IP,JP)
INTEGER NI, NJ, IP, JP, I, J
REAL x_m1, y_m1, X(NI,NJ), Y(NI,NJ), CellVolume(NI-1,NJ-1), S ,eps
JP=-1
IP=-1
eps=1.0e-15
DO J=1,NJ-1
DO I=1, NI-1
S=
TS(X(I,J),Y(I,J),X(I,J+1),Y(I,J+1),X_m1,Y_m1)+TS(X(I,J),Y(I,J),X(I+1,J),Y(I+1,J),X_m1,Y_
m1)+ &

36
TS(X(I+1,J+1),Y(I+1,J+1),X(I,J+1),Y(I,J+1),X_m1,Y_m1)+TS(X(I+1,J+1),Y(I+1,J+1),X(I+1,J)
,Y(I+1,J),X_m1,Y_m1)
IF (ABS(S-CELLVOLUME(I,J)).LE.eps) THEN
IP=I
JP=J
RETURN
ENDIF
ENDDO
ENDDO
End Subroutine
Function TS(x1,y1,x2,y2,x3,y3) ! Triangular Square
REAL x1,y1,x2,y2,x3,y3,a,b,c,p
a=sqrt((x1-x2)**2+(y1-y2)**2)
b=sqrt((x3-x2)**2+(y3-y2)**2)
c=sqrt((x1-x3)**2+(y1-y3)**2)
p=(a+b+c)/2
TS=sqrt((p-a)*(p-b)*(p-c)*p)
END Function

CHECK BOUNDARY

Subroutine
C_BOUNDARY(X,Y,JFACEVECTOR,NI,NJ,X_M,Y_M,U_M,V_M,W_M,X_M1,Y_M1,U_M
1,V_M1,W_M1,IP1,JP1,ST,MO,DP,RO2)
INTEGER NI,NJ,JP1,IP1,ST,I,J,ICR,MO
REAL X(NI,NJ),Y(NI,NJ)
REAL JFACEVECTOR(NI-1,NJ,2)
REAL X_M1,Y_M1,U_M1,V_M1,W_M1,X_M,Y_M,W_M,U_M,V_M,DP,RO2
REAL XCROS,YCROS

ST=0
!J=1 - WALL ST=1
DO I=1,NI-1
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(I,1),Y(I,1),X(I+1,1),Y(I+1,1),XCROS,YCROS,IC
R)
IF (ICR.EQ.1) THEN
ST=1
CALL
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,J
FACEVECTOR(I,1,:),MO,DP,RO2)
WRITE(*,*) 'PARTICLE CROSS BOUNDARY', ST,'IN
COORDINATES',XCROS,YCROS
RETURN
ENDIF
!J=NJ - WALL ST=2
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(I,NJ),Y(I,NJ),X(I+1,NJ),Y(I+1,NJ),XCROS,YCR
OS,ICR)
IF (ICR.EQ.1) THEN
ST=2

37
CALL
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,J
FACEVECTOR(I,NJ,:),MO,DP,RO2)
WRITE(*,*) 'PARTICLE CROSS BOUNDARY', ST,'IN
COORDINATES',XCROS,YCROS
RETURN
ENDIF
ENDDO
!I=1 - INLET ST=3
DO J=1,NJ-1
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(1,J),Y(1,J),X(1,J+1),Y(1,J+1),XCROS,YCROS,I
CR)
IF (ICR.EQ.1) THEN
ST=3
RETURN
ENDIF
!I=NI - OUTLET ST=4
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(NI,J),Y(NI,J),X(NI,J+1),Y(NI,J+1),XCROS,YCR
OS,ICR)
IF (ICR.EQ.1) THEN
ST=4
RETURN
ENDIF
ENDDO
End Subroutine

SUBROUTINE CROSS_EDGES(AX,AY,BX,BY,CX,CY,DX,DY,XCROS,YCROS,ICR)
REAL AX,AY,BX,BY,CX,CY,DX,DY,YCROS,XCROS
INTEGER ICR
!LOCAL
REAL T,U,EPS,DENOM,NUM_T,NUM_U
REAL P(2),R(2),Q(2),S(2)
EPS=1.0e-15
! LINE AB
P(1)=AX
P(2)=AY
R(1)=BX-AX
R(2)=BY-AY
! LINE BC
Q(1)=CX
Q(2)=CY
S(1)=DX-CX
S(2)=DY-CY
DENOM=R(1)*S(2)-R(2)*S(1)
NUM_T=(Q(1)-P(1))*S(2)-(Q(2)-P(2))*S(1)
NUM_U=(P(1)-Q(1))*R(2)-(P(2)-Q(2))*R(1)
IF (ABS(DENOM).LT.EPS) THEN
IF (ABS(NUM_U).GT.EPS) THEN
RETURN !PARALLEL LINES
ELSE

38
ICR=1
XCROS=BX
YCROS=BY
RETURN
ENDIF
ENDIF
! FIND INTERSECTION
T=NUM_T/DENOM
U=NUM_U/(-DENOM)
IF ((T.LE.(1+EPS).AND.T.GE.-EPS).AND.(U.LE.(1+EPS).AND.U.GT.-EPS)) THEN
ICR=1
XCROS=(P(1)+T*R(1))
YCROS=(P(2)+T*R(2))
ENDIF
END SUBROUTINE

!SUBROUTINE
REFLECT(AX,AY,BX,BY,CX,CY,DX,DY,U_M,V_M,W_M,U_M1,V_M1,W_M1,FACEVEC
TOR)
SUBROUTINE
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,F
ACEVECTOR,MO,DP,RO2)
REAL XCROS,YCROS,X_M1,Y_M1,DP,RO2,X_M,Y_M
REAL U_M,V_M,W_M,U_M1,V_M1,W_M1,FACEVECTOR(2),F(2)
REAL NV(2),TV(2),D,VN,VTAU,MP,I,PI
INTEGER MO

D=SQRT(FACEVECTOR(1)**2+FACEVECTOR(2)**2)
NV(1)=-FACEVECTOR(1)/D !UNIT NORMAL (INNER) VECTOR
NV(2)=-FACEVECTOR(2)/D
TV(1)=-NV(2)
TV(2)=NV(1)
!COORDINATES
XYN=(X_M1-XCROS)*NV(1)+(Y_M1-YCROS)*NV(2)
XYTAU=(X_M1-XCROS)*TV(1)+(Y_M1-YCROS)*TV(2)
X_M1=XYTAU*TV(1)-XYN*NV(1)+XCROS
Y_M1=XYTAU*TV(2)-XYN*NV(2)+YCROS
!VELOCITY
VN=U_M*NV(1)+V_M*NV(2)
VTAU=U_M*TV(1)+V_M*TV(2)
IF (MO.EQ.1) THEN
U_M1=(VTAU*TV(1)-VN*NV(1))
V_M1=(VTAU*TV(2)-VN*NV(2))
W_M1=0.0
ELSE
PI = 3.141592
!MASS
MP = 4.0/3.0*PI*(0.5*DP)**3*RO2
!MOMENT OF INERTIA
I = PI*DP**5*RO2
U_M1 = (VTAU*TV(1)-VN*NV(1))*0.7
V_M1 = (VTAU*TV(2)-VN*NV(2))*0.7

39
F(1) = (U_M1-U_M)*MP
F(2) = (V_M1-UVM)*MP
W_M1 = W_M + ((XCROS-X_M)*F(2)-(YCROS-Y_M)*F(1))/I
ENDIF
END

CALCULATION FORCES

Subroutine
C_FORCE(RO1,RO2,MU,DP,U_M,V_M,W_M,V_P,V_G,FX,FY,MZ,DT,IT,NI,NJ,IP,JP,V,GR
ADP,ROTV,NT)
INTEGER IP,JP,NI,NJ,IT,NT,IB
REAL RO1,RO2,MU,DP,U_M,V_M,W_M,FX,FY,MZ,DT,EPS
REAL GRADP(0:NI,0:NJ,2),V(0:NI,0:NJ,2),ROTV(0:NI,0:NJ),V_P(0:NT,2),V_G(0:NT,2)
REAL VR,REP,PI,F,MP,I,FA(2),FD(2),FG(2),FM(2),FAD(2),FB(2),FC(2)

EPS = 1E-4
PI = 3.141592
!MASS
MP = 4*PI*(0.5*DP)**3*RO2/3
!MOMENT OF INERTIA
I = PI*DP**5*RO2/60
!STOKES FORCE
VR = sqrt((U_M-V(IP,JP,1))**2+(V_M-V(IP,JP,2))**2)
REP = DP*RO1*VR/MU
F = 1+0.179*sqrt(REP)+0.013*REP
FD(1) = F*MU*18*(V(IP,JP,1)-U_M)/((DP**2)*RO2)
FD(2) = F*MU*18*(V(IP,JP,2)-V_M)/((DP**2)*RO2)
!ARCHIMEDES FORCE
FA(1) = -4*PI*(0.5*DP)**3*GRADP(IP,JP,1)/(3*MP)
FA(2) = -4*PI*(0.5*DP)**3*GRADP(IP,JP,2)/(3*MP)
!MAGNUS FORCE
FM(1)=-PI*DP**3*RO1*(V(IP,JP,2)-V_M)*(0.5*ROTV(IP,JP)-W_M)/(8*MP)
FM(2)= PI*DP**3*RO1*(V(IP,JP,1)-U_M)*(0.5*ROTV(IP,JP)-W_M)/(8*MP)
!SEFFMAN FORCE
IF (ABS(ROTV(IP,JP)).GT.EPS) THEN
FC(1)=(1.61*DP**2*SQRT(MU*RO1/ABS(ROTV(IP,JP)))*( (V(IP,JP,2)-V_M)*W_M))/MP
FC(2)=(1.61*DP**2*SQRT(MU*RO1/ABS(ROTV(IP,JP)))*(-(V(IP,JP,1)-U_M)*W_M))/MP
ELSE
FC(:)=0.0
ENDIF
!FORCE OF THE ADDED MASSES
FAD(1)=-(2*PI*(0.5*DP)**3*RO1)*FX/(3*MP)
FAD(1)=-(2*PI*(0.5*DP)**3*RO1)*FY/(3*MP)
!BASSE FORCE
FB(:)=0.0
IF (IT.GT.0) THEN
DO IB=1,IT
FB(:)= FB(:)+3*DP**2*SQRT(PI*RO1*MU)*((V_P(IB,:)-V_G(IB,:))-(V_P(IB-1,:)-V_G(IB-
1,:)))/(2*MP*SQRT(IT*DT-(IB-1)*DT))
ENDDO

40
ENDIF
!MOMENTUM
MZ=8*PI*MU*(DP*0.5)**3*(0.5*ROTV(IP,JP)-W_M)/I
!GRAVITY
FG(1)=0.0
FG(2)=0.0
! SUM
FX=FD(1)+FG(1)+FA(1)+FM(1)+FAD(1)+FC(1)+FB(1)
FY=FD(2)+FG(2)+FA(2)+FM(2)+FAD(2)+FC(2)+FB(2)
WRITE(2,*)
IT,IT*DT,SQRT(FD(1)**2+FD(2)**2),SQRT(FA(1)**2+FA(2)**2),SQRT(FM(1)**2+FM(2)*
*2),&
SQRT(FC(1)**2+FC(2)**2),SQRT(FAD(1)**2+FAD(2)**2),SQRT(FB(1)**2+FB(2)**2),MZ
End Subroutine

OUTPUT

Subroutine B_OutputFields(NI,NJ,X,Y,P,V,GradP,rotV)
REAL,Dimension(NI,NJ):: X,Y
REAL,Dimension(0:NI,0:NJ)::P,rotV
REAL,Dimension(0:NI,0:NJ,2)::GradP, V
Write(1,*) 'VARIABLES ="X","Y","P","GradPx","GradPy","Vx","Vy","rotV"'
Write(1,*) 'ZONE I=',NI,', J=',NJ,', DATAPACKING=BLOCK, VARLOCATION=([3-
8]=CELLCENTERED)'
Write(1,'(100F14.7)') X(1:NI,1:NJ)
Write(1,'(100F14.7)') Y(1:NI,1:NJ)
Write(1,'(100F14.7)') P(1:NI-1,1:NJ-1)
Write(1,'(100F14.7)') GradP(1:NI-1,1:NJ-1,1)
Write(1,'(100F14.7)') GradP(1:NI-1,1:NJ-1,2)
Write(1,'(100F14.7)') V(1:NI-1,1:NJ-1,1)
Write(1,'(100F14.7)') V(1:NI-1,1:NJ-1,2)
Write(1,'(100F14.7)') RotV(1:NI-1,1:NJ-1)
End Subroutine
INPUT

block1.msh
solution.plt

INPUT FOR PARTICLE

1.25 2000.0 !ro1-плотность газа ro2-плотность частицы


2e-5 !mu
0.004 !dp- диаметр
0.0 0.02 !x0,y0 - начальные координаты
0.03 0.05 !u0,v0 - начальная скорость
0.0 !w0 - начальное вращение
0.01 !dt - шаг по времени
1000000 !Nt - количество шагов

41
Список литературы

1. Е. М. Смирнов, Д.К. Зайцев. Метод конечных объемов в


приложении к задачам гидрогазодинамики и теплообмена в областях
сложной геометрии. Научнотехнические ведомости 2’ 2004 Проблемы
турбулентности и вычислительная гидродинамика (к 70-летию кафедры
«Гидроаэродинамика»)
2. К. Н. Волков, В. Н. Емельянов. Течения газа с частицами. – М.:
ФИЗМАТЛИТ, 2008. – 600 с. – ISBN 978-5-9221-1000-6

42

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