Skip to content
Closed

m7b #16

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 188 additions & 0 deletions M7B_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
# М7Б. Статистика идеального газа

## Описание

Численное моделирование установления термодинамического равновесия в системе молекул идеального газа, находящихся в вертикальном сосуде в поле тяжести.

### Цели работы

1. **Численное моделирование** движения молекул идеального газа в замкнутом вертикальном сосуде с учётом упругих столкновений со стенками и между собой
2. **Получение распределений** молекул по скоростям и по высоте в равновесном состоянии
3. **Сравнение** полученных распределений с теоретическими: распределением Максвелла по скоростям и барометрической формулой для распределения по высоте

## Физические модели

### Динамика молекул

Каждая молекула движется под действием силы тяжести согласно второму закону Ньютона:

$$\frac{d\vec{v}}{dt} = \vec{g}$$

В декартовых координатах (x, y — горизонтальные, z — вертикальная ось):

$$\frac{dv_x}{dt} = 0, \quad \frac{dv_y}{dt} = 0, \quad \frac{dv_z}{dt} = -g$$

### Распределение Максвелла

В состоянии термодинамического равновесия распределение молекул по скоростям описывается распределением Максвелла:

$$f(v) = 4\pi v^2 \left(\frac{m}{2\pi k_B T}\right)^{3/2} \exp\left(-\frac{mv^2}{2k_B T}\right)$$

где:
- m — масса молекулы
- k_B = 1.38 × 10⁻²³ Дж/К — постоянная Больцмана
- T — абсолютная температура

### Барометрическая формула

Распределение молекул по высоте в гравитационном поле описывается барометрической формулой:

$$n(z) = n(0) \exp\left(-\frac{mgz}{k_B T}\right)$$

Масштаб высоты:
$$H_0 = \frac{k_B T}{mg}$$

## Структура кода

### Основные компоненты

```
src/models/ideal_gas/
├── __init__.py # Главный модуль, Streamlit интерфейс
├── config.py # Конфигурация и параметры
├── objects.py # Классы для моделирования
├── utils.py # Вспомогательные функции
└── charts.py # Визуализация результатов
```

### Ключевые классы

#### `SimulationConfig`
Параметры симуляции:
- Молекулярные параметры (масса, диаметр)
- Геометрия сосуда (высота, радиус)
- Начальные условия (начальная скорость, высота)
- Параметры времени (общее время, шаг интегрирования)
- Параметры термостата (опционально)

#### `IdealGasSimulation`
Основной класс для моделирования:
- `run()` — запуск симуляции
- `_velocity_verlet_step()` — интегрирование по методу Velocity Verlet
- `_handle_collisions()` — обработка столкновений
- `_handle_wall_collisions()` — отражение от стенок
- `_handle_intermolecular_collisions()` — упругие столкновения между молекулами

#### `EquilibriumAnalyzer`
Анализ равновесного состояния:
- `calculate_temperature()` — определение температуры
- `calculate_pressure()` — расчёт давления

## Численные методы

### Интегрирование: Velocity Verlet

```
r(t + dt) = r(t) + v(t) * dt + 0.5 * a(t) * dt²
v(t + dt) = v(t) + 0.5 * (a(t) + a(t + dt)) * dt
```

Так как гравитационное ускорение постоянно:

```
r(t + dt) = r(t) + v(t) * dt + 0.5 * g * dt²
v_z(t + dt) = v_z(t) - g * dt
```

### Столкновения между молекулами

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

1. Вычисляется единичный вектор вдоль линии центров: **n**
2. Вычисляется относительная скорость в направлении столкновения
3. Компоненты скоростей вдоль линии столкновения обмениваются

## Использование

### Запуск Streamlit интерфейса

```bash
streamlit run src/main.py
```

Затем перейдите к странице М7Б в навигационном меню.

### Параметры симуляции

В боковой панели можно настроить:
- **Количество молекул** (50-1000)
- **Высота сосуда** (0.5-5.0 м)
- **Радиус сосуда** (0.5-3.0 м)
- **Начальная скорость молекул** (1-50 м/с)
- **Время симуляции** (1-20 с)
- **Шаг времени** (0.1-2.0 мс)
- **Использовать термостат** (опционально)

### Результаты

Симуляция выводит:
1. **Определённая температура** из кинетической энергии
2. **Масштаб высоты** барометрической формулы
3. **Средняя высота молекул**
4. **Средняя скорость молекул**

### Визуализация

5 вкладок с графиками:
1. **Распределение скоростей** — сравнение с распределением Максвелла
2. **Распределение по высоте** — сравнение с барометрической формулой
3. **Эволюция энергии** — кинетическая, потенциальная и полная энергия
4. **Эволюция температуры** — изменение температуры во времени
5. **3D позиции молекул** — визуализация распределения в конечном состоянии

## Тестирование

Запуск тестов:

```bash
pytest tests/m7b/
```

Тесты проверяют:
- **Корректность конфигурации** — валидация параметров
- **Форму выходных данных** — правильные размеры массивов
- **Граничные условия** — частицы не выходят за границы
- **Законы сохранения** — энергия ведёт себя ожидаемо
- **Утилиты** — расчёты распределений
- **Численная стабильность** — результаты не расходятся

## Параметры по умолчанию

- **Масса молекулы**: 6.63 × 10⁻²⁶ кг (аргон)
- **Эффективный диаметр**: 3.4 × 10⁻¹⁰ м
- **Гравитация**: 9.81 м/с²
- **Постоянная Больцмана**: 1.38 × 10⁻²³ Дж/К

