Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations

Background

The Assembler is class embedded in an Integrator object, and its function is to generate the global mass matrix \(\mathcal{M}\), global stiffness matrix \(\mathcal{K}\), global damping matrix \(\mathcal{C}\) as well as the global external force vector \(\mathcal{F}\). This process is done by looping over all the elements and adding their contribution to the total quantity to be assembled. These tasks are implemented specifically in the following member function:

The Mesh object is employed in the Assembler and Integrator:

  • To provide with the amount of memory allocation for the model matrices and vectors,
  • To provide with the transformation matrices to enforce restrains and constrains i.e., \(\textbf{T}\).

The assemble process is performed in two steps:

  • In the Assembler object:

    \[ \mathcal{M} = \sum_\textrm{e = 1}^{\textrm{N}_\textrm{e}} {\mathbf{A}^\textrm{e}}^\top \, \textbf{M}^\textrm{e} \,\mathbf{A}^\textrm{e} \,, \; \mathcal{C} = \sum_\textrm{e = 1}^{\textrm{N}_\textrm{e}} {\mathbf{A}^\textrm{e}}^\top \, \textbf{C}^\textrm{e} \,\mathbf{A}^\textrm{e} \,, \; \mathcal{K} = \sum_\textrm{e = 1}^{\textrm{N}_\textrm{e}} {\mathbf{A}^\textrm{e}}^\top \, \textbf{K}^\textrm{e} \,\mathbf{A}^\textrm{e} \,, \; \mathcal{F} = \sum_\textrm{e = 1}^{\textrm{N}_\textrm{e}} {\mathbf{A}^\textrm{e}}^\top \, \textbf{F}^\textrm{e} \,, \nonumber \]

    where the matrices \(\mathcal{M}, \mathcal{C}, \mathcal{K} \in \mathbb{F}^{\textrm{N}_{\textrm{total}} \times \textrm{N}_{\textrm{total}}}\), and the vector \(\mathcal{F} \in \mathbb{R}^{\textrm{N}_{\textrm{total}}}\).
  • In the Integrator object:

    \[ \textbf{M} = \mathbf{T}^\top \mathcal{M} \, \mathbf{T} \,, \; \textbf{C} = \mathbf{T}^\top \mathcal{C} \, \mathbf{T} \,, \; \textbf{K} = \mathbf{T}^\top \mathcal{K} \, \mathbf{T} \,, \; \textbf{F} = \mathbf{T}^\top \mathcal{F} \,, \nonumber \]

    where the matrices \(\textbf{M}, \textbf{C}, \textbf{K} \in \mathbb{R}^{\textrm{N}_{\textrm{free}} \times \textrm{N}_{\textrm{free}}}\), and the vector \(\mathbf{F} \in \mathbb{R}^{\textrm{N}_{\textrm{free}}}\).
Note
First the assembly operator \(\mathbf{A}^\textrm{e} : \mathbb{R}^{\textrm{N}_\textrm{dof}^\textrm{e}} \to \mathbb{R}^{\textrm{N}_{\textrm{total}}}\) assembles the element matrix/vector to the total matrix/vector, and second the transformation operator \(\mathbf{T} : \mathbb{R}^{\textrm{N}_{\textrm{total}}} \to \mathbb{R}^{\textrm{N}_{\textrm{free}}}\) enforce displacement boundary condition as well as kinematic constraints applied to some number of total degree of freedom. As it can be seen, the main feature of enforcing restrains and constrains in such manner is to reduce the size of the linear system to be solved, however the sparse pattern may increase.
Attention
The Assembler object is not needed to be parsed since it is created internally as soon as an integrator is specified.
The Assembler object takes care of imposing the restrains and constraints that are specified.
More details on the assembler implementation can be found at SVL/02-Run_Process/07-Assembler.

REFERENCE:

  • Bathe K. Jurgen, "Finite Element Procedures", Chapter 4: pages 164-166, Prentice-Hall, 1996.