24 #ifndef _MOL_STATESPACE_TIME_HANDLER_H_
25 #define _MOL_STATESPACE_TIME_HANDLER_H_
34 #include <dofs/dof_handler.h>
35 #include <dofs/dof_renumbering.h>
36 #include <dofs/dof_tools.h>
37 #include <lac/constraint_matrix.h>
38 #include <deal.II/numerics/solution_transfer.h>
39 #include <deal.II/grid/grid_refinement.h>
51 template<
template<
int,
int>
class FE,
template<
int,
int>
class DH,
typename SPARSITYPATTERN,
52 typename VECTOR,
int dealdim>
54 DH, SPARSITYPATTERN, VECTOR, dealdim>
58 dealii::Triangulation<dealdim>& triangulation,
const FE<dealdim, dealdim>& state_fe,
62 dealdim>(index_setter), _sparse_mkr_dynamic(true), _triangulation(
63 triangulation), _state_dof_handler(_triangulation), _state_fe(
65 &DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1), _state_mesh_transfer(
69 _user_defined_dof_constr = NULL;
72 dealii::Triangulation<dealdim>& triangulation,
const FE<dealdim, dealdim>& state_fe,
73 const dealii::Triangulation<1> & times,
77 dealdim>(times, index_setter), _sparse_mkr_dynamic(true), _triangulation(
78 triangulation), _state_dof_handler(_triangulation), _state_fe(
80 &DOpEWrapper::StaticMappingQ1<dealdim, DH>::mapping_q1), _state_mesh_transfer(
84 _user_defined_dof_constr = NULL;
88 dealii::Triangulation<dealdim>& triangulation,
90 const FE<dealdim, dealdim>& state_fe,
94 dealdim>(index_setter), _sparse_mkr_dynamic(true), _triangulation(
95 triangulation), _state_dof_handler(_triangulation), _state_fe(
96 &state_fe), _mapping(&mapping), _state_mesh_transfer(NULL)
99 _user_defined_dof_constr = NULL;
102 dealii::Triangulation<dealdim>& triangulation,
104 const FE<dealdim, dealdim>& state_fe,
const dealii::Triangulation<1> & times,
108 dealdim>(times, index_setter), _sparse_mkr_dynamic(true), _triangulation(
109 triangulation), _state_dof_handler(_triangulation), _state_fe(
110 &state_fe), _mapping(&mapping), _state_mesh_transfer(NULL)
113 _user_defined_dof_constr = NULL;
119 _state_dof_handler.clear();
121 if (_state_mesh_transfer != NULL)
123 delete _state_mesh_transfer;
125 if (_sparsitymaker != NULL && _sparse_mkr_dynamic ==
true)
127 delete _sparsitymaker;
136 const std::vector<unsigned int>& state_block_component)
141 _state_dof_handler.distribute_dofs(
GetFESystem(
"state"));
142 DoFRenumbering::Cuthill_McKee(
143 static_cast<DH<dealdim, dealdim>&
>(_state_dof_handler));
144 DoFRenumbering::component_wise(
145 static_cast<DH<dealdim, dealdim>&
>(_state_dof_handler));
147 _state_dof_constraints.clear();
148 DoFTools::make_hanging_node_constraints(
149 static_cast<DH<dealdim, dealdim>&
>(_state_dof_handler),
150 _state_dof_constraints);
152 if (GetUserDefinedDoFConstraints() != NULL
155 _state_dof_handler, _state_dof_constraints);
156 _state_dof_constraints.close();
157 _state_dofs_per_block.resize(state_n_blocks);
159 DoFTools::count_dofs_per_block(
160 static_cast<DH<dealdim, dealdim>&
>(_state_dof_handler),
161 _state_dofs_per_block, state_block_component);
163 _support_points.clear();
179 return _state_dof_handler;
197 return _state_dofs_per_block[b];
203 const std::vector<unsigned int>&
206 return _state_dofs_per_block;
212 const dealii::ConstraintMatrix&
215 return _state_dof_constraints;
223 const std::vector<VECTOR*> & local_vectors,
double t,
228 if (local_vectors.size() != 2)
230 "This function is currently not implemented for anything other than"
231 " linear interpolation of 2 DoFs.",
232 "MethodOfLine_SpaceTimeHandler::InterpolateState");
238 result = *local_vectors[0];
240 result.sadd(lambda_l, lambda_r, *local_vectors[1]);
255 const std::vector<Point<dealdim> >&
260 < std::vector<Point<dealdim> >, dealdim
262 return _support_points;
279 const FE<dealdim, dealdim>&
290 "MethodOfLines_StateSpaceTimeHandler::GetFESystem");
333 if (_state_mesh_transfer != NULL)
335 delete _state_mesh_transfer;
336 _state_mesh_transfer = NULL;
338 _state_mesh_transfer =
new dealii::SolutionTransfer<dealdim, VECTOR, DH<dealdim, dealdim> >(
343 _triangulation.set_all_refine_flags();
347 GridRefinement::refine_and_coarsen_fixed_number(_triangulation,
355 GridRefinement::refine_and_coarsen_fixed_fraction(_triangulation,
363 GridRefinement::refine_and_coarsen_optimize(_triangulation,
370 "MethodOfLines_StateSpaceTimeHandler::RefineStateSpace");
372 _triangulation.prepare_coarsening_and_refinement();
373 if (_state_mesh_transfer != NULL
375 _state_mesh_transfer->prepare_for_pure_refinement();
376 _triangulation.execute_coarsening_and_refinement();
398 VECTOR& new_values)
const
400 if (_state_mesh_transfer != NULL
402 _state_mesh_transfer->refine_interpolate(old_values, new_values);
418 _user_defined_dof_constr = &user_defined_dof_constr;
432 if (_sparsitymaker != NULL && _sparse_mkr_dynamic)
433 delete _sparsitymaker;
434 _sparsitymaker = &sparsity_maker;
435 _sparse_mkr_dynamic =
false;
440 GetSparsityMaker()
const
442 return _sparsitymaker;
444 const UserDefinedDoFConstraints<DH, dealdim>*
445 GetUserDefinedDoFConstraints()
const
447 return _user_defined_dof_constr;
449 SparsityMaker<DH, dealdim>* _sparsitymaker;
450 UserDefinedDoFConstraints<DH, dealdim>* _user_defined_dof_constr;
451 bool _sparse_mkr_dynamic;
453 dealii::Triangulation<dealdim>& _triangulation;
456 std::vector<unsigned int> _state_dofs_per_block;
458 dealii::ConstraintMatrix _state_dof_constraints;
460 const dealii::SmartPointer<const FE<dealdim, dealdim> > _state_fe;
461 const dealii::SmartPointer<
464 std::vector<Point<dealdim> > _support_points;
465 dealii::SolutionTransfer<dealdim, VECTOR, DH<dealdim, dealdim> >* _state_mesh_transfer;
const dealii::ConstraintMatrix & GetStateDoFConstraints() const
Definition: mol_statespacetimehandler.h:213
void ReInitTime()
Definition: spacetimehandler_base.h:82
void RegisterMapping(const typename DOpEWrapper::Mapping< dealdim, DH > &mapping)
Definition: userdefineddofconstraints.h:76
Definition: dopetypes.h:50
void ReInit(unsigned int state_n_blocks, const std::vector< unsigned int > &state_block_component)
Definition: mol_statespacetimehandler.h:135
MethodOfLines_StateSpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const DOpEWrapper::Mapping< dealdim, DH > &mapping, const FE< dealdim, dealdim > &state_fe, const ActiveFEIndexSetterInterface< dealdim > &index_setter=ActiveFEIndexSetterInterface< dealdim >())
Definition: mol_statespacetimehandler.h:87
void RefineSpace(DOpEtypes::RefinementType ref_type=DOpEtypes::RefinementType::global)
Definition: mol_statespacetimehandler.h:307
void SetActiveFEIndicesState(DOpEWrapper::DoFHandler< dealdim, DH > &dof_handler)
Definition: statespacetimehandler.h:253
MethodOfLines_StateSpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const DOpEWrapper::Mapping< dealdim, DH > &mapping, const FE< dealdim, dealdim > &state_fe, const dealii::Triangulation< 1 > ×, const ActiveFEIndexSetterInterface< dealdim > &index_setter=ActiveFEIndexSetterInterface< dealdim >())
Definition: mol_statespacetimehandler.h:101
Definition: dopetypes.h:50
unsigned int NewTimePointToOldTimePoint(unsigned int t) const
Definition: mol_statespacetimehandler.h:384
void RefineSpace(const RefinementContainer &ref_container)
Definition: mol_statespacetimehandler.h:326
Definition: mol_statespacetimehandler.h:53
MethodOfLines_StateSpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &state_fe, const dealii::Triangulation< 1 > ×, const ActiveFEIndexSetterInterface< dealdim > &index_setter=ActiveFEIndexSetterInterface< dealdim >())
Definition: mol_statespacetimehandler.h:71
const DOpEWrapper::Mapping< dealdim, DH > & GetMapping() const
Definition: mol_statespacetimehandler.h:186
unsigned int GetStateNDoFs(int=-1) const
Definition: mol_statespacetimehandler.h:247
Definition: timeiterator.h:63
double get_k() const
Definition: timeiterator.h:195
DOpEtypes::RefinementType GetRefType() const
Definition: refinementcontainer.cc:95
RefinementType
Definition: dopetypes.h:48
void SetSparsityMaker(SparsityMaker< DH, dealdim > &sparsity_maker)
Definition: mol_statespacetimehandler.h:430
void ComputeStateSparsityPattern(SPARSITYPATTERN &sparsity) const
Definition: mol_statespacetimehandler.h:267
Definition: refinementcontainer.h:42
MethodOfLines_StateSpaceTimeHandler(dealii::Triangulation< dealdim > &triangulation, const FE< dealdim, dealdim > &state_fe, const ActiveFEIndexSetterInterface< dealdim > &index_setter=ActiveFEIndexSetterInterface< dealdim >())
Definition: mol_statespacetimehandler.h:57
virtual const dealii::Vector< float > & GetLocalErrorIndicators() const
Definition: refinementcontainer.cc:46
virtual double GetTopFraction() const
Definition: refinementcontainer.cc:56
Definition: statespacetimehandler.h:59
Definition: dopetypes.h:50
virtual ~MethodOfLines_StateSpaceTimeHandler()
Definition: mol_statespacetimehandler.h:117
virtual double GetConvergenceOrder() const
Definition: refinementcontainer.cc:85
const DOpEWrapper::DoFHandler< dealdim, DH > & GetStateDoFHandler() const
Definition: mol_statespacetimehandler.h:176
double get_right() const
Definition: timeiterator.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 SetUserDefinedDoFConstraints(UserDefinedDoFConstraints< DH, dealdim > &user_defined_dof_constr)
Definition: mol_statespacetimehandler.h:415
void SpatialMeshTransferState(const VECTOR &old_values, VECTOR &new_values) const
Definition: mol_statespacetimehandler.h:397
const FE< dealdim, dealdim > & GetFESystem(std::string name) const
Definition: mol_statespacetimehandler.h:280
const std::vector< Point< dealdim > > & GetMapDoFToSupportPoints()
Definition: mol_statespacetimehandler.h:256
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
unsigned int GetStateDoFsPerBlock(unsigned int b, int=-1) const
Definition: mol_statespacetimehandler.h:195
bool UsesCoarsening() const
Definition: refinementcontainer.cc:103
const std::vector< unsigned int > & GetStateDoFsPerBlock(int=-1) const
Definition: mol_statespacetimehandler.h:204
double get_left() const
Definition: timeiterator.h:175
Definition: dopeexception.h:35
virtual void InterpolateState(VECTOR &result, const std::vector< VECTOR * > &local_vectors, double t, const TimeIterator &it) const
Definition: mol_statespacetimehandler.h:222
Definition: dopetypes.h:50
virtual double GetBottomFraction() const
Definition: refinementcontainer.cc:66
virtual void MakeStateDoFConstraints(const DOpEWrapper::DoFHandler< dealdim, DH > &dof_handler, dealii::ConstraintMatrix &dof_constraints) const
Definition: userdefineddofconstraints.h:93
void IncrementStateTicket()
Definition: spacetimehandler_base.h:373