Skip to content

mrkondratyev/Piastra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

144 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#ENG

Piastra

Piastra is a teaching-oriented framework for solving:

  • Linear advection
  • Inviscid compressible hydrodynamics (HD)
  • Special-relativistic hydrodynamics (rHD)
  • Ideal Magnetohydrodynamics (MHD)
  • Thermal diffusion (explicit and RKL2 super time-stepping)

within a finite-volume framework. The code is written in Python with extensive use of NumPy, and includes tools for visualization with matplotlib.


Features

  • Dimensionality: 1D and 2D Cartesian (X,Y) and Cylindrical (R,Z) structured grids
  • Finite-volume solver with approximate Riemann solvers for fluxes
  • Hydrodynamics solvers:
    • LLF (Rusanov, 1961)
    • HLL (Harten–Lax–van Leer, 1983)
    • HLLC (Toro et al., 1994)
    • Roe (Roe, 1981)
  • Special-relativistic HD solvers (rHD):
    • LLF, HLL, HLLC (Mignone & Bodo, 2005)
    • 4-velocity reconstruction (guarantees |v| < 1 at cell faces)
    • Newton-Raphson conservative-to-primitive inversion
  • MHD solvers:
    • LLF, HLL, HLLD (Miyoshi and Kusano, 2005)
    • Divergence control:
      • Powell 8-wave method (Powell 1994, 1999; Tóth 2000)
      • Constrained Transport (Flux-CT; Balsara & Spicer 1999)
  • Thermal diffusion:
    • Explicit forward Euler
    • RKL2 super time-stepping (Meyer, Balsara & Aslam 2014) with configurable stages
    • Geometry-aware FV Laplacian (Cartesian, cylindrical, polar)
  • Advection: high-order RK with exact Riemann solver or Lax–Wendroff scheme
  • Reconstruction methods:
    • PCM (piecewise constant)
    • PLM (piecewise linear with slope limiter, 2nd order)
    • PPM (Colella & Woodward 1984, Mignone 2014)
    • PPMorig (original Colella & Woodward version)
    • WENO5 (5th order, Jiang & Shu 1996)
  • Time integration:
    • RK1 (Euler)
    • RK2, RK3 (TVD Runge–Kutta; Shu & Osher 1988)
  • Ghost cells: automatically adjusted (2 for PLM/PCM, 3 for PPM/WENO)
  • Simulation control through the Parameters class with defaults and validation
  • Modular design:
    • parameters.py: central parameter container
    • grid_setup.py: structured grid definition
    • sim_state.py: storage for fluid variables
    • boundaries.py: boundary conditions handling for scalar and vector variables
    • helpers.py: initial condition dispatch and simulation loop
    • advection_one_step.py, hydro_one_step.py, rHD_one_step.py, MHD_one_step_CT.py, MHD_one_step_8wave.py, diffusion_one_step.py: solver backends
    • hydro_phys.py, rHD_phys.py, MHD_phys.py: supplementary modules
    • visualization.py: plotting utilities
    • advection_init_cond.py, hydro_init_cond.py, rHD_init_cond.py, MHD_init_cond.py, diffusion_init_cond.py: initial conditions
    • main.py: launcher (alternatively can be run via Jupyter notebook main.ipynb)

Usage

Requirements:

  • Python 3.9+
  • NumPy
  • matplotlib
  • IPython (recommended for notebooks)

Example (main.py)

from parameters import Parameters
from grid_setup import Grid
from sim_state import SimState
from helpers import initial_model, run_simulation
from hydro_one_step import Hydro2D

# Setup parameters
par = Parameters(mode="HD", problem="sod2Dcart", Nx1=64, Nx2=64)

# Setup grid and state
grid = Grid(par.Nx1, par.Nx2, par.Ngc)
simstate = SimState(grid, par)
grid, simstate, par, eos = initial_model(grid, simstate, par)

# Run solver
solver = Hydro2D(grid, simstate, eos, par)
simstate, par.timenow = run_simulation(grid, simstate, par, solver, simstate.dens, nsteps=200)

Parameters

All parameters are stored in the Parameters class. Defaults are applied automatically.

Required:

  • mode: 'adv', 'HD', 'rHD', 'MHD', or 'diff'

  • problem: name of the test problem

  • Nx1, Nx2: grid resolution

