Reference documentation for deal.II version 9.1.0-pre
Classes | Functions
NonMatching Namespace Reference

Classes

class  ImmersedSurfaceQuadrature
 

Functions

template<int dim0, int dim1, int spacedim, typename Sparsity , typename number = double>
void create_coupling_sparsity_pattern (const DoFHandler< dim0, spacedim > &space_dh, const DoFHandler< dim1, spacedim > &immersed_dh, const Quadrature< dim1 > &quad, Sparsity &sparsity, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const ComponentMask &space_comps=ComponentMask(), const ComponentMask &immersed_comps=ComponentMask(), const Mapping< dim0, spacedim > &space_mapping=StaticMappingQ1< dim0, spacedim >::mapping, const Mapping< dim1, spacedim > &immersed_mapping=StaticMappingQ1< dim1, spacedim >::mapping)
 
template<int dim0, int dim1, int spacedim, typename Sparsity , typename number = double>
void create_coupling_sparsity_pattern (const GridTools::Cache< dim0, spacedim > &cache, const DoFHandler< dim0, spacedim > &space_dh, const DoFHandler< dim1, spacedim > &immersed_dh, const Quadrature< dim1 > &quad, Sparsity &sparsity, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const ComponentMask &space_comps=ComponentMask(), const ComponentMask &immersed_comps=ComponentMask(), const Mapping< dim1, spacedim > &immersed_mapping=StaticMappingQ1< dim1, spacedim >::mapping)
 
template<int dim0, int dim1, int spacedim, typename Matrix >
void create_coupling_mass_matrix (const DoFHandler< dim0, spacedim > &space_dh, const DoFHandler< dim1, spacedim > &immersed_dh, const Quadrature< dim1 > &quad, Matrix &matrix, const AffineConstraints< typename Matrix::value_type > &constraints=AffineConstraints< typename Matrix::value_type >(), const ComponentMask &space_comps=ComponentMask(), const ComponentMask &immersed_comps=ComponentMask(), const Mapping< dim0, spacedim > &space_mapping=StaticMappingQ1< dim0, spacedim >::mapping, const Mapping< dim1, spacedim > &immersed_mapping=StaticMappingQ1< dim1, spacedim >::mapping)
 
template<int dim0, int dim1, int spacedim, typename Matrix >
void create_coupling_mass_matrix (const GridTools::Cache< dim0, spacedim > &cache, const DoFHandler< dim0, spacedim > &space_dh, const DoFHandler< dim1, spacedim > &immersed_dh, const Quadrature< dim1 > &quad, Matrix &matrix, const AffineConstraints< typename Matrix::value_type > &constraints=AffineConstraints< typename Matrix::value_type >(), const ComponentMask &space_comps=ComponentMask(), const ComponentMask &immersed_comps=ComponentMask(), const Mapping< dim1, spacedim > &immersed_mapping=StaticMappingQ1< dim1, spacedim >::mapping)
 

Detailed Description

A namespace for functions offering tools to handle two meshes with no alignment requirements, but where one of the meshes is embedded inside the other in the real-space.

Typically these functions allow for computations on the real-space intersection between the two meshes e.g. surface integrals and construction of mass matrices.

Function Documentation

template<int dim0, int dim1, int spacedim, typename Sparsity , typename number = double>
void NonMatching::create_coupling_sparsity_pattern ( const DoFHandler< dim0, spacedim > &  space_dh,
const DoFHandler< dim1, spacedim > &  immersed_dh,
const Quadrature< dim1 > &  quad,
Sparsity &  sparsity,
const AffineConstraints< number > &  constraints = AffineConstraints<number>(),
const ComponentMask space_comps = ComponentMask(),
const ComponentMask immersed_comps = ComponentMask(),
const Mapping< dim0, spacedim > &  space_mapping = StaticMappingQ1<dim0, spacedim>::mapping,
const Mapping< dim1, spacedim > &  immersed_mapping = StaticMappingQ1<dim1, spacedim>::mapping 
)

Create a coupling sparsity pattern for non-matching, overlapping grids.

Given two non-matching triangulations, representing the domains \(\Omega\) and \(B\), with \(B \subseteq \Omega\), and two finite element spaces \(V(\Omega) = \text{span}\{v_i\}_{i=0}^n\) and \(Q(B) = \text{span}\{w_j\}_{j=0}^m\), compute the sparsity pattern that would be necessary to assemble the matrix

\[ M_{ij} := \int_{B} v_i(x) w_j(x) dx, \quad i \in [0,n), j \in [0,m), \]

where \(V(\Omega)\) is the finite element space associated with the space_dh passed to this function (or part of it, if specified in space_comps), while \(Q(B)\) is the finite element space associated with the immersed_dh passed to this function (or part of it, if specified in immersed_comps).

The sparsity is filled by locating the position of quadrature points (obtained by the reference quadrature quad) defined on elements of \(B\) with respect to the embedding triangulation \(\Omega\). For each overlapping cell, the entries corresponding to space_comps in space_dh and immersed_comps in immersed_dh are added to the sparsity pattern.

The space_comps and immersed_comps masks are assumed to be ordered in the same way: the first component of space_comps will couple with the first component of immersed_comps, the second with the second, and so on. If one of the two masks has more non-zero than the other, then the excess components will be ignored.

