Третий этап проекта

Аннотация

Моделирование газовых потоков и жидкостей традиционными методами, такими как уравнения Навье-Стокса, требует значительных вычислительных ресурсов. Методы LGA и LBE предлагают альтернативу, упрощая вычисления при сохранении физической достоверности.

Дата
апр. 10, 2025 — мая 1, 2025
Место
РУДН, ФФМиЕН

Видеопрезентация второго этапа группового проекта:

Защита 3й этап Команда 4 на RUTUBE

Подробно ознакомиться с презентацией проекта вы можете в Слайдах.
Прочитать полный отчёт можно во вкладке Публикации (3 этап). Там же находится pdf-формат отчёта.

Постановка проблемы

Традиционные методы моделирования газовых потоков и жидкостей требуют значительных вычислительных ресурсов, что затрудняет их применение для сложных задач. В связи с этим возникает необходимость разработки более эффективных и простых в реализации моделей, способных адекватно описывать поведение газов на микроскопическом уровне. Модели решеточных газов (LGA) и решеточного уравнения Больцмана (LBE) представляют собой такой подход, позволяющий упростить вычисления, сохраняя при этом физическую достоверность.

Актуальность

Методы LGA и LBE важны в гидродинамике и биофизике благодаря эффективности. Модель HPP - основа для более сложных моделей. Важно реализовать и протестировать HPP для проверки алгоритмов.

Цель

Разработать и проанализировать модель на основе решеточного уравнения Больцмана для описания течений газа.

Задачи третьего этапа проекта

  1. Реализовать и описать программный алгоритм решения задачи на языке Julia.

Основная часть

Модель HPP (Hardy–Pomeau–Pazzis)

Модель HPP (Hardy-Pomeau-Pazzis) — это базовая модель решеточных газов (LGA), используемая для моделирования гидродинамических явлений на микроскопическом уровне. Она представляет собой дискретную систему, где пространство и время дискретизованы, а частицы двигаются по узлам квадратной решетки.

Основные характеристики

  1. Решетка: Двумерная квадратная
  2. Частицы: Единичной массы, 4 направления
  3. Скорость: Δx/Δt = 1
  4. Принцип исключения: ≤1 частица/направление
  5. Эволюция: Распространение → Столкновения
  6. Столкновения: Сохранение импульса, 90° поворот
  7. Кодирование: 4-битный формат (1 бит/направление)

Математическое описание:

Обозначим возможные направления скорости как $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$

Основные операции для работы с состояниями узлов

  1. Добавление частицы: добавление к состоянию $S$ частицы с направлением скорости $d_k$: $$ S \text{ OR } d_k \rightarrow S $$

  2. Проверка наличия частицы: проверка, есть ли в состоянии $S$ частица с направлением скорости $d_k$: $$ \text{if } (S \text{ AND } d_k) \neq 0 $$ Если результат не равен 0, то частица с направлением $d_k$ присутствует в узле.

Недостатки модели HPP

  1. Отсутствие симметрии

  2. Нефизичное поведение

Описание задания

Реализуйте модель 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
Таисия Ганина
Таисия Ганина
Студентка группы НФИбд-01-22

Исследования в области современных методов классификации объектов на изображениях.

Олеся Абакумова
Олеся Абакумова
Студентка группы НФИбд-02-22

Мои научные интересы охватывают области дифференциальной геометрии,математического моделирования и механики.

Дарья Ибатулина
Дарья Ибатулина
Студентка группы НФИбд-01-22

Мои научные интересы охватывают области искусственного интеллекта, больших данных и нейронных сетей

Анастасия Астраханцева
Анастасия Астраханцева
Студентка группы НФИбд-01-22

Мои научные интересы охватывают области исскуственного интеллекта, больших данных и машинного обучения.