DOpE
initialproblem.h
Go to the documentation of this file.
1 
24 #ifndef _INITIAL_PROBLEM_H_
25 #define _INITIAL_PROBLEM_H_
26 
27 #include "spacetimehandler.h"
28 
29 using namespace dealii;
30 
31 namespace DOpE
32 {
41  template<typename PDE, typename VECTOR, int dim>
43  {
44  public:
45  InitialProblem(PDE& pde) :
46  _pde(pde)
47  {
48  }
49 
50  std::string
51  GetName() const
52  {
53  return "InitialProblem";
54  }
55  std::string
56  GetType() const
57  {
58  return "initial_state";
59  }
60 
61  /******************************************************/
66  template<typename EDC>
67  inline void
68  ElementEquation(const EDC& edc,
69  dealii::Vector<double> &local_vector, double scale,
70  double scale_ico);
71 
76  template<typename EDC>
77  inline void
78  ElementRhs(const EDC& edc,
79  dealii::Vector<double> &local_vector, double scale = 1.);
80 
85  inline void
86  PointRhs(
87  const std::map<std::string, const dealii::Vector<double>*> &param_values,
88  const std::map<std::string, const VECTOR*> &domain_values,
89  VECTOR& rhs_vector, double scale = 1);
90 
95  template<typename EDC>
96  inline void
97  ElementMatrix(const EDC& edc,
98  dealii::FullMatrix<double> &local_matrix, double scale = 1.,
99  double scale_ico = 1.);
100 
105  template<typename FDC>
106  inline void
107  FaceEquation(const FDC& fdc,
108  dealii::Vector<double> &local_vector, double scale = 1., double scale_ico = 1.);
109 
114  template<typename FDC>
115  inline void
116  InterfaceEquation(const FDC& fdc,
117  dealii::Vector<double> &local_vector, double scale = 1., double scale_ico = 1.);
118 
123  template<typename FDC>
124  inline void
125  FaceRhs(const FDC& fdc,
126  dealii::Vector<double> &local_vector, double scale = 1.);
127 
132  template<typename FDC>
133  inline void
134  FaceMatrix(const FDC& fdc,
135  dealii::FullMatrix<double> &local_matrix, double scale = 1., double scale_ico = 1.);
136 
141  template<typename FDC>
142  inline void
143  InterfaceMatrix(const FDC& fdc,
144  dealii::FullMatrix<double> &local_matrix, double scale = 1., double scale_ico = 1.);
145 
150  template<typename FDC>
151  inline void
152  BoundaryEquation(const FDC& fdc,
153  dealii::Vector<double> &local_vector, double scale = 1., double scale_ico = 1.);
154 
159  template<typename FDC>
160  inline void
161  BoundaryRhs(const FDC& fdc,
162  dealii::Vector<double> &local_vector, double scale = 1.);
163 
168  template<typename FDC>
169  inline void
170  BoundaryMatrix(const FDC& fdc,
171  dealii::FullMatrix<double> &local_matrix, double scale = 1., double scale_ico = 1.);
172 
177  inline const dealii::SmartPointer<const dealii::FESystem<dim> >
178  GetFESystem() const;
179 
184  inline const dealii::SmartPointer<const dealii::hp::FECollection<dim> >
185  GetFECollection() const;
186 
191  inline std::string
192  GetDoFType() const;
193 
198  inline bool
199  HasFaces() const;
204  inline bool
205  HasPoints() const;
210  inline bool
211  HasInterfaces() const;
212 
217  inline dealii::UpdateFlags
218  GetUpdateFlags() const;
219 
224  inline dealii::UpdateFlags
225  GetFaceUpdateFlags() const;
226 
227  /******************************************************/
232  inline void
233  SetTime(double time, const TimeIterator& interval);
234 
239  template<typename SPARSITYPATTERN>
240  inline void
241  ComputeSparsityPattern(SPARSITYPATTERN & sparsity) const;
242 
247  inline const std::vector<unsigned int>&
248  GetDirichletColors() const;
253  inline const std::vector<bool>&
254  GetDirichletCompMask(unsigned int color) const;
259  inline const Function<dim>&
260  GetDirichletValues(unsigned int color,
261  const std::map<std::string, const dealii::Vector<double>*> &param_values,
262  const std::map<std::string, const VECTOR*> &domain_values) const;
267  inline const std::vector<unsigned int>&
268  GetBoundaryEquationColors() const;
273  inline const dealii::ConstraintMatrix&
274  GetDoFConstraints() const;
279  const dealii::Function<dim>&
280  GetInitialValues() const;
281  /******************************************************/
284  {
285  return _pde.GetOutputHandler();
286  }
287  PDE&
289  {
290  return _pde;
291  }
292  protected:
293 
294  private:
295  PDE& _pde;
296  };
297 
298  /*****************************************************************************************/
299  /********************************IMPLEMENTATION*******************************************/
300  /*****************************************************************************************/
301 
302  template<typename PDE, typename VECTOR, int dim>
303  template<typename EDC>
304  void
306  dealii::Vector<double> &local_vector, double scale,
307  double scale_ico)
308  {
309  _pde.Init_ElementEquation(edc, local_vector, scale, scale_ico);
310  }
311 
312  /******************************************************/
313 
314  template<typename PDE, typename VECTOR, int dim>
315  template<typename FDC>
316  void
318  const FDC& fdc,
319  dealii::Vector<double> &local_vector, double scale, double scale_ico)
320  {
321  _pde.Init_FaceEquation(fdc, local_vector, scale, scale_ico);
322  }
323 
324  /******************************************************/
325 
326  template<typename PDE, typename VECTOR, int dim>
327  template<typename FDC>
328  void
330  const FDC& fdc,
331  dealii::Vector<double> &local_vector, double scale, double scale_ico)
332  {
333  _pde.Init_InterfaceEquation(fdc, local_vector, scale, scale_ico);
334  }
335  /******************************************************/
336 
337  template<typename PDE, typename VECTOR, int dim>
338  template<typename FDC>
339  void
341  const FDC& fdc,
342  dealii::Vector<double> &local_vector, double scale, double scale_ico)
343  {
344  _pde.Init_BoundaryEquation(fdc, local_vector, scale, scale_ico);
345  }
346 
347  /******************************************************/
348 
349  template<typename PDE, typename VECTOR, int dim>
350  template<typename EDC>
351  void
353  dealii::Vector<double> &local_vector, double scale)
354  {
355  _pde.Init_ElementRhs(edc, local_vector, scale);
356  }
357 
358  /******************************************************/
359  template<typename PDE, typename VECTOR, int dim>
360  void
362  const std::map<std::string, const dealii::Vector<double>*> &param_values,
363  const std::map<std::string, const VECTOR*> &domain_values,
364  VECTOR& rhs_vector, double scale)
365  {
366  _pde.Init_PointRhs(param_values, domain_values, rhs_vector, scale);
367  }
368 
369  /******************************************************/
370 
371  template<typename PDE, typename VECTOR, int dim>
372  template<typename FDC>
373  void
375  const FDC& /*fdc*/,
376  dealii::Vector<double> &/*local_vector*/, double /*scale*/)
377  {
378  }
379 
380  /******************************************************/
381 
382  template<typename PDE, typename VECTOR, int dim>
383  template<typename FDC>
384  void
386  const FDC& /*fdc*/,
387  dealii::Vector<double> &/*local_vector*/, double /*scale*/)
388  {
389  }
390 
391  /******************************************************/
392 
393  template<typename PDE, typename VECTOR, int dim>
394  template<typename EDC>
395  void
397  dealii::FullMatrix<double> &local_matrix, double scale, double scale_ico)
398  {
399  _pde.Init_ElementMatrix(edc, local_matrix, scale, scale_ico);
400  }
401 
402  /******************************************************/
403 
404  template<typename PDE, typename VECTOR, int dim>
405  template<typename FDC>
406  void
408  FullMatrix<double> &local_matrix, double scale, double scale_ico)
409  {
410  _pde.Init_FaceMatrix(fdc, local_matrix, scale, scale_ico);
411  }
412 
413  /******************************************************/
414 
415  template<typename PDE, typename VECTOR, int dim>
416  template<typename FDC>
417  void
419  const FDC& fdc, FullMatrix<double> &local_matrix, double scale, double scale_ico)
420  {
421  _pde.Init_InterfaceMatrix(fdc, local_matrix, scale, scale_ico);
422  }
423 
424  /******************************************************/
425 
426  template<typename PDE, typename VECTOR, int dim>
427  template<typename FDC>
428  void
430  const FDC& fdc, FullMatrix<double> &local_matrix, double scale, double scale_ico)
431  {
432  _pde.Init_BoundaryMatrix(fdc, local_matrix, scale, scale_ico);
433  }
434 
435  /******************************************************/
436 
437  template<typename PDE, typename VECTOR, int dim>
438  std::string
440  {
441  return _pde.GetDoFType();
442  }
443 
444  /******************************************************/
445 
446  template<typename PDE, typename VECTOR, int dim>
447  const SmartPointer<const dealii::FESystem<dim> >
449  {
450  return _pde.GetFESystem();
451  }
452 
453  /******************************************************/
454  template<typename PDE, typename VECTOR, int dim>
455  const SmartPointer<const dealii::hp::FECollection<dim> >
457  {
458  return _pde.GetFECollection();
459  }
460 
461  /******************************************************/
462 
463  template<typename PDE, typename VECTOR, int dim>
464  UpdateFlags
466  {
467  UpdateFlags r;
468  r = _pde.GetUpdateFlags();
469  return r | update_JxW_values;
470  }
471 
472  /******************************************************/
473 
474  template<typename PDE, typename VECTOR, int dim>
475  UpdateFlags
477  {
478  UpdateFlags r;
479  r = _pde.GetFaceUpdateFlags();
480  return r | update_JxW_values;
481  }
482 
483  /******************************************************/
484 
485  template<typename PDE, typename VECTOR, int dim>
486  void
488  const TimeIterator& interval)
489  {
490  _pde.SetTime(time, interval);
491  }
492 
493  /******************************************************/
494 
495  template<typename PDE, typename VECTOR, int dim>
496  template<typename SPARSITYPATTERN>
497  void
499  SPARSITYPATTERN & sparsity) const
500  {
501  _pde.ComputeStateSparsityPattern(sparsity);
502  }
503 
504  /******************************************************/
505 
506  template<typename PDE, typename VECTOR, int dim>
507  bool
509  {
510  return _pde.HasFaces();
511  }
512 
513  /******************************************************/
514 
515  template<typename PDE, typename VECTOR, int dim>
516  bool
518  {
519  return _pde.HasPoints();
520  }
521 
522  /******************************************************/
523 
524  template<typename PDE, typename VECTOR, int dim>
525  bool
527  {
528  return _pde.HasInterfaces();
529  }
530 
531  /******************************************************/
532 
533  template<typename PDE, typename VECTOR, int dim>
534  const std::vector<unsigned int>&
536  {
537  return _pde.GetDirichletColors();
538  }
539 
540  /******************************************************/
541 
542  template<typename PDE, typename VECTOR, int dim>
543  const std::vector<bool>&
545  unsigned int color) const
546  {
547  return _pde.GetDirichletCompMask(color);
548  }
549 
550  /******************************************************/
551 
552  template<typename PDE, typename VECTOR, int dim>
553  const Function<dim>&
555  const std::map<std::string, const dealii::Vector<double>*> &param_values,
556  const std::map<std::string, const VECTOR*> &domain_values) const
557  {
558  return _pde.GetDirichletValues(color, param_values, domain_values);
559  }
560 
561  /******************************************************/
562 
563  template<typename PDE, typename VECTOR, int dim>
564  const std::vector<unsigned int>&
566  {
567  return _pde.GetBoundaryEquationColors();
568  }
569 
570  /******************************************************/
571 
572  template<typename PDE, typename VECTOR, int dim>
573  const dealii::ConstraintMatrix&
575  {
576  return _pde.GetDoFConstraints();
577  }
578  template<typename PDE, typename VECTOR, int dim>
579  const dealii::Function<dim>&
581  {
582  return _pde.GetInitialValues();
583  }
585 }
586 #endif
InitialProblem(PDE &pde)
Definition: initialproblem.h:45
dealii::UpdateFlags GetUpdateFlags() const
Definition: initialproblem.h:465
Definition: optproblemcontainer.h:70
std::string GetName() const
Definition: initialproblem.h:51
bool HasInterfaces() const
Definition: initialproblem.h:526
std::string GetType() const
Definition: initialproblem.h:56
std::string GetDoFType() const
Definition: initialproblem.h:439
Definition: timeiterator.h:63
bool HasPoints() const
Definition: initialproblem.h:517
const std::vector< unsigned int > & GetBoundaryEquationColors() const
Definition: initialproblem.h:565
Definition: initialproblem.h:42
const std::vector< bool > & GetDirichletCompMask(unsigned int color) const
Definition: initialproblem.h:544
PDE & GetBaseProblem()
Definition: initialproblem.h:288
const dealii::Function< dim > & GetInitialValues() const
Definition: initialproblem.h:580
void SetTime(double time, const TimeIterator &interval)
Definition: initialproblem.h:487
bool HasFaces() const
Definition: initialproblem.h:508
const Function< dim > & GetDirichletValues(unsigned int color, const std::map< std::string, const dealii::Vector< double > * > &param_values, const std::map< std::string, const VECTOR * > &domain_values) const
Definition: initialproblem.h:554
const dealii::SmartPointer< const dealii::hp::FECollection< dim > > GetFECollection() const
Definition: initialproblem.h:456
const dealii::ConstraintMatrix & GetDoFConstraints() const
Definition: initialproblem.h:574
const dealii::SmartPointer< const dealii::FESystem< dim > > GetFESystem() const
Definition: initialproblem.h:448
DOpEOutputHandler< VECTOR > * GetOutputHandler()
Definition: initialproblem.h:283
dealii::UpdateFlags GetFaceUpdateFlags() const
Definition: initialproblem.h:476
const std::vector< unsigned int > & GetDirichletColors() const
Definition: initialproblem.h:535