dune-pdelab  2.7-git
default/localassembler.hh
Go to the documentation of this file.
1 #ifndef DUNE_PDELAB_GRIDOPERATOR_DEFAULT_LOCALASSEMBLER_HH
2 #define DUNE_PDELAB_GRIDOPERATOR_DEFAULT_LOCALASSEMBLER_HH
3 
4 #include <dune/typetree/typetree.hh>
5 
12 
13 namespace Dune{
14  namespace PDELab{
15 
30  template<typename GO, typename LOP, bool nonoverlapping_mode = false>
32  public Dune::PDELab::LocalAssemblerBase<typename GO::Traits::MatrixBackend,
33  typename GO::Traits::TrialGridFunctionSpaceConstraints,
34  typename GO::Traits::TestGridFunctionSpaceConstraints>
35  {
36  public:
37 
40 
42  typedef typename Traits::Residual::ElementType RangeField;
43  typedef RangeField Real;
44 
47 
50 
53 
55  typedef LOP LocalOperator;
56 
57  static const bool isNonOverlapping = nonoverlapping_mode;
58 
61  // Types of local function spaces
66 
68 
75 
76  // friend declarations such that engines are able to call scatter_jacobian() and add_entry() from base class
80 
82  DefaultLocalAssembler (LOP & lop, std::shared_ptr<typename GO::BorderDOFExchanger> border_dof_exchanger)
83  : lop_(lop), weight_(1.0), doPreProcessing_(true), doPostProcessing_(true),
84  pattern_engine(*this,border_dof_exchanger), residual_engine(*this), jacobian_engine(*this)
85  , jacobian_apply_engine(*this)
86  , _reconstruct_border_entries(isNonOverlapping)
87  {}
88 
90  DefaultLocalAssembler (LOP & lop, const CU& cu, const CV& cv,
91  std::shared_ptr<typename GO::BorderDOFExchanger> border_dof_exchanger)
92  : Base(cu, cv),
93  lop_(lop), weight_(1.0), doPreProcessing_(true), doPostProcessing_(true),
94  pattern_engine(*this,border_dof_exchanger), residual_engine(*this), jacobian_engine(*this)
95  , jacobian_apply_engine(*this)
96  , _reconstruct_border_entries(isNonOverlapping)
97  {}
98 
101  {
102  return lop_;
103  }
104 
106  const LOP &localOperator() const
107  {
108  return lop_;
109  }
110 
114  void setTime(Real time_)
115  {
116  lop_.setTime(time_);
117  }
118 
121  {
122  return weight_;
123  }
124 
127  weight_ = weight;
128  }
129 
132  void preStage (Real time_, int r_) { lop_.preStage(time_,r_); }
133  void preStep (Real time_, Real dt_, std::size_t stages_){ lop_.preStep(time_,dt_,stages_); }
134  void postStep (){ lop_.postStep(); }
135  void postStage (){ lop_.postStage(); }
136  Real suggestTimestep (Real dt) const{return lop_.suggestTimestep(dt); }
138 
140  {
141  return _reconstruct_border_entries;
142  }
143 
146 
151  {
152  pattern_engine.setPattern(p);
153  return pattern_engine;
154  }
155 
159  (typename Traits::Residual & r, const typename Traits::Solution & x)
160  {
161  residual_engine.setResidual(r);
162  residual_engine.setSolution(x);
163  return residual_engine;
164  }
165 
169  (typename Traits::Jacobian & a, const typename Traits::Solution & x)
170  {
171  jacobian_engine.setJacobian(a);
172  jacobian_engine.setSolution(x);
173  return jacobian_engine;
174  }
175 
179  (const typename Traits::Domain & update, typename Traits::Range & result)
180  {
181  jacobian_apply_engine.setUpdate(update);
182  jacobian_apply_engine.setResult(result);
183  return jacobian_apply_engine;
184  }
185 
189  (const typename Traits::Domain & solution, const typename Traits::Domain & update, typename Traits::Range & result)
190  {
191  jacobian_apply_engine.setSolution(solution);
192  jacobian_apply_engine.setUpdate(update);
193  jacobian_apply_engine.setResult(result);
194  return jacobian_apply_engine;
195  }
196 
198 
203  static constexpr bool doAlphaVolume() { return LOP::doAlphaVolume; }
204  static constexpr bool doLambdaVolume() { return LOP::doLambdaVolume; }
205  static constexpr bool doAlphaSkeleton() { return LOP::doAlphaSkeleton; }
206  static constexpr bool doLambdaSkeleton() { return LOP::doLambdaSkeleton; }
207  static constexpr bool doAlphaBoundary() { return LOP::doAlphaBoundary; }
208  static constexpr bool doLambdaBoundary() { return LOP::doLambdaBoundary; }
209  static constexpr bool doAlphaVolumePostSkeleton() { return LOP::doAlphaVolumePostSkeleton; }
210  static constexpr bool doLambdaVolumePostSkeleton() { return LOP::doLambdaVolumePostSkeleton; }
211  static constexpr bool doSkeletonTwoSided() { return LOP::doSkeletonTwoSided; }
212  static constexpr bool doPatternVolume() { return LOP::doPatternVolume; }
213  static constexpr bool doPatternSkeleton() { return LOP::doPatternSkeleton; }
214  static constexpr bool doPatternBoundary() { return LOP::doPatternBoundary; }
215  static constexpr bool doPatternVolumePostSkeleton() { return LOP::doPatternVolumePostSkeleton; }
216  static constexpr bool isLinear() { return LOP::isLinear;}
218 
220 
223  bool doPreProcessing() const { return doPreProcessing_; }
224 
229  void preProcessing(bool v)
230  {
231  doPreProcessing_ = v;
232  }
233 
235 
238  bool doPostProcessing() const { return doPostProcessing_; }
239 
244  void postProcessing(bool v)
245  {
246  doPostProcessing_ = v;
247  }
248 
249  private:
250 
252  LOP & lop_;
253 
255  RangeField weight_;
256 
259  bool doPreProcessing_;
260 
263  bool doPostProcessing_;
264 
267  LocalPatternAssemblerEngine pattern_engine;
268  LocalResidualAssemblerEngine residual_engine;
269  LocalJacobianAssemblerEngine jacobian_engine;
270  LocalJacobianApplyAssemblerEngine jacobian_apply_engine;
272 
273  bool _reconstruct_border_entries;
274  };
275 
276  } // end namespace PDELab
277 } // end namespace Dune
278 #endif
Dune::PDELab::LocalAssemblerTraits::TestGridFunctionSpaceConstraints
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:36
Dune::PDELab::LocalAssemblerTraits::TrialGridFunctionSpaceConstraints
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:33
Dune::PDELab::DefaultLocalJacobianApplyAssemblerEngine::setResult
void setResult(Range &result_)
Definition: default/jacobianapplyengine.hh:125
Dune::PDELab::DefaultLocalAssembler::LocalJacobianApplyAssemblerEngine
DefaultLocalJacobianApplyAssemblerEngine< DefaultLocalAssembler > LocalJacobianApplyAssemblerEngine
Definition: default/localassembler.hh:74
Dune::PDELab::DefaultLocalAssembler::preProcessing
void preProcessing(bool v)
Definition: default/localassembler.hh:229
Dune::PDELab::DefaultLocalAssembler::LocalResidualAssemblerEngine
DefaultLocalResidualAssemblerEngine< DefaultLocalAssembler > LocalResidualAssemblerEngine
Definition: default/localassembler.hh:72
Dune::PDELab::DefaultLocalPatternAssemblerEngine< DefaultLocalAssembler >
p
const P & p
Definition: constraints.hh:148
Dune::PDELab::DefaultLocalAssembler::doPreProcessing
bool doPreProcessing() const
Query whether to do preprocessing in the engines.
Definition: default/localassembler.hh:223
Dune::PDELab::LocalAssemblerBase
Base class for local assembler.
Definition: assemblerutilities.hh:188
Dune::PDELab::LocalFunctionSpace
Create a local function space from a global function space.
Definition: localfunctionspace.hh:699
Dune::PDELab::LFSIndexCache
Definition: lfsindexcache.hh:977
Dune::PDELab::LocalAssemblerTraits::TrialGridFunctionSpace
GO::Traits::TrialGridFunctionSpace TrialGridFunctionSpace
The trial grid function space.
Definition: assemblerutilities.hh:26
Dune::PDELab::DefaultLocalAssembler::postStep
void postStep()
Definition: default/localassembler.hh:134
Dune::PDELab::DefaultLocalAssembler::doPatternVolume
static constexpr bool doPatternVolume()
Definition: default/localassembler.hh:212
Dune::PDELab::DefaultLocalAssembler::doSkeletonTwoSided
static constexpr bool doSkeletonTwoSided()
Definition: default/localassembler.hh:211
Dune::PDELab::LocalAssemblerTraits::MatrixPattern
MatrixBackend::template Pattern< Jacobian, TestGridFunctionSpace, TrialGridFunctionSpace > MatrixPattern
The matrix pattern.
Definition: assemblerutilities.hh:74
Dune::PDELab::LocalAssemblerTraits::Range
GO::Traits::Range Range
The type of the range (residual).
Definition: assemblerutilities.hh:57
Dune::PDELab::DefaultLocalAssembler::localResidualAssemblerEngine
LocalResidualAssemblerEngine & localResidualAssemblerEngine(typename Traits::Residual &r, const typename Traits::Solution &x)
Definition: default/localassembler.hh:159
Dune::PDELab::DefaultLocalAssembler::Real
RangeField Real
Definition: default/localassembler.hh:43
Dune
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Dune::PDELab::DefaultLocalAssembler::doPatternVolumePostSkeleton
static constexpr bool doPatternVolumePostSkeleton()
Definition: default/localassembler.hh:215
Dune::PDELab::DefaultLocalAssembler::Base
Dune::PDELab::LocalAssemblerBase< typename Traits::MatrixBackend, CU, CV > Base
The base class of this local assembler.
Definition: default/localassembler.hh:52
Dune::PDELab::DefaultLocalAssembler::LocalPatternAssemblerEngine
DefaultLocalPatternAssemblerEngine< DefaultLocalAssembler > LocalPatternAssemblerEngine
Definition: default/localassembler.hh:71
Dune::PDELab::DefaultLocalAssembler::doLambdaBoundary
static constexpr bool doLambdaBoundary()
Definition: default/localassembler.hh:208
Dune::PDELab::DefaultLocalJacobianApplyAssemblerEngine< DefaultLocalAssembler >
Dune::PDELab::DefaultLocalAssembler::localOperator
LOP & localOperator()
get a reference to the local operator
Definition: default/localassembler.hh:100
Dune::PDELab::DefaultLocalAssembler::isNonOverlapping
static const bool isNonOverlapping
Definition: default/localassembler.hh:57
Dune::PDELab::DefaultLocalAssembler::doPostProcessing
bool doPostProcessing() const
Query whether to do postprocessing in the engines.
Definition: default/localassembler.hh:238
Dune::PDELab::DefaultLocalAssembler::CU
Traits::TrialGridFunctionSpaceConstraints CU
Definition: default/localassembler.hh:48
Dune::PDELab::LocalAssemblerTraits
Definition: assemblerutilities.hh:22
Dune::PDELab::DefaultLocalResidualAssemblerEngine::setResidual
void setResidual(Residual &residual_)
Definition: default/residualengine.hh:114
Dune::PDELab::DefaultLocalAssembler::postStage
void postStage()
Definition: default/localassembler.hh:135
Dune::PDELab::LocalAssemblerTraits::Residual
GO::Traits::Range Residual
The type of the range (residual).
Definition: assemblerutilities.hh:60
Dune::PDELab::DefaultLocalAssembler::localPatternAssemblerEngine
LocalPatternAssemblerEngine & localPatternAssemblerEngine(typename Traits::MatrixPattern &p)
Definition: default/localassembler.hh:150
Dune::PDELab::DefaultLocalAssembler::doAlphaVolumePostSkeleton
static constexpr bool doAlphaVolumePostSkeleton()
Definition: default/localassembler.hh:209
Dune::PDELab::DefaultLocalAssembler::LFSV
Dune::PDELab::LocalFunctionSpace< GFSV, Dune::PDELab::TestSpaceTag > LFSV
Definition: default/localassembler.hh:63
jacobianapplyengine.hh
Dune::PDELab::DefaultLocalAssembler::localJacobianApplyAssemblerEngine
LocalJacobianApplyAssemblerEngine & localJacobianApplyAssemblerEngine(const typename Traits::Domain &update, typename Traits::Range &result)
Definition: default/localassembler.hh:179
Dune::PDELab::DefaultLocalAssembler::postProcessing
void postProcessing(bool v)
Definition: default/localassembler.hh:244
Dune::PDELab::DefaultLocalAssembler::localOperator
const LOP & localOperator() const
get a reference to the local operator
Definition: default/localassembler.hh:106
Dune::PDELab::DefaultLocalAssembler::doLambdaSkeleton
static constexpr bool doLambdaSkeleton()
Definition: default/localassembler.hh:206
Dune::PDELab::DefaultLocalAssembler::doAlphaVolume
static constexpr bool doAlphaVolume()
Query methods for the assembler engines. Theses methods do not belong to the assembler interface,...
Definition: default/localassembler.hh:203
patternengine.hh
Dune::PDELab::DefaultLocalResidualAssemblerEngine< DefaultLocalAssembler >
Dune::PDELab::LocalAssemblerTraits::Solution
GO::Traits::Domain Solution
The type of the domain (solution).
Definition: assemblerutilities.hh:50
Dune::PDELab::DefaultLocalAssembler::weight
RangeField weight() const
Obtain the weight that was set last.
Definition: default/localassembler.hh:120
Dune::PDELab::DefaultLocalAssembler::doLambdaVolume
static constexpr bool doLambdaVolume()
Definition: default/localassembler.hh:204
residualengine.hh
Dune::PDELab::DefaultLocalAssembler::suggestTimestep
Real suggestTimestep(Real dt) const
Definition: default/localassembler.hh:136
jacobianengine.hh
Dune::PDELab::DefaultLocalAssembler::LocalOperator
LOP LocalOperator
The local operator.
Definition: default/localassembler.hh:55
Dune::PDELab::DefaultLocalAssembler
The local assembler for DUNE grids.
Definition: default/localassembler.hh:31
Dune::PDELab::DefaultLocalAssembler::LocalJacobianAssemblerEngine
DefaultLocalJacobianAssemblerEngine< DefaultLocalAssembler > LocalJacobianAssemblerEngine
Definition: default/localassembler.hh:73
Dune::PDELab::DefaultLocalAssembler::doAlphaBoundary
static constexpr bool doAlphaBoundary()
Definition: default/localassembler.hh:207
Dune::PDELab::DefaultLocalAssembler::doAlphaSkeleton
static constexpr bool doAlphaSkeleton()
Definition: default/localassembler.hh:205
Dune::PDELab::DefaultLocalAssembler::setWeight
void setWeight(RangeField weight)
Notifies the assembler about the current weight of assembling.
Definition: default/localassembler.hh:126
Dune::PDELab::LocalAssemblerTraits::Jacobian
GO::Traits::Jacobian Jacobian
The type of the jacobian.
Definition: assemblerutilities.hh:67
Dune::PDELab::DefaultLocalAssembler::isLinear
static constexpr bool isLinear()
Definition: default/localassembler.hh:216
Dune::PDELab::DefaultLocalJacobianAssemblerEngine::setSolution
void setSolution(const Solution &solution_)
Definition: default/jacobianengine.hh:120
Dune::PDELab::DefaultLocalPatternAssemblerEngine::setPattern
void setPattern(Pattern &pattern_)
Definition: default/patternengine.hh:92
Dune::PDELab::DefaultLocalJacobianAssemblerEngine::setJacobian
void setJacobian(Jacobian &jacobian_)
Definition: default/jacobianengine.hh:110
Dune::PDELab::DefaultLocalAssembler::DefaultLocalAssembler
DefaultLocalAssembler(LOP &lop, const CU &cu, const CV &cv, std::shared_ptr< typename GO::BorderDOFExchanger > border_dof_exchanger)
Constructor for non trivial constraints.
Definition: default/localassembler.hh:90
Dune::PDELab::DefaultLocalJacobianAssemblerEngine< DefaultLocalAssembler >
Dune::PDELab::DefaultLocalJacobianApplyAssemblerEngine::setSolution
void setSolution(const Domain &solution_)
Definition: default/jacobianapplyengine.hh:109
Dune::PDELab::DefaultLocalAssembler::GFSV
Traits::TestGridFunctionSpace GFSV
Definition: default/localassembler.hh:46
Dune::PDELab::DefaultLocalAssembler::CV
Traits::TestGridFunctionSpaceConstraints CV
Definition: default/localassembler.hh:49
Dune::PDELab::DefaultLocalJacobianApplyAssemblerEngine::setUpdate
void setUpdate(const Domain &update_)
Definition: default/jacobianapplyengine.hh:117
Dune::PDELab::DefaultLocalAssembler::LFSU
Dune::PDELab::LocalFunctionSpace< GFSU, Dune::PDELab::TrialSpaceTag > LFSU
Definition: default/localassembler.hh:62
Dune::PDELab::DefaultLocalAssembler::doLambdaVolumePostSkeleton
static constexpr bool doLambdaVolumePostSkeleton()
Definition: default/localassembler.hh:210
Dune::PDELab::DefaultLocalResidualAssemblerEngine::setSolution
void setSolution(const Solution &solution_)
Definition: default/residualengine.hh:122
Dune::PDELab::DefaultLocalAssembler::localJacobianAssemblerEngine
LocalJacobianAssemblerEngine & localJacobianAssemblerEngine(typename Traits::Jacobian &a, const typename Traits::Solution &x)
Definition: default/localassembler.hh:169
Dune::PDELab::DefaultLocalAssembler::doPatternSkeleton
static constexpr bool doPatternSkeleton()
Definition: default/localassembler.hh:213
Dune::PDELab::DefaultLocalAssembler::GFSU
Traits::TrialGridFunctionSpace GFSU
Definition: default/localassembler.hh:45
Dune::PDELab::DefaultLocalAssembler::Traits
Dune::PDELab::LocalAssemblerTraits< GO > Traits
The traits class.
Definition: default/localassembler.hh:39
Dune::PDELab::DefaultLocalAssembler::setTime
void setTime(Real time_)
Definition: default/localassembler.hh:114
lfsindexcache.hh
Dune::PDELab::DefaultLocalAssembler::LFSUCache
LFSIndexCache< LFSU, CU > LFSUCache
Definition: default/localassembler.hh:64
Dune::PDELab::LocalAssemblerTraits::Domain
GO::Traits::Domain Domain
The type of the domain (solution).
Definition: assemblerutilities.hh:47
Dune::PDELab::DefaultLocalAssembler::LFSVCache
LFSIndexCache< LFSV, CV > LFSVCache
Definition: default/localassembler.hh:65
Dune::PDELab::DefaultLocalAssembler::DefaultLocalAssembler
DefaultLocalAssembler(LOP &lop, std::shared_ptr< typename GO::BorderDOFExchanger > border_dof_exchanger)
Constructor with empty constraints.
Definition: default/localassembler.hh:82
Dune::PDELab::DefaultLocalAssembler::reconstructBorderEntries
bool reconstructBorderEntries() const
Definition: default/localassembler.hh:139
Dune::PDELab::DefaultLocalAssembler::RangeField
Traits::Residual::ElementType RangeField
The local operators type for real numbers e.g. time.
Definition: default/localassembler.hh:42
Dune::PDELab::DefaultLocalAssembler::preStage
void preStage(Real time_, int r_)
Definition: default/localassembler.hh:132
Dune::PDELab::LocalAssemblerTraits::TestGridFunctionSpace
GO::Traits::TestGridFunctionSpace TestGridFunctionSpace
The test grid function space.
Definition: assemblerutilities.hh:29
assemblerutilities.hh
Dune::PDELab::DefaultLocalAssembler::doPatternBoundary
static constexpr bool doPatternBoundary()
Definition: default/localassembler.hh:214
Dune::PDELab::DefaultLocalAssembler::preStep
void preStep(Real time_, Real dt_, std::size_t stages_)
Definition: default/localassembler.hh:133