Advanced Multi-Physics (AMP)
On-Line Documentation
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
AMP::Solver::SolverStrategy Class Referenceabstract

#include <SolverStrategy.h>

Inheritance diagram for AMP::Solver::SolverStrategy:
Inheritance graph
[legend]

Public Types

typedef std::shared_ptr< AMP::Solver::SolverStrategyshared_ptr
 
enum class  SolverStatus {
  ConvergedOnAbsTol , ConvergedOnRelTol , ConvergedUserCondition , MaxIterations ,
  DivergedLineSearch , DivergedStepSize , DivergedFunctionCount , DivergedOnNan ,
  DivergedNestedSolver , DivergedOther
}
 

Public Member Functions

virtual void apply (std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< AMP::LinearAlgebra::Vector > u)=0
 
AMP::Scalar getAbsoluteTolerance () const
 
bool getConverged (void) const
 
SolverStatus getConvergenceStatus (void) const
 
std::string getConvergenceStatusString (void) const
 
int getDebugPrintInfoLevel (void)
 
AMP::Utilities::ExecutionSpace getExecutionSpace () const
 
std::shared_ptr< AMP::LinearAlgebra::VectorgetFunctionScaling ()
 
virtual AMP::Scalar getInitialResidual (void) const
 
virtual const std::vector< int > & getIterationHistory (void)
 
virtual int getIterations (void) const
 
int getMaxIterations (void) const
 
virtual std::shared_ptr< SolverStrategygetNestedSolver (void)
 
virtual std::shared_ptr< AMP::Operator::OperatorgetOperator (void)
 
AMP::Scalar getRelativeTolerance () const
 
virtual AMP::Scalar getResidualNorm (void) const
 
std::shared_ptr< AMP::LinearAlgebra::VectorgetSolutionScaling ()
 
int getTotalNumberOfIterations (void)
 
virtual void initialize (std::shared_ptr< const SolverStrategyParameters > parameters)
 
virtual void print (std::ostream &)
 
virtual void printConvergenceStatus (SolverStrategy::SolverStatus, std::ostream &=AMP::pout) const
 
virtual void printStatistics (std::ostream &os=AMP::pout)
 
virtual void registerOperator (std::shared_ptr< AMP::Operator::Operator > op)
 
virtual void registerWriter (std::shared_ptr< AMP::IO::Writer > writer)
 Registers a writer with the solver.
 
virtual void reset (std::shared_ptr< SolverStrategyParameters > parameters)
 
virtual void resetOperator (std::shared_ptr< const AMP::Operator::OperatorParameters > parameters)
 
virtual void residual (std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< const AMP::LinearAlgebra::Vector > u, std::shared_ptr< AMP::LinearAlgebra::Vector > r)
 
virtual void setAbsoluteTolerance (AMP::Scalar abs_tol)
 
void setComponentScalings (std::shared_ptr< AMP::LinearAlgebra::Vector > s, std::shared_ptr< AMP::LinearAlgebra::Vector > f)
 for multiphysics problems it may be necessary to scale the solution
 
virtual void setDebugPrintInfoLevel (int print_level)
 
void setExecutionSpace (AMP::Utilities::ExecutionSpace space)
 
virtual void setInitialGuess (std::shared_ptr< AMP::LinearAlgebra::Vector > initialGuess)
 
void setIsNestedSolver (bool is_nested)
 Tell a solver that it is nested inside some outer solver.
 
virtual void setMaxIterations (const int max_iterations)
 
virtual void setNestedSolver (std::shared_ptr< SolverStrategy > solver)
 
virtual void setRelativeTolerance (AMP::Scalar rel_tol)
 
virtual void setZeroInitialGuess (bool use_zero_guess)
 
 SolverStrategy ()
 
 SolverStrategy (std::shared_ptr< const SolverStrategyParameters > parameters)
 
virtual std::string type () const =0
 Return the name of the solver.
 
virtual ~SolverStrategy ()
 

Static Public Member Functions

static std::string statusToString (SolverStatus status)
 

Protected Member Functions

virtual bool checkStoppingCriteria (AMP::Scalar res_norm, bool check_iters=true)
 
