dune-pdelab  2.7-git
onestep/jacobianengine.hh
Go to the documentation of this file.
1 #ifndef DUNE_PDELAB_GRIDOPERATOR_ONESTEP_JACOBIANENGINE_HH
2 #define DUNE_PDELAB_GRIDOPERATOR_ONESTEP_JACOBIANENGINE_HH
3 
5 #include <cmath>
6 
7 namespace Dune{
8  namespace PDELab{
9 
17  template<typename OSLA>
19  : public OneStepLocalAssemblerEngineBase<OSLA,
20  typename OSLA::LocalAssemblerDT0::LocalJacobianAssemblerEngine,
21  typename OSLA::LocalAssemblerDT1::LocalJacobianAssemblerEngine
22  >
23  {
24 
26  typename OSLA::LocalAssemblerDT0::LocalJacobianAssemblerEngine,
27  typename OSLA::LocalAssemblerDT1::LocalJacobianAssemblerEngine
28  > BaseT;
29 
30  using BaseT::la;
31  using BaseT::lae0;
32  using BaseT::lae1;
33  using BaseT::implicit;
36  public:
38  typedef OSLA LocalAssembler;
39 
40  typedef typename OSLA::LocalAssemblerDT0 LocalAssemblerDT0;
41  typedef typename OSLA::LocalAssemblerDT1 LocalAssemblerDT1;
42 
43  typedef typename LocalAssemblerDT0::LocalJacobianAssemblerEngine JacobianEngineDT0;
44  typedef typename LocalAssemblerDT1::LocalJacobianAssemblerEngine JacobianEngineDT1;
45 
47  typedef typename OSLA::Traits::Jacobian Jacobian;
48 
50  typedef typename OSLA::Traits::Solution Solution;
51 
53  typedef typename OSLA::Real Real;
54 
62  : BaseT(local_assembler_),
63  invalid_jacobian(nullptr),
64  invalid_solution(nullptr),
65  jacobian(invalid_jacobian), solution(invalid_solution)
66  {}
67 
68 
71  void setSolution(const Solution & solution_)
72  {
73  solution = &solution_;
74  }
75 
78  void setJacobian(Jacobian & jacobian_)
79  {
80  jacobian = &jacobian_;
81 
82  assert(solution != invalid_solution);
83 
84  // Initialize the engines of the two wrapped local assemblers
85  setLocalAssemblerEngineDT0(la.la0.localJacobianAssemblerEngine(*jacobian,*solution));
86  setLocalAssemblerEngineDT1(la.la1.localJacobianAssemblerEngine(*jacobian,*solution));
87  }
88 
92  void setWeights()
93  {
94  la.la0.setWeight(b_rr * la.dt_factor0);
95  la.la1.setWeight(la.dt_factor1);
96  }
97 
100  void preAssembly()
101  {
102  lae0->preAssembly();
103  lae1->preAssembly();
104 
105  // Extract the coefficients of the time step scheme
106  b_rr = la.osp_method->b(la.stage,la.stage);
107  d_r = la.osp_method->d(la.stage);
108 
109  // Here we only want to know whether this stage is implicit
110  using std::abs;
111  implicit = abs(b_rr) > 1e-6;
112 
113  // prepare local operators for stage
114  la.la0.setTime(la.time + d_r * la.dt);
115  la.la1.setTime(la.time + d_r * la.dt);
116 
117  setWeights();
118  }
119 
120  template<typename GFSU, typename GFSV>
121  void postAssembly(const GFSU& gfsu, const GFSV& gfsv)
122  {
123  lae0->postAssembly(gfsu,gfsv);
124  lae1->postAssembly(gfsu,gfsv);
125  }
127 
128  private:
129 
131  Jacobian * const invalid_jacobian;
132 
134  Solution * const invalid_solution;
135 
138  Jacobian * jacobian;
139 
141  const Solution * solution;
142 
144  Real b_rr, d_r;
145 
146  }; // End of class OneStepLocalJacobianAssemblerEngine
147 
148  }
149 }
150 
151 #endif // DUNE_PDELAB_GRIDOPERATOR_ONESTEP_JACOBIANENGINE_HH
const Entity & e
Definition: localfunctionspace.hh:121
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
The local assembler engine for UDG sub triangulations which assembles the residual vector.
Definition: enginebase.hh:16
const LocalAssembler & la
Definition: enginebase.hh:459
void setLocalAssemblerEngineDT0(LocalAssemblerEngineDT0 &lae0_)
Definition: enginebase.hh:119
LocalAssemblerEngineDT1 * lae1
Definition: enginebase.hh:462
void setLocalAssemblerEngineDT1(LocalAssemblerEngineDT1 &lae1_)
Definition: enginebase.hh:124
LocalAssemblerEngineDT0 * lae0
Definition: enginebase.hh:461
bool implicit
Definition: enginebase.hh:464
The local assembler engine for one step methods which assembles the residual vector.
Definition: onestep/jacobianengine.hh:23
OSLA LocalAssembler
The type of the wrapping local assembler.
Definition: onestep/jacobianengine.hh:38
OSLA::LocalAssemblerDT1 LocalAssemblerDT1
Definition: onestep/jacobianengine.hh:41
void setJacobian(Jacobian &jacobian_)
Definition: onestep/jacobianengine.hh:78
void setSolution(const Solution &solution_)
Definition: onestep/jacobianengine.hh:71
OSLA::Real Real
The type for real numbers.
Definition: onestep/jacobianengine.hh:53
void postAssembly(const GFSU &gfsu, const GFSV &gfsv)
Definition: onestep/jacobianengine.hh:121
LocalAssemblerDT0::LocalJacobianAssemblerEngine JacobianEngineDT0
Definition: onestep/jacobianengine.hh:43
LocalAssemblerDT1::LocalJacobianAssemblerEngine JacobianEngineDT1
Definition: onestep/jacobianengine.hh:44
OSLA::LocalAssemblerDT0 LocalAssemblerDT0
Definition: onestep/jacobianengine.hh:40
void setWeights()
Definition: onestep/jacobianengine.hh:92
OSLA::Traits::Solution Solution
The type of the solution vector.
Definition: onestep/jacobianengine.hh:50
void preAssembly()
Definition: onestep/jacobianengine.hh:100
OSLA::Traits::Jacobian Jacobian
The type of the residual vector.
Definition: onestep/jacobianengine.hh:47
OneStepLocalJacobianAssemblerEngine(const LocalAssembler &local_assembler_)
Constructor.
Definition: onestep/jacobianengine.hh:61