DOpE
mol_spacetimehandler.h
Go to the documentation of this file.
1 
24 #ifndef _MOL_SPACE_TIME_HANDLER_H_
25 #define _MOL_SPACE_TIME_HANDLER_H_
26 
27 #include "spacetimehandler.h"
28 #include "constraints.h"
29 #include "sparsitymaker.h"
31 #include "sth_internals.h"
32 #include "mapping_wrapper.h"
33 #include "refinementcontainer.h"
35 
36 #include <dofs/dof_handler.h>
37 #include <dofs/dof_renumbering.h>
38 #include <dofs/dof_tools.h>
39 #include <hp/mapping_collection.h>
40 #include <lac/constraint_matrix.h>
41 #include <deal.II/grid/grid_refinement.h>
42 
43 namespace DOpE
44 {
49  template<template <int, int> class FE, template<int, int> class DH, typename SPARSITYPATTERN,
50  typename VECTOR, int dopedim, int dealdim>
52  SPARSITYPATTERN, VECTOR, dopedim, dealdim>
53  {
54  public:
65  MethodOfLines_SpaceTimeHandler(dealii::Triangulation<dealdim>& triangulation,
66  const FE<dealdim, dealdim>& control_fe,
67  const FE<dealdim, dealdim>& state_fe,
71  SpaceTimeHandler<FE, DH, SPARSITYPATTERN, VECTOR, dopedim, dealdim>(type, index_setter),
72  _triangulation(triangulation),
73  _control_dof_handler(_triangulation),
74  _state_dof_handler(_triangulation),
75  _control_fe(&control_fe),
76  _state_fe(&state_fe),
77  _mapping(&DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1),
78  _constraints(),
79  _control_mesh_transfer(NULL),
80  _state_mesh_transfer(NULL),
81  _sparse_mkr_dynamic(true)
82  {
83  _sparsitymaker = new SparsityMaker<DH, dealdim>;
84  _user_defined_dof_constr = NULL;
85  }
86 
98  MethodOfLines_SpaceTimeHandler(dealii::Triangulation<dealdim>& triangulation,
99  const FE<dealdim, dealdim>& control_fe,
100  const FE<dealdim, dealdim>& state_fe,
101  const dealii::Triangulation<1> & times,
105  SpaceTimeHandler<FE, DH, SPARSITYPATTERN, VECTOR, dopedim, dealdim>(times, type, index_setter),
106  _triangulation(triangulation),
107  _control_dof_handler(_triangulation),
108  _state_dof_handler(_triangulation),
109  _control_fe(&control_fe),
110  _state_fe(&state_fe),
111  _mapping(&DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1),
112  _constraints(),
113  _control_mesh_transfer(NULL), _state_mesh_transfer(NULL), _sparse_mkr_dynamic(true)
114  {
115  _sparsitymaker = new SparsityMaker<DH, dealdim>;
116  _user_defined_dof_constr = NULL;
117  }
118 
130  MethodOfLines_SpaceTimeHandler(dealii::Triangulation<dealdim>& triangulation,
131  const FE<dealdim, dealdim>& control_fe,
132  const FE<dealdim, dealdim>& state_fe,
133  const Constraints& c,
137  SpaceTimeHandler<FE, DH, SPARSITYPATTERN, VECTOR, dopedim, dealdim>(type, index_setter),
138  _triangulation(triangulation),
139  _control_dof_handler(_triangulation),
140  _state_dof_handler(_triangulation),
141  _control_fe(&control_fe),
142  _state_fe(&state_fe),
143  _mapping(&DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1),
144  _constraints(c),
145  _control_mesh_transfer(NULL), _state_mesh_transfer(NULL), _sparse_mkr_dynamic(true)
146  {
147  _sparsitymaker = new SparsityMaker<DH, dealdim>;
148  _user_defined_dof_constr = NULL;
149  }
150 
163  MethodOfLines_SpaceTimeHandler(dealii::Triangulation<dealdim>& triangulation,
164  const FE<dealdim, dealdim>& control_fe,
165  const FE<dealdim, dealdim>& state_fe,
166  const dealii::Triangulation<1> & times,
167  const Constraints& c,
171  SpaceTimeHandler<FE, DH, SPARSITYPATTERN, VECTOR, dopedim, dealdim>(times, type, index_setter),
172  _triangulation(triangulation),
173  _control_dof_handler(_triangulation),
174  _state_dof_handler(_triangulation),
175  _control_fe(&control_fe),
176  _state_fe(&state_fe),
177  _mapping(&DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1),
178  _constraints(c),
179  _control_mesh_transfer(NULL), _state_mesh_transfer(NULL), _sparse_mkr_dynamic(true)
180  {
181  _sparsitymaker = new SparsityMaker<DH, dealdim>;
182  _user_defined_dof_constr = NULL;
183  }
184 
186  {
187  _control_dof_handler.clear();
188 
189  _state_dof_handler.clear();
190 
191  if (_control_mesh_transfer != NULL)
192  {
193  delete _control_mesh_transfer;
194  }
195  if (_state_mesh_transfer != NULL)
196  {
197  delete _state_mesh_transfer;
198  }
199  if (_sparsitymaker != NULL && _sparse_mkr_dynamic == true)
200  {
201  delete _sparsitymaker;
202  }
203  }
204 
208  void
209  ReInit(unsigned int control_n_blocks,
210  const std::vector<unsigned int>& control_block_component,
211  unsigned int state_n_blocks,
212  const std::vector<unsigned int>& state_block_component)
213  {
214 #if dope_dimension > 0
215  SpaceTimeHandler<FE, DH, SPARSITYPATTERN,
216  VECTOR, dopedim, dealdim>::SetActiveFEIndicesControl(_control_dof_handler);
217 #endif
218  _control_dof_handler.distribute_dofs(*_control_fe);
219 
220 #if dope_dimension > 0
221  DoFRenumbering::component_wise (static_cast<DH<dopedim, dopedim>&>(_control_dof_handler));
222  if(dopedim==dealdim)
223  {
224  _control_dof_constraints.clear ();
225  DoFTools::make_hanging_node_constraints (static_cast<DH<dopedim, dopedim>&>(_control_dof_handler),
226  _control_dof_constraints);
227  if (GetUserDefinedDoFConstraints() != NULL)
228  GetUserDefinedDoFConstraints()->MakeControlDoFConstraints(_control_dof_handler,
229  _control_dof_constraints);
230  _control_dof_constraints.close ();
231  }
232  else
233  {
234  throw DOpEException("Not implemented for dopedim != dealdim","MethodOfLines_SpaceTimeHandler::ReInit");
235  }
236 #endif
237  _control_dofs_per_block.resize(control_n_blocks);
238 #if dope_dimension > 0
239  {
240  DoFTools::count_dofs_per_block (static_cast<DH<dopedim, dopedim>&>(_control_dof_handler),
241  _control_dofs_per_block,control_block_component);
242  }
243 #else
244  {
245  for (unsigned int i = 0; i < _control_dofs_per_block.size(); i++)
246  {
247  _control_dofs_per_block[i] = 0;
248  }
249  for (unsigned int i = 0; i < control_block_component.size(); i++)
250  {
251  _control_dofs_per_block[control_block_component[i]]++;
252  }
253  }
254 #endif
256  _state_dof_handler);
257  _state_dof_handler.distribute_dofs(GetFESystem("state"));
258  DoFRenumbering::component_wise(
259  static_cast<DH<dealdim, dealdim>&>(_state_dof_handler));
260 
261  _state_dof_constraints.clear();
262  DoFTools::make_hanging_node_constraints(
263  static_cast<DH<dealdim, dealdim>&>(_state_dof_handler),
264  _state_dof_constraints);
265  //TODO Dirichlet ueber Constraints
266  if (GetUserDefinedDoFConstraints() != NULL)
267  GetUserDefinedDoFConstraints()->MakeStateDoFConstraints(
268  _state_dof_handler, _state_dof_constraints);
269  _state_dof_constraints.close();
270 
271  _state_dofs_per_block.resize(state_n_blocks);
272  DoFTools::count_dofs_per_block(
273  static_cast<DH<dealdim, dealdim>&>(_state_dof_handler),
274  _state_dofs_per_block, state_block_component);
275 
276  _support_points.clear();
277 
278  _constraints.ReInit(_control_dofs_per_block);
279  //_constraints.ReInit(_control_dofs_per_block, _state_dofs_per_block);
280 
281  //Initialize also the timediscretization.
282  this->ReInitTime();
283 
284  //There where changes invalidate tickets
285  this->IncrementControlTicket();
286  this->IncrementStateTicket();
287  }
288 
294  {
295  //There is only one mesh, hence always return this
296  return _control_dof_handler;
297  }
303  {
304  //There is only one mesh, hence always return this
305  return _state_dof_handler;
306  }
311  GetMapping() const
312  {
313  return *_mapping;
314  }
315 
319  unsigned int
320  GetControlDoFsPerBlock(unsigned int b, int /*time_point*/= -1) const
321  {
322  return _control_dofs_per_block[b];
323  }
327  unsigned int
328  GetStateDoFsPerBlock(unsigned int b, int /*time_point*/= -1) const
329  {
330  return _state_dofs_per_block[b];
331  }
335  unsigned int
336  GetConstraintDoFsPerBlock(std::string name, unsigned int b) const
337  {
338  return (_constraints.GetDoFsPerBlock(name))[b];
339  }
343  const std::vector<unsigned int>&
345  {
346  return _control_dofs_per_block;
347  }
351  const std::vector<unsigned int>&
352  GetStateDoFsPerBlock(int /*time_point*/= -1) const
353  {
354  return _state_dofs_per_block;
355  }
359  const std::vector<unsigned int>&
360  GetConstraintDoFsPerBlock(std::string name) const
361  {
362  return _constraints.GetDoFsPerBlock(name);
363  }
367  const dealii::ConstraintMatrix&
369  {
370  return _control_dof_constraints;
371  }
375  const dealii::ConstraintMatrix&
377  {
378  return _state_dof_constraints;
379  }
380 
384  virtual void
385  InterpolateState(VECTOR& result,
386  const std::vector<VECTOR*> & local_vectors, double t,
387  const TimeIterator& it) const
388  {
389  assert(it.get_left() <= t);
390  assert(it.get_right() >= t);
391  if (local_vectors.size() != 2)
392  {
393  throw DOpEException(
394  "This function is currently not implemented for anything other than"
395  " linear interpolation of 2 DoFs.",
396  "MethodOfLine_SpaceTimeHandler::InterpolateState");
397  }
398  double lambda_l = (it.get_right() - t) / it.get_k();
399  double lambda_r = (t - it.get_left()) / it.get_k();
400 
401  //Here we assume that the numbering of dofs goes from left to right!
402  result = *local_vectors[0];
403 
404  result.sadd(lambda_l, lambda_r, *local_vectors[1]);
405  }
406 
410  unsigned int
412  {
413  return GetControlDoFHandler().n_dofs();
414  }
418  unsigned int
419  GetStateNDoFs(int /*time_point*/= -1) const
420  {
421  return GetStateDoFHandler().n_dofs();
422  }
426  unsigned int
427  GetConstraintNDoFs(std::string name) const
428  {
429  return _constraints.n_dofs(name);
430  }
434  unsigned int
436  {
437  return _constraints.n_dofs("global");
438  //return _constraints.global_n_dofs();
439  }
443  unsigned int
445  {
446  //return _constraints.local_n_dofs();
447  return _constraints.n_dofs("local");
448  }
449 
453  const std::vector<Point<dealdim> >&
455  {
456  _support_points.resize(GetStateNDoFs());
458  GetStateDoFHandler(), _support_points);
459  return _support_points;
460  }
461 
462  /******************************************************/
467  void
468  ComputeControlSparsityPattern(SPARSITYPATTERN & sparsity) const;
469 
470  /******************************************************/
475  void
476  ComputeStateSparsityPattern(SPARSITYPATTERN & sparsity) const
477  {
478  this->GetSparsityMaker()->ComputeSparsityPattern(
479  this->GetStateDoFHandler(), sparsity,
481  }
482 
483  /******************************************************/
484 
488  const FE<dealdim, dealdim>&
489  GetFESystem(std::string name) const
490  {
491  if (name == "state")
492  {
493  return *_state_fe;
494  }
495  else if (name == "control")
496  {
497  return *_control_fe;
498  }
499  else
500  {
501  throw DOpEException("Not implemented for name =" + name,
502  "MethodOfLines_SpaceTimeHandler::GetFESystem");
503  }
504 
505  }
506 
507  /******************************************************/
518  void
521  {
522  assert(ref_type == DOpEtypes::RefinementType::global);
523  RefinementContainer ref_con_dummy;
524  RefineSpace(ref_con_dummy);
525  }
526 
527  /******************************************************/
537  void
538  RefineSpace(const RefinementContainer& ref_container)
539  {
540  DOpEtypes::RefinementType ref_type = ref_container.GetRefType();
541 
542  //make sure that we do not use any coarsening
543  assert(!ref_container.UsesCoarsening());
544 
545  if (_control_mesh_transfer != NULL)
546  {
547  delete _control_mesh_transfer;
548  _control_mesh_transfer = NULL;
549  }
550  if (_state_mesh_transfer != NULL)
551  {
552  delete _state_mesh_transfer;
553  _state_mesh_transfer = NULL;
554  }
555 #if dope_dimension == deal_II_dimension
556  _control_mesh_transfer = new DOpEWrapper::SolutionTransfer<dopedim, VECTOR,
557  DH>(_control_dof_handler);
558 #endif
559  _state_mesh_transfer = new DOpEWrapper::SolutionTransfer<dealdim, VECTOR,
560  DH>(_state_dof_handler);
561  if (DOpEtypes::RefinementType::global == ref_type)
562  {
563  _triangulation.set_all_refine_flags();
564  }
565  else if (DOpEtypes::RefinementType::fixed_number == ref_type)
566  {
567  GridRefinement::refine_and_coarsen_fixed_number(_triangulation,
568  ref_container.GetLocalErrorIndicators(),
569  ref_container.GetTopFraction(),
570  ref_container.GetBottomFraction());
571  }
572  else if (DOpEtypes::RefinementType::fixed_fraction == ref_type)
573  {
574  GridRefinement::refine_and_coarsen_fixed_fraction(_triangulation,
575  ref_container.GetLocalErrorIndicators(),
576  ref_container.GetTopFraction(),
577  ref_container.GetBottomFraction());
578  }
579  else if (DOpEtypes::RefinementType::optimized == ref_type)
580  {
581  GridRefinement::refine_and_coarsen_optimize(_triangulation,
582  ref_container.GetLocalErrorIndicators(),
583  ref_container.GetConvergenceOrder());
584  }
585  else
586  {
587  throw DOpEException("Not implemented for name =" + ref_type,
588  "MethodOfLines_SpaceTimeHandler::RefineSpace");
589  }
590  _triangulation.prepare_coarsening_and_refinement();
591 
592  //FIXME: works only if no coarsening happens, because we do not have the vectors to be interpolated availiable...
593  if (_control_mesh_transfer != NULL)
594  _control_mesh_transfer->prepare_for_pure_refinement();
595  if (_state_mesh_transfer != NULL)
596  _state_mesh_transfer->prepare_for_pure_refinement();
597 
598  _triangulation.execute_coarsening_and_refinement();
599  }
600  /******************************************************/
601 
605  unsigned int
606  NewTimePointToOldTimePoint(unsigned int t) const
607  {
608  //TODO this has to be implemented when temporal refinement is possible!
609  //At present the temporal grid can't be refined
610  return t;
611  }
612 
613  /******************************************************/
614 
618  void
619  SpatialMeshTransferControl(const VECTOR& old_values,
620  VECTOR& new_values) const
621  {
622  if (_control_mesh_transfer != NULL)
623  _control_mesh_transfer->refine_interpolate(old_values, new_values);
624  }
625  void
626  SpatialMeshTransferState(const VECTOR& old_values,
627  VECTOR& new_values) const
628  {
629  if (_state_mesh_transfer != NULL)
630  _state_mesh_transfer->refine_interpolate(old_values, new_values);
631  }
632  /******************************************************/
641  void
644  {
645  _user_defined_dof_constr = &constraints_maker;
646  _user_defined_dof_constr->RegisterMapping(this->GetMapping());
647  }
648  /******************************************************/
656  void
658  {
659  if (_sparsitymaker != NULL && _sparse_mkr_dynamic)
660  delete _sparsitymaker;
661  _sparsitymaker = &sparsity_maker;
662  _sparse_mkr_dynamic = false;
663  }
664 
665  /******************************************************/
672  void
673  ResetTriangulation(const dealii::Triangulation<dealdim>& tria)
674  {
675  _state_dof_handler.clear();
676  _triangulation.clear();
677  _triangulation.copy_triangulation(tria);
678  _state_dof_handler.initialize(_triangulation, *_state_fe);
679  this->IncrementControlTicket();
680  this->IncrementStateTicket();
681  if (_control_mesh_transfer != NULL)
682  delete _control_mesh_transfer;
683  _control_mesh_transfer = NULL;
684  if (_state_mesh_transfer != NULL)
685  delete _state_mesh_transfer;
686  _state_mesh_transfer = NULL;
687 
688  }
689 
690  private:
692  GetSparsityMaker() const
693  {
694  return _sparsitymaker;
695  }
696  const UserDefinedDoFConstraints<DH, dopedim, dealdim>*
697  GetUserDefinedDoFConstraints() const
698  {
699  return _user_defined_dof_constr;
700  }
701  SparsityMaker<DH, dealdim>* _sparsitymaker;
702  UserDefinedDoFConstraints<DH, dopedim, dealdim>* _user_defined_dof_constr;
703 
704  dealii::Triangulation<dealdim>& _triangulation;
705  DOpEWrapper::DoFHandler<dopedim, DH> _control_dof_handler;
706  DOpEWrapper::DoFHandler<dealdim, DH> _state_dof_handler;
707 
708  std::vector<unsigned int> _control_dofs_per_block;
709  std::vector<unsigned int> _state_dofs_per_block;
710 
711  dealii::ConstraintMatrix _control_dof_constraints;
712  dealii::ConstraintMatrix _state_dof_constraints;
713 
714  const dealii::SmartPointer<const FE<dealdim, dealdim> > _control_fe;
715  const dealii::SmartPointer<const FE<dealdim, dealdim> > _state_fe;
716 
717  const dealii::SmartPointer<const DOpEWrapper::Mapping<dealdim, DH> > _mapping;
718 
719  std::vector<Point<dealdim> > _support_points;
720 
721  Constraints _constraints;
724  bool _sparse_mkr_dynamic;
725  };
726 
727  /**************************explicit instantiation*************/
728 
732  template<>
733  void
734  DOpE::MethodOfLines_SpaceTimeHandler<dealii::FESystem,
735  dealii::DoFHandler, dealii::BlockSparsityPattern,
736  dealii::BlockVector<double>, dope_dimension, deal_II_dimension>::ComputeControlSparsityPattern(
737  dealii::BlockSparsityPattern & sparsity) const
738  {
739  const std::vector<unsigned int>& blocks = this->GetControlDoFsPerBlock();
740  dealii::BlockCompressedSimpleSparsityPattern csp(blocks.size(),
741  blocks.size());
742  for (unsigned int i = 0; i < blocks.size(); i++)
743  {
744  for (unsigned int j = 0; j < blocks.size(); j++)
745  {
746  csp.block(i, j).reinit(this->GetControlDoFsPerBlock(i),
747  this->GetControlDoFsPerBlock(j));
748  }
749  }
750  csp.collect_sizes();
751 #if dope_dimension > 0
752  //We use here dealii::DoFHandler<dealdim>, because if dope_dim >0 then dopedim = dealdim.
753  dealii::DoFTools::make_sparsity_pattern (this->GetControlDoFHandler().GetDEALDoFHandler(),csp);
754 #else
755  abort();
756 #endif
757  this->GetControlDoFConstraints().condense(csp);
758  sparsity.copy_from(csp);
759  }
760 
761  /******************************************************/
762 
763  template<>
764  void
765  MethodOfLines_SpaceTimeHandler<dealii::FESystem,
766  dealii::DoFHandler, dealii::SparsityPattern,
767  dealii::Vector<double>, dope_dimension, deal_II_dimension>::ComputeControlSparsityPattern(
768  dealii::SparsityPattern & sparsity) const
769  {
770  const unsigned int total_dofs = this->GetControlNDoFs();
771  dealii::CompressedSimpleSparsityPattern csp(total_dofs, total_dofs);
772 
773 #if dope_dimension > 0
774  dealii::DoFTools::make_sparsity_pattern (this->GetControlDoFHandler().GetDEALDoFHandler(),csp);
775 #else
776  abort();
777 #endif
778  this->GetControlDoFConstraints().condense(csp);
779  sparsity.copy_from(csp);
780  }
781 
785  template<>
786  void
788  dealii::hp::FECollection,
789  dealii::hp::DoFHandler, dealii::BlockSparsityPattern,
790  dealii::BlockVector<double>, dope_dimension, deal_II_dimension>::ComputeControlSparsityPattern(
791  dealii::BlockSparsityPattern & sparsity) const
792  {
793  const std::vector<unsigned int>& blocks = this->GetControlDoFsPerBlock();
794  dealii::BlockCompressedSimpleSparsityPattern csp(blocks.size(),
795  blocks.size());
796  for (unsigned int i = 0; i < blocks.size(); i++)
797  {
798  for (unsigned int j = 0; j < blocks.size(); j++)
799  {
800  csp.block(i, j).reinit(this->GetControlDoFsPerBlock(i),
801  this->GetControlDoFsPerBlock(j));
802  }
803  }
804  csp.collect_sizes();
805 #if dope_dimension > 0
806  //We use here dealii::DoFHandler<dealdim>, because if dope_dim >0 then dopedim = dealdim.
807  dealii::DoFTools::make_sparsity_pattern (this->GetControlDoFHandler().GetDEALDoFHandler(),csp);
808 #else
809  abort();
810 #endif
811  this->GetControlDoFConstraints().condense(csp);
812  sparsity.copy_from(csp);
813  }
814 
815  /******************************************************/
816 
817  template<>
818  void
819  MethodOfLines_SpaceTimeHandler<dealii::hp::FECollection,
820  dealii::hp::DoFHandler, dealii::SparsityPattern,
821  dealii::Vector<double>, dope_dimension, deal_II_dimension>::ComputeControlSparsityPattern(
822  dealii::SparsityPattern & sparsity) const
823  {
824  const unsigned int total_dofs = this->GetControlNDoFs();
825  dealii::CompressedSimpleSparsityPattern csp(total_dofs, total_dofs);
826 
827 #if dope_dimension > 0
828  dealii::DoFTools::make_sparsity_pattern (this->GetControlDoFHandler().GetDEALDoFHandler(),csp);
829 #else
830  abort();
831 #endif
832  this->GetControlDoFConstraints().condense(csp);
833  sparsity.copy_from(csp);
834  }
835 
836 }
837 
838 #endif
const DOpEWrapper::DoFHandler< dopedim, DH > & GetControlDoFHandler() const
Definition: mol_spacetimehandler.h:293
void ReInitTime()
Definition: spacetimehandler_base.h:82
const DOpEWrapper::Mapping< dealdim, DH > & GetMapping() const
Definition: mol_spacetimehandler.h:311
void SetActiveFEIndicesState(DOpEWrapper::DoFHandler< dealdim, DH > &dof_handler)
Definition: spacetimehandler.h:327
void ComputeStateSparsityPattern(SPARSITYPATTERN &sparsity) const
Definition: mol_spacetimehandler.h:476
unsigned int GetConstraintNDoFs(std::string name) const
Definition: mol_spacetimehandler.h:427
Definition: dopetypes.h:50
void RefineSpace(const RefinementContainer &ref_container)
Definition: mol_spacetimehandler.h:538
unsigned int GetStateNDoFs(int=-1) const
Definition: mol_spacetimehandler.h:419
void SetSparsityMaker(SparsityMaker< DH, dealdim > &sparsity_maker)
Definition: mol_spacetimehandler.h:657
unsigned int GetStateDoFsPerBlock(unsigned int b, int=-1) const
Definition: mol_spacetimehandler.h:328
void SetActiveFEIndicesControl(DOpEWrapper::DoFHandler< dopedim, DH > &dof_handler)
Definition: spacetimehandler.h:348
void ComputeControlSparsityPattern(SPARSITYPATTERN &sparsity) const
const std::vector< unsigned int > & GetConstraintDoFsPerBlock(std::string name) const
Definition: mol_spacetimehandler.h:360
unsigned int GetConstraintDoFsPerBlock(std::string name, unsigned int b) const
Definition: mol_spacetimehandler.h:336
MethodOfLines_SpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &control_fe, const FE< dealdim, dealdim > &state_fe, DOpEtypes::ControlType type, const ActiveFEIndexSetterInterface< dopedim, dealdim > &index_setter=ActiveFEIndexSetterInterface< dopedim, dealdim >())
Definition: mol_spacetimehandler.h:65
unsigned int GetControlDoFsPerBlock(unsigned int b, int=-1) const
Definition: mol_spacetimehandler.h:320
const FE< dealdim, dealdim > & GetFESystem(std::string name) const
Definition: mol_spacetimehandler.h:489
ControlType
Definition: dopetypes.h:102
unsigned int GetControlNDoFs() const
Definition: mol_spacetimehandler.h:411
void SpatialMeshTransferControl(const VECTOR &old_values, VECTOR &new_values) const
Definition: mol_spacetimehandler.h:619
void SetUserDefinedDoFConstraints(UserDefinedDoFConstraints< DH, dopedim, dealdim > &constraints_maker)
Definition: mol_spacetimehandler.h:642
Definition: dopetypes.h:50
const DOpEWrapper::DoFHandler< dealdim, DH > & GetStateDoFHandler() const
Definition: mol_spacetimehandler.h:302
unsigned int NewTimePointToOldTimePoint(unsigned int t) const
Definition: mol_spacetimehandler.h:606
Definition: timeiterator.h:63
Definition: userdefineddofconstraints.h:55
double get_k() const
Definition: timeiterator.h:195
void ResetTriangulation(const dealii::Triangulation< dealdim > &tria)
Definition: mol_spacetimehandler.h:673
MethodOfLines_SpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &control_fe, const FE< dealdim, dealdim > &state_fe, const dealii::Triangulation< 1 > &times, DOpEtypes::ControlType type, const ActiveFEIndexSetterInterface< dopedim, dealdim > &index_setter=ActiveFEIndexSetterInterface< dopedim, dealdim >())
Definition: mol_spacetimehandler.h:98
DOpEtypes::RefinementType GetRefType() const
Definition: refinementcontainer.cc:95
RefinementType
Definition: dopetypes.h:48
virtual void InterpolateState(VECTOR &result, const std::vector< VECTOR * > &local_vectors, double t, const TimeIterator &it) const
Definition: mol_spacetimehandler.h:385
Definition: refinementcontainer.h:42
const std::vector< unsigned int > & GetDoFsPerBlock(std::string name) const
Definition: constraints.h:159
Definition: active_fe_index_setter_interface.h:39
virtual const dealii::Vector< float > & GetLocalErrorIndicators() const
Definition: refinementcontainer.cc:46
virtual double GetTopFraction() const
Definition: refinementcontainer.cc:56
Definition: dopetypes.h:50
Definition: mol_spacetimehandler.h:51
Definition: constraints.h:33
const std::vector< unsigned int > & GetStateDoFsPerBlock(int=-1) const
Definition: mol_spacetimehandler.h:352
MethodOfLines_SpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &control_fe, const FE< dealdim, dealdim > &state_fe, const Constraints &c, DOpEtypes::ControlType type, const ActiveFEIndexSetterInterface< dopedim, dealdim > &index_setter=ActiveFEIndexSetterInterface< dopedim, dealdim >())
Definition: mol_spacetimehandler.h:130
virtual double GetConvergenceOrder() const
Definition: refinementcontainer.cc:85
double get_right() const
Definition: timeiterator.h:185
Definition: spacetimehandler.h:71
~MethodOfLines_SpaceTimeHandler()
Definition: mol_spacetimehandler.h:185
void MapDoFsToSupportPoints(const DOpEWrapper::Mapping< dealdim, dealii::DoFHandler > &mapping, const DOpEWrapper::DoFHandler< dealdim, dealii::DoFHandler > &dh, VECTOR &support_points)
Definition: sth_internals.h:47
void ReInit(std::vector< unsigned int > &control_dofs_per_block)
Definition: constraints.h:108
const dealii::ConstraintMatrix & GetControlDoFConstraints() const
Definition: mol_spacetimehandler.h:368
virtual void ComputeSparsityPattern(const DOpEWrapper::DoFHandler< dim, DH > &dof_handler, dealii::BlockSparsityPattern &sparsity, const dealii::ConstraintMatrix &hanging_node_constraints, const std::vector< unsigned int > &blocks) const
Definition: sparsitymaker.h:111
void ReInit(unsigned int control_n_blocks, const std::vector< unsigned int > &control_block_component, unsigned int state_n_blocks, const std::vector< unsigned int > &state_block_component)
Definition: mol_spacetimehandler.h:209
void RefineSpace(DOpEtypes::RefinementType ref_type=DOpEtypes::RefinementType::global)
Definition: mol_spacetimehandler.h:519
void SpatialMeshTransferState(const VECTOR &old_values, VECTOR &new_values) const
Definition: mol_spacetimehandler.h:626
bool UsesCoarsening() const
Definition: refinementcontainer.cc:103
const std::vector< Point< dealdim > > & GetMapDoFToSupportPoints()
Definition: mol_spacetimehandler.h:454
double get_left() const
Definition: timeiterator.h:175
unsigned int GetNLocalConstraints() const
Definition: mol_spacetimehandler.h:444
void IncrementControlTicket()
Definition: spacetimehandler_base.h:382
Definition: solutiontransfer_wrapper.h:51
Definition: dopeexception.h:35
const dealii::ConstraintMatrix & GetStateDoFConstraints() const
Definition: mol_spacetimehandler.h:376
Definition: dopetypes.h:50
virtual double GetBottomFraction() const
Definition: refinementcontainer.cc:66
MethodOfLines_SpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &control_fe, const FE< dealdim, dealdim > &state_fe, const dealii::Triangulation< 1 > &times, const Constraints &c, DOpEtypes::ControlType type, const ActiveFEIndexSetterInterface< dopedim, dealdim > &index_setter=ActiveFEIndexSetterInterface< dopedim, dealdim >())
Definition: mol_spacetimehandler.h:163
unsigned int n_dofs(std::string name) const
Definition: constraints.h:141
unsigned int GetNGlobalConstraints() const
Definition: mol_spacetimehandler.h:435
void IncrementStateTicket()
Definition: spacetimehandler_base.h:373
const std::vector< unsigned int > & GetControlDoFsPerBlock() const
Definition: mol_spacetimehandler.h:344