OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes
MeshWorker::Assembler Namespace Reference

The namespace containing objects that can be used to assemble data computed on cells and faces into global objects. More...

Classes

class  Functional
 The class assembling local contributions to a functional into the global functionals. More...
 
class  CellsAndFaces
 Compute cell and face contributions of a functional, typically for error estimates. More...
 
class  ResidualLocalBlocksToGlobalBlocks
 Assemble local residuals into global residuals. More...
 
class  LocalMatrixBlocks
 The local matrices filled by the worker and then assembled into the global system by the derived classes. More...
 
class  MatrixLocalBlocksToGlobalBlocks
 A helper class assembling local matrices into global matrices. More...
 
class  MGMatrixLocalBlocksToGlobalBlocks
 A helper class assembling local matrices into global multilevel matrices. More...
 

Detailed Description

The namespace containing objects that can be used to assemble data computed on cells and faces into global objects.

This can reach from collecting the total error estimate from cell and face contributions to assembling matrices and multilevel matrices.

Data models

The class chosen from this namespace determines which data model is used. For the local as well as the global objects, we have the choice between two models:

The comprehensive data model

This is the structure set up by the FESystem class. Globally, this means, data is assembled into one residual vector and into one matrix. These objects may be block vectors and block matrices, but the process of assembling ignores this fact.

Similarly, there is only a single cell vector and cell matrix, respectively, which is indexed by all degrees of freedom of the FESystem. When building the cell matrix, it is necessary to distinguish between the different components of the system and select the right operator for each pair.

The blocked data model

Here, all the blocks are treated separately (in spite of using FESystem for its convenience in other places). For instance, no block matrix is assembled, but a list of blocks, which can be combined later by BlockMatrixArray. Locally, this means, that each matrix block of a system is generated separately and assembled into the corresponding global block.

This approach is advantageous, if the number of matrices for each block position in the global system is different. For instance, block preconditioners for the Oseen problem require 3 pressure matrices, but only one divergence and one advection-diffusion operator for velocities.

Additionally, this approach enables the construction of a system of equations from building blocks for each equation and coupling operator.

Nevertheless, since a separate FEValues object must be created for each base element, it is not quite clear a priori, which data model is more efficient.

Author
Guido Kanschat, 2009