void getBaseFromInput (std::shared_ptr< AMP::Database > db)
 

Protected Attributes

bool d_bComputeResidual = false
 
bool d_bIsNestedSolver = false
 
bool d_bUseZeroInitialGuess = true
 
SolverStatus d_ConvergenceStatus = SolverStatus::DivergedOther
 
AMP::Scalar d_dAbsoluteTolerance = 1.0e-14
 
std::shared_ptr< AMP::Databased_db = nullptr
 
AMP::Scalar d_dInitialResidual
 
AMP::Scalar d_dRelativeTolerance = 1.0e-09
 
AMP::Scalar d_dResidualNorm
 
AMP::Utilities::ExecutionSpace d_exec_space = AMP::Utilities::ExecutionSpace::unspecified
 execution space for the solver
 
std::shared_ptr< AMP::Databased_global_db = nullptr
 
int d_iDebugPrintInfoLevel = 0
 
int d_iMaxIterations = 0
 
int d_iNumberIterations = 0
 
int d_iObjectId
 
std::vector< intd_iterationHistory
 keeps track of iteration statistics over solver lifetime
 
AMP::Utilities::MemoryType d_memory_location = AMP::Utilities::MemoryType::none
 memory storage address space
 
std::shared_ptr< AMP::LinearAlgebra::Vectord_pFunctionScaling
 
std::shared_ptr< AMP::Solver::SolverStrategyd_pNestedSolver = nullptr
 nested solver used by this solver
 
std::shared_ptr< AMP::Operator::Operatord_pOperator = nullptr
 
std::shared_ptr< AMP::LinearAlgebra::Vectord_pSolutionScaling
 
std::string d_sName
 
std::shared_ptr< AMP::IO::Writerd_writer = nullptr
 

Static Protected Attributes

static int d_iInstanceId
 

Detailed Description

Class SolverStrategy is a base class for methods to solve equations of the form \(A(u) = f\). $A$ may be a nonlinear or linear operator.

Definition at line 27 of file SolverStrategy.h.

Member Typedef Documentation

◆ shared_ptr

Definition at line 30 of file SolverStrategy.h.

Member Enumeration Documentation

◆ SolverStatus

Enumerator
ConvergedOnAbsTol 
ConvergedOnRelTol 
ConvergedUserCondition 
MaxIterations 
DivergedLineSearch 
DivergedStepSize 
DivergedFunctionCount 
DivergedOnNan 
DivergedNestedSolver 
DivergedOther 

Definition at line 62 of file SolverStrategy.h.

Constructor & Destructor Documentation

◆ SolverStrategy() [1/2]

AMP::Solver::SolverStrategy::SolverStrategy ( )

Default constructor

◆ SolverStrategy() [2/2]

AMP::Solver::SolverStrategy::SolverStrategy ( std::shared_ptr< const SolverStrategyParameters parameters)
explicit

Main constructor for the base class.

Parameters
[in]parametersThe parameters object contains a database object which must contain the following fields:
  1. type: integer, name: max_iterations (required) acceptable values (non-negative integer values)
  2. type: double, name: max_error, (required) acceptable values (non-negative real values)
  3. type: integer, name: print_info_level, default value: 0, acceptable values (non negative integer values, the higher the value the more verbose the debugging information provided)
  4. type: bool, name: zero_initial_guess, default value: false, acceptable values (TRUE, FALSE)

◆ ~SolverStrategy()

virtual AMP::Solver::SolverStrategy::~SolverStrategy ( )
virtual

Default destructor. Currently does not do anything.

Member Function Documentation

◆ apply()

virtual void AMP::Solver::SolverStrategy::apply ( std::shared_ptr< const AMP::LinearAlgebra::Vector f,
std::shared_ptr< AMP::LinearAlgebra::Vector u 
)
pure virtual

◆ checkStoppingCriteria()

virtual bool AMP::Solver::SolverStrategy::checkStoppingCriteria ( AMP::Scalar  res_norm,
bool  check_iters = true 
)
protectedvirtual

◆ getAbsoluteTolerance()

