openCARP
Doxygen code documentation for the open cardiac electrophysiology simulator openCARP
fem
slimfem
src
SF_abstract_lin_solver.h
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: Copyright (c) NumeriCor GmbH
2
// SPDX-License-Identifier: Apache-2.0
3
4
#ifndef _SF_ABSTRACT_LIN_SOLVER_H
5
#define _SF_ABSTRACT_LIN_SOLVER_H
6
7
#include "
SF_abstract_matrix.h
"
8
#include "
SF_abstract_vector.h
"
9
10
namespace
SF
{
11
24
template
<
class
T,
class
S>
25
struct
abstract_linear_solver
26
{
27
std::string
name
;
28
const
char
*
options_file
;
29
31
enum
norm_t
{
absPreResidual
,
absUnpreResidual
,
relResidual
,
absPreRelResidual
,
norm_unset
};
32
norm_t
norm
=
norm_unset
;
33
34
// solver statistics
35
SF_real
final_residual
= -1.0;
36
SF_real
time
= 0.0;
37
SF_int
niter
= -1;
38
SF_int
max_it
= 0;
39
SF_int
reason
= 0;
40
47
virtual
void
operator()
(
abstract_vector<T,S>
& x,
const
abstract_vector<T,S>
& b) = 0;
48
50
virtual
~abstract_linear_solver
() =
default
;
51
63
virtual
void
setup_solver
(
abstract_matrix<T, S>
& mat,
double
tol,
int
max_it
,
64
short
norm
, std::string
name
,
bool
has_nullspace,
65
void
* logger,
// TODO: maybe solver logging needs to be revisited
66
const
char
* solver_opts_file,
67
const
char
* default_opts) = 0;
68
69
protected
:
79
virtual
void
set_stopping_criterion
(
norm_t
normtype,
double
tol,
int
max_it
,
80
bool
verbose,
void
* logger) = 0;
81
89
norm_t
convert_param_norm_type
(
short
param_norm_type)
const
90
{
91
norm_t
normtype =
absPreResidual
;
92
93
switch
(param_norm_type) {
94
default
:
95
case
0: normtype =
absPreResidual
;
break
;
96
case
1: normtype =
absUnpreResidual
;
break
;
97
case
2: normtype =
relResidual
;
break
;
98
case
3: normtype =
absPreRelResidual
;
break
;
99
}
100
101
return
normtype;
102
}
103
};
104
105
}
// namespace SF
106
107
108
#endif
// _SF_ABSTRACT_LIN_SOLVER_H
SF_abstract_matrix.h
SF_abstract_vector.h
SF_real
opencarp::real_t SF_real
Global scalar type.
Definition:
SF_globals.h:18
SF_int
opencarp::global_index_t SF_int
Global algebraic index type.
Definition:
SF_globals.h:17
SF::abstract_matrix
Definition:
SF_abstract_matrix.h:30
SF::abstract_vector
Definition:
SF_abstract_vector.h:41
SF
Definition:
dense_mat.hpp:19
SF::abstract_linear_solver
Definition:
SF_abstract_lin_solver.h:26
SF::abstract_linear_solver::max_it
SF_int max_it
max number of iterations
Definition:
SF_abstract_lin_solver.h:38
SF::abstract_linear_solver::norm
norm_t norm
Definition:
SF_abstract_lin_solver.h:32
SF::abstract_linear_solver::convert_param_norm_type
norm_t convert_param_norm_type(short param_norm_type) const
Definition:
SF_abstract_lin_solver.h:89
SF::abstract_linear_solver::norm_t
norm_t
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::absPreRelResidual
@ absPreRelResidual
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::absPreResidual
@ absPreResidual
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::relResidual
@ relResidual
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::norm_unset
@ norm_unset
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::absUnpreResidual
@ absUnpreResidual
Definition:
SF_abstract_lin_solver.h:31
SF::abstract_linear_solver::niter
SF_int niter
number of iterations
Definition:
SF_abstract_lin_solver.h:37
SF::abstract_linear_solver::final_residual
SF_real final_residual
Holds the residual after convergence.
Definition:
SF_abstract_lin_solver.h:35
SF::abstract_linear_solver::set_stopping_criterion
virtual void set_stopping_criterion(norm_t normtype, double tol, int max_it, bool verbose, void *logger)=0
SF::abstract_linear_solver::options_file
const char * options_file
the file containing the solver options
Definition:
SF_abstract_lin_solver.h:28
SF::abstract_linear_solver::~abstract_linear_solver
virtual ~abstract_linear_solver()=default
SF::abstract_linear_solver::time
SF_real time
solver runtime
Definition:
SF_abstract_lin_solver.h:36
SF::abstract_linear_solver::reason
SF_int reason
number of iterations
Definition:
SF_abstract_lin_solver.h:39
SF::abstract_linear_solver::name
std::string name
the solver name
Definition:
SF_abstract_lin_solver.h:27
SF::abstract_linear_solver::setup_solver
virtual void setup_solver(abstract_matrix< T, S > &mat, double tol, int max_it, short norm, std::string name, bool has_nullspace, void *logger, const char *solver_opts_file, const char *default_opts)=0
SF::abstract_linear_solver::operator()
virtual void operator()(abstract_vector< T, S > &x, const abstract_vector< T, S > &b)=0
Generated by
1.9.1