template<class Scalar>
Rodin::Assembly::ConstraintMap class

Read-only expansion map for value and identification constraints.

Identification constraints are stored as rows of the expansion map $ x_s = \sum_k c_k x_{m_k} + d_s $ . For unconstrained DOFs, expand returns the identity row { { i, 1 } }.

The map supports canonicalization of identification constraints:

  • duplicate masters are merged;
  • zero coefficients are pruned;
  • self-references are removed algebraically;
  • identity constraints are ignored;
  • constraints such as $ x_s = c x_s + d_s $ , $ c \ne 1 $ , are converted to fixed constraints;
  • transitive identifications are flattened by finalize.

After calling finalize, this object can be shared by OpenMP assembly loops as a read-only expansion map.

Public functions

void finalize()
Flattens transitive identification constraints.

Function documentation

template<class Scalar>
void Rodin::Assembly::ConstraintMap<Scalar>::finalize()

Flattens transitive identification constraints.

Example:

\[ x_1 = x_2, \qquad x_2 = x_3 \]

becomes:

\[ x_1 = x_3, \qquad x_2 = x_3. \]

Cycles such as $ x_1 = x_2 $ , $ x_2 = x_1 $ are rejected.