Reference documentation for deal.II version 9.0.0
NonMatching Namespace Reference

## Functions

template<int dim0, int dim1, int spacedim, typename Sparsity >
void create_coupling_sparsity_pattern (const DoFHandler< dim0, spacedim > &space_dh, const DoFHandler< dim1, spacedim > &immersed_dh, const Quadrature< dim1 > &quad, Sparsity &sparsity, const ConstraintMatrix &constraints=ConstraintMatrix(), 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 >
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 ConstraintMatrix &constraints=ConstraintMatrix(), 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 ConstraintMatrix &constraints=ConstraintMatrix(), 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 ConstraintMatrix &constraints=ConstraintMatrix(), 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 >
 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 ConstraintMatrix & constraints = ConstraintMatrix(), const ComponentMask & space_comps = ComponentMask(), const ComponentMask & immersed_comps = ComponentMask(), const Mapping< dim0, spacedim > & space_mapping = StaticMappingQ1::mapping, const Mapping< dim1, spacedim > & immersed_mapping = StaticMappingQ1::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.

Definition at line 48 of file coupling.cc.

template<int dim0, int dim1, int spacedim, typename Sparsity >
 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 ConstraintMatrix & constraints = ConstraintMatrix(), const ComponentMask & space_comps = ComponentMask(), const ComponentMask & immersed_comps = ComponentMask(), const Mapping< dim1, spacedim > & immersed_mapping = StaticMappingQ1::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.

Definition at line 68 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 ConstraintMatrix & constraints = ConstraintMatrix(), const ComponentMask & space_comps = ComponentMask(), const ComponentMask & immersed_comps = ComponentMask(), const Mapping< dim0, spacedim > & space_mapping = StaticMappingQ1::mapping, const Mapping< dim1, spacedim > & immersed_mapping = StaticMappingQ1::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.

Definition at line 176 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 ConstraintMatrix & constraints = ConstraintMatrix(), const ComponentMask & space_comps = ComponentMask(), const ComponentMask & immersed_comps = ComponentMask(), const Mapping< dim1, spacedim > & immersed_mapping = StaticMappingQ1::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.

Definition at line 195 of file coupling.cc.