DOLFIN
DOLFIN C++ interface
GenericLinearSolver.h
1// Copyright (C) 2008-2013 Garth N. Wells
2//
3// This file is part of DOLFIN.
4//
5// DOLFIN is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Lesser General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// DOLFIN is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU Lesser General Public License for more details.
14//
15// You should have received a copy of the GNU Lesser General Public License
16// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
17
18#ifndef __GENERIC_LINEAR_SOLVER_H
19#define __GENERIC_LINEAR_SOLVER_H
20
21#include <vector>
22#include <memory>
23#include <dolfin/common/Variable.h>
24#include <dolfin/log/log.h>
25
26namespace dolfin
27{
28
29 // Forward declarations
30 class GenericLinearOperator;
31 class GenericMatrix;
32 class GenericVector;
33 class VectorSpaceBasis;
34
36
38 {
39 public:
40
42 virtual void
43 set_operator(std::shared_ptr<const GenericLinearOperator> A) = 0;
44
46 virtual void
47 set_operators(std::shared_ptr<const GenericLinearOperator> A,
48 std::shared_ptr<const GenericLinearOperator> P)
49 {
50 dolfin_error("GenericLinearSolver.h",
51 "set operator and preconditioner for linear solver",
52 "Not supported by current linear algebra backend");
53 }
54
56 virtual std::size_t solve(const GenericLinearOperator& A, GenericVector& x,
57 const GenericVector& b)
58 {
59 dolfin_error("GenericLinearSolver.h",
60 "solve linear system",
61 "Not supported by current linear algebra backend. Consider using solve(x, b)");
62 return 0;
63 }
64
66 virtual std::size_t solve(GenericVector& x, const GenericVector& b) = 0;
67
68 // FIXME: This should not be needed. Need to cleanup linear solver
69 // name jungle: default, lu, iterative, direct, krylov, etc
71 virtual std::string parameter_type() const
72 {
73 return "default";
74 }
75
78 {
79 this->parameters.update(parameters);
80 }
81
82 protected:
83
84 // Developer note: The functions here provide similar
85 // functionality as the as_type functions in the
86 // LinearAlgebraObject base class. The difference is that they
87 // specifically complain that a matrix is required, which gives a
88 // user a more informative error message from solvers that don't
89 // support matrix-free representation of linear operators.
90
95
99 static std::shared_ptr<const GenericMatrix>
100 require_matrix(std::shared_ptr<const GenericLinearOperator> A);
101
102 };
103
104}
105
106#endif
Definition: GenericLinearOperator.h:43
This class provides a general solver for linear systems Ax = b.
Definition: GenericLinearSolver.h:38
virtual std::size_t solve(const GenericLinearOperator &A, GenericVector &x, const GenericVector &b)
Solve linear system Ax = b.
Definition: GenericLinearSolver.h:56
virtual std::string parameter_type() const
Return parameter type: "krylov_solver" or "lu_solver".
Definition: GenericLinearSolver.h:71
virtual void set_operator(std::shared_ptr< const GenericLinearOperator > A)=0
Set operator (matrix)
virtual std::size_t solve(GenericVector &x, const GenericVector &b)=0
Solve linear system Ax = b.
virtual void set_operators(std::shared_ptr< const GenericLinearOperator > A, std::shared_ptr< const GenericLinearOperator > P)
Set operator (matrix) and preconditioner matrix.
Definition: GenericLinearSolver.h:47
virtual void update_parameters(const Parameters &parameters)
Update solver parameters (useful for LinearSolver wrapper)
Definition: GenericLinearSolver.h:77
static const GenericMatrix & require_matrix(const GenericLinearOperator &A)
Definition: GenericLinearSolver.cpp:25
This class defines a common interface for matrices.
Definition: GenericMatrix.h:47
This class defines a common interface for vectors.
Definition: GenericVector.h:48
Definition: Parameters.h:95
void update(const Parameters &parameters)
Update parameters with another set of parameters.
Definition: Parameters.cpp:245
Common base class for DOLFIN variables.
Definition: Variable.h:36
Parameters parameters
Parameters.
Definition: Variable.h:74
Definition: adapt.h:30
void dolfin_error(std::string location, std::string task, std::string reason,...)
Definition: log.cpp:129