libMesh
include
numerics
fem_function_base.h
Go to the documentation of this file.
1
// The libMesh Finite Element Library.
2
// Copyright (C) 2002-2024 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_FEM_FUNCTION_BASE_H
21
#define LIBMESH_FEM_FUNCTION_BASE_H
22
23
// Local Includes
24
#include "libmesh/libmesh_common.h"
25
#include "libmesh/dense_vector.h"
// required to instantiate a DenseVector<> below
26
#include "libmesh/fem_context.h"
27
28
// C++ includes
29
#include <memory>
30
31
namespace
libMesh
32
{
33
34
// Forward Declarations
35
class
Point;
36
45
template
<
typename
Output=Number>
46
class
FEMFunctionBase
47
{
48
protected
:
49
53
FEMFunctionBase
() =
default
;
54
55
public
:
56
60
FEMFunctionBase
(
FEMFunctionBase
&&) =
default
;
61
FEMFunctionBase
(
const
FEMFunctionBase
&) =
default
;
62
FEMFunctionBase
&
operator=
(
const
FEMFunctionBase
&) =
default
;
63
FEMFunctionBase
&
operator=
(
FEMFunctionBase
&&) =
default
;
64
virtual
~FEMFunctionBase
() =
default
;
65
72
virtual
void
init_context
(
const
FEMContext
&) {}
73
81
virtual
std::unique_ptr<FEMFunctionBase<Output>>
clone
()
const
= 0;
82
89
virtual
Output
operator()
(
const
FEMContext
&,
90
const
Point
& p,
91
const
Real
time = 0.) = 0;
92
97
void
operator()
(
const
FEMContext
&,
98
const
Point
& p,
99
DenseVector<Output>
& output);
100
107
virtual
void
operator()
(
const
FEMContext
&,
108
const
Point
& p,
109
const
Real
time,
110
DenseVector<Output>
& output) = 0;
111
124
virtual
Output
component
(
const
FEMContext
&,
125
unsigned
int
i,
126
const
Point
& p,
127
Real
time=0.);
128
};
129
130
template
<
typename
Output>
131
inline
132
Output
FEMFunctionBase<Output>::component
(
const
FEMContext
& context,
133
unsigned
int
i,
134
const
Point
& p,
135
Real
time)
136
{
137
DenseVector<Output>
outvec(i+1);
138
(*this)(context, p, time, outvec);
139
return
outvec(i);
140
}
141
142
template
<
typename
Output>
143
inline
144
void
FEMFunctionBase<Output>::operator()
(
const
FEMContext
& context,
145
const
Point
& p,
146
DenseVector<Output>
& output)
147
{
148
// Call the time-dependent function with t=0.
149
this->operator()(context, p, 0., output);
150
}
151
152
}
// namespace libMesh
153
154
#endif // LIBMESH_FEM_FUNCTION_BASE_H
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
libMesh::FEMFunctionBase::operator=
FEMFunctionBase & operator=(const FEMFunctionBase &)=default
libMesh::FEMFunctionBase::init_context
virtual void init_context(const FEMContext &)
Prepares a context object for use.
Definition:
fem_function_base.h:72
libMesh::FEMContext
This class provides all data required for a physics package (e.g.
Definition:
fem_context.h:62
libMesh::FEMFunctionBase::FEMFunctionBase
FEMFunctionBase()=default
Constructor.
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition:
libmesh_common.h:143
libMesh::FEMFunctionBase::~FEMFunctionBase
virtual ~FEMFunctionBase()=default
libMesh::FEMFunctionBase::operator()
virtual Output operator()(const FEMContext &, const Point &p, const Real time=0.)=0
libMesh::FEMFunctionBase::component
virtual Output component(const FEMContext &, unsigned int i, const Point &p, Real time=0.)
Definition:
fem_function_base.h:132
libMesh::DenseVector< Output >
libMesh::FEMFunctionBase::clone
virtual std::unique_ptr< FEMFunctionBase< Output > > clone() const =0
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition:
point.h:39
Generated on Wed Mar 27 2024 17:39:12 for libMesh by
1.8.14