4. How do you manipulate such data structures?#

Since these data structures maintain the same organization and the same dimensions as their sequential version, they can be manipulated with standard utility routines. However, for each global treatment (i.e. potentially involving all the cells of the model), it is necessary to detect whether they are complete or incomplete (via the flags in the previous paragraph) and adopt an ad hoc strategy.

For example, before a matrix-vector product you can complete MATR_ASSE if necessary (via sdmpic) or decide to stop at ERREUR_FATALE if this scenario corresponds to an unexpected software path. In other cases, we do not try to complete the SD but we establish the MPI communications corresponding to the global treatment concerned (e.g. search for maximum as in assmam).

Note:

To facilitate maintenance, installation, and code validation, calls MPI are limited to a few utility routines: mummpi, fetmpi, and mpicm1. If we want to develop new communications, it is better to enrich one of these routines in this way.

Sequential version: From a convenient point of view, they should be described as centralized. Because even parallel computing can lead to undistributed MATR_ASSE or RESU_ELEM. To do this, the user only has to choose, for all the calculation or just for a portion, the CENTRALISE parallelism in the AFFE/MODI_MODELE operators. The elementary calculations and the assemblies are then not parallelized, only the linear solver is (MUMPS or PETSc).