dune-pdelab  2.0.0
default/localassembler.hh
Go to the documentation of this file.
1 #ifndef DUNE_PDELAB_DEFAULT_LOCAL_ASSEMBLER_HH
2 #define DUNE_PDELAB_DEFAULT_LOCAL_ASSEMBLER_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 
37  // The GridOperator has to be a friend to modify the do{Pre,Post}Processing flags
38  template<typename, typename, typename,
39  typename, typename, typename, typename,
40  typename, typename, bool>
41  friend class GridOperator;
42 
43  public:
44 
47 
49  typedef typename Traits::Residual::ElementType RangeField;
50  typedef RangeField Real;
51 
54 
57 
60 
62  typedef typename GFSU::Traits::GridViewType GridView;
63 
65  typedef LOP LocalOperator;
66 
67  static const bool isNonOverlapping = nonoverlapping_mode;
68 
71  // Types of local function spaces
76 
77  typedef LFSUCache NoConstraintsLFSUCache DUNE_DEPRECATED_MSG("NoConstraintsLFSUCache is deprecated, use LFSUCache instead and use the runtime interface to disable constraints caching");
78  typedef LFSVCache NoConstraintsLFSVCache DUNE_DEPRECATED_MSG("NoConstraintsLFSVCache is deprecated, use LFSVCache instead and use the runtime interface to disable constraints caching");
79 
81 
88 
94 
96  DefaultLocalAssembler (LOP & lop_, shared_ptr<typename GO::BorderDOFExchanger> border_dof_exchanger)
97  : lop(lop_), weight(1.0), doPreProcessing(true), doPostProcessing(true),
98  pattern_engine(*this,border_dof_exchanger), residual_engine(*this), jacobian_engine(*this), jacobian_apply_engine(*this)
99  , _reconstruct_border_entries(isNonOverlapping)
100  {}
101 
103  DefaultLocalAssembler (LOP & lop_, const CU& cu_, const CV& cv_,
104  shared_ptr<typename GO::BorderDOFExchanger> border_dof_exchanger)
105  : Base(cu_, cv_),
106  lop(lop_), weight(1.0), doPreProcessing(true), doPostProcessing(true),
107  pattern_engine(*this,border_dof_exchanger), residual_engine(*this), jacobian_engine(*this), jacobian_apply_engine(*this)
108  , _reconstruct_border_entries(isNonOverlapping)
109  {}
110 
114  void setTime(Real time_){
115  lop.setTime(time_);
116  }
117 
119  void setWeight(RangeField weight_){
120  weight = weight_;
121  }
122 
125  void preStage (Real time_, int r_) { lop.preStage(time_,r_); }
126  void preStep (Real time_, Real dt_, std::size_t stages_){ lop.preStep(time_,dt_,stages_); }
127  void postStep (){ lop.postStep(); }
128  void postStage (){ lop.postStage(); }
129  Real suggestTimestep (Real dt) const{return lop.suggestTimestep(dt); }
131 
133  {
134  return _reconstruct_border_entries;
135  }
136 
139 
144  {
145  pattern_engine.setPattern(p);
146  return pattern_engine;
147  }
148 
152  (typename Traits::Residual & r, const typename Traits::Solution & x)
153  {
154  residual_engine.setResidual(r);
155  residual_engine.setSolution(x);
156  return residual_engine;
157  }
158 
162  (typename Traits::Jacobian & a, const typename Traits::Solution & x)
163  {
164  jacobian_engine.setJacobian(a);
165  jacobian_engine.setSolution(x);
166  return jacobian_engine;
167  }
168 
172  (typename Traits::Residual & r, const typename Traits::Solution & x)
173  {
174  jacobian_apply_engine.setResidual(r);
175  jacobian_apply_engine.setSolution(x);
176  return jacobian_apply_engine;
177  }
178 
180 
185  static bool doAlphaVolume() { return LOP::doAlphaVolume; }
186  static bool doLambdaVolume() { return LOP::doLambdaVolume; }
187  static bool doAlphaSkeleton() { return LOP::doAlphaSkeleton; }
188  static bool doLambdaSkeleton() { return LOP::doLambdaSkeleton; }
189  static bool doAlphaBoundary() { return LOP::doAlphaBoundary; }
190  static bool doLambdaBoundary() { return LOP::doLambdaBoundary; }
191  static bool doAlphaVolumePostSkeleton() { return LOP::doAlphaVolumePostSkeleton; }
192  static bool doLambdaVolumePostSkeleton() { return LOP::doLambdaVolumePostSkeleton; }
193  static bool doSkeletonTwoSided() { return LOP::doSkeletonTwoSided; }
194  static bool doPatternVolume() { return LOP::doPatternVolume; }
195  static bool doPatternSkeleton() { return LOP::doPatternSkeleton; }
196  static bool doPatternBoundary() { return LOP::doPatternBoundary; }
197  static bool doPatternVolumePostSkeleton() { return LOP::doPatternVolumePostSkeleton; }
199 
204  void preProcessing(bool v)
205  {
206  doPreProcessing = v;
207  }
208 
213  void postProcessing(bool v)
214  {
215  doPostProcessing = v;
216  }
217 
218  private:
219 
221  LOP & lop;
222 
224  RangeField weight;
225 
228  bool doPreProcessing;
229 
232  bool doPostProcessing;
233 
236  LocalPatternAssemblerEngine pattern_engine;
237  LocalResidualAssemblerEngine residual_engine;
238  LocalJacobianAssemblerEngine jacobian_engine;
239  LocalJacobianApplyAssemblerEngine jacobian_apply_engine;
241 
242  bool _reconstruct_border_entries;
243 
244  };
245 
246  }
247 }
248 #endif
Definition: lfsindexcache.hh:948
GO::Traits::Range Residual
The type of the range (residual).
Definition: assemblerutilities.hh:51
static bool doAlphaSkeleton()
Definition: default/localassembler.hh:187
static bool doAlphaBoundary()
Definition: default/localassembler.hh:189
static bool doLambdaVolume()
Definition: default/localassembler.hh:186
void preStage(Real time_, int r_)
Definition: default/localassembler.hh:125
static bool doSkeletonTwoSided()
Definition: default/localassembler.hh:193
Dune::PDELab::LocalFunctionSpace< GFSU, Dune::PDELab::TrialSpaceTag > LFSU
Definition: default/localassembler.hh:72
Base class for local assembler.
Definition: assemblerutilities.hh:210
Traits::TrialGridFunctionSpace GFSU
Definition: default/localassembler.hh:52
void preProcessing(bool v)
Definition: default/localassembler.hh:204
GO::Traits::Domain Solution
The type of the domain (solution).
Definition: assemblerutilities.hh:44
The local assembler for DUNE grids.
Definition: default/localassembler.hh:31
void setPattern(Pattern &pattern_)
Definition: default/patternengine.hh:92
GO::Traits::TrialGridFunctionSpace TrialGridFunctionSpace
The trial grid function space.
Definition: assemblerutilities.hh:23
void setJacobian(Jacobian &jacobian_)
Definition: default/jacobianengine.hh:106
static bool doPatternVolume()
Definition: default/localassembler.hh:194
DefaultLocalResidualAssemblerEngine< DefaultLocalAssembler > LocalResidualAssemblerEngine
Definition: default/localassembler.hh:85
LocalJacobianAssemblerEngine & localJacobianAssemblerEngine(typename Traits::Jacobian &a, const typename Traits::Solution &x)
Definition: default/localassembler.hh:162
GFSU::Traits::GridViewType GridView
The current grid view type.
Definition: default/localassembler.hh:62
DefaultLocalAssembler(LOP &lop_, shared_ptr< typename GO::BorderDOFExchanger > border_dof_exchanger)
Constructor with empty constraints.
Definition: default/localassembler.hh:96
static bool doPatternVolumePostSkeleton()
Definition: default/localassembler.hh:197
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:33
Standard grid operator implementation.
Definition: gridoperator.hh:34
void setTime(Real time_)
Definition: default/localassembler.hh:114
void setSolution(const Solution &solution_)
Definition: default/jacobianengine.hh:115
static bool doLambdaVolumePostSkeleton()
Definition: default/localassembler.hh:192
LFSIndexCache< LFSV, CV > LFSVCache
Definition: default/localassembler.hh:75
Traits::TestGridFunctionSpaceConstraints CV
Definition: default/localassembler.hh:56
Traits::TrialGridFunctionSpaceConstraints CU
Definition: default/localassembler.hh:55
LFSIndexCache< LFSU, CU > LFSUCache
Definition: default/localassembler.hh:74
Dune::PDELab::LocalAssemblerTraits< GO > Traits
The traits class.
Definition: default/localassembler.hh:46
void postStage()
Definition: default/localassembler.hh:128
bool reconstructBorderEntries() const
Definition: default/localassembler.hh:132
LOP LocalOperator
The local operator.
Definition: default/localassembler.hh:65
static bool doPatternBoundary()
Definition: default/localassembler.hh:196
void setWeight(RangeField weight_)
Notifies the assembler about the current weight of assembling.
Definition: default/localassembler.hh:119
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:30
MatrixBackend::template Pattern< Jacobian, TestGridFunctionSpace, TrialGridFunctionSpace > MatrixPattern
The matrix pattern.
Definition: assemblerutilities.hh:65
LocalResidualAssemblerEngine & localResidualAssemblerEngine(typename Traits::Residual &r, const typename Traits::Solution &x)
Definition: default/localassembler.hh:152
Real suggestTimestep(Real dt) const
Definition: default/localassembler.hh:129
GO::Traits::TestGridFunctionSpace TestGridFunctionSpace
The test grid function space.
Definition: assemblerutilities.hh:26
Dune::PDELab::LocalAssemblerBase< typename Traits::MatrixBackend, CU, CV > Base
The base class of this local assembler.
Definition: default/localassembler.hh:59
static const bool isNonOverlapping
Definition: default/localassembler.hh:67
LocalJacobianApplyAssemblerEngine & localJacobianApplyAssemblerEngine(typename Traits::Residual &r, const typename Traits::Solution &x)
Definition: default/localassembler.hh:172
Create a local function space from a global function space.
Definition: localfunctionspace.hh:702
DefaultLocalJacobianAssemblerEngine< DefaultLocalAssembler > LocalJacobianAssemblerEngine
Definition: default/localassembler.hh:86
static bool doLambdaBoundary()
Definition: default/localassembler.hh:190
Traits::TestGridFunctionSpace GFSV
Definition: default/localassembler.hh:53
DefaultLocalJacobianApplyAssemblerEngine< DefaultLocalAssembler > LocalJacobianApplyAssemblerEngine
Definition: default/localassembler.hh:87
void setSolution(const Solution &solution_)
Definition: jacobianapplyengine.hh:110
static bool doPatternSkeleton()
Definition: default/localassembler.hh:195
static bool doAlphaVolumePostSkeleton()
Definition: default/localassembler.hh:191
static bool doAlphaVolume()
Query methods for the assembler engines. Theses methods do not belong to the assembler interface...
Definition: default/localassembler.hh:185
Dune::PDELab::LocalFunctionSpace< GFSV, Dune::PDELab::TestSpaceTag > LFSV
Definition: default/localassembler.hh:73
R p(int i, D x)
Definition: qkdg.hh:62
DefaultLocalAssembler(LOP &lop_, const CU &cu_, const CV &cv_, shared_ptr< typename GO::BorderDOFExchanger > border_dof_exchanger)
Constructor for non trivial constraints.
Definition: default/localassembler.hh:103
LocalPatternAssemblerEngine & localPatternAssemblerEngine(typename Traits::MatrixPattern &p)
Definition: default/localassembler.hh:143
DefaultLocalPatternAssemblerEngine< DefaultLocalAssembler > LocalPatternAssemblerEngine
Definition: default/localassembler.hh:84
GO::Traits::Jacobian Jacobian
The type of the jacobian.
Definition: assemblerutilities.hh:58
void postStep()
Definition: default/localassembler.hh:127
RangeField Real
Definition: default/localassembler.hh:50
void setResidual(Residual &residual_)
Definition: default/residualengine.hh:110
void postProcessing(bool v)
Definition: default/localassembler.hh:213
void setSolution(const Solution &solution_)
Definition: default/residualengine.hh:117
static bool doLambdaSkeleton()
Definition: default/localassembler.hh:188
void setResidual(Residual &residual_)
Definition: jacobianapplyengine.hh:103
Traits::Residual::ElementType RangeField
The local operators type for real numbers e.g. time.
Definition: default/localassembler.hh:49
Definition: assemblerutilities.hh:19
void preStep(Real time_, Real dt_, std::size_t stages_)
Definition: default/localassembler.hh:126