Key Differences Between IAMR and IAMeX
IAMR (Base)
NUM_STATE_MAX = AMREX_SPACEDIM+4(velocity + density + 2 tracers + temperature)Standard incompressible Navier-Stokes
IAMReX (Extended)
NUM_STATE_MAX = AMREX_SPACEDIM+5(adds level set field)Additional advance methods: -
advance_semistaggered_twophase_ls(): Two-phase flow with level sets -advance_semistaggered_fsi_diffusedib(): Fluid-structure interaction with particle collision
Comparison with Base IAMR
Features |
IAMR |
IAMReX |
|---|---|---|
State Variables |
4 (velocity, density, tracers, temperature) |
5 (adds level set) |
Interface Methods |
Varying densities |
Level set, immersed boundary, phase field (TBD) |
Particle Support |
Support particles as passive scalars only |
Support both passive scalars and 6-DOF fully-resolved particles with collisions |
Multi-Physics |
Single-phase only |
Multi-phase, fluid-solid interaction |
Collision Detection |
None |
DKT model and adaptive collision time model (TBD) |
GPU Support |
Basic AMReX |
Enhanced particle operations |
Software Architecture
Core Class Hierarchy
NavierStokesBase: Base class providing AMR infrastructure and core CFD functionalityNavierStokes: Derived class implementing specific solver methods
Key Components
State Management: Uses AMReX state descriptors for velocity, pressure, and scalars
Boundary Conditions: Defined in NS_BC.H with physical-to-mathematical BC mapping
Time Integration: Semi-implicit schemes with explicit advection and implicit diffusion
Projection Methods: MAC projection and nodal projection for incompressible flow
Level Set Support: Additional scalar fields for interface tracking of the multiphase flow
Fluid-structure interaction: Implements diffused immersed boundary method for FSI
Multiple resolved particles: Particle collision detection using spatial hashing
Key Files
NavierStokesBase.H/cpp: Core AMR and CFD infrastructureNavierStokes.H/cpp: Problem-specific solver implementationNS_setup.cpp: Variable registration and boundary condition setupDiffusedIB.H/cpp: Immersed boundary method implementationCollision.H/cpp: Particle collision handling
Understanding the Flow
Variable setup happens in
NS_setup.cppTime advancement occurs in
NavierStokes::advance()methodsBoundary conditions are applied via functions in NS_BC.H