AMP::Scalar AMP::Solver::SolverStrategy::getAbsoluteTolerance ( ) const
inline

Definition at line 208 of file SolverStrategy.h.

References d_dAbsoluteTolerance.

◆ getBaseFromInput()

void AMP::Solver::SolverStrategy::getBaseFromInput ( std::shared_ptr< AMP::Database db)
protected

◆ getConverged()

bool AMP::Solver::SolverStrategy::getConverged ( void  ) const
inline

Definition at line 225 of file SolverStrategy.h.

References ConvergedUserCondition, and d_ConvergenceStatus.

◆ getConvergenceStatus()

SolverStatus AMP::Solver::SolverStrategy::getConvergenceStatus ( void  ) const
inline

Definition at line 230 of file SolverStrategy.h.

References d_ConvergenceStatus.

◆ getConvergenceStatusString()

std::string AMP::Solver::SolverStrategy::getConvergenceStatusString ( void  ) const
inline

Definition at line 232 of file SolverStrategy.h.

References d_ConvergenceStatus, and statusToString().

◆ getDebugPrintInfoLevel()

int AMP::Solver::SolverStrategy::getDebugPrintInfoLevel ( void  )
inline

Get level of diagnostic information printed during iterations.

Definition at line 137 of file SolverStrategy.h.

References d_iDebugPrintInfoLevel.

◆ getExecutionSpace()

AMP::Utilities::ExecutionSpace AMP::Solver::SolverStrategy::getExecutionSpace ( ) const
inline

Definition at line 269 of file SolverStrategy.h.

References d_exec_space.

◆ getFunctionScaling()

std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Solver::SolverStrategy::getFunctionScaling ( )
inline

Definition at line 267 of file SolverStrategy.h.

References d_pFunctionScaling.

◆ getInitialResidual()

virtual AMP::Scalar AMP::Solver::SolverStrategy::getInitialResidual ( void  ) const
inlinevirtual

Definition at line 241 of file SolverStrategy.h.

References d_dInitialResidual.

◆ getIterationHistory()

virtual const std::vector< int > & AMP::Solver::SolverStrategy::getIterationHistory ( void  )
inlinevirtual

Definition at line 243 of file SolverStrategy.h.

References d_iterationHistory.

◆ getIterations()

virtual int AMP::Solver::SolverStrategy::getIterations ( void  ) const
inlinevirtual

Return the number of iterations taken by the solver to converge.

Definition at line 142 of file SolverStrategy.h.

References d_iNumberIterations.

◆ getMaxIterations()

int AMP::Solver::SolverStrategy::getMaxIterations ( void  ) const
inline

Definition at line 218 of file SolverStrategy.h.

References d_iMaxIterations.

◆ getNestedSolver()

virtual std::shared_ptr< SolverStrategy > AMP::Solver::SolverStrategy::getNestedSolver ( void  )
inlinevirtual

Return a nested solver (eg preconditioner) if it exists. By default return a nullptr

Reimplemented in AMP::Solver::PetscSNESSolver.

Definition at line 172 of file SolverStrategy.h.

References d_pNestedSolver.

◆ getOperator()

virtual std::shared_ptr< AMP::Operator::Operator > AMP::Solver::SolverStrategy::getOperator ( void  )
virtual

Return a shared pointer to the operator registered with the solver.

◆ getRelativeTolerance()

AMP::Scalar AMP::Solver::SolverStrategy::getRelativeTolerance ( ) const
inline

Definition at line 212 of file SolverStrategy.h.

References d_dRelativeTolerance.

◆ getResidualNorm()

virtual AMP::Scalar AMP::Solver::SolverStrategy::getResidualNorm ( void  ) const
inlinevirtual

Definition at line 239 of file SolverStrategy.h.

References d_dResidualNorm.

◆ getSolutionScaling()

std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Solver::SolverStrategy::getSolutionScaling ( )
inline

Definition at line 266 of file SolverStrategy.h.

References d_pSolutionScaling.

◆ getTotalNumberOfIterations()

int AMP::Solver::SolverStrategy::getTotalNumberOfIterations ( void  )

◆ initialize()

