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

Table 5 Differences between IAMR and IAMReX

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 functionality

  • NavierStokes: 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 infrastructure

  • NavierStokes.H/cpp: Problem-specific solver implementation

  • NS_setup.cpp: Variable registration and boundary condition setup

  • DiffusedIB.H/cpp: Immersed boundary method implementation

  • Collision.H/cpp: Particle collision handling

Understanding the Flow

  1. Variable setup happens in NS_setup.cpp

  2. Time advancement occurs in NavierStokes::advance() methods

  3. Boundary conditions are applied via functions in NS_BC.H