Skip to content

FLUME ​

FLUME (Fluid Lorentz-coupled Unsteady Magnetohydrodynamic Equations) is the compressible-flow and magnetohydrodynamics application of ADAM. It solves the compressible Euler equations and the ideal MHD equations with high-order WENO finite differences on block-structured adaptive grids, on CPUs (MPI + OpenMP) and on GPUs (MPI + OpenACC), and it supersedes the deprecated CHASE.

Orszag-Tang vortex

What is implemented ​

AreaCapabilitiesDetails
PhysicsCompressible Euler; ideal MHD with mixed GLM divergence cleaning (or without control, for diagnostics); ideal gasPhysical models
SpaceWENO flux splitting (weno, orders 3–9, characteristic or conservative); WENO interpolation + Riemann flux + high-order correction (weno-riemann, LLF/HLL/HLLC for Euler)Numerical methods
TimeSSP and low-storage Runge–Kutta, CFL time step (with the GLM cleaning speed)Numerical methods
GridOctree/quadtree of Cartesian blocks, initialisation-time AMR (box, gradient and solid markers), 2:1 coarse–fine faces with conservative refluxNumerical methods
GeometryImmersed boundary for static solids (Euler)Numerical methods
CouplingMulti-realm runs glued by a forest manifestNumerical methods
Setup17 initial conditions (Riemann problems, vortices, Shu–Osher, Orszag–Tang, rotor, field loop, linear waves, exact viscous states, ...), 6 boundary conditions (no-slip walls included)Initial conditions, Boundary conditions
InputOne INI file per realm, every value checkedInput reference
OutputXDMF + HDF5 checkpoints (ParaView), restart, slices, residual, conservation and div(B) historiesInput reference
VerificationExact solutions, convergence orders, symmetry and conservation oracles on both backendsVerification gallery

Status. Milestones M1 to M5 are complete: M1 Euler (#35), M2 ideal MHD with GLM (#41), M3 (#47) the Riemann-solver scheme (weno-riemann, Euler and MHD), the energy-consistent EGLM cleaning and a positivity-preserving limiter, and M4 (#65) the dissipative terms: compressible Navier–Stokes (viscosity and heat conduction, 4th-order conservative fluxes, no-slip walls) for every model and Ohmic resistivity for MHD, on both backends, conservative across AMR seams and realms (second order at a 2:1 seam, as the inviscid fluxes). M5 (#74) runtime AMR: both backends regrid during the run ([amr] frequency), with a conservative limited prolongation, combined markers (gradient, Löhner, box, solid) and restarts across regrids (setting it up).

Quick start ​

Build (FoBiS, from the repository root):

bash
fobis build --mode flume-cpu-gnu                         # CPU backend
fobis build --mode flume-fnl-nvf --varset local_nvf      # GPU backend (OpenACC, NVIDIA HPC SDK)

Run the Sod shock tube of the verification suite:

bash
cd src/tests/flume/verification/sod
mpirun -np 2 ../../../../../exe/adam_flume_cpu sod-x.ini

The run writes sod-x-<iteration>.xdmf (open it with ParaView) and the residual and conservation histories. The input reference explains every key of sod-x.ini. To run the same problem with the Riemann-solver scheme, change its [numerics] section to

ini
[numerics]
scheme_space             = weno-riemann
reconstruction_variables = characteristic
riemann_solver           = hllc
flux_correction          = 6th
flux_correction_sensor   = weno
reflux                   = .true.

./check.sh in the same directory runs the three directions and compares them with the exact solution.

Pages ​

Known limitations ​

  • Seam div(B). A cell-centred B cannot be kept divergence-free across a 2:1 coarse–fine face (Tóth & Roe 2002): the seams inject a truncation-level ∇⋅B, which GLM keeps bounded; seam_max_divb in the div(B) history monitors it.
  • Positivity at very low plasma β. The floors alone do not hold it: without the positivity limiter the flux-splitting scheme stops on the Balsara–Spicer blast (β=2.5⋅10−4) at step 3 and on the Wu–Shu blast (β=2.51⋅10−6) at step 1. With [numerics] positivity_limiter = cell (M3, #47) both schemes run both to the end (positivity limiter). On the flux-splitting path at β≲10−3 the point symmetry and the CPU–FNL agreement then hold only to a grid-scale instability (#77, MHD blast symmetry); where they matter, use scheme_space = weno-riemann with riemann_solver = hlld.
  • GLM damping and reflux. With damping, ∫ψ is not conserved across 2:1 faces; the 8 physical integrals are.
  • The GPU backend copies the coarse–fine seam faces to the host at every stage (the flux register is host-side), in one transfer for all the faces of a rank since #90.
  • Inter-realm seams join cells of the same size (mirror) or across a 2:1 jump (refined, #52; octrees only, quadtrees are refused, #71); all realms advance with one time step (no subcycling).