## Теоретические соотношения

### Средняя кинетическая энергия

$$\left\langle \frac{mv^2}{2} \right\rangle = \frac{3}{2}k_B T$$

Или по компонентам:

$$\left\langle \frac{mv_i^2}{2} \right\rangle = \frac{1}{2}k_B T, \quad i = x, y, z$$

### Средняя высота молекулы

$$\langle z \rangle = H_0 = \frac{k_B T}{mg}$$

### Средняя полная энергия

$$\langle E \rangle = \frac{3}{2}k_B T + k_B T = \frac{5}{2}k_B T$$

## Ссылки

- **PDF отчёта**: M7B-Report.pdf в корне проекта
- **Метод Verlet**: https://en.wikipedia.org/wiki/Verlet_integration
- **Распределение Максвелла**: https://en.wikipedia.org/wiki/Maxwell%E2%80%93Boltzmann_distribution
48 changes: 48 additions & 0 deletions M7B_report/conclusion.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
\section{Заключение}

В работе проведено комплексное исследование процесса установления термодинамического равновесия в системе идеального газа, находящегося в вертикальном сосуде в гравитационном поле.

\textbf{Основные достижения:}

\begin{enumerate}
\item \textbf{Численное моделирование динамики молекул}
\begin{itemize}
\item Реализована корректная обработка упругих столкновений молекул между собой и со стенками сосуда
\item Использована оптимизация методом ячеек для ускорения вычислений
\end{itemize}

\item \textbf{Исследование процесса релаксации}
\begin{itemize}
\item Изучен переход системы из неравновесного начального состояния (все молекулы у дна с одинаковой энергией) к термодинамическому равновесию
\item Определено характерное время релаксации и его зависимость от параметров системы
\item Проверено сохранение полной энергии системы в изолированном режиме
\end{itemize}

\item \textbf{Получение равновесных распределений}
\begin{itemize}
\item Построено распределение молекул по модулям скоростей и проведено сравнение с распределением Максвелла
\item Построено распределение молекул по высоте и проведено сравнение с барометрической формулой
\item Проверена факторизация распределений по различным компонентам скорости
\end{itemize}

\item \textbf{Статистический анализ}
\begin{itemize}
\item Вычислены характерные скорости: наиболее вероятная, средняя и среднеквадратичная
\item Определена температура системы из распределения кинетических энергий
\item Проверено выполнение теоремы о равнораспределении энергии по степеням свободы
\end{itemize}

\end{enumerate}

\textbf{Выводы}

\begin{itemize}
\item Численное моделирование методом молекулярной динамики подтверждает основные положения статистической механики

\item Система молекул идеального газа самопроизвольно переходит из упорядоченного неравновесного состояния в равновесное состояние с максимальной энтропией

\item В равновесии наблюдается полное согласие с распределением Максвелла-Больцмана, несмотря на детерминированный характер классической механики


\end{itemize}

40 changes: 40 additions & 0 deletions M7B_report/intro.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
\newpage

\section{Введение}

\Task Исследование процесса установления термодинамического равновесия в системе идеального газа, находящегося в вертикальном сосуде в поле тяжести. Рассмотрение неравновесного начального состояния, когда все молекулы сосредоточены вблизи дна сосуда и имеют одинаковую кинетическую энергию.

\Goal
\begin{enumerate}
\item Провести численное моделирование движения молекул идеального газа в замкнутом вертикальном сосуде с учётом упругих столкновений со стенками и между собой
\item Получить распределения молекул по скоростям и по высоте в равновесном состоянии
\item Сравнить полученные распределения с теоретическими: распределением Максвелла по скоростям и барометрической формулой для распределения по высоте
\end{enumerate}

\section{Физическая постановка задачи}
\vspace{-1em}

Рассматривается система из $N$ одинаковых молекул идеального газа массой $m$ каждая, находящихся в вертикальном цилиндрическом сосуде высотой $H$ и площадью основания $S$ в гравитационном поле с ускорением $g$.

\textbf{Модель идеального газа предполагает:}
\begin{enumerate}
\item Молекулы -- материальные точки (размеры много меньше расстояний между ними)
\item Столкновения молекул между собой и со стенками абсолютно упругие
\item Взаимодействие молекул происходит только при столкновениях (потенциальная энергия взаимодействия пренебрежимо мала)
\item Стенки сосуда непроницаемы и гладкие
\end{enumerate}

\textbf{Начальные условия:}
\begin{itemize}
\item Все молекулы находятся в тонком слое вблизи дна: $0 < z < h_0 \ll H$
\item Все молекулы имеют одинаковую по модулю скорость $v_0$, направленную случайным образом
\item Начальная кинетическая энергия каждой молекулы: $E_0 = \dfrac{mv_0^2}{2}$
\end{itemize}

\textbf{Рассматриваются два режима:}
\begin{enumerate}
\item \textbf{Изолированная система}: полная энергия $E = const$, стенки теплоизолированы
\item \textbf{Термостат}: температура стенок $T = const$, энергия системы флуктуирует
\end{enumerate}

\newpage
16 changes: 16 additions & 0 deletions M7B_report/main.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
\input{preamble}

\begin{document}

\input{title}
\pagestyle{main}
{
\centering
\tableofcontents
}
\input{intro}
\input{models/models}
\input{numerical_methods}
\input{conclusion}

\end{document}
Loading
Loading