Optional:

  • flux_type: depends on solver (defaults assigned automatically)

  • rec_type: 'PCM', 'PLM', 'PPM', 'PPMorig', 'WENO'

  • RK_order: 'RK1', 'RK2', 'RK3'

  • CFL: Courant number (default 0.7)

  • divb_tr: 'CT' or '8wave' (MHD only)

Available Problems

Advection: smooth/discontinuous 1D/2D tests

Hydrodynamics: Sod shock tubes, strong shocks, Kelvin–Helmholtz, Rayleigh–Taylor, Sedov blast waves

Relativistic HD: Mignone & Bodo (2005) Riemann problems (RP1–RP5), 2D Riemann problem, relativistic Rayleigh–Taylor instability

MHD: Brio–Wu shock, Tóth problem, blast wave, Orszag–Tang vortex

Diffusion: 2D Gaussian pulse, crossed Gaussian ridges, annular ring, 1D Gaussian

References

  • E. F. Toro, Riemann Solvers and Numerical Methods for Fluid Dynamics (2009)

  • D. S. Balsara, Higher-order accurate space-time schemes for computational astrophysics—Part I: finite volume methods, Living Rev Comput Astrophys 3:2 (2017)

  • G. Tóth, The ∇·B constraint in shock-capturing MHD codes, JCP 161, 605 (2000)

  • A. Mignone & G. Bodo, An HLLC Riemann solver for relativistic flows, MNRAS 364, 126 (2005)

  • C. D. Meyer, D. S. Balsara & T. D. Aslam, A stabilized Runge–Kutta–Legendre method for explicit super-time-stepping of parabolic and mixed equations, JCP 257, 594 (2014)

  • M. Zingale, Introduction to Computational Astrophysical Hydrodynamics (2015+)

Additional notes

The folder notebooks contains lightweight solvers in separate independent ipynb-files (with comments in Russian): 2D shallow water simulator, 1D hydrodynamics, 1D advection solver, and 1D diffusion equation. My lecture notes are provided as well (they are also in Russian, however. I plan to rewrite them soon).




#RUS

Piastra

Piastra — учебный код для моделирования:

  • Линейного уравнения переноса (адвекции)
  • Сжимаемой невязкой гидродинамики (HD)
  • Специально-релятивистской гидродинамики (rHD)
  • Идеальной магнитной гидродинамики (MHD)
  • Теплопроводности (явная схема и RKL2 super time-stepping) в рамках метода конечных объемов Годуновского типа с TVD методами Рунге–Кутты для интегрирования по времени и ограниченной кусочно-полиномиальной реконструкцией высокого порядка по пространству. Код написан на Python с активным использованием NumPy и включает инструменты визуализации через matplotlib.

Возможности

  • Измерения: 1D и 2D структурированные сетки -- декартовые (X,Y) и цилиндрические (R,Z)
  • Решатель методом конечных объемов с приближенными решениями задачи Римана для вычисления потоков
  • Гидродинамические решатели:
    • LLF (Русанов, 1961)
    • HLL (Хартен–Лакс–ван Леер, 1983)
    • HLLC (Toro et al., 1994)
    • Roe (Roe, 1981)
  • Решатели МГД:
    • LLF, HLL, HLLD (Miyoshi & Kusano, 2005)
    • Контроль дивергенции:
      • Метод 8 волн Пауэлла (Powell 1994, 1999; Tóth 2000)
      • Constrained Transport (Flux-CT; Balsara & Spicer 1999)
  • Перенос: Методы Рунге-Кутты с точным решением Римана или схема Лакса–Вендроффа
  • Методы реконструкции:
    • PCM (кусочно-постоянная)
    • PLM (кусочно-линейная с ограничителем наклона, 2-й порядок)
    • PPM (Colella & Woodward 1984, Mignone 2014)
    • PPMorig (оригинальная версия Colella & Woodward)
    • WENO5 (5-й порядок, Jiang & Shu 1996)
  • Интегрирование по времени:
    • RK1 (Эйлер)
    • RK2, RK3 (TVD Runge–Kutta; Shu & Osher 1988)
  • Призрачные ячейки (ghost cells): подбираются автоматически (2 для PLM/PCM, 3 для PPM/WENO)
  • Управление симуляцией через класс Parameters с установкой значений по умолчанию и проверкой корректности
  • Модульная структура:
    • parameters.py: центральный контейнер параметров
    • grid_setup.py: определение структуры сетки
    • sim_state.py: хранение переменных жидкости
    • helpers.py: диспетчер начальных условий и основной цикл симуляции
    • boundaries.py: учет граничных условий на сетке для скалярных и векторых функций
    • advection_one_step.py, hydro_one_step.py, rHD_one_step.py, MHD_one_step_CT.py, MHD_one_step_8wave.py, diffusion_one_step.py: бэкенды решателей
    • hydro_phys.py, rHD_phys.py, MHD_phys.py: вспомогательные модули
    • visualization.py: функции визуализации
    • advection_init_cond.py, hydro_init_cond.py, rHD_init_cond.py, MHD_init_cond.py, diffusion_init_cond.py: начальные условия
    • main.py: запуск симуляции (можно запускать также через Jupyter notebook main.ipynb)

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

