OGS
MathLib::LisLinearSolver Class Referencefinal

Detailed Description

Linear solver using Lis (http://www.ssisc.org/lis/)

Definition at line 36 of file LisLinearSolver.h.

#include <LisLinearSolver.h>

Collaboration diagram for MathLib::LisLinearSolver:
[legend]

Public Member Functions

 LisLinearSolver (const std::string solver_name="", BaseLib::ConfigTree const *const option=nullptr)
 
void setOption (const LisOption &option)
 
bool solve (LisMatrix &A, LisVector &b, LisVector &x)
 

Private Attributes

LisOption lis_option_
 

Constructor & Destructor Documentation

◆ LisLinearSolver()

MathLib::LisLinearSolver::LisLinearSolver ( const std::string  solver_name = "",
BaseLib::ConfigTree const *const  option = nullptr 
)

Constructor

Parameters
solver_nameA name used as a prefix for command line options if there are such options available.
optionA pointer to a linear solver option. In case you omit this argument, default settings follow those of LisOption struct.

Definition at line 27 of file LisLinearSolver.cpp.

29  : lis_option_(option)
30 {
31 }

Member Function Documentation

◆ setOption()

void MathLib::LisLinearSolver::setOption ( const LisOption option)
inline

configure linear solvers

Parameters
option

Definition at line 54 of file LisLinearSolver.h.

54 { lis_option_ = option; }

References lis_option_.

Referenced by MathLib::EigenLisLinearSolver::solve().

◆ solve()

bool MathLib::LisLinearSolver::solve ( LisMatrix A,
LisVector b,
LisVector x 
)

Definition at line 33 of file LisLinearSolver.cpp.

34 {
36 
37  INFO("------------------------------------------------------------------");
38  INFO("*** LIS solver computation");
39 
40  // Create solver
41  LIS_SOLVER solver;
42  int ierr = lis_solver_create(&solver);
43  if (!checkLisError(ierr))
44  return false;
45 
46  lis_solver_set_option(const_cast<char*>(lis_option_.option_string_.c_str()),
47  solver);
48 #ifdef _OPENMP
49  INFO("-> number of threads: {:d}", (int)omp_get_max_threads());
50 #endif
51  {
52  int precon;
53  ierr = lis_solver_get_precon(solver, &precon);
54  if (!checkLisError(ierr))
55  return false;
56  INFO("-> precon: {:d}", precon);
57  }
58  {
59  int slv;
60  ierr = lis_solver_get_solver(solver, &slv);
61  if (!checkLisError(ierr))
62  return false;
63  INFO("-> solver: {:d}", slv);
64  }
65 
66  // solve
67  INFO("-> solve");
68  ierr =
69  lis_solve(A.getRawMatrix(), b.getRawVector(), x.getRawVector(), solver);
70  if (!checkLisError(ierr))
71  return false;
72 
73  LIS_INT linear_solver_status;
74  ierr = lis_solver_get_status(solver, &linear_solver_status);
75  if (!checkLisError(ierr))
76  return false;
77 
78  INFO("-> status: {:d}", linear_solver_status);
79 
80  {
81  int iter = 0;
82  ierr = lis_solver_get_iter(solver, &iter);
83  if (!checkLisError(ierr))
84  return false;
85 
86  INFO("-> iteration: {:d}", iter);
87  }
88  {
89  double resid = 0.0;
90  ierr = lis_solver_get_residualnorm(solver, &resid);
91  if (!checkLisError(ierr))
92  return false;
93  INFO("-> residual: {:g}", resid);
94  }
95  {
96  double time, itime, ptime, p_ctime, p_itime;
97  ierr = lis_solver_get_timeex(solver, &time, &itime, &ptime, &p_ctime,
98  &p_itime);
99  if (!checkLisError(ierr))
100  return false;
101  INFO("-> time total (s): {:g}", time);
102  INFO("-> time iterations (s): {:g}", itime);
103  INFO("-> time preconditioning (s): {:g}", ptime);
104  INFO("-> time precond. create (s): {:g}", p_ctime);
105  INFO("-> time precond. iter (s): {:g}", p_itime);
106  }
107 
108  // Clear solver
109  ierr = lis_solver_destroy(solver);
110  if (!checkLisError(ierr))
111  return false;
112  INFO("------------------------------------------------------------------");
113 
114  return linear_solver_status == LIS_SUCCESS;
115 }
void INFO(char const *fmt, Args const &... args)
Definition: Logging.h:32
bool checkLisError(int err)
Definition: LisCheck.h:32
bool finalizeMatrixAssembly(MAT_T &)
std::string option_string_
Definition: LisOption.h:56

References MathLib::checkLisError(), MathLib::finalizeMatrixAssembly(), MathLib::LisMatrix::getRawMatrix(), MathLib::LisVector::getRawVector(), INFO(), lis_option_, and MathLib::LisOption::option_string_.

Referenced by MathLib::EigenLisLinearSolver::solve().

Member Data Documentation

◆ lis_option_

LisOption MathLib::LisLinearSolver::lis_option_
private

Definition at line 59 of file LisLinearSolver.h.

Referenced by setOption(), and solve().


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