Back

BaseMatrixLinearSystem

The `BaseMatrixLinearSystem` is an abstract base class in the SOFA framework, specifically within the `sofa::core::behavior` namespace. It serves as a foundation for components that store and assemble linear systems represented by matrices. This class provides methods to manage matrix sizes, enable assembly operations, and handle system solutions and right-hand side vectors (RHS). In the SOFA ecosystem, `BaseMatrixLinearSystem` interacts with other components through its API, particularly by returning pointers to `linearalgebra::BaseMatrix` and `linearalgebra::BaseVector`. It also defines virtual methods for building and resizing the system matrix. The data fields include `matrixSize`, which specifies the dimensions of the global matrix, and `enableAssembly`, a boolean that controls whether the system matrix is assembled. Practical usage involves deriving concrete classes from `BaseMatrixLinearSystem` to implement specific linear solvers or systems. These derived classes must provide implementations for pure virtual methods such as `resizeSystem`, `clearSystem`, `setRHS`, and `dispatchSystemSolution`. The user can configure the matrix size via the `matrixSize` field, though this is typically set at initialization time and marked as read-only.

abstract
The `BaseMatrixLinearSystem` manages linear systems represented as matrices in SOFA simulations, providing methods for building, assembling, and managing these matrices.
sheet
# BaseMatrixLinearSystem ## Overview The `BaseMatrixLinearSystem` is an abstract base class that serves as a foundation for components managing linear systems represented by matrices. It provides methods to build, assemble, and manage the system matrix, right-hand side (RHS) vector, and solution vector. ## Mathematical Model In numerical simulations, particularly finite element analysis (FEA), linear systems are often expressed in matrix form: \[ \mathbf{Ax} = \mathbf{b} \] where: - \(\mathbf{A}\): The coefficient matrix, typically a square matrix of size \(n \times n\). - \(\mathbf{x}\): The solution vector of length \(n\). - \(\mathbf{b}\): The right-hand side (RHS) vector of length \(n\), representing the known values or forcing terms. The `BaseMatrixLinearSystem` provides methods to interact with this linear system, including: - `getSystemBaseMatrix()`: Returns a pointer to the coefficient matrix \(\mathbf{A}\). - `getSystemRHSBaseVector()`: Returns a pointer to the RHS vector \(\mathbf{b}\). - `getSystemSolutionBaseVector()`: Returns a pointer to the solution vector \(\mathbf{x}\). The `buildSystemMatrix()` method constructs and assembles the linear system matrix through: - `preAssembleSystem()`: Prepares any necessary setup or initialization steps. - `assembleSystem()`: Assembles individual contributions from various components into the global system matrix \(\mathbf{A}\). - `postAssembleSystem()`: Completes any post-processing or finalization steps. ## Parameters and Data The significant data fields exposed by this component are: - **`matrixSize`**: Specifies the size of the global matrix \(\mathbf{A}\) as a vector \((n, n)\). This field is read-only and typically set during initialization. - **`enableAssembly`**: A boolean flag that controls whether the system matrix assembly process should be enabled. If disabled (`false`), the linear system is not assembled.
description
The `BaseMatrixLinearSystem` is an abstract base class in the SOFA framework, specifically within the `sofa::core::behavior` namespace. It serves as a foundation for components that store and assemble linear systems represented by matrices. This class provides methods to manage matrix sizes, enable assembly operations, and handle system solutions and right-hand side vectors (RHS). In the SOFA ecosystem, `BaseMatrixLinearSystem` interacts with other components through its API, particularly by returning pointers to `linearalgebra::BaseMatrix` and `linearalgebra::BaseVector`. It also defines virtual methods for building and resizing the system matrix. The data fields include `matrixSize`, which specifies the dimensions of the global matrix, and `enableAssembly`, a boolean that controls whether the system matrix is assembled. Practical usage involves deriving concrete classes from `BaseMatrixLinearSystem` to implement specific linear solvers or systems. These derived classes must provide implementations for pure virtual methods such as `resizeSystem`, `clearSystem`, `setRHS`, and `dispatchSystemSolution`. The user can configure the matrix size via the `matrixSize` field, though this is typically set at initialization time and marked as read-only.
maths
<p>The `BaseMatrixLinearSystem` is an abstract base class in the SOFA framework designed to manage linear systems represented as matrices. This class serves as a foundational interface for components that store and assemble these linear systems.</p> <h3>Mathematical Representation</h3> <p>In the context of numerical simulations, particularly finite element analysis (FEA) or other physical system modeling, linear systems are often expressed in matrix form:</p> \[ \mathbf{Ax} = \mathbf{b} \] <p>where:</p> <ul> <li><span class="math inline">\(\mathbf{A}\)</span>: The coefficient matrix, typically a square matrix of size <span class="math inline">\(n \times n\)</span>.</li> <li><span class="math inline">\(\mathbf{x}\)</span>: The solution vector of length <span class="math inline">\(n\)</span>.</li> <li><span class="math inline">\(\mathbf{b}\)</span>: The right-hand side (RHS) vector of length <span class="math inline">\(n\)</span>, representing the known values or forcing terms.</li> </ul> <h3>Component Interface and Operations</h3> <p>The `BaseMatrixLinearSystem` provides several methods to interact with the linear system:</p> <ul> <li><code>getSystemBaseMatrix()</code>: Returns a pointer to the coefficient matrix <span class="math inline">\(\mathbf{A}\)</span>.</li> <li><code>getSystemRHSBaseVector()</code>: Returns a pointer to the RHS vector <span class="math inline">\(\mathbf{b}\)</span>.</li> <li><code>getSystemSolutionBaseVector()</code>: Returns a pointer to the solution vector <span class="math inline">\(\mathbf{x}\)</span>.</li> </ul> <p>The `buildSystemMatrix()` method is responsible for constructing and assembling the linear system matrix. This process typically involves:</p> <ul> <li><code>preAssembleSystem()</code>: Prepares any necessary setup or initialization steps.</li> <li><code>assembleSystem()</code>: Assembles the individual contributions from various components into the global system matrix <span class="math inline">\(\mathbf{A}\)</span>.</li> <li><code>postAssembleSystem()</code>: Completes any post-processing or finalization steps.</li> </ul> <h3>Data Fields and Configuration</h3> <ul> <li><strong><code>d_matrixSize</code></strong>: Specifies the size of the global matrix <span class="math inline">\(\mathbf{A}\)</span> as a vector <span class="math inline">\((n, n)\)</span>. This field is read-only and typically set during initialization.</li> <li><strong><code>d_enableAssembly</code></strong>: A boolean flag that controls whether the system matrix assembly process should be enabled. If disabled (<code>false</code>), the linear system is not assembled, effectively bypassing the <code>preAssembleSystem()</code>, <code>assembleSystem()</code>, and <code>postAssembleSystem()</code> methods.</li> </ul> <h3>User Interaction and Derived Classes</h3> <p>To utilize `BaseMatrixLinearSystem`, users must derive concrete classes that provide specific implementations for the pure virtual methods:</p> <ul> <li><strong><code>resizeSystem(n)</code></strong>: Resizes both the coefficient matrix <span class="math inline">\(\mathbf{A}\)</span> and the solution vector <span class="math inline">\(\mathbf{x}\)</span>, as well as the RHS vector <span class="math inline">\(\mathbf{b}\)</span>, to size <span class="math inline">\(n \times n\)</span>.</li> <li><strong><code>clearSystem()</code></strong>: Clears or resets the linear system matrix and vectors.</li> <li><strong><code>setRHS(v)</code></strong>: Sets the values of the RHS vector <span class="math inline">\(\mathbf{b}\)</span> from the provided (Mechanical/Physical) state objects.</li> <li><strong><code>setSystemSolution(v)</code></strong>: Initializes the solution vector <span class="math inline">\(\mathbf{x}\)</span> using values from the (Mechanical/Physical) state objects. This initial estimate is replaced by the actual system solution after solving.</li> <li><strong><code>dispatchSystemSolution(v)</code></strong>: Dispatches or distributes the computed solution vector <span class="math inline">\(\mathbf{x}\)</span> back to the (Mechanical/Physical) state objects for further use in simulation steps.</li> </ul>
{
  "name": "BaseMatrixLinearSystem",
  "main": {
    "name": "BaseMatrixLinearSystem",
    "namespace": "sofa::core::behavior",
    "module": "Sofa.framework.Core",
    "include": "sofa/core/behavior/BaseMatrixLinearSystem.h",
    "doc": "Base class for components storing and assembling a linear system represented as a matrix.\nThe matrix data structure is defined in derived classes.",
    "inherits": [
      "BaseObject"
    ],
    "templates": [],
    "data_fields": [
      {
        "name": "d_matrixSize",
        "type": "sofa::type::Vec2u",
        "xmlname": "matrixSize",
        "help": "Size of the global matrix"
      },
      {
        "name": "d_enableAssembly",
        "type": "bool",
        "xmlname": "enableAssembly",
        "help": "Allows to assemble the system matrix"
      }
    ],
    "links": [],
    "methods": [
      {
        "name": "getSystemBaseMatrix",
        "return_type": "linearalgebra::BaseMatrix *",
        "params": [],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "getSystemRHSBaseVector",
        "return_type": "linearalgebra::BaseVector *",
        "params": [],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "getSystemSolutionBaseVector",
        "return_type": "linearalgebra::BaseVector *",
        "params": [],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "buildSystemMatrix",
        "return_type": "void",
        "params": [
          {
            "name": "mparams",
            "type": "const core::MechanicalParams *"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "getMatrixSize",
        "return_type": "sofa::type::Vec2u",
        "params": [],
        "is_virtual": false,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "resizeSystem",
        "return_type": "void",
        "params": [
          {
            "name": "n",
            "type": "int"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "clearSystem",
        "return_type": "void",
        "params": [],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "setRHS",
        "return_type": "void",
        "params": [
          {
            "name": "v",
            "type": "core::MultiVecDerivId"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "setSystemSolution",
        "return_type": "void",
        "params": [
          {
            "name": "v",
            "type": "core::MultiVecDerivId"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "dispatchSystemSolution",
        "return_type": "void",
        "params": [
          {
            "name": "v",
            "type": "core::MultiVecDerivId"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "dispatchSystemRHS",
        "return_type": "void",
        "params": [
          {
            "name": "v",
            "type": "core::MultiVecDerivId"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": true,
        "is_static": false,
        "access": "public"
      },
      {
        "name": "preAssembleSystem",
        "return_type": "void",
        "params": [
          {
            "name": "",
            "type": "const core::MechanicalParams *"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "protected"
      },
      {
        "name": "assembleSystem",
        "return_type": "void",
        "params": [
          {
            "name": "",
            "type": "const core::MechanicalParams *"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "protected"
      },
      {
        "name": "postAssembleSystem",
        "return_type": "void",
        "params": [
          {
            "name": "",
            "type": "const core::MechanicalParams *"
          }
        ],
        "is_virtual": true,
        "is_pure_virtual": false,
        "is_static": false,
        "access": "protected"
      }
    ]
  },
  "desc": {
    "description": "The `BaseMatrixLinearSystem` is an abstract base class in the SOFA framework, specifically within the `sofa::core::behavior` namespace. It serves as a foundation for components that store and assemble linear systems represented by matrices. This class provides methods to manage matrix sizes, enable assembly operations, and handle system solutions and right-hand side vectors (RHS). \n\nIn the SOFA ecosystem, `BaseMatrixLinearSystem` interacts with other components through its API, particularly by returning pointers to `linearalgebra::BaseMatrix` and `linearalgebra::BaseVector`. It also defines virtual methods for building and resizing the system matrix. The data fields include `matrixSize`, which specifies the dimensions of the global matrix, and `enableAssembly`, a boolean that controls whether the system matrix is assembled.\n\nPractical usage involves deriving concrete classes from `BaseMatrixLinearSystem` to implement specific linear solvers or systems. These derived classes must provide implementations for pure virtual methods such as `resizeSystem`, `clearSystem`, `setRHS`, and `dispatchSystemSolution`. The user can configure the matrix size via the `matrixSize` field, though this is typically set at initialization time and marked as read-only."
  },
  "maths": {
    "maths": "<p>The `BaseMatrixLinearSystem` is an abstract base class in the SOFA framework designed to manage linear systems represented as matrices. This class serves as a foundational interface for components that store and assemble these linear systems.</p>\n\n<h3>Mathematical Representation</h3>\n\n<p>In the context of numerical simulations, particularly finite element analysis (FEA) or other physical system modeling, linear systems are often expressed in matrix form:</p>\n\n\\[\n    \\mathbf{Ax} = \\mathbf{b}\n\\]\n\n<p>where:</p>\n\n<ul>\n<li><span class=\"math inline\">\\(\\mathbf{A}\\)</span>: The coefficient matrix, typically a square matrix of size <span class=\"math inline\">\\(n \\times n\\)</span>.</li>\n<li><span class=\"math inline\">\\(\\mathbf{x}\\)</span>: The solution vector of length <span class=\"math inline\">\\(n\\)</span>.</li>\n<li><span class=\"math inline\">\\(\\mathbf{b}\\)</span>: The right-hand side (RHS) vector of length <span class=\"math inline\">\\(n\\)</span>, representing the known values or forcing terms.</li>\n</ul>\n\n<h3>Component Interface and Operations</h3>\n\n<p>The `BaseMatrixLinearSystem` provides several methods to interact with the linear system:</p>\n\n<ul>\n<li><code>getSystemBaseMatrix()</code>: Returns a pointer to the coefficient matrix <span class=\"math inline\">\\(\\mathbf{A}\\)</span>.</li>\n<li><code>getSystemRHSBaseVector()</code>: Returns a pointer to the RHS vector <span class=\"math inline\">\\(\\mathbf{b}\\)</span>.</li>\n<li><code>getSystemSolutionBaseVector()</code>: Returns a pointer to the solution vector <span class=\"math inline\">\\(\\mathbf{x}\\)</span>.</li>\n</ul>\n\n<p>The `buildSystemMatrix()` method is responsible for constructing and assembling the linear system matrix. This process typically involves:</p>\n\n<ul>\n<li><code>preAssembleSystem()</code>: Prepares any necessary setup or initialization steps.</li>\n<li><code>assembleSystem()</code>: Assembles the individual contributions from various components into the global system matrix <span class=\"math inline\">\\(\\mathbf{A}\\)</span>.</li>\n<li><code>postAssembleSystem()</code>: Completes any post-processing or finalization steps.</li>\n</ul>\n\n<h3>Data Fields and Configuration</h3>\n\n<ul>\n<li><strong><code>d_matrixSize</code></strong>: Specifies the size of the global matrix <span class=\"math inline\">\\(\\mathbf{A}\\)</span> as a vector <span class=\"math inline\">\\((n, n)\\)</span>. This field is read-only and typically set during initialization.</li>\n<li><strong><code>d_enableAssembly</code></strong>: A boolean flag that controls whether the system matrix assembly process should be enabled. If disabled (<code>false</code>), the linear system is not assembled, effectively bypassing the <code>preAssembleSystem()</code>, <code>assembleSystem()</code>, and <code>postAssembleSystem()</code> methods.</li>\n</ul>\n\n<h3>User Interaction and Derived Classes</h3>\n\n<p>To utilize `BaseMatrixLinearSystem`, users must derive concrete classes that provide specific implementations for the pure virtual methods:</p>\n\n<ul>\n<li><strong><code>resizeSystem(n)</code></strong>: Resizes both the coefficient matrix <span class=\"math inline\">\\(\\mathbf{A}\\)</span> and the solution vector <span class=\"math inline\">\\(\\mathbf{x}\\)</span>, as well as the RHS vector <span class=\"math inline\">\\(\\mathbf{b}\\)</span>, to size <span class=\"math inline\">\\(n \\times n\\)</span>.</li>\n<li><strong><code>clearSystem()</code></strong>: Clears or resets the linear system matrix and vectors.</li>\n<li><strong><code>setRHS(v)</code></strong>: Sets the values of the RHS vector <span class=\"math inline\">\\(\\mathbf{b}\\)</span> from the provided (Mechanical/Physical) state objects.</li>\n<li><strong><code>setSystemSolution(v)</code></strong>: Initializes the solution vector <span class=\"math inline\">\\(\\mathbf{x}\\)</span> using values from the (Mechanical/Physical) state objects. This initial estimate is replaced by the actual system solution after solving.</li>\n<li><strong><code>dispatchSystemSolution(v)</code></strong>: Dispatches or distributes the computed solution vector <span class=\"math inline\">\\(\\mathbf{x}\\)</span> back to the (Mechanical/Physical) state objects for further use in simulation steps.</li>\n</ul>"
  },
  "summary": {
    "abstract": "The `BaseMatrixLinearSystem` manages linear systems represented as matrices in SOFA simulations, providing methods for building, assembling, and managing these matrices.",
    "sheet": "# BaseMatrixLinearSystem\n\n## Overview\n\nThe `BaseMatrixLinearSystem` is an abstract base class that serves as a foundation for components managing linear systems represented by matrices. It provides methods to build, assemble, and manage the system matrix, right-hand side (RHS) vector, and solution vector.\n\n## Mathematical Model\n\nIn numerical simulations, particularly finite element analysis (FEA), linear systems are often expressed in matrix form:\n\n\\[\n    \\mathbf{Ax} = \\mathbf{b}\n\\]\n\nwhere:\n- \\(\\mathbf{A}\\): The coefficient matrix, typically a square matrix of size \\(n \\times n\\).\n- \\(\\mathbf{x}\\): The solution vector of length \\(n\\).\n- \\(\\mathbf{b}\\): The right-hand side (RHS) vector of length \\(n\\), representing the known values or forcing terms.\n\nThe `BaseMatrixLinearSystem` provides methods to interact with this linear system, including:\n- `getSystemBaseMatrix()`: Returns a pointer to the coefficient matrix \\(\\mathbf{A}\\).\n- `getSystemRHSBaseVector()`: Returns a pointer to the RHS vector \\(\\mathbf{b}\\).\n- `getSystemSolutionBaseVector()`: Returns a pointer to the solution vector \\(\\mathbf{x}\\).\n\nThe `buildSystemMatrix()` method constructs and assembles the linear system matrix through:\n- `preAssembleSystem()`: Prepares any necessary setup or initialization steps.\n- `assembleSystem()`: Assembles individual contributions from various components into the global system matrix \\(\\mathbf{A}\\).\n- `postAssembleSystem()`: Completes any post-processing or finalization steps.\n\n## Parameters and Data\n\nThe significant data fields exposed by this component are:\n- **`matrixSize`**: Specifies the size of the global matrix \\(\\mathbf{A}\\) as a vector \\((n, n)\\). This field is read-only and typically set during initialization.\n- **`enableAssembly`**: A boolean flag that controls whether the system matrix assembly process should be enabled. If disabled (`false`), the linear system is not assembled."
  }
}