If the domain \(B\) does not fall within \(\Omega\), an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sens for dim1 lower or equal than dim0. A static assert guards that this is actually the case.

For both spaces, it is possible to specify a custom Mapping, which defaults to StaticMappingQ1 for both.

This function will also work in parallel, provided that the immersed triangulation is of type parallel::shared::Triangulation<dim1,spacedim>. An exception is thrown if you use an immersed parallel::distributed::Triangulation<dim1,spacedim>.

See the tutorial program step-60 for an example on how to use this function.

Author
Luca Heltai, 2018

Definition at line 49 of file coupling.cc.

template<int dim0, int dim1, int spacedim, typename Sparsity , typename number = double>
void NonMatching::create_coupling_sparsity_pattern ( const GridTools::Cache< dim0, spacedim > &  cache,
const DoFHandler< dim0, spacedim > &  space_dh,
const DoFHandler< dim1, spacedim > &  immersed_dh,
const Quadrature< dim1 > &  quad,
Sparsity &  sparsity,
const AffineConstraints< number > &  constraints = AffineConstraints<number>(),
const ComponentMask space_comps = ComponentMask(),
const ComponentMask immersed_comps = ComponentMask(),
const Mapping< dim1, spacedim > &  immersed_mapping = StaticMappingQ1<dim1, spacedim>::mapping 
)

Same as above, but takes an additional GridTools::Cache object, instead of creating one internally. In this version of the function, the parameter space_mapping cannot be specified, since it is taken from the cache parameter.

Author
Luca Heltai, 2018

Definition at line 81 of file coupling.cc.

template<int dim0, int dim1, int spacedim, typename Matrix >
void NonMatching::create_coupling_mass_matrix ( const DoFHandler< dim0, spacedim > &  space_dh,
const DoFHandler< dim1, spacedim > &  immersed_dh,
const Quadrature< dim1 > &  quad,
Matrix &  matrix,
const AffineConstraints< typename Matrix::value_type > &  constraints = AffineConstraints<typename Matrix::value_type>(),
const ComponentMask space_comps = ComponentMask(),
const ComponentMask immersed_comps = ComponentMask(),
const Mapping< dim0, spacedim > &  space_mapping = StaticMappingQ1<dim0, spacedim>::mapping,
const Mapping< dim1, spacedim > &  immersed_mapping = StaticMappingQ1<dim1, spacedim>::mapping 
)

Create a coupling mass matrix for non-matching, overlapping grids.

Given two non-matching triangulations, representing the domains \(\Omega\) and \(B\), with \(B \subseteq \Omega\), and two finite element spaces \(V(\Omega) = \text{span}\{v_i\}_{i=0}^n\) and \(Q(B) = \text{span}\{w_j\}_{j=0}^m\), compute the coupling matrix

\[ M_{ij} := \int_{B} v_i(x) w_j(x) dx, \quad i \in [0,n), j \in [0,m), \]

where \(V(\Omega)\) is the finite element space associated with the space_dh passed to this function (or part of it, if specified in space_comps), while \(Q(B)\) is the finite element space associated with the immersed_dh passed to this function (or part of it, if specified in immersed_comps).

The corresponding sparsity patterns can be computed by calling the make_coupling_sparsity_pattern function. The elements of the matrix are computed by locating the position of quadrature points defined on elements of \(B\) with respect to the embedding triangulation \(\Omega\).

The space_comps and immersed_comps masks are assumed to be ordered in the same way: the first component of space_comps will couple with the first component of immersed_comps, the second with the second, and so on. If one of the two masks has more non-zero entries non-zero than the other, then the excess components will be ignored.

If the domain \(B\) does not fall within \(\Omega\), an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sense for dim1 lower or equal than dim0. A static assert guards that this is actually the case.

For both spaces, it is possible to specify a custom Mapping, which defaults to StaticMappingQ1 for both.

This function will also work in parallel, provided that the immersed triangulation is of type parallel::shared::Triangulation<dim1,spacedim>. An exception is thrown if you use an immersed parallel::distributed::Triangulation<dim1,spacedim>.

See the tutorial program step-60 for an example on how to use this function.

Author
Luca Heltai, 2018

Definition at line 199 of file coupling.cc.

template<int dim0, int dim1, int spacedim, typename Matrix >
void NonMatching::create_coupling_mass_matrix ( const GridTools::Cache< dim0, spacedim > &  cache,
const DoFHandler< dim0, spacedim > &  space_dh,
const DoFHandler< dim1, spacedim > &  immersed_dh,
const Quadrature< dim1 > &  quad,
Matrix &  matrix,
const AffineConstraints< typename Matrix::value_type > &  constraints = AffineConstraints<typename Matrix::value_type>(),
const ComponentMask space_comps = ComponentMask(),
const ComponentMask immersed_comps = ComponentMask(),
const Mapping< dim1, spacedim > &  immersed_mapping = StaticMappingQ1<dim1, spacedim>::mapping 
)

Same as above, but takes an additional GridTools::Cache object, instead of creating one internally. In this version of the function, the parameter space_mapping cannot specified, since it is taken from the cache parameter.

Author
Luca Heltai, 2018

Definition at line 227 of file coupling.cc.