virtual void AMP::Solver::SolverStrategy::initialize ( std::shared_ptr< const SolverStrategyParameters parameters)
virtual

◆ print()

virtual void AMP::Solver::SolverStrategy::print ( std::ostream &  )
inlinevirtual

Definition at line 237 of file SolverStrategy.h.

◆ printConvergenceStatus()

virtual void AMP::Solver::SolverStrategy::printConvergenceStatus ( SolverStrategy::SolverStatus  ,
std::ostream &  = AMP::pout 
) const
inlinevirtual

Reimplemented in AMP::Solver::PetscSNESSolver.

Definition at line 251 of file SolverStrategy.h.

◆ printStatistics()

virtual void AMP::Solver::SolverStrategy::printStatistics ( std::ostream &  os = AMP::pout)
inlinevirtual

Reimplemented in AMP::Solver::NonlinearKrylovAccelerator< T >.

Definition at line 220 of file SolverStrategy.h.

◆ registerOperator()

virtual void AMP::Solver::SolverStrategy::registerOperator ( std::shared_ptr< AMP::Operator::Operator op)
virtual

◆ registerWriter()

virtual void AMP::Solver::SolverStrategy::registerWriter ( std::shared_ptr< AMP::IO::Writer writer)
inlinevirtual

Registers a writer with the solver.

This function will register a writer with the solver. The solver may then register any vector components it "owns" with the writer.

Parameters
writerThe writer to register

Definition at line 186 of file SolverStrategy.h.

References d_writer.

◆ reset()

virtual void AMP::Solver::SolverStrategy::reset ( std::shared_ptr< SolverStrategyParameters parameters)
virtual

◆ resetOperator()

virtual void AMP::Solver::SolverStrategy::resetOperator ( std::shared_ptr< const AMP::Operator::OperatorParameters parameters)
virtual

Resets the operator registered with the solver with new parameters if necessary

Parameters
parametersOperatorParameters object that is NULL by default

Reimplemented in AMP::Solver::PetscKrylovSolver, AMP::Solver::BandedSolver, AMP::Solver::ColumnSolver, AMP::Solver::HypreSolver, AMP::Solver::CoupledFlow1DSolver, AMP::Solver::Flow1DSolver, AMP::Solver::PelletStackMechanicsSolver, AMP::Solver::TrilinosMLSolver, and AMP::Solver::TrilinosMueLuSolver.

◆ residual()

virtual void AMP::Solver::SolverStrategy::residual ( std::shared_ptr< const AMP::LinearAlgebra::Vector f,
std::shared_ptr< const AMP::LinearAlgebra::Vector u,
std::shared_ptr< AMP::LinearAlgebra::Vector r 
)
virtual

◆ setAbsoluteTolerance()

virtual void AMP::Solver::SolverStrategy::setAbsoluteTolerance ( AMP::Scalar  abs_tol)
inlinevirtual

Definition at line 210 of file SolverStrategy.h.

References d_dAbsoluteTolerance.

◆ setComponentScalings()

void AMP::Solver::SolverStrategy::setComponentScalings ( std::shared_ptr< AMP::LinearAlgebra::Vector s,
std::shared_ptr< AMP::LinearAlgebra::Vector f 
)
inline

for multiphysics problems it may be necessary to scale the solution

Definition at line 259 of file SolverStrategy.h.

References d_pFunctionScaling, and d_pSolutionScaling.

◆ setDebugPrintInfoLevel()

virtual void AMP::Solver::SolverStrategy::setDebugPrintInfoLevel ( int  print_level)
inlinevirtual

Specify level of diagnostic information printed during iterations.

Parameters
[in]print_levelinteger level value with permissible values 0 and higher. Setting to zero should provide minimial debugging information with higher values resulting in increasingly verbose information being printed out.

Definition at line 132 of file SolverStrategy.h.

References d_iDebugPrintInfoLevel.

◆ setExecutionSpace()

void AMP::Solver::SolverStrategy::setExecutionSpace ( AMP::Utilities::ExecutionSpace  space)
inline

Definition at line 270 of file SolverStrategy.h.

References d_exec_space.

◆ setInitialGuess()

virtual void AMP::Solver::SolverStrategy::setInitialGuess ( std::shared_ptr< AMP::LinearAlgebra::Vector initialGuess)
virtual

Provide the initial guess for the solver. This is a pure virtual function that the derived classes need to provide an implementation of.

Parameters
[in]initialGuessshared pointer to the initial guess vector.

Reimplemented in AMP::Solver::ColumnSolver, AMP::Solver::CoupledFlow1DSolver, AMP::Solver::Flow1DSolver, AMP::Solver::PetscSNESSolver, and AMP::Solver::TrilinosNOXSolver.

◆ setIsNestedSolver()

void AMP::Solver::SolverStrategy::setIsNestedSolver ( bool  is_nested)
inline

Tell a solver that it is nested inside some outer solver.

Definition at line 166 of file SolverStrategy.h.

References d_bIsNestedSolver.

◆ setMaxIterations()

virtual void AMP::Solver::SolverStrategy::setMaxIterations ( const int  max_iterations)
inlinevirtual

Definition at line 216 of file SolverStrategy.h.

References d_iMaxIterations.

◆ setNestedSolver()

virtual void AMP::Solver::SolverStrategy::setNestedSolver ( std::shared_ptr< SolverStrategy solver)
inlinevirtual

Set a nested solver, eg, Krylov for Newton, preconditioner for Krylov etc. Null op in base class

Definition at line 159 of file SolverStrategy.h.

References d_pNestedSolver.

◆ setRelativeTolerance()

virtual void AMP::Solver::SolverStrategy::setRelativeTolerance ( AMP::Scalar  rel_tol)
inlinevirtual

Definition at line 214 of file SolverStrategy.h.

References d_dRelativeTolerance.

◆ setZeroInitialGuess()

virtual void AMP::Solver::SolverStrategy::setZeroInitialGuess ( bool  use_zero_guess)
inlinevirtual

Tells the solver to use an initial guess of zero and not try to copy an initial guess into the solution vector

Parameters
[in]use_zero_guessboolean to specify whether zero initial guess should be used or not.

Reimplemented in AMP::Solver::PetscKrylovSolver.

Definition at line 150 of file SolverStrategy.h.

References d_bUseZeroInitialGuess.

◆ statusToString()

static std::string AMP::Solver::SolverStrategy::statusToString ( SolverStatus  status)
inlinestatic

◆ type()

virtual std::string AMP::Solver::SolverStrategy::type ( ) const
pure virtual

Member Data Documentation

◆ d_bComputeResidual

bool AMP::Solver::SolverStrategy::d_bComputeResidual = false
protected

Definition at line 295 of file SolverStrategy.h.

◆ d_bIsNestedSolver

bool AMP::Solver::SolverStrategy::d_bIsNestedSolver = false
protected

Definition at line 294 of file SolverStrategy.h.

Referenced by setIsNestedSolver().

◆ d_bUseZeroInitialGuess

bool AMP::Solver::SolverStrategy::d_bUseZeroInitialGuess = true
protected

Definition at line 292 of file SolverStrategy.h.

Referenced by AMP::Solver::OnePointSolver::apply(), and setZeroInitialGuess().

◆ d_ConvergenceStatus

SolverStatus AMP::Solver::SolverStrategy::d_ConvergenceStatus = SolverStatus::DivergedOther
protected

◆ d_dAbsoluteTolerance

AMP::Scalar AMP::Solver::SolverStrategy::d_dAbsoluteTolerance = 1.0e-14
protected

Definition at line 287 of file SolverStrategy.h.

Referenced by getAbsoluteTolerance(), and setAbsoluteTolerance().

◆ d_db

std::shared_ptr<AMP::Database> AMP::Solver::SolverStrategy::d_db = nullptr
protected

Definition at line 304 of file SolverStrategy.h.

◆ d_dInitialResidual

AMP::Scalar AMP::Solver::SolverStrategy::d_dInitialResidual
protected

Definition at line 285 of file SolverStrategy.h.

Referenced by getInitialResidual().

◆ d_dRelativeTolerance

AMP::Scalar AMP::Solver::SolverStrategy::d_dRelativeTolerance = 1.0e-09
protected

Definition at line 288 of file SolverStrategy.h.

Referenced by getRelativeTolerance(), and setRelativeTolerance().

◆ d_dResidualNorm

AMP::Scalar AMP::Solver::SolverStrategy::d_dResidualNorm
protected

Definition at line 284 of file SolverStrategy.h.

Referenced by getResidualNorm().

◆ d_exec_space

AMP::Utilities::ExecutionSpace AMP::Solver::SolverStrategy::d_exec_space = AMP::Utilities::ExecutionSpace::unspecified
protected

execution space for the solver

Definition at line 324 of file SolverStrategy.h.

Referenced by getExecutionSpace(), and setExecutionSpace().

◆ d_global_db

std::shared_ptr<AMP::Database> AMP::Solver::SolverStrategy::d_global_db = nullptr
protected

Pointer to global database This is temporary fix and eventually either d_global_db or d_db should go away This is introduced to allow for solver factories to access databases in the global database for the construction of nested solvers

Definition at line 311 of file SolverStrategy.h.

◆ d_iDebugPrintInfoLevel

int AMP::Solver::SolverStrategy::d_iDebugPrintInfoLevel = 0
protected

Definition at line 290 of file SolverStrategy.h.

Referenced by getDebugPrintInfoLevel(), and setDebugPrintInfoLevel().

◆ d_iInstanceId

int AMP::Solver::SolverStrategy::d_iInstanceId
staticprotected

Definition at line 299 of file SolverStrategy.h.

◆ d_iMaxIterations

int AMP::Solver::SolverStrategy::d_iMaxIterations = 0
protected

Definition at line 282 of file SolverStrategy.h.

Referenced by getMaxIterations(), and setMaxIterations().

◆ d_iNumberIterations

int AMP::Solver::SolverStrategy::d_iNumberIterations = 0
protected

Definition at line 280 of file SolverStrategy.h.

Referenced by getIterations().

◆ d_iObjectId

int AMP::Solver::SolverStrategy::d_iObjectId
protected

Definition at line 297 of file SolverStrategy.h.

◆ d_iterationHistory

std::vector<int> AMP::Solver::SolverStrategy::d_iterationHistory
protected

keeps track of iteration statistics over solver lifetime

Definition at line 302 of file SolverStrategy.h.

Referenced by getIterationHistory().

◆ d_memory_location

AMP::Utilities::MemoryType AMP::Solver::SolverStrategy::d_memory_location = AMP::Utilities::MemoryType::none
protected

memory storage address space

Definition at line 327 of file SolverStrategy.h.

◆ d_pFunctionScaling

std::shared_ptr<AMP::LinearAlgebra::Vector> AMP::Solver::SolverStrategy::d_pFunctionScaling
protected

Definition at line 314 of file SolverStrategy.h.

Referenced by getFunctionScaling(), and setComponentScalings().

◆ d_pNestedSolver

std::shared_ptr<AMP::Solver::SolverStrategy> AMP::Solver::SolverStrategy::d_pNestedSolver = nullptr
protected

nested solver used by this solver

Definition at line 319 of file SolverStrategy.h.

Referenced by getNestedSolver(), and setNestedSolver().

◆ d_pOperator

std::shared_ptr<AMP::Operator::Operator> AMP::Solver::SolverStrategy::d_pOperator = nullptr
protected

Definition at line 316 of file SolverStrategy.h.

◆ d_pSolutionScaling

std::shared_ptr<AMP::LinearAlgebra::Vector> AMP::Solver::SolverStrategy::d_pSolutionScaling
protected

Definition at line 313 of file SolverStrategy.h.

Referenced by getSolutionScaling(), and setComponentScalings().

◆ d_sName

std::string AMP::Solver::SolverStrategy::d_sName
protected

Definition at line 278 of file SolverStrategy.h.

◆ d_writer

std::shared_ptr<AMP::IO::Writer> AMP::Solver::SolverStrategy::d_writer = nullptr
protected

Definition at line 321 of file SolverStrategy.h.

Referenced by registerWriter().


The documentation for this class was generated from the following file:



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:45.
Comments on this page