Требования:

  • Python 3.9+
  • NumPy
  • matplotlib
  • IPython (рекомендуется для работы с ноутбуками)

Пример (main.py)

from parameters import Parameters
from grid_setup import Grid
from sim_state import SimState
from helpers import initial_model, run_simulation
from hydro_one_step import Hydro2D

# Настройка параметров
par = Parameters(mode="HD", problem="sod2Dcart", Nx1=64, Nx2=64)

# Инициализация сетки и состояния
grid = Grid(par.Nx1, par.Nx2, par.Ngc)
simstate = SimState(grid, par)
grid, simstate, par, eos = initial_model(grid, simstate, par)

# Запуск решателя
solver = Hydro2D(grid, simstate, eos, par)
simstate, par.timenow = run_simulation(grid, simstate, par, solver, simstate.dens, nsteps=200)

Параметры

Все параметры хранятся в классе Parameters. Значения по умолчанию присваиваются автоматически.

Необходимые:

  • mode: 'adv', 'HD', 'rHD', 'MHD', или 'diff'

  • problem: название тестовой задачи

  • Nx1, Nx2: разрешение сетки

Опциональные:

  • flux_type: зависит от решателя (default присваивается автоматически)

  • rec_type: 'PCM', 'PLM', 'PPM', 'PPMorig', 'WENO'

  • RK_order: 'RK1', 'RK2', 'RK3'

  • CFL: Число Куранта (default 0.7)

  • divb_tr: 'CT' или '8wave' (только для МГД)

Доступные проблемы

Адвекция: smooth/discontinuous 1D/2D tests

Газовая динамика: Sod shock tubes, strong shocks, Kelvin–Helmholtz, Rayleigh–Taylor, Sedov blast waves

Релятивистская гидродинамика: задачи Римана Mignone & Bodo (2005) (RP1–RP5), 2D задача Римана, релятивистская неустойчивость Рэлея–Тейлора

МГД: Brio–Wu shock, Tóth problem, blast wave, Orszag–Tang vortex

Диффузия: 2D гауссов импульс, перекрёстные гауссовы гребни, кольцевой импульс, 1D гауссов импульс

Ссылки

  • Д. В. Бисикало, А. Г. Жилкин, А. А. Боярчук, Газодинамика Тесных Двойных Звезд, Физматлит (2013)

  • E. F. Toro, Riemann Solvers and Numerical Methods for Fluid Dynamics (2009)

  • D. S. Balsara, Higher-order accurate space-time schemes for computational astrophysics—Part I: finite volume methods, Living Rev Comput Astrophys 3:2 (2017)

  • G. Tóth, The ∇·B constraint in shock-capturing MHD codes, JCP 161, 605 (2000)

  • M. Zingale, Introduction to Computational Astrophysical Hydrodynamics (2015+)

Дополнения

В папке notebooks представлены облегченнные решатели в отдельных ipynb-файлах с комментариями на русском: 2D симулятора уравнений мелкой воды, 1D газовая динамика, 1D решатель адвекции, и 1D модель диффузии. Также в корневой папке лежат мои лекционные записи лекции для участников Третьей Школы НЦФМ "Экспериментальная и Лабораторная Астрофизика и Геофизика".

About

A user-friendly teaching framework for studying computational (astrophysical) fluid dynamics & MHD. The code implements 1D/2D linear advection, Newtonian and SR gas dynamics, MHD, and diffusion solvers, using a finite-volume approach. NumPy library is used for code clarity and performance.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors