KASKADE 7 development version
|
Abstract base class for computation of constraints from constraint samples. More...
#include <contactConstraints.hh>
Abstract base class for computation of constraints from constraint samples.
Let \( x \) denote the vector of displacements. On a boundary face, a set of \( n \) constraint samples is defined at local positions \( \xi_i \), leading to (pointwise) nonpenetration conditions of the form
\[ \sum_{k\in K_i} G_{ik} x_k \le g_i \]
where \( g_i \) is the gap between opposing boundary points and \( G_i \) is the impact of the displacements \( x_k \) on this gap, i.e. \( G_{ik} = \phi_k(\xi_i) \), where \( \phi_k \) is the shape function associated with \( x_k \). Note that the entries \( x_k \) may be (column) vector-valued, and the corresponding matrix entries \( G_{ik} \) are (row) vector-valued.
Now the actual constraints of the form \( Bx \le b \) can be defined by certain linear combinations of the pointwise constraints. Taking them one by one as they are results in pointwise constraints (with Dirac weights),
\[ Gx \le g, \]
see DiracMortar. If the pointwise constraints are multiplied by test functions \( \psi_j \) and integrated (summed) over the boundary face, different constraints result (see, e.g., BezierMortar):
\[ \forall j: \quad \sum_{i\in I} \psi_j(\xi_i) \sum_{k\in K_i} G_{ik} x_k \le \sum_{i\in I} \psi_j(\xi_i) g_i. \]
In any case, linear inequalities of the form \( Bx \le b \) are defined.
This class defines an interface for computing \( B \) and \( b \) from \( G \) and \( g \).
Definition at line 265 of file contactConstraints.hh.
Public Types | |
using | Entry = Dune::FieldMatrix< Scalar, 1, dim > |
The type of matrix entries in the constraint matrix \( B \) in \( Bx \le b \). More... | |
using | Row = std::vector< std::pair< size_t, Entry > > |
Public Member Functions | |
virtual | ~Mortar () |
virtual int | size (int n) const =0 |
The number of resulting constraints if n samples are provided. More... | |
virtual void | updateConstraints (int n, Dune::FieldVector< Scalar, dim-1 > const &xi, Row &Gi, Scalar gi, std::vector< Row > &B, std::vector< Scalar > &b) const =0 |
Updates the given set of constraints (by \( B \) and \( b \)) when a new constraint sample becomes available. More... | |
using Kaskade::Mortar< Scalar, dim >::Entry = Dune::FieldMatrix<Scalar,1,dim> |
The type of matrix entries in the constraint matrix \( B \) in \( Bx \le b \).
The entries are row vectors with the same length as the primal variable \( x \) entries.
Definition at line 274 of file contactConstraints.hh.
using Kaskade::Mortar< Scalar, dim >::Row = std::vector<std::pair<size_t,Entry> > |
Definition at line 275 of file contactConstraints.hh.
|
virtual |
|
pure virtual |
The number of resulting constraints if n
samples are provided.
Implemented in Kaskade::DiracMortar< Scalar, dim >, and Kaskade::BezierMortar< Scalar, dim >.
|
pure virtual |
Updates the given set of constraints (by \( B \) and \( b \)) when a new constraint sample becomes available.
This method needs to be implemented in derived classes.
n | The total number of samples that may be provided (actually there may be fewer, because some points may lack a contact partner). |
xi | The face-local coordinate of the current contact sample. |
Gi | A sparse representation of the matrix row \( G_i \). |
gi | The gap \( g_i \) |
B | The sparse matrix \( B \) to be updated. The update process can modify values as well as change the shape of the matrix. |
b | The bounds vector \( b \) |
If B and b are empty on entry, a new face is started. The containers are resized as needed.
Implemented in Kaskade::DiracMortar< Scalar, dim >, and Kaskade::BezierMortar< Scalar, dim >.