svMultiPhysics
Loading...
Searching...
No Matches
PetscLinearAlgebra.h
1// SPDX-FileCopyrightText: Copyright (c) Stanford University, The Regents of the University of California, and others.
2// SPDX-License-Identifier: BSD-3-Clause
3
4#ifndef PETSC_LINEAR_ALGEBRA_H
5#define PETSC_LINEAR_ALGEBRA_H
6
7#include "LinearAlgebra.h"
8
9/// @brief The PetscLinearAlgebra class implements the LinearAlgebra
10/// interface for the PETSc numerical linear algebra package.
11///
12class PetscLinearAlgebra : public virtual LinearAlgebra {
13
14 public:
17 virtual void alloc(ComMod& com_mod, eqType& lEq);
18 virtual void assemble(ComMod& com_mod, const int num_elem_nodes, const Vector<int>& eqN,
19 const Array3<double>& lK, const Array<double>& lR);
20 virtual void check_options(const consts::PreconditionerType prec_cond_type, const consts::LinearAlgebraType assembly_type);
21 virtual void initialize(ComMod& com_mod, eqType& lEq);
22 virtual void solve(ComMod& com_mod, eqType& lEq, const Vector<int>& incL, const Vector<double>& res);
23 virtual void set_assembly(consts::LinearAlgebraType assembly_type);
24 virtual void set_preconditioner(consts::PreconditionerType prec_type);
25
26 private:
27 static std::set<consts::LinearAlgebraType> valid_assemblers;
28 void initialize_fsils(ComMod& com_mod, eqType& lEq);
29 /// @brief The FsilsLinearAlgebra object used to assemble local element matrices.
30 LinearAlgebra* fsils_solver = nullptr;
31 // Private class used to hide PETSc implementation details.
32 class PetscImpl;
33 PetscImpl* impl = nullptr;
34 bool use_fsils_assembly = false;
35};
36
37#endif
38
The Array3 template class implements a simple interface to 3D arrays.
Definition Array3.h:25
The ComMod class duplicates the data structures in the Fortran COMMOD module defined in MOD....
Definition ComMod.h:1514
The LinearAlgebra class provides an abstract interface to linear algebra frameworks: FSILS,...
Definition LinearAlgebra.h:13
Definition petsc_impl.cpp:906
The PetscLinearAlgebra class implements the LinearAlgebra interface for the PETSc numerical linear al...
Definition PetscLinearAlgebra.h:12
virtual void initialize(ComMod &com_mod, eqType &lEq)
Initialize the PETSc framework.
Definition PetscLinearAlgebra.cpp:88
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:58
virtual void set_preconditioner(consts::PreconditionerType prec_type)
Set the proconditioner.
Definition PetscLinearAlgebra.cpp:122
virtual void set_assembly(consts::LinearAlgebraType assembly_type)
Set the linear algebra package for assembly.
Definition PetscLinearAlgebra.cpp:102
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:135
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:65
virtual void alloc(ComMod &com_mod, eqType &lEq)
Allocate data arrays.
Definition PetscLinearAlgebra.cpp:52
The Vector template class is used for storing int and double data.
Definition Vector.h:23
Equation type.
Definition ComMod.h:1069