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 
9 namespace Dune {
10 
11  namespace ACFem::PDEModel {
12 
27  template<class DomainFunctionSpace, class RangeFunctionSpace = DomainFunctionSpace>
28  class ZeroModel
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 
112  using PDEModel::zeroModel;
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.80.0 (May 16, 22:29, 2024)