33 #ifndef __H__UG__LIB_DISC__SPATIAL_DISC__DOMAIN_DISC__
34 #define __H__UG__LIB_DISC__SPATIAL_DISC__DOMAIN_DISC__
76 template <
typename TDomain,
typename TAlgebra,
typename TGlobAssembler>
80 protected TGlobAssembler
201 const std::vector<number>& vScaleMass,
202 const std::vector<number>& vScaleStiff,
206 const std::vector<number>& vScaleMass,
207 const std::vector<number>& vScaleStiff,
214 const std::vector<number>& vScaleMass,
215 const std::vector<number>& vScaleStiff,
219 const std::vector<number>& vScaleMass,
220 const std::vector<number>& vScaleStiff,
227 const std::vector<number>& vScaleMass,
228 const std::vector<number>& vScaleStiff,
232 const std::vector<number>& vScaleMass,
233 const std::vector<number>& vScaleStiff,
287 const std::vector<number>& vScaleMass,
288 const std::vector<number>& vScaleStiff,
291 const std::vector<number>& vScaleMass,
292 const std::vector<number>& vScaleStiff,
297 vScaleMass, vScaleStiff, u_vtk);
367 UG_LOG(
"Tried to remove ElemDisc from DomainDisc"
368 ", but could not find it there.");
414 UG_LOG(
"Tried to remove ElemError from DomainDisc"
415 ", but could not find it there.");
460 UG_LOG(
"Tried to remove DomainConstraint from DomainDisc"
461 ", but could not find it there.");
474 for(
size_t i = 0; i < di->num_elem_disc(); ++i)
475 add(di->elem_disc(i));
478 for(
size_t i = 0; i < di->num_constraint(); ++i)
479 add(di->constraint(i));
517 std::vector<SmartPtr<IDomainConstraint<TDomain, TAlgebra> > >
m_vConstraint;
529 template <
typename TElem>
532 int si,
bool bNonRegularGrid,
535 template <
typename TElem>
538 int si,
bool bNonRegularGrid,
541 template <
typename TElem>
544 int si,
bool bNonRegularGrid,
547 template <
typename TElem>
550 int si,
bool bNonRegularGrid,
553 template <
typename TElem>
556 int si,
bool bNonRegularGrid,
559 template <
typename TElem>
562 int si,
bool bNonRegularGrid,
565 template <
typename TElem>
568 int si,
bool bNonRegularGrid,
571 template <
typename TElem>
574 int si,
bool bNonRegularGrid,
576 template <
typename TElem>
579 int si,
bool bNonRegularGrid,
583 template <
typename TElem>
586 int si,
bool bNonRegularGrid,
589 const std::vector<number>& vScaleMass,
590 const std::vector<number>& vScaleStiff);
591 template <
typename TElem>
594 int si,
bool bNonRegularGrid,
598 const std::vector<number>& vScaleMass,
599 const std::vector<number>& vScaleStiff);
600 template <
typename TElem>
603 int si,
bool bNonRegularGrid,
606 const std::vector<number>& vScaleMass,
607 const std::vector<number>& vScaleStiff);
608 template <
typename TElem>
611 int si,
bool bNonRegularGrid,
613 template <
typename TElem>
616 int si,
bool bNonRegularGrid,
617 const std::vector<number>& vScaleMass,
618 const std::vector<number>& vScaleStiff,
635 template <
typename TDomain,
typename TAlgebra>
Definition: smart_pointer.h:296
Definition: smart_pointer.h:108
base class for approximation spaces without type of algebra or dof distribution
Definition: approximation_space.h:279
The AssemblingTuner class combines tools to adapt the assembling routine.
Definition: ass_tuner.h:90
generic domain discretization implementing the interface
Definition: domain_disc.h:81
void update_constraints()
Definition: domain_disc_impl.h:112
void add_elem_error_indicator(SmartPtr< IElemError< TDomain > > elem)
adds an element error indicator to the assembling process
Definition: domain_disc.h:381
virtual void calc_error(const vector_type &u, ConstSmartPtr< DoFDistribution > dd, error_vector_type *u_vtk=NULL)
Definition: domain_disc_impl.h:2134
void remove(SmartPtr< IElemDisc< TDomain > > elem)
removes a element discretization from the assembling process
Definition: domain_disc.h:354
SmartPtr< AssemblingTuner< TAlgebra > > m_spAssTuner
this object provides tools to adapt the assemble routine
Definition: domain_disc.h:523
std::vector< SmartPtr< IElemDisc< TDomain > > > m_vDomainElemDisc
vector holding all registered elem discs
Definition: domain_disc.h:505
void add(SmartPtr< IDiscretizationItem< TDomain, TAlgebra > > di)
adds a disc item to the assembling process
Definition: domain_disc.h:471
void update_elem_discs()
set the approximation space in the elem discs and extract IElemDiscs
Definition: domain_disc_impl.h:68
virtual bool is_error_valid()
returns whether current error values are valid
Definition: domain_disc_impl.h:2705
virtual void calc_error(const vector_type &u, const GridLevel &gl, error_vector_type *u_vtk=NULL)
Definition: domain_disc.h:276
virtual size_t num_constraints() const
returns number of registered constraints
Definition: domain_disc.h:483
TDomain domain_type
Type of Domain.
Definition: domain_disc.h:87
void assemble_defect(vector_type &d, GridFunction< TDomain, TAlgebra > &u)
Definition: domain_disc.h:157
bool m_bErrorCalculated
Definition: domain_disc.h:311
virtual void invalidate_error()
Definition: domain_disc_impl.h:2690
void AssembleJacobian(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, matrix_type &J, const vector_type &u)
Definition: domain_disc_impl.h:615
void AssembleErrorEstimator(const std::vector< IElemError< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, const vector_type &u)
Definition: domain_disc_impl.h:2397
std::vector< IElemDisc< TDomain > * > m_vElemDisc
vector holding all registered elem discs
Definition: domain_disc.h:508
ApproximationSpace< TDomain > approx_space_type
Type of approximation space.
Definition: domain_disc.h:102
void remove_elem_error_indicator(SmartPtr< IElemError< TDomain > > elem)
removes a element discretization from the assembling process
Definition: domain_disc.h:401
virtual void finish_timestep(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, ConstSmartPtr< DoFDistribution > dd)
finishes time step
Definition: domain_disc_impl.h:2717
TAlgebra algebra_type
Type of algebra.
Definition: domain_disc.h:90
algebra_type::matrix_type matrix_type
Type of algebra matrix.
Definition: domain_disc.h:93
virtual void assemble_rhs(vector_type &rhs, const GridLevel &gl)
assembles the rhs
Definition: domain_disc.h:144
virtual void prepare_timestep_elem(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, ConstSmartPtr< DoFDistribution > dd)
prepares time step element-wise
Definition: domain_disc_impl.h:1241
static const int dim
world dimension
Definition: domain_disc.h:105
void adjust_solution(GridFunction< TDomain, TAlgebra > &u)
Definition: domain_disc.h:169
virtual void adjust_solution(vector_type &u, number time, const GridLevel &gl)
sets dirichlet values in solution vector
Definition: domain_disc.h:239
virtual void calc_error(const GridFunction< TDomain, TAlgebra > &u)
Definition: domain_disc.h:279
virtual void prepare_timestep(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, number future_time, ConstSmartPtr< DoFDistribution > dd)
prepares time step
Definition: domain_disc_impl.h:1204
virtual void assemble_rhs(vector_type &rhs, const vector_type &u, const GridLevel &gl)
assembles the rhs
Definition: domain_disc.h:138
virtual void assemble_jacobian(matrix_type &J, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const number s_a, const GridLevel &gl)
assembles Jacobian (or Approximation of Jacobian)
Definition: domain_disc.h:193
void update_disc_items()
Definition: domain_disc_impl.h:127
void AssembleMassMatrix(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, matrix_type &M, const vector_type &u)
Definition: domain_disc_impl.h:271
virtual void assemble_defect(vector_type &d, const vector_type &u, ConstSmartPtr< DoFDistribution > dd)
assembles Defect
Definition: domain_disc_impl.h:648
virtual void mark_with_strategy(IRefiner &refiner, SmartPtr< IElementMarkingStrategy< TDomain > > strategy)
Definition: domain_disc_impl.h:2671
void assemble_linear(matrix_type &A, GridFunction< TDomain, TAlgebra > &rhs)
Definition: domain_disc.h:160
void remove(SmartPtr< IDomainConstraint< TDomain, TAlgebra > > pp)
removes a constraint from the assembling process
Definition: domain_disc.h:447
virtual void prepare_timestep(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, number future_time, const GridLevel &gl)
Definition: domain_disc.h:178
void AssembleRhs(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, vector_type &rhs, const vector_type &u)
Definition: domain_disc_impl.h:1124
virtual void assemble_mass_matrix(matrix_type &M, const vector_type &u, const GridLevel &gl)
assembles the mass matrix
Definition: domain_disc.h:259
virtual void adjust_solution(vector_type &u, const GridLevel &gl)
sets dirichlet values in solution vector
Definition: domain_disc.h:149
virtual void assemble_mass_matrix(matrix_type &M, const vector_type &u, ConstSmartPtr< DoFDistribution > dd)
assembles the mass matrix
Definition: domain_disc_impl.h:145
DomainDiscretizationBase(SmartPtr< approx_space_type > pApproxSpace)
default Constructor
Definition: domain_disc.h:109
virtual void assemble_linear(matrix_type &mat, vector_type &rhs, const GridLevel &gl)
Assembles Matrix and Right-Hand-Side for a linear problem.
Definition: domain_disc.h:133
virtual void assemble_stiffness_matrix(matrix_type &A, const vector_type &u, const GridLevel &gl)
assembles the stiffness matrix
Definition: domain_disc.h:266
virtual void assemble_defect(vector_type &d, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const std::vector< number > &vScaleMass, const std::vector< number > &vScaleStiff, const GridLevel &gl)
assembles Defect
Definition: domain_disc.h:204
IMultigridElementIndicators< TDomain > m_mgElemErrors
Definition: domain_disc.h:310
void assemble_rhs(vector_type &rhs, GridFunction< TDomain, TAlgebra > &u)
Definition: domain_disc.h:163
void AssembleDefect(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, vector_type &d, const vector_type &u)
Definition: domain_disc_impl.h:804
void add(SmartPtr< IElemDisc< TDomain > > elem)
adds an element discretization to the assembling process
Definition: domain_disc.h:333
std::vector< SmartPtr< IElemError< TDomain > > > m_vDomainElemError
vector holding all registered elem discs
Definition: domain_disc.h:511
void add(SmartPtr< IDomainConstraint< TDomain, TAlgebra > > pp)
adds a constraint to the assembling process
Definition: domain_disc.h:426
CPUAlgebra::vector_type error_vector_type
Type of error vector.
Definition: domain_disc.h:99
virtual void assemble_linear(matrix_type &A, vector_type &b, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const std::vector< number > &vScaleMass, const std::vector< number > &vScaleStiff, const GridLevel &gl)
Assembles matrix_type and Right-Hand-Side for a linear problem.
Definition: domain_disc.h:217
ConstSmartPtr< DoFDistribution > dd(const GridLevel &gl) const
returns the level dof distribution
Definition: domain_disc.h:501
virtual ~DomainDiscretizationBase()
virtual destructor
Definition: domain_disc.h:115
void AssembleLinear(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, matrix_type &A, vector_type &rhs)
Definition: domain_disc_impl.h:965
std::vector< IElemError< TDomain > * > m_vElemError
vector holding all registered elem discs
Definition: domain_disc.h:514
virtual void assemble_stiffness_matrix(matrix_type &A, const vector_type &u, ConstSmartPtr< DoFDistribution > dd)
assembles the stiffness matrix
Definition: domain_disc_impl.h:305
virtual void assemble_rhs(vector_type &b, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const std::vector< number > &vScaleMass, const std::vector< number > &vScaleStiff, const GridLevel &gl)
Assembles Right-Hand-Side for a linear problem.
Definition: domain_disc.h:230
virtual void assemble_rhs(vector_type &rhs, const vector_type &u, ConstSmartPtr< DoFDistribution > dd)
assembles rhs
Definition: domain_disc_impl.h:998
virtual void assemble_linear(matrix_type &A, vector_type &b, ConstSmartPtr< DoFDistribution > dd)
Assembles Matrix and Right-Hand-Side for a linear problem.
Definition: domain_disc_impl.h:837
TGlobAssembler gass_type
Type of the global assembler.
Definition: domain_disc.h:83
virtual ConstSmartPtr< AssemblingTuner< TAlgebra > > ass_tuner() const
Definition: domain_disc.h:319
std::vector< SmartPtr< IDomainConstraint< TDomain, TAlgebra > > > m_vConstraint
vector holding all registered constraints
Definition: domain_disc.h:517
void FinishTimestepElem(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol)
Definition: domain_disc_impl.h:2855
void assemble_jacobian(matrix_type &J, GridFunction< TDomain, TAlgebra > &u)
Definition: domain_disc.h:154
virtual void finish_timestep_elem(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const GridLevel &gl)
finishes timestep
Definition: domain_disc.h:249
algebra_type::vector_type vector_type
Type of algebra vector.
Definition: domain_disc.h:96
SmartPtr< approx_space_type > approximation_space()
Definition: domain_disc.h:488
virtual void finish_timestep_elem(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, ConstSmartPtr< DoFDistribution > dd)
finishes timestep
Definition: domain_disc_impl.h:2753
void AssembleStiffnessMatrix(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, matrix_type &A, const vector_type &u)
Definition: domain_disc_impl.h:431
ConstSmartPtr< approx_space_type > approximation_space() const
Definition: domain_disc.h:489
void assemble_rhs(GridFunction< TDomain, TAlgebra > &b)
Definition: domain_disc.h:166
virtual void assemble_jacobian(matrix_type &J, const vector_type &u, const GridLevel &gl)
assembles Jacobian (or Approximation of Jacobian)
Definition: domain_disc.h:123
SmartPtr< approx_space_type > m_spApproxSpace
current approximation space
Definition: domain_disc.h:520
virtual void calc_error(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const std::vector< number > &vScaleMass, const std::vector< number > &vScaleStiff, const GridLevel &gl, error_vector_type *u_vtk)
Transient version.
Definition: domain_disc.h:290
virtual void calc_error(const GridFunction< TDomain, TAlgebra > &u, error_vector_type *u_vtk)
Definition: domain_disc.h:281
virtual void prepare_timestep_elem(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const GridLevel &gl)
Definition: domain_disc.h:185
void PrepareTimestepElem(const std::vector< IElemDisc< domain_type > * > &vElemDisc, ConstSmartPtr< DoFDistribution > dd, int si, bool bNonRegularGrid, ConstSmartPtr< VectorTimeSeries< vector_type > > vSol)
Definition: domain_disc_impl.h:1344
virtual SmartPtr< AssemblingTuner< TAlgebra > > ass_tuner()
Definition: domain_disc.h:318
virtual SmartPtr< IConstraint< TAlgebra > > constraint(size_t i)
returns the i'th constraint
Definition: domain_disc.h:486
virtual void assemble_jacobian(matrix_type &J, const vector_type &u, ConstSmartPtr< DoFDistribution > dd)
assembles Jacobian (or Approximation of Jacobian)
Definition: domain_disc_impl.h:471
void update_error_items()
Definition: domain_disc_impl.h:134
void update_elem_errors()
Definition: domain_disc_impl.h:89
virtual void adjust_solution(vector_type &u, ConstSmartPtr< DoFDistribution > dd)
sets dirichlet values in solution vector
Definition: domain_disc_impl.h:1156
virtual void assemble_rhs(vector_type &rhs, ConstSmartPtr< DoFDistribution > dd)
assembles rhs
Definition: domain_disc.h:142
virtual void assemble_defect(vector_type &d, const vector_type &u, const GridLevel &gl)
assembles Defect
Definition: domain_disc.h:128
virtual void finish_timestep(ConstSmartPtr< VectorTimeSeries< vector_type > > vSol, const GridLevel &gl)
Definition: domain_disc.h:244
domain discretization implementing the interface
Definition: domain_disc.h:638
virtual ~DomainDiscretization()
virtual destructor
Definition: domain_disc.h:668
TDomain domain_type
Type of Domain.
Definition: domain_disc.h:644
TAlgebra algebra_type
Type of algebra.
Definition: domain_disc.h:647
static const int dim
world dimension
Definition: domain_disc.h:659
algebra_type::vector_type vector_type
Type of algebra vector.
Definition: domain_disc.h:653
StdGlobAssembler< TDomain, TAlgebra > gass_type
Type of the global assembler.
Definition: domain_disc.h:640
algebra_type::matrix_type matrix_type
Type of algebra matrix.
Definition: domain_disc.h:650
DomainDiscretization(SmartPtr< approx_space_type > pApproxSpace)
default Constructor
Definition: domain_disc.h:663
ApproximationSpace< TDomain > approx_space_type
Type of approximation space.
Definition: domain_disc.h:656
represents numerical solutions on a grid using an algebraic vector
Definition: grid_function.h:121
SmartPtr< DoFDistribution > dof_distribution()
Definition: grid_function.h:236
SmartPtr< DoFDistribution > dd()
Definition: grid_function.h:237
Definition: grid_level.h:42
TAlgebra algebra_type
Algebra type.
Definition: assemble_interface.h:113
TAlgebra::vector_type vector_type
Type of algebra vector.
Definition: assemble_interface.h:119
TAlgebra::matrix_type matrix_type
Type of algebra matrix.
Definition: assemble_interface.h:116
Definition: disc_item.h:43
Definition: constraint_interface.h:162
Interface for domain discretization.
Definition: domain_disc_interface.h:136
Interface for an object that can mark elements based on a strategy.
Definition: domain_disc_interface.h:107
Definition: elem_disc_interface.h:800
Definition: elem_disc_interface.h:760
Abstract base class for element marking (in adaptive refinement)
Definition: error_elem_marking_strategy.h:125
This class encapsulates the multi-grid attachments for error estimation.
Definition: error_elem_marking_strategy.h:54
The refiner interface allows to mark elements for refinement and to call refine.
Definition: refiner_interface.h:67
Wrapper for sequential matrices to handle them in parallel.
Definition: parallel_matrix.h:65
Global assembler based on the straightforward application of the local discretizations.
Definition: elem_disc_assemble_util.h:78
time series of solutions and corresponding time point
Definition: solution_time_series.h:59
#define UG_LOG(msg)
Definition: log.h:367
double number
Definition: types.h:124
CPUAlgebra::vector_type vector_type