Note: this is documentation for an old release. View the latest documentation at docs.fenicsproject.org/v0.1.0/v0.9.0/cpp
DOLFINx  0.1.0
DOLFINx C++ interface
VectorSpaceBasis.h
1 // Copyright (C) 2013-2019 Patrick E. Farrell and Garth N. Wells
2 //
3 // This file is part of DOLFINx (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include <memory>
10 #include <petscmat.h>
11 #include <vector>
12 
13 namespace dolfinx::la
14 {
15 class PETScVector;
16 
20 
22 {
23 public:
25  VectorSpaceBasis(const std::vector<std::shared_ptr<PETScVector>>& basis);
26 
28  VectorSpaceBasis(const VectorSpaceBasis& basis) = delete;
29 
31  VectorSpaceBasis(VectorSpaceBasis&& basis) = default;
32 
34  ~VectorSpaceBasis() = default;
35 
39  void orthonormalize(double tol = 1.0e-10);
40 
42  bool is_orthonormal(double tol = 1.0e-10) const;
43 
45  bool is_orthogonal(double tol = 1.0e-10) const;
46 
48  bool in_nullspace(const Mat A, double tol = 1.0e-10) const;
49 
51  void orthogonalize(PETScVector& x) const;
52 
54  int dim() const;
55 
57  std::shared_ptr<const PETScVector> operator[](int i) const;
58 
59 private:
60  const std::vector<std::shared_ptr<PETScVector>> _basis;
61 };
62 } // namespace dolfinx::la
dolfinx::la::VectorSpaceBasis::dim
int dim() const
Number of vectors in the basis.
Definition: VectorSpaceBasis.cpp:126
dolfinx::la::VectorSpaceBasis::orthogonalize
void orthogonalize(PETScVector &x) const
Orthogonalize x with respect to basis.
Definition: VectorSpaceBasis.cpp:115
dolfinx::la
Linear algebra interface.
Definition: sparsitybuild.h:14
dolfinx::la::VectorSpaceBasis::operator[]
std::shared_ptr< const PETScVector > operator[](int i) const
Get a particular basis vector.
Definition: VectorSpaceBasis.cpp:128
dolfinx::la::PETScVector
A simple wrapper for a PETSc vector pointer (Vec). Its main purpose is to assist with memory/lifetime...
Definition: PETScVector.h:95
dolfinx::la::VectorSpaceBasis::is_orthonormal
bool is_orthonormal(double tol=1.0e-10) const
Test if basis is orthonormal.
Definition: VectorSpaceBasis.cpp:49
dolfinx::la::VectorSpaceBasis::is_orthogonal
bool is_orthogonal(double tol=1.0e-10) const
Test if basis is orthogonal.
Definition: VectorSpaceBasis.cpp:69
dolfinx::la::VectorSpaceBasis
This class defines a basis for vector spaces, typically used for expressing nullspaces of singular op...
Definition: VectorSpaceBasis.h:21
dolfinx::la::VectorSpaceBasis::~VectorSpaceBasis
~VectorSpaceBasis()=default
Destructor.
dolfinx::la::VectorSpaceBasis::VectorSpaceBasis
VectorSpaceBasis(const std::vector< std::shared_ptr< PETScVector >> &basis)
Constructor.
Definition: VectorSpaceBasis.cpp:16
dolfinx::la::VectorSpaceBasis::in_nullspace
bool in_nullspace(const Mat A, double tol=1.0e-10) const
Test if basis is in null space of A.
Definition: VectorSpaceBasis.cpp:90
dolfinx::la::VectorSpaceBasis::orthonormalize
void orthonormalize(double tol=1.0e-10)
Apply the Gram-Schmidt process to orthonormalize the basis. Throws an error if a (near) linear depend...
Definition: VectorSpaceBasis.cpp:23