libMesh
Loading...
Searching...
No Matches
dense_vector_base.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20#ifndef LIBMESH_DENSE_VECTOR_BASE_H
21#define LIBMESH_DENSE_VECTOR_BASE_H
22
23
24// Local Includes
25#include "libmesh/libmesh_common.h"
26#include "libmesh/int_range.h"
27
28// C++ includes
29
30namespace libMesh
31{
32
41template<typename T>
43{
44public:
48 DenseVectorBase() = default;
49
55 DenseVectorBase (const DenseVectorBase &) = default;
58 virtual ~DenseVectorBase() = default;
59
65 virtual void zero() = 0;
66
70 virtual T el(const unsigned int i) const = 0;
71
75 virtual T & el(const unsigned int i) = 0;
76
80 virtual unsigned int size() const = 0;
81
85 virtual bool empty() const { return (this->size() == 0); }
86
90 void print(std::ostream & os) const;
91
96 friend std::ostream & operator << (std::ostream & os, const DenseVectorBase<T> & v)
97 {
98 v.print(os);
99 return os;
100 }
101
106 void print_scientific(std::ostream & os, unsigned precision=8) const;
107};
108
109template<typename T>
110void DenseVectorBase<T>::print (std::ostream & os) const
111{
112 for (auto i : make_range(this->size()))
113 os << std::setw(8)
114 << this->el(i)
115 << std::endl;
116}
117
118} // namespace libMesh
119
120
121
122#endif // LIBMESH_DENSE_VECTOR_BASE_H
Defines an abstract dense vector base class for use in Finite Element-type computations.
void print(std::ostream &os) const
Pretty-print the vector to stdout.
virtual ~DenseVectorBase()=default
virtual void zero()=0
Set every element in the vector to 0.
DenseVectorBase & operator=(const DenseVectorBase &)=default
virtual T el(const unsigned int i) const =0
DenseVectorBase()=default
Constructor.
virtual unsigned int size() const =0
DenseVectorBase(DenseVectorBase &&)=default
The 5 special functions can be defaulted for this class, as it does not manage any memory itself.
virtual bool empty() const
DenseVectorBase(const DenseVectorBase &)=default
void print_scientific(std::ostream &os, unsigned precision=8) const
Prints the entries of the vector with additional decimal places in scientific notation.
friend std::ostream & operator<<(std::ostream &os, const DenseVectorBase< T > &v)
Same as above, but allows you to print using the usual stream syntax.
virtual T & el(const unsigned int i)=0
The libMesh namespace provides an interface to certain functionality in the library.
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition int_range.h:176