Amandus: Simulations based on multilevel Schwarz methods
Public Member Functions | Private Member Functions | Private Attributes | List of all members
Integrators::Theta< dim > Class Template Reference

#include <integrator.h>

Inheritance diagram for Integrators::Theta< dim >:
Inheritance graph
[legend]
Collaboration diagram for Integrators::Theta< dim >:
Collaboration graph
[legend]

Public Member Functions

 Theta (AmandusIntegrator< dim > &client, bool implicit, dealii::BlockMask blocks=dealii::BlockMask(), bool enforce_homogenity=false)
 
virtual void extract_data (const dealii::AnyData &data)
 Extract data independent of the cell. More...
 
- Public Member Functions inherited from AmandusIntegrator< dim >
 AmandusIntegrator ()
 
unsigned int n_errors () const
 
unsigned int error_type (unsigned int i) const
 
std::string error_name (unsigned int i) const
 
dealii::UpdateFlags update_flags () const
 Returns the update flags to be used. More...
 
dealii::UpdateFlags update_flags_face () const
 Returns the update flags to be used on boundary and interior faces. More...
 
void add_flags (const dealii::UpdateFlags flags)
 Add update flags on all objects. More...
 
void add_flags_face (const dealii::UpdateFlags flags)
 Add update flags on boundary and internal faces. More...
 

Private Member Functions

virtual void cell (dealii::MeshWorker::DoFInfo< dim > &dinfo, dealii::MeshWorker::IntegrationInfo< dim > &info) const
 
virtual void boundary (dealii::MeshWorker::DoFInfo< dim > &dinfo, dealii::MeshWorker::IntegrationInfo< dim > &info) const
 
virtual void face (dealii::MeshWorker::DoFInfo< dim > &dinfo1, dealii::MeshWorker::DoFInfo< dim > &dinfo2, dealii::MeshWorker::IntegrationInfo< dim > &info1, dealii::MeshWorker::IntegrationInfo< dim > &info2) const
 

Private Attributes

dealii::SmartPointer< AmandusIntegrator< dim >, Theta< dim > > client
 
bool is_implicit
 
dealii::BlockMask block_mask
 
bool enforce_homogenity
 

Additional Inherited Members

- Public Attributes inherited from AmandusIntegrator< dim >
double timestep
 Current timestep if applicable. More...
 
dealii::SmartPointer< dealii::Quadrature< dim > > cell_quadrature
 Quadrature rule used on cells. More...
 
dealii::SmartPointer< dealii::Quadrature< dim-1 > > boundary_quadrature
 Quadrature rule used on boundary faces. More...
 
dealii::SmartPointer< dealii::Quadrature< dim-1 > > face_quadrature
 Quadrature rule used on faces. More...
 
- Protected Attributes inherited from AmandusIntegrator< dim >
std::vector< unsigned int > error_types
 
std::vector< std::string > error_names
 

Detailed Description

template<int dim>
class Integrators::Theta< dim >

The local integrator for the two residuals in dealii::ThetaTimestepping, namely the explicit part and the Newton-residual of the implicit part.

Constructor & Destructor Documentation

template<int dim>
Integrators::Theta< dim >::Theta ( AmandusIntegrator< dim > &  client,
bool  implicit,
dealii::BlockMask  blocks = dealii::BlockMask(),
bool  enforce_homogenity = false 
)
inline

Constructor setting the integrator for the stationary problem and optionally a BlockMask, which for DAE identifies which blocks are subject to timestepping. Given a stationary operator \( F(u) \) and a weighted timestep \( \omega \), the local integral computed is

\[ Mu \pm \omega F(u), \]

where the sign is positive for the implicit operator and negative for the explicit.

Parameters
clientis the integrator for the stationary problem. Copied into the dealii::SmartPointer client.
implicitselects whether the Newton residual of the implicit side (true) or the explicit side of the theta scheme is integrated. Copied into the variable is_implicit.
blocksIf the system is a DAE, for instance the Stokes equations, then the timestepping applies only to some parts of the system, for instance only the velocities. Thus, the mass matrix in the fomula above would have empty blocks.
enforce_homogenitySet all components corresponding to blocks which are not timestepped to zero. If the initial system satisfies the algebraic constraints then this will be true anyway but setting it allows us to choose arbitrary initial values for non-timestepped blocks.
Warning
Requires that dealii::MeshWorker::LoopControl::cells_first is false! This integrator has to modify the results of the stationary integrator. In part, for face integration, this modification can be applied in face(). But since the matrix coupling only interior degrees of freedom is accumulated through all interior and boundary faces, the modification of scaling the stationary matrix and then adding the mass matrix must be applied after all these contributions have been assembled. Setting dealii::MeshWorker::LoopControl::cells_first to false accomplishes this.

Here is the call graph for this function:

Member Function Documentation

template<int dim>
void Integrators::Theta< dim >::boundary ( dealii::MeshWorker::DoFInfo< dim > &  dinfo,
dealii::MeshWorker::IntegrationInfo< dim > &  info 
) const
privatevirtual
template<int dim>
void Integrators::Theta< dim >::cell ( dealii::MeshWorker::DoFInfo< dim > &  dinfo,
dealii::MeshWorker::IntegrationInfo< dim > &  info 
) const
privatevirtual
template<int dim>
void Integrators::Theta< dim >::extract_data ( const dealii::AnyData &  data)
inlinevirtual

Extract data independent of the cell.

Extract data which does not depend on the current cell from AnyData, before the loop over cells and faces is run. By default, get the current time step if we are in a timestepping scheme.

Reimplemented from AmandusIntegrator< dim >.

template<int dim>
void Integrators::Theta< dim >::face ( dealii::MeshWorker::DoFInfo< dim > &  dinfo1,
dealii::MeshWorker::DoFInfo< dim > &  dinfo2,
dealii::MeshWorker::IntegrationInfo< dim > &  info1,
dealii::MeshWorker::IntegrationInfo< dim > &  info2 
) const
privatevirtual

Member Data Documentation

template<int dim>
dealii::BlockMask Integrators::Theta< dim >::block_mask
private
template<int dim>
dealii::SmartPointer<AmandusIntegrator<dim>, Theta<dim> > Integrators::Theta< dim >::client
private
template<int dim>
bool Integrators::Theta< dim >::enforce_homogenity
private
template<int dim>
bool Integrators::Theta< dim >::is_implicit
private

The documentation for this class was generated from the following file: