Introduction
The Flash-X code is a component-based software system for building multiphysics simulation applications that are formulated largely as a collection of partial and ordinary differential equations as well as algebraic equations. The maintained code components are written in a combination of high level languages such as Fortran, C and C++. Flash-X is accompanied by several tools written in Python or C++ that provide configurability and performance portability to the code. The distribution includes several existing application configurations and tests for exercising these configurations. A unit-test framework is also embedded in the code. The code uses the Message-Passing Interface (MPI) library for communication between compute nodes, though more than one MPI rank can also be placed on a node. HDF5 is the default mode for IO. Flash-X has three interchangeable discretization grids: a Uniform Grid, an oct-tree based adaptive grid using the Paramesh library, and a block-structured adaptive grid using AMReX library, which also mimics an oct-tree-like layout for use in Flash-X.
The precursor of Flash-X is FLASH, which was developed at the University of Chicago, and is now available from University of Rochester. Flash-X has been architected from the outset to be compatible with increasing heterogeneity of both the platforms and the solvers within the code. The Flash-X distribution includes solvers for compressible and incompressible fluids, and several other solvers needed for astrophysics and fluid-structure interaction applications. Not all physics and/or general solvers from FLASH have been migrated to Flash-X. However, the code that is now part of Flash-X has transitioned to open development and community based governance. The expectation is that the code will grow with community contributions. Additionally, some external solvers can be included as add-ons in the configuration of applications, because those solvers have been designed to be compatible with Flash-X.