dune-pdelab  2.4.1-rc2
convectiondiffusionccfv.hh
Go to the documentation of this file.
1 // -*- tab-width: 2; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_LOCALOPERATOR_CONVECTIONDIFFUSIONCCFV_HH
3 #define DUNE_PDELAB_LOCALOPERATOR_CONVECTIONDIFFUSIONCCFV_HH
4 
5 #include<dune/common/exceptions.hh>
6 #include<dune/common/fvector.hh>
7 #include<dune/common/typetraits.hh>
8 #include<dune/geometry/referenceelements.hh>
9 
16 
17 namespace Dune {
18  namespace PDELab {
19 
35  template<typename TP>
37  :
38  // public NumericalJacobianSkeleton<ConvectionDiffusionCCFV<TP> >,
39  // public NumericalJacobianBoundary<ConvectionDiffusionCCFV<TP> >,
40  // public NumericalJacobianVolume<ConvectionDiffusionCCFV<TP> >,
41  public FullSkeletonPattern,
42  public FullVolumePattern,
44  public InstationaryLocalOperatorDefaultMethods<typename TP::Traits::RangeFieldType>
45  {
47 
48  public:
49  // pattern assembly flags
50  enum { doPatternVolume = true };
51  enum { doPatternSkeleton = true };
52 
53  // residual assembly flags
54  enum { doAlphaVolume = true };
55  enum { doAlphaSkeleton = true };
56  enum { doAlphaBoundary = true };
57  enum { doLambdaVolume = true };
58  enum { doLambdaSkeleton = false };
59  enum { doLambdaBoundary = false };
60 
61  ConvectionDiffusionCCFV (TP& param_) : param(param_)
62  {}
63 
64  // volume integral depending on test and ansatz functions
65  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
66  void alpha_volume (const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r) const
67  {
68  // domain and range field type
69  typedef typename LFSU::Traits::FiniteElementType::
70  Traits::LocalBasisType::Traits::DomainFieldType DF;
71 
72  // dimensions
73  const int dim = EG::Geometry::mydimension;
74 
75  // cell center
76  const Dune::FieldVector<DF,dim>
77  inside_local(Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0));
78 
79  // evaluate reaction term
80  typename TP::Traits::RangeFieldType c = param.c(eg.entity(),inside_local);
81 
82  // and accumulate
83  r.accumulate(lfsu,0,(c*x(lfsu,0))*eg.geometry().volume());
84  }
85 
86  // jacobian of volume term
87  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
88  void jacobian_volume (const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv,
89  M& mat) const
90  {
91  // domain and range field type
92  typedef typename LFSU::Traits::FiniteElementType::
93  Traits::LocalBasisType::Traits::DomainFieldType DF;
94 
95  // dimensions
96  const int dim = EG::Geometry::mydimension;
97 
98  // cell center
99  const Dune::FieldVector<DF,dim>
100  inside_local(Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0));
101 
102  // evaluate reaction term
103  typename TP::Traits::RangeFieldType c = param.c(eg.entity(),inside_local);
104 
105  // and accumulate
106  mat.accumulate(lfsu,0,lfsu,0,c*eg.geometry().volume());
107  }
108 
109  // skeleton integral depending on test and ansatz functions
110  // each face is only visited ONCE!
111  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
112  void alpha_skeleton (const IG& ig,
113  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
114  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
115  R& r_s, R& r_n) const
116  {
117  // domain and range field type
118  typedef typename LFSU::Traits::FiniteElementType::
119  Traits::LocalBasisType::Traits::DomainFieldType DF;
120  typedef typename LFSU::Traits::FiniteElementType::
121  Traits::LocalBasisType::Traits::RangeFieldType RF;
122  const int dim = IG::dimension;
123 
124  // center in face's reference element
125  const Dune::FieldVector<DF,dim-1>
126  face_local = Dune::ReferenceElements<DF,IG::dimension-1>::general(ig.geometry().type()).position(0,0);
127 
128  // face volume for integration
129  RF face_volume = ig.geometry().integrationElement(face_local)
130  *Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).volume();
131 
132  auto cell_inside = ig.inside();
133  auto cell_outside = ig.outside();
134 
135  // cell centers in references elements
136  const Dune::FieldVector<DF,dim>
137  inside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_inside.type()).position(0,0);
138  const Dune::FieldVector<DF,dim>
139  outside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_outside.type()).position(0,0);
140 
141  // evaluate diffusion coefficient from either side and take harmonic average
142  typename TP::Traits::PermTensorType tensor_inside;
143  tensor_inside = param.A(cell_inside,inside_local);
144  typename TP::Traits::PermTensorType tensor_outside;
145  tensor_outside = param.A(cell_outside,outside_local);
146  const Dune::FieldVector<DF,dim> n_F = ig.centerUnitOuterNormal();
147  Dune::FieldVector<RF,dim> An_F;
148  tensor_inside.mv(n_F,An_F);
149  RF k_inside = n_F*An_F;
150  tensor_outside.mv(n_F,An_F);
151  RF k_outside = n_F*An_F;
152  RF k_avg = 2.0/(1.0/(k_inside+1E-30) + 1.0/(k_outside+1E-30));
153 
154  // evaluate convective term
155  Dune::FieldVector<DF,dim> iplocal_s = ig.geometryInInside().global(face_local);
156  typename TP::Traits::RangeType b = param.b(cell_inside,iplocal_s);
157  RF vn = b*n_F;
158  RF u_upwind=0;
159  if (vn>=0) u_upwind = x_s(lfsu_s,0); else u_upwind = x_n(lfsu_n,0);
160 
161  // cell centers in global coordinates
162  Dune::FieldVector<DF,IG::dimension>
163  inside_global = cell_inside.geometry().global(inside_local);
164  Dune::FieldVector<DF,IG::dimension>
165  outside_global = cell_outside.geometry().global(outside_local);
166 
167  // distance between the two cell centers
168  inside_global -= outside_global;
169  RF distance = inside_global.two_norm();
170 
171  // contribution to residual on inside element, other residual is computed by symmetric call
172  r_s.accumulate(lfsu_s,0,(u_upwind*vn)*face_volume+k_avg*(x_s(lfsu_s,0)-x_n(lfsu_n,0))*face_volume/distance);
173  r_n.accumulate(lfsu_n,0,-(u_upwind*vn)*face_volume-k_avg*(x_s(lfsu_s,0)-x_n(lfsu_n,0))*face_volume/distance);
174  }
175 
176  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
177  void jacobian_skeleton (const IG& ig,
178  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
179  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
180  M& mat_ss, M& mat_sn,
181  M& mat_ns, M& mat_nn) const
182  {
183  // domain and range field type
184  typedef typename LFSU::Traits::FiniteElementType::
185  Traits::LocalBasisType::Traits::DomainFieldType DF;
186  typedef typename LFSU::Traits::FiniteElementType::
187  Traits::LocalBasisType::Traits::RangeFieldType RF;
188  const int dim = IG::dimension;
189 
190  // center in face's reference element
191  const Dune::FieldVector<DF,dim-1>
192  face_local = Dune::ReferenceElements<DF,IG::dimension-1>::general(ig.geometry().type()).position(0,0);
193 
194  // face volume for integration
195  RF face_volume = ig.geometry().integrationElement(face_local)
196  *Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).volume();
197 
198  auto cell_inside = ig.inside();
199  auto cell_outside = ig.outside();
200 
201  // cell centers in references elements
202  const Dune::FieldVector<DF,dim>
203  inside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_inside.type()).position(0,0);
204  const Dune::FieldVector<DF,dim>
205  outside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_outside.type()).position(0,0);
206 
207  // evaluate diffusion coefficient from either side and take harmonic average
208  typename TP::Traits::PermTensorType tensor_inside;
209  tensor_inside = param.A(cell_inside,inside_local);
210  typename TP::Traits::PermTensorType tensor_outside;
211  tensor_outside = param.A(cell_outside,outside_local);
212  const Dune::FieldVector<DF,dim> n_F = ig.centerUnitOuterNormal();
213  Dune::FieldVector<RF,dim> An_F;
214  tensor_inside.mv(n_F,An_F);
215  RF k_inside = n_F*An_F;
216  tensor_outside.mv(n_F,An_F);
217  RF k_outside = n_F*An_F;
218  RF k_avg = 2.0/(1.0/(k_inside+1E-30) + 1.0/(k_outside+1E-30));
219 
220  // evaluate convective term
221  Dune::FieldVector<DF,dim> iplocal_s = ig.geometryInInside().global(face_local);
222  typename TP::Traits::RangeType b = param.b(cell_inside,iplocal_s);
223  RF vn = b*n_F;
224 
225  // cell centers in global coordinates
226  Dune::FieldVector<DF,IG::dimension>
227  inside_global = cell_inside.geometry().global(inside_local);
228  Dune::FieldVector<DF,IG::dimension>
229  outside_global = cell_outside.geometry().global(outside_local);
230 
231  // distance between the two cell centers
232  inside_global -= outside_global;
233  RF distance = inside_global.two_norm();
234 
235  // contribution to residual on inside element, other residual is computed by symmetric call
236  mat_ss.accumulate(lfsu_s,0,lfsu_s,0, k_avg*face_volume/distance );
237  mat_ns.accumulate(lfsu_n,0,lfsu_s,0, -k_avg*face_volume/distance );
238  mat_sn.accumulate(lfsu_s,0,lfsu_n,0, -k_avg*face_volume/distance );
239  mat_nn.accumulate(lfsu_n,0,lfsu_n,0, k_avg*face_volume/distance );
240  if (vn>=0)
241  {
242  mat_ss.accumulate(lfsu_s,0,lfsu_s,0, vn*face_volume );
243  mat_ns.accumulate(lfsu_n,0,lfsu_s,0, -vn*face_volume );
244  }
245  else
246  {
247  mat_sn.accumulate(lfsu_s,0,lfsu_n,0, vn*face_volume );
248  mat_nn.accumulate(lfsu_n,0,lfsu_n,0, -vn*face_volume );
249  }
250  }
251 
252 
253 
254 
255  // post skeleton: compute time step allowable for cell; to be done later
256  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
257  void alpha_volume_post_skeleton(const EG& eg, const LFSU& lfsu, const X& x,
258  const LFSV& lfsv, R& r) const
259  {
260  // domain and range field type
261  typedef typename LFSU::Traits::FiniteElementType::
262  Traits::LocalBasisType::Traits::DomainFieldType DF;
263  const int dim = EG::Geometry::mydimension;
264 
265  if (!first_stage) return; // time step calculation is only done in first stage
266 
267  // cell center
268  const Dune::FieldVector<DF,dim>&
269  inside_local = Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0);
270 
271  // compute optimal dt for this cell
272  typename TP::Traits::RangeFieldType cellcapacity = param.d(eg.entity(),inside_local)*eg.geometry().volume();
273  typename TP::Traits::RangeFieldType celldt = cellcapacity/(cellinflux+1E-30);
274  dtmin = std::min(dtmin,celldt);
275  }
276 
277 
278 
279  // skeleton integral depending on test and ansatz functions
280  // We put the Dirchlet evaluation also in the alpha term to save some geometry evaluations
281  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
282  void alpha_boundary (const IG& ig,
283  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
284  R& r_s) const
285  {
286  // domain and range field type
287  typedef typename LFSU::Traits::FiniteElementType::
288  Traits::LocalBasisType::Traits::DomainFieldType DF;
289  typedef typename LFSU::Traits::FiniteElementType::
290  Traits::LocalBasisType::Traits::RangeFieldType RF;
291  const int dim = IG::dimension;
292 
293  // center in face's reference element
294  const Dune::FieldVector<DF,dim-1>
295  face_local = Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).position(0,0);
296 
297  // face volume for integration
298  RF face_volume = ig.geometry().integrationElement(face_local)
299  *Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).volume();
300 
301  auto cell_inside = ig.inside();
302 
303  // cell center in reference element
304  const Dune::FieldVector<DF,dim>
305  inside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_inside.type()).position(0,0);
306 
307  // evaluate boundary condition type
308  BCType bctype;
309  bctype = param.bctype(ig.intersection(),face_local);
310 
312  {
313  // Dirichlet boundary
314  // distance between cell center and face center
315  Dune::FieldVector<DF,dim> inside_global = cell_inside.geometry().global(inside_local);
316  Dune::FieldVector<DF,dim> outside_global = ig.geometry().global(face_local);
317  inside_global -= outside_global;
318  RF distance = inside_global.two_norm();
319 
320  // evaluate diffusion coefficient
321  typename TP::Traits::PermTensorType tensor_inside;
322  tensor_inside = param.A(cell_inside,inside_local);
323  const Dune::FieldVector<DF,dim> n_F = ig.centerUnitOuterNormal();
324  Dune::FieldVector<RF,dim> An_F;
325  tensor_inside.mv(n_F,An_F);
326  RF k_inside = n_F*An_F;
327 
328  // evaluate boundary condition function
329  Dune::FieldVector<DF,dim> iplocal_s = ig.geometryInInside().global(face_local);
330  RF g = param.g(cell_inside,iplocal_s);
331 
332  // velocity needed for convection term
333  typename TP::Traits::RangeType b = param.b(cell_inside,iplocal_s);
334  const Dune::FieldVector<DF,dim> n = ig.centerUnitOuterNormal();
335 
336  // contribution to residual on inside element, assumes that Dirichlet boundary is inflow
337  r_s.accumulate(lfsu_s,0,(b*n)*g*face_volume + k_inside*(x_s(lfsu_s,0)-g)*face_volume/distance);
338 
339  return;
340  }
341 
343  {
344  // Neumann boundary
345  // evaluate flux boundary condition
346 
347  //evaluate boundary function
348  typename TP::Traits::RangeFieldType j = param.j(ig.intersection(),face_local);
349 
350  // contribution to residual on inside element
351  r_s.accumulate(lfsu_s,0,j*face_volume);
352 
353  return;
354  }
355 
357  {
358  // evaluate velocity field and outer unit normal
359  Dune::FieldVector<DF,dim> iplocal_s = ig.geometryInInside().global(face_local);
360  typename TP::Traits::RangeType b = param.b(cell_inside,iplocal_s);
361  const Dune::FieldVector<DF,dim> n = ig.centerUnitOuterNormal();
362 
363  // evaluate outflow boundary condition
364  typename TP::Traits::RangeFieldType o = param.o(ig.intersection(),face_local);
365 
366  // integrate o
367  r_s.accumulate(lfsu_s,0,((b*n)*x_s(lfsu_s,0) + o)*face_volume);
368 
369  return;
370  }
371  }
372 
373  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
374  void jacobian_boundary (const IG& ig,
375  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
376  M& mat_ss) const
377  {
378  // domain and range field type
379  typedef typename LFSU::Traits::FiniteElementType::
380  Traits::LocalBasisType::Traits::DomainFieldType DF;
381  typedef typename LFSU::Traits::FiniteElementType::
382  Traits::LocalBasisType::Traits::RangeFieldType RF;
383  const int dim = IG::dimension;
384 
385  // center in face's reference element
386  const Dune::FieldVector<DF,dim-1>
387  face_local = Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).position(0,0);
388 
389  // face volume for integration
390  RF face_volume = ig.geometry().integrationElement(face_local)
391  *Dune::ReferenceElements<DF,dim-1>::general(ig.geometry().type()).volume();
392 
393  auto cell_inside = ig.inside();
394 
395  // cell center in reference element
396  const Dune::FieldVector<DF,dim>
397  inside_local = Dune::ReferenceElements<DF,IG::dimension>::general(cell_inside.type()).position(0,0);
398 
399  // evaluate boundary condition type
400  BCType bctype;
401  bctype = param.bctype(ig.intersection(),face_local);
402 
403 
405  {
406  // Dirichlet boundary
407  // distance between cell center and face center
408  Dune::FieldVector<DF,dim> inside_global = cell_inside.geometry().global(inside_local);
409  Dune::FieldVector<DF,dim> outside_global = ig.geometry().global(face_local);
410  inside_global -= outside_global;
411  RF distance = inside_global.two_norm();
412 
413  // evaluate diffusion coefficient
414  typename TP::Traits::PermTensorType tensor_inside;
415  tensor_inside = param.A(cell_inside,inside_local);
416  const Dune::FieldVector<DF,dim> n_F = ig.centerUnitOuterNormal();
417  Dune::FieldVector<RF,dim> An_F;
418  tensor_inside.mv(n_F,An_F);
419  RF k_inside = n_F*An_F;
420 
421  // contribution to residual on inside element
422  mat_ss.accumulate(lfsu_s,0,lfsv_s,0, k_inside*face_volume/distance );
423 
424  return;
425  }
426 
428  {
429  // evaluate velocity field and outer unit normal
430  Dune::FieldVector<DF,dim> iplocal_s = ig.geometryInInside().global(face_local);
431  typename TP::Traits::RangeType b = param.b(cell_inside,iplocal_s);
432  const Dune::FieldVector<DF,dim> n = ig.centerUnitOuterNormal();
433 
434  // integrate o
435  mat_ss.accumulate(lfsu_s,0,lfsv_s,0, (b*n)*face_volume );
436 
437  return;
438  }
439  }
440 
441  // volume integral depending only on test functions
442  template<typename EG, typename LFSV, typename R>
443  void lambda_volume (const EG& eg, const LFSV& lfsv, R& r) const
444  {
445  // domain and range field type
446  typedef typename LFSV::Traits::FiniteElementType::
447  Traits::LocalBasisType::Traits::DomainFieldType DF;
448  const int dim = EG::Geometry::mydimension;
449 
450  // cell center
451  const Dune::FieldVector<DF,dim>&
452  inside_local = Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0);
453 
454  // evaluate source and sink term
455  typename TP::Traits::RangeFieldType f = param.f(eg.entity(),inside_local);
456 
457  r.accumulate(lfsv,0,-f*eg.geometry().volume());
458  }
459 
461  void setTime (typename TP::Traits::RangeFieldType t)
462  {
463  param.setTime(t);
464  }
465 
467  void preStep (typename TP::Traits::RangeFieldType time, typename TP::Traits::RangeFieldType dt,
468  int stages)
469  {
470  }
471 
473  void preStage (typename TP::Traits::RangeFieldType time, int r)
474  {
475  if (r==1)
476  {
477  first_stage = true;
478  dtmin = 1E100;
479  }
480  else first_stage = false;
481  }
482 
484  void postStage ()
485  {
486  }
487 
489  typename TP::Traits::RangeFieldType suggestTimestep (typename TP::Traits::RangeFieldType dt) const
490  {
491  return dtmin;
492  }
493 
494  private:
495  TP& param;
496  bool first_stage;
497  mutable typename TP::Traits::RangeFieldType dtmin; // accumulate minimum dt here
498  mutable typename TP::Traits::RangeFieldType cellinflux;
499  };
500 
501 
502 
503 
510  template<class TP>
512  :
513  // public NumericalJacobianApplyVolume<ConvectionDiffusionCCFVTemporalOperator<TP> >,
514  public FullVolumePattern,
516  public InstationaryLocalOperatorDefaultMethods<typename TP::Traits::RangeFieldType>
517  {
518  public:
519  // pattern assembly flags
520  enum { doPatternVolume = true };
521 
522  // residual assembly flags
523  enum { doAlphaVolume = true };
524 
526  : param(param_)
527  {
528  }
529 
530  // volume integral depending on test and ansatz functions
531  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
532  void alpha_volume (const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r) const
533  {
534  // domain and range field type
535  typedef typename LFSU::Traits::FiniteElementType::
536  Traits::LocalBasisType::Traits::DomainFieldType DF;
537 
538  // dimensions
539  const int dim = EG::Geometry::mydimension;
540 
541  // cell center
542  const Dune::FieldVector<DF,dim>&
543  inside_local = Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0);
544  // capacity term
545  typename TP::Traits::RangeFieldType capacity = param.d(eg.entity(),inside_local);
546 
547  // residual contribution
548  r.accumulate(lfsu,0,capacity*x(lfsu,0)*eg.geometry().volume());
549  }
550 
551  // jacobian of volume term
552  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
553  void jacobian_volume (const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv,
554  M& mat) const
555  {
556  // domain and range field type
557  typedef typename LFSU::Traits::FiniteElementType::
558  Traits::LocalBasisType::Traits::DomainFieldType DF;
559 
560  // dimensions
561  const int dim = EG::Geometry::mydimension;
562 
563  // cell center
564  const Dune::FieldVector<DF,dim>&
565  inside_local = Dune::ReferenceElements<DF,dim>::general(eg.entity().type()).position(0,0);
566 
567  // capacity term
568  typename TP::Traits::RangeFieldType capacity = param.d(eg.entity(),inside_local);
569 
570  // residual contribution
571  mat.accumulate(lfsu,0,lfsu,0,capacity*eg.geometry().volume());
572  }
573 
574  private:
575  TP& param;
576  };
577 
578 
580  } // namespace PDELab
581 } // namespace Dune
582 
583 #endif
void alpha_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition: convectiondiffusionccfv.hh:66
void alpha_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition: convectiondiffusionccfv.hh:532
Definition: convectiondiffusionccfv.hh:50
void alpha_boundary(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, R &r_s) const
Definition: convectiondiffusionccfv.hh:282
Definition: convectiondiffusionccfv.hh:57
sparsity pattern generator
Definition: pattern.hh:13
Definition: convectiondiffusionccfv.hh:56
void alpha_volume_post_skeleton(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition: convectiondiffusionccfv.hh:257
const IG & ig
Definition: constraints.hh:148
void preStage(typename TP::Traits::RangeFieldType time, int r)
to be called once before each stage
Definition: convectiondiffusionccfv.hh:473
static const int dim
Definition: adaptivity.hh:83
Definition: convectiondiffusionccfv.hh:58
Definition: adaptivity.hh:27
Definition: convectiondiffusionparameter.hh:65
void setTime(typename TP::Traits::RangeFieldType t)
set time in parameter class
Definition: convectiondiffusionccfv.hh:461
Type
Definition: convectiondiffusionparameter.hh:65
void jacobian_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat) const
Definition: convectiondiffusionccfv.hh:88
void alpha_skeleton(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, R &r_s, R &r_n) const
Definition: convectiondiffusionccfv.hh:112
sparsity pattern generator
Definition: pattern.hh:29
void preStep(typename TP::Traits::RangeFieldType time, typename TP::Traits::RangeFieldType dt, int stages)
to be called once before each time step
Definition: convectiondiffusionccfv.hh:467
Default flags for all local operators.
Definition: flags.hh:18
ConvectionDiffusionCCFVTemporalOperator(TP &param_)
Definition: convectiondiffusionccfv.hh:525
void lambda_volume(const EG &eg, const LFSV &lfsv, R &r) const
Definition: convectiondiffusionccfv.hh:443
Definition: convectiondiffusionparameter.hh:65
void jacobian_skeleton(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, M &mat_ss, M &mat_sn, M &mat_ns, M &mat_nn) const
Definition: convectiondiffusionccfv.hh:177
Definition: convectiondiffusionccfv.hh:59
Default class for additional methods in instationary local operators.
Definition: idefault.hh:89
Definition: convectiondiffusionccfv.hh:511
Definition: convectiondiffusionparameter.hh:65
TP::Traits::RangeFieldType suggestTimestep(typename TP::Traits::RangeFieldType dt) const
to be called once before each stage
Definition: convectiondiffusionccfv.hh:489
void jacobian_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat) const
Definition: convectiondiffusionccfv.hh:553
void jacobian_boundary(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, M &mat_ss) const
Definition: convectiondiffusionccfv.hh:374
ConvectionDiffusionCCFV(TP &param_)
Definition: convectiondiffusionccfv.hh:61
Definition: convectiondiffusionccfv.hh:36
Definition: convectiondiffusionccfv.hh:54
Definition: convectiondiffusionccfv.hh:51
Definition: convectiondiffusionccfv.hh:55
void postStage()
to be called once at the end of each stage
Definition: convectiondiffusionccfv.hh:484