GithubHelp home page GithubHelp logo

hpp-model's Introduction

HPP Model - модель решеточного газа

Описание модели

В основе модели квадратная решетка, в клетках которой могут обитать частицы единичной массы. Каждая из частиц может иметь скорость, направленную в одну из соседних клеток, такой величины, что за один шаг по времени частицы могут перелететь как раз в соседнюю клетку. В клетке может быть не более одной частицы с данным направлением скорости. Такая схема называется моделю HPP по первым буквам фамилий ее авторов.

Эволюция частиц за каждый шаг по времени происходит в два этапа.

  • На первом частицы перелетают в соседние клетки в соответствии со своими скоростями.

  • На втором происходят соударения частиц в клетках. При столкновениях должно сохраняться количество частиц и их полный импульс. При этом нетривиальными столкновениями в модели HPP являются только соударения "почти лоб в лоб", после которых скорости частиц поворачиваются на 90◦. Во всех остальных случаях можно считать, что столкновения не произошло (частицы пролетели мимо друг друга). То есть, частицы меняют направление при столкновении с частицей противоположной скорости (были частицы вверх и вниз, становятся вправо и влево и наоборот).

Кодирование скоростей частиц

Наличие частицы, имеющей скорость по каждому направлению, закодировано одним битом (0 - нет частицы, 1 - есть). Так можно записать состояние каждой клетки в четырех битах. Всего различных состояний в клетке может быть 16, включая 0 (нет ни одной частицы). Все операции сводятся к целочисленной арифметике, что означает высокую скорость расчетов и отсутствие ошибок округления.

Возможные состояния клетки:

  • 00002 = 0 - нет частиц
  • 00012 = 1 - есть частица со скоростью "вправо"
  • 00102 = 2 - есть частица со скоростью "вверх"
  • 01002 = 4 - есть частица со скоростью "влево"
  • 10002 = 8 - есть частица со скоростью "вниз"
  • 00112 = 3 - есть частица со скоростью "вправо" и частица со скоростью "вверх"
  • и т.д. до состояния 11112 - в клетке есть частицы со всеми скоростями

Если в клетке уже есть частица, то добавление второй частицы происходит с помощью операции ИЛИ.
Например, в клетке находится частица со скоростью "вверх":
S = 00102
Тогда добавление к этой клетке частицы со скоростью "влево" произойдет так:
S1 = S | 01002 = 01102
Таким образом, в состоянии S1 находятся две частицы со скоростями "вверх" и "влево".
Точно так же при проиходит добавление третьей и четвертой частицы.

Провека наличия частицы данной скорости в клетке осуществляется операцией И.
Например, состояние клетки такое:
S = 10112
Тогда проверка, есть ли в клетке частица со скоростью "вниз", будет такой:
S & 10002 = 10002
Если результат проверки не равен 0, то такая частица есть в клетке.

Взаимодействие с программой

Для запуска понадобятся: интерпретатор python, библиотеки numpy и matplotlib

  1. В консоли перейти в директорию с проектом, выпонить команду "python main.py". Далее появятся подсказки по вводу.
  2. Ввести размер решетки.
  3. Есть два режима начального положения частиц: ручной ввод или автоматическое рандомное заполнение.
    • При ручном вводе нужно поочередно вводить координаты и скорости частиц. Ввод интерактивный, частицы будут сразу же появляться на графике.
    • При рандомном заполнении нужно выбрать количество частиц, это задает плотность моделируемого вещества.
  4. Анимация движения частиц автоматически появится на графике, также в текущую директорию сохранится гифка "hpp.gif". Направления частиц изображаются стрелками, а столкновения - красной звездочкой.

hpp-model's People

Contributors

mariaderyabina avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.