src/LinSys/Solver.h file

Charm++ chare linear system merger group to solve a linear system.


Charm++ chare linear system merger group used to collect and assemble the left hand side matrix (lhs), the right hand side (rhs) vector, and the solution (unknown) vector from individual worker chares. Beside collection and assembly, the system is also solved. The solution is outsourced to hypre, an MPI-only library. Once the solution is available, the individual worker chares are updated with the new solution.

This class assembles and solves two linear systems, whose rhs vectors may change during time stepping. One of the two linear systems is called a high-order and the other one is the low-order linear system.

Characteristics of the low-order linear system: (1) the left hand side matrix is diagonal, (2) the right hand side vector is a combination of the high-order right hand side vector and another vector, assembled separately (and overlapped with that of the high-order system). This dual system solution is done here as required by the flux-corrected transport algorithm used for transport equations in inciter.

The implementation uses the Charm++ runtime system and is fully asynchronous, overlapping computation and communication. The algorithm utilizes the structured dagger (SDAG) Charm++ functionality. The high-level overview of the algorithm structure and how it interfaces with Charm++ is discussed in the Charm++ interface file src/LinSys/


namespace tk
Toolkit declarations and definitions for general purpose utilities.


class tk::SolverShadow
class tk::Solver