DUNE-ACFEM (unstable)

zeromodel.hh
1#ifndef __DUNE_ACFEM_MODELS_MODULES_ZEROMODEL_HH__
2#define __DUNE_ACFEM_MODELS_MODULES_ZEROMODEL_HH__
3
4#include "../../expressions/terminal.hh"
5
6#include "../modelbase.hh"
7#include "../modeltraits.hh"
8
9namespace Dune {
10
11 namespace ACFem::PDEModel {
12
27 template<class DomainFunctionSpace, class RangeFunctionSpace = DomainFunctionSpace>
29 : public ModelBase<DomainFunctionSpace, RangeFunctionSpace>
30 , public Expressions::SelfExpression<ZeroModel<DomainFunctionSpace, RangeFunctionSpace> >
31 , public ZeroExpression
32 {
33 public:
34 ZeroModel(const std::string& name = "")
35 : name_(name == "" ? "0" : name)
36 {}
37
38 std::string name() const
39 {
40 return name_;
41 }
42
43 protected:
44 const std::string name_;
45 };
46
75 template<class T, class F = Expressions::Closure,
76 std::enable_if_t<IsPDEModel<T>::value, int> = 0>
77 auto zeroModel(const T& t, const std::string& name, F closure = F{})
78 {
79 return closure(ZeroModel<typename T::DomainFunctionSpaceType, typename T::RangeFunctionSpaceType>(name));
80 }
81
86 template<class T, class F = Expressions::Closure, std::enable_if_t<IsPDEModel<T>::value, int> = 0>
87 auto zeroModel(const T&, F closure = F{})
88 {
89 return closure(ZeroModel<typename T::DomainFunctionSpaceType, typename T::RangeFunctionSpaceType>());
90 }
91
96 template<class T, class F = Expressions::Closure, std::enable_if_t<IsPDEModel<T>::value, int> = 0>
97 auto zeroModel(F closure = F{})
98 {
99 return closure(ZeroModel<typename T::DomainFunctionSpaceType, typename T::RangeFunctionSpaceType>());
100 }
101
103
105
107
108 } // namespace ACFem::PDEModel
109
110 namespace ACFem {
111
113
114 }
115
116} //Namespace Dune
117
118
119#endif // __DUNE_ACFEM_MODELS_ZEROMODEL_HH__
Define a simple zero model to optimize expression templates.
Definition: zeromodel.hh:32
auto zeroModel(F closure=F{})
Generate a zero model fitting the specified object.
Definition: zeromodel.hh:97
Terminals may derive from this class to express that they are expressions.
Definition: terminal.hh:25
A structure defining some basic default types and methods.
Definition: modelbase.hh:41
A tag structure which can be attached as base class to zero-expressions like the ZeroGridFunction,...
Definition: tags.hh:138
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 15, 22:36, 2024)