svMultiPhysics
Loading...
Searching...
No Matches
PetscLinearAlgebra.h
1/* Copyright (c) Stanford University, The Regents of the University of California, and others.
2 *
3 * All Rights Reserved.
4 *
5 * See Copyright-SimVascular.txt for additional details.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining
8 * a copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject
13 * to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
19 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
22 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef PETSC_LINEAR_ALGEBRA_H
32#define PETSC_LINEAR_ALGEBRA_H
33
34#include "LinearAlgebra.h"
35
36/// @brief The PetscLinearAlgebra class implements the LinearAlgebra
37/// interface for the PETSc numerical linear algebra package.
38///
39class PetscLinearAlgebra : public virtual LinearAlgebra {
40
41 public:
44 virtual void alloc(ComMod& com_mod, eqType& lEq);
45 virtual void assemble(ComMod& com_mod, const int num_elem_nodes, const Vector<int>& eqN,
46 const Array3<double>& lK, const Array<double>& lR);
47 virtual void check_options(const consts::PreconditionerType prec_cond_type, const consts::LinearAlgebraType assembly_type);
48 virtual void initialize(ComMod& com_mod, eqType& lEq);
49 virtual void solve(ComMod& com_mod, eqType& lEq, const Vector<int>& incL, const Vector<double>& res);
50 virtual void set_assembly(consts::LinearAlgebraType assembly_type);
51 virtual void set_preconditioner(consts::PreconditionerType prec_type);
52
53 private:
54 static std::set<consts::LinearAlgebraType> valid_assemblers;
55 void initialize_fsils(ComMod& com_mod, eqType& lEq);
56 /// @brief The FsilsLinearAlgebra object used to assemble local element matrices.
57 LinearAlgebra* fsils_solver = nullptr;
58 // Private class used to hide PETSc implementation details.
59 class PetscImpl;
60 PetscImpl* impl = nullptr;
61 bool use_fsils_assembly = false;
62};
63
64#endif
65
The Array3 template class implements a simple interface to 3D arrays.
Definition Array3.h:52
The ComMod class duplicates the data structures in the Fortran COMMOD module defined in MOD....
Definition ComMod.h:1354
The LinearAlgebra class provides an abstract interface to linear algebra frameworks: FSILS,...
Definition LinearAlgebra.h:40
Definition petsc_impl.cpp:933
The PetscLinearAlgebra class implements the LinearAlgebra interface for the PETSc numerical linear al...
Definition PetscLinearAlgebra.h:39
virtual void initialize(ComMod &com_mod, eqType &lEq)
Initialize the PETSc framework.
Definition PetscLinearAlgebra.cpp:115
virtual void assemble(ComMod &com_mod, const int num_elem_nodes, const Vector< int > &eqN, const Array3< double > &lK, const Array< double > &lR)
Assemble local element arrays.
Definition PetscLinearAlgebra.cpp:85
virtual void set_preconditioner(consts::PreconditionerType prec_type)
Set the proconditioner.
Definition PetscLinearAlgebra.cpp:149
virtual void set_assembly(consts::LinearAlgebraType assembly_type)
Set the linear algebra package for assembly.
Definition PetscLinearAlgebra.cpp:129
virtual void solve(ComMod &com_mod, eqType &lEq, const Vector< int > &incL, const Vector< double > &res)
Solve a system of linear equations.
Definition PetscLinearAlgebra.cpp:162
virtual void check_options(const consts::PreconditionerType prec_cond_type, const consts::LinearAlgebraType assembly_type)
Check the validity of the precondition and assembly types options.
Definition PetscLinearAlgebra.cpp:92
virtual void alloc(ComMod &com_mod, eqType &lEq)
Allocate data arrays.
Definition PetscLinearAlgebra.cpp:79
The Vector template class is used for storing int and double data.
Definition Vector.h:50
Equation type.
Definition ComMod.h:1022