OOF2: The Manual

Name

SmallSystem — A small part of the system of matrices constructed by Properties

Synopses

C++ Synopsis

#include "engine/smallsystem.h"
        
class SmallSystem {
  double& stiffness_matrix_element(const FieldIndex& i,
                                   const Field* field,
                                   const FieldIndex& j,
                                   const ElementFuncNodeIterator& node);

  double stiffness_matrix_element(const FieldIndex& i,
                                  const Field* field,
                                  const FieldIndex& j,
                                  const ElementFuncNodeIterator& node) const;

  double& stiffness_matrix_element(const FieldIndex& i,
                                   const Field* field,
                                   const ElementFuncNodeIterator& node);

  double stiffness_matrix_element(const FieldIndex& i,
                                  const Field* field,
                                  const ElementFuncNodeIterator& node) const;

  double& force_deriv_matrix_element(const FieldIndex& i,
                                     const Field* field,
                                     const FieldIndex& j,
                                     const ElementFuncNodeIterator& node);

  double force_deriv_matrix_element(const FieldIndex& i,
                                    const Field* field,
                                    const FieldIndex& j,
                                    const ElementFuncNodeIterator& node) const;

  double& force_deriv_matrix_element(const FieldIndex& i,
                                     const Field* field,
                                     const ElementFuncNodeIterator& node);

  double force_deriv_matrix_element(const FieldIndex& i,
                                    const Field* field,
                                    const ElementFuncNodeIterator& node) const;

  double& damping_matrix_element(const FieldIndex& i,
                                 const Field* field,
                                 const FieldIndex& j,
                                 const ElementFuncNodeIterator& node);

  double damping_matrix_element(const FieldIndex& i,
                                const Field* field,
                                const FieldIndex& j,
                                const ElementFuncNodeIterator& node) const;

  double& damping_matrix_element(const FieldIndex& i,
                                 const Field* field,
                                 const ElementFuncNodeIterator& node);

  double damping_matrix_element(const FieldIndex& i,
                                const Field* field,
                                const ElementFuncNodeIterator& node) const;

  double& flux_vector_element(int index);
  double flux_vector_element(int index) const;
  double& force_vector_element(int index);
  double force_vector_element(int index) const;
  double& offset_vector_element(int index);
  double offset_vector_element(int index) const;
}

Python Synopsis

Source Files

  • SRC/engine/smallsystem.C: C++ source code
  • SRC/engine/smallsystem.h: C++ header file
  • SRC/engine/smallsystem.swg: swig source code

Description

A SmallSystem object represents a small part of the linearized system that is constructed by the material Properties when the finite element matrices are built. The job of the SmallSystem is to convert the local Field, Flux, and Equation indices into global indices, which are positions in the matrices and vectors containing all of the degrees of freedom of the full mesh. Generally, SmallSystems appear in expressions like

smallsystem(i, field, j, node) += value; 

where the function call on the left hand side of the assignment statement returns a reference to the location where the right hand side should be stored.

After the SmallSystem's values are set by the Properties, the

Methods

stiffness_matrix_element

stiffness_matrix_element is used to make a FluxProperty's contribution to a finite element stiffness matrix. It is called by the flux_matrix method of the Property. See flux_matrix for the full explanation and an example.

There are four variations of stiffness_matrix_element, for const and non-const stiffness matrices, and scalar and non-scalar Fields:

double& stiffness_matrix_element(
   const FieldIndex& fluxcomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node);
double stiffness_matrix_element(
   const FieldIndex& fluxcomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node) const;
double& stiffness_matrix_element(
   const FieldIndex& fluxcomp,
   const Field* field,
   const ElementFuncNodeIterator& node);
double stiffness_matrix_element(
   const FieldIndex& fluxcomp,
   const Field* field,
   const ElementFuncNodeIterator& node) const; 

The arguments are:

const FieldIndex& fluxcomp

The component of the Flux being computed, obtained by iterating over the components in flux_matrix.

const Field* field

The Field making the contribution to the Flux.

const FieldIndex& fieldcomp

The component of the Field. This argument should be omitted if the Field is a ScalarField.

const ElementFuncNodeIterator& node

A pointer to the current Node of the Element being examined.

force_deriv_matrix_element

force_deriv_matrix_element is used to make an nonlinear EqnProperty's contribution to force derivatives. It is called by force_deriv_matrix of the Property. See force_deriv_matrix for the details and an example.

There are four variations of force_deriv_matrix_element>, for const and non-const stiffness matrices, and scalar and non-scalar Fields:

double& force_deriv_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node);
double force_deriv_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node) const;
double& force_deriv_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node);
double force_deriv_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node) const; 

The arguments are:

const FieldIndex& eqncomp

The component of the Equation being computed, obtained by iterating over the components in force_deriv_matrix.

const Field* field

The Field making the contribution to the Equation.

const FieldIndex& fieldcomp

The component of the Field. This argument should be omitted if the Field is a ScalarField.

const ElementFuncNodeIterator& node

A pointer to the current Node of the Element being examined.

damping_matrix_element

damping_matrix_element is called by both EqnPropertys and FluxPropertys. It's used by an EqnProperty's time_deriv_matrices method to make contributions to a the matrix that multiplies the time derivatives of the Fields (Eqn. (205)) in a force balance equation. See time_deriv_matrices for more details and an example.

damping_matrix_element is also used by a FluxProperty's flux_matrix method to make contributions to the matrix 𝐂i⁢k⁢ν that multiplies time derivatives of the fields in Eqn. (196). See flux_matrix for more details and an example.

There are four variations of damping_matrix_element, for const and non-const matrices, and scalar and non-scalar Fields:

double& damping_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node);
double damping_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node) const;
double& damping_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node);
double damping_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node) const; 

The arguments are:

const FieldIndex& eqncomp

The component of the Equation being computed, obtained by iterating over the components in time_deriv_matrices.

const Field* field

The Field making the contribution to the Equation.

const FieldIndex& fieldcomp

The component of the Field. This argument should be omitted if the Field is a ScalarField.

const ElementFuncNodeIterator& node

A pointer to the current Node of the Element being examined.

mass_matrix_element

mass_matrix_element is called by an EqnProperty to make contributions to a mass matrix, from its time_deriv_matrices method. The mass matrix multiplies the time derivatives of the Fields in a force balance equation. See time_deriv_matrices for more details and an example.

There are four variations of mass_matrix_element, for const and non-const stiffness matrices, and scalar and non-scalar Fields:

double& mass_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node);
double mass_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const FieldIndex& fieldcomp,
   const ElementFuncNodeIterator& node) const;
double& mass_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node);
double mass_matrix_element(
   const FieldIndex& eqncomp,
   const Field* field,
   const ElementFuncNodeIterator& node) const; 

The arguments are:

const FieldIndex& eqncomp

The component of the Equation being computed, obtained by iterating over the components in time_deriv_matrices.

const Field* field

The Field making the contribution to the Equation.

const FieldIndex& fieldcomp

The component of the Field. This argument should be omitted if the Field is a ScalarField.

const ElementFuncNodeIterator& node

A pointer to the current Node of the Element being examined.