Моделирование газовых потоков и жидкостей традиционными методами, такими как уравнения Навье-Стокса, требует значительных вычислительных ресурсов. Методы LGA и LBE предлагают альтернативу, упрощая вычисления при сохранении физической достоверности.
Защита 3й этап Команда 4 на RUTUBE
Традиционные методы моделирования газовых потоков и жидкостей требуют значительных вычислительных ресурсов, что затрудняет их применение для сложных задач. В связи с этим возникает необходимость разработки более эффективных и простых в реализации моделей, способных адекватно описывать поведение газов на микроскопическом уровне. Модели решеточных газов (LGA) и решеточного уравнения Больцмана (LBE) представляют собой такой подход, позволяющий упростить вычисления, сохраняя при этом физическую достоверность.
Методы LGA и LBE важны в гидродинамике и биофизике благодаря эффективности. Модель HPP - основа для более сложных моделей. Важно реализовать и протестировать HPP для проверки алгоритмов.
Разработать и проанализировать модель на основе решеточного уравнения Больцмана для описания течений газа.
Julia
.Модель HPP (Hardy-Pomeau-Pazzis) — это базовая модель решеточных газов (LGA), используемая для моделирования гидродинамических явлений на микроскопическом уровне. Она представляет собой дискретную систему, где пространство и время дискретизованы, а частицы двигаются по узлам квадратной решетки.
Обозначим возможные направления скорости как $d_1, d_2, d_3, d_4$$. Тогда:
$d_1 = 0001_2 = 1$
$d_2 = 0010_2 = 2$
$d_3 = 0100_2 = 4$
$d_4 = 1000_2 = 8$
Добавление частицы: добавление к состоянию $S$ частицы с направлением скорости $d_k$: $$ S \text{ OR } d_k \rightarrow S $$
Проверка наличия частицы: проверка, есть ли в состоянии $S$ частица с направлением скорости $d_k$: $$ \text{if } (S \text{ AND } d_k) \neq 0 $$ Если результат не равен 0, то частица с направлением $d_k$ присутствует в узле.
Отсутствие симметрии
Нефизичное поведение
Реализуйте модель HPP. Задайте периодические граничные условия. Это просто сделать, добавив по одному ряду узлов с каждой стороны области (фиктивные узлы). Перед шагом распространения необходимо скопировать значения левого ряда физических узлов в правый фиктивный ряд. Тогда частицы, вылетая из левой границы области налево, появятся на ее правой границе. С другими границами поступают также. Вначале возьмите одну единственную частицу и проверьте правильность всех граничных условий. Затем убедитесь, что для двух частиц их столкновения “почти лоб в лоб” и под прямым углом происходят верно. Для любого числа частиц должны сохраняться их полное число и полный импульс.
Код для модели HPP мы реализовали на языке Julia.
function apply_periodic_boundaries!(grid)
for d in 1:4
grid[1, 2:Ny+1, d] .= grid[Nx+1, 2:Ny+1, d]
# левая фиктивная = правая физическая
grid[Nx+2, 2:Ny+1, d] .= grid[2, 2:Ny+1, d]
# правая фиктивная = левая физическая
grid[2:Nx+1, 1, d] .= grid[2:Nx+1, Ny+1, d]
# нижняя фиктивная = верхняя физическая
grid[2:Nx+1, Ny+2, d] .= grid[2:Nx+1, 2, d]
# верхняя фиктивная = нижняя физическая
end
end
function collide!(grid)
for x in 2:Nx+1, y in 2:Ny+1
right, up, left, down = grid[x,y,1],
grid[x,y,2],
grid[x,y,3],
grid[x,y,4]
if right && left && !up && !down
grid[x,y,1] = false
grid[x,y,3] = false
grid[x,y,2] = true
grid[x,y,4] = true
elseif up && down && !right && !left
grid[x,y,2] = false
grid[x,y,4] = false
grid[x,y,1] = true
grid[x,y,3] = true
end
end
end
function propagate!(grid)
new_grid = zeros(Bool, size(grid))
for x in 2:Nx+1, y in 2:Ny+1, d in 1:4
if grid[x, y, d]
nx, ny = x + dx[d], y + dy[d]
new_grid[nx, ny, d] = true
end
end
return new_grid
end