Linear Solvers and Systems Interface¶
Linear Systems¶
-
class
LinearSystem¶ Subclassed by sierra::nalu::TpetraLinearSystem
Public Functions
-
virtual void
buildDirichletNodeGraph(const stk::mesh::PartVector&)¶ Process nodes that belong to Dirichlet-type BC.
-
virtual void
buildDirichletNodeGraph(const std::vector<stk::mesh::Entity>&)¶ Process nodes as belonging to a Dirichlet-type row.
See the documentation/implementation of sierra::nalu::FixPressureAtNodeAlgorithm for an example of this use case.
-
virtual void
resetRows(std::vector<stk::mesh::Entity> nodeList, const unsigned beginPos, const unsigned endPos) = 0¶ Reset LHS and RHS for the given set of nodes to 0.
- Parameters
nodeList: A list of STK node entities whose rows are zeroed outbeginPos: Starting index (usually 0)endPos: Terminating index (1 for scalar quantities; nDim for vectors)
-
virtual void
-
class
TpetraLinearSystem: public sierra::nalu::LinearSystem¶ Public Functions
-
virtual void
resetRows(const std::vector<stk::mesh::Entity> nodeList, const unsigned beginPos, const unsigned endPos)¶ Reset LHS and RHS for the given set of nodes to 0.
- Parameters
nodeList: A list of STK node entities whose rows are zeroed outbeginPos: Starting index (usually 0)endPos: Terminating index (1 for scalar quantities; nDim for vectors)
-
virtual void
Warning
doxygenclass: Cannot find class “sierra::nalu::HypreLinearSystem” in doxygen xml output for project “nalu” from directory: ./doxygen/xml
Linear Solvers Interface¶
-
class
LinearSolver¶ An abstract representation of a linear solver in Nalu.
Defines the basic API supported by the linear solvers for use within Nalu. See concrete implementations such as sierra::nalu::TpetraLinearSolver for more details.
Subclassed by sierra::nalu::TpetraLinearSolver
Public Functions
-
virtual PetraType
getType() = 0¶ Type of solver instance as defined in sierra::nalu::PetraType.
-
virtual void
destroyLinearSolver() = 0¶ Utility method to cleanup solvers during simulation.
-
bool &
recomputePreconditioner()¶ Flag indicating whether the preconditioner is recomputed on each invocation.
-
bool &
reusePreconditioner()¶ Flag indicating whether the preconditioner is reused on each invocation.
-
void
zero_timer_precond()¶ Reset the preconditioner timer to 0.0 for future accumulation.
-
double
get_timer_precond()¶ Get the preconditioner timer for the last invocation.
-
bool &
activeMueLu()¶ Flag indicating whether the user has activated MueLU.
-
LinearSolverConfig *
getConfig()¶ Get the solver configuration specified in the input file.
Public Members
-
std::string
name_¶ User-friendly identifier for this particular solver instance.
-
virtual PetraType
-
class
TpetraLinearSolver: public sierra::nalu::LinearSolver¶ Public Functions
-
TpetraLinearSolver(std::string solverName, TpetraLinearSolverConfig *config, const Teuchos::RCP<Teuchos::ParameterList> params, const Teuchos::RCP<Teuchos::ParameterList> paramsPrecond, LinearSolvers *linearSolvers)¶ - Parameters
[in] solverName: The name of the solver[in] config: Solver configuration
-
virtual void
destroyLinearSolver()¶ Utility method to cleanup solvers during simulation.
-
void
setMueLu()¶ Initialize the MueLU preconditioner before solve.
-
int
residual_norm(int whichNorm, Teuchos::RCP<LinSys::Vector> sln, double &norm)¶ Compute the norm of the non-linear solution vector.
- Parameters
[in] whichNorm: [0, 1, 2] norm to be computed[in] sln: The solution vector[out] norm: The norm of the solution vector
-
int
solve(Teuchos::RCP<LinSys::Vector> sln, int &iterationCount, double &scaledResidual, bool isFinalOuterIter)¶ Solve the linear system Ax = b.
- Parameters
[out] sln: The solution vector[out] iterationCount: The number of linear solver iterations to convergence[out] scaledResidual: The final residual norm[in] isFinalOuterIter: Is this the final outer iteration
-
virtual PetraType
getType()¶ Type of solver instance as defined in sierra::nalu::PetraType.
-
Warning
doxygenclass: Cannot find class “sierra::nalu::HypreDirectSolver” in doxygen xml output for project “nalu” from directory: ./doxygen/xml
-
class
LinearSolvers¶ Collection of solvers and their associated configuration.
This class performs the following actions within a Nalu simulation:
Parse the
linear_solverssection and create a mapping of user-defined configurations.Create solvers for specific equation system and update the mapping
Public Functions
-
void
load(const YAML::Node &node)¶ Parse the
linear_solverssection from Nalu input file.
-
LinearSolver *
create_solver(std::string solverBlockName, EquationType theEQ)¶ Create a solver for the EquationSystem.
- Parameters
[in] solverBlockName: The name specified in the input file, e.g., solve_scalar[in] theEQ: The type of equation
Public Members
-
SolverMap
solvers_¶ Mapping of solver instances to the EquationType.
-
SolverTpetraConfigMap
solverTpetraConfig_¶ A lookup table of solver configurations against the names provided in the input file when the
typeistpetra
-
Simulation &
sim_¶ Reference to the sierra::nalu::Simulation instance.
Solver Configuration¶
-
class
LinearSolverConfig¶ Subclassed by sierra::nalu::TpetraLinearSolverConfig
-
class
TpetraLinearSolverConfig: public sierra::nalu::LinearSolverConfig¶
Warning
doxygenclass: Cannot find class “sierra::nalu::HypreLinearSolverConfig” in doxygen xml output for project “nalu” from directory: ./doxygen/xml