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

Background

The MumpsSolver keyword creates a MUltifrontal Massively Parallel Sparse direct Solver class that solves the system of equations provided with \(\textbf{K}_{\textrm{eff}}\). This solver is meant to be employed to either symmetric and positive-definite, symmetric, or unsymmetric structure of \(\textbf{K}_{\textrm{eff}}\) matrix.

REFERENCE:

  • A Fully Asynchronous Multifrontal Solver Using Distributed Dynamic Scheduling, P. R. Amestoy and I. S. Duff and J. Koster and J.-Y. L'Excellent, SIAM Journal on Matrix Analysis and Applications, volume 23 (1) 15-41, 2003.
  • Hybrid scheduling for the parallel solution of linear systems, P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and S. Pralet, Journal of Parallel Computing, volume 32(2), 136-156, 2006.

Pre-Analysis

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to create a Linear. We use the addSolver() as follows:

  • addSolver(tag, attributes):

    • tag : The identifier of this solver, i.e., tag > -1
    • attributes : Specific properties for the created solver, for example
      • 'name' : The solver's name, in this case MUMPS
      • 'update' : ON for nonlinear, OFF for linear
      • 'option' : Solver's option parameters, 'SPD', 'SYM', or 'USYM'

    Example

    A MUMPS solver can be defined using the python interface as follows:
    SVL.addSolver(tag=3, attributes={'name': 'MUMPS', 'option': 'SYM', 'update': 'OFF'})

    Application Please refer to C02-DY_Lin_2DCoarseMeshPML_PETSC_ElasticPStrain_Quad file located at 03-Validations/02-Performance/ to see an example on how to define a MUMPS solver using the addSolver function.

On the contrary, the 01-Pre_Process/Method/Remove.py file provides with an interface to depopulate the Entities dictionary. For example, to remove an already define Solver, use:

  • delSolver(tag):
    • tag : The identifier of the solver to be removed, i.e., tag > -1

Run-Analysis

The C++ Run-Analysis in the 02-Run_Process/11-Solvers/01-Direct/EigenSolver.cpp file provides the class implementation. A MumpsSolver is created using the built-in json parse-structure provided in the Driver.hpp and is defined inside the "Simulations" json field indicating its "Tag" as follows,

  • {
        "Simulations": {
            "Tag": {
                "attributes": {
                    "algorithm": {
                        "name": "MUMPS",
                        "update": int,
                        "option": int,
                    }
                }
            }
        }
    }
    
    Variable Description
    option Specifies the structure of the \(\textbf{K}_{\textrm{eff}}\) matrix.
    • For symmetric and positive-definite option=0
    • For symmetric matrix option=1
    • For general unsymmetric matrix option=2
    update Specifies if the analysis is linear mode=1 or nonlinear mode=0. In the linear case, the Cholesky decomposition will be stored an computed just once, for the nonlinear case will be computed at each iteration.

    Attention
    This solver can be used for either serial or parallel applications.
    The structure of the \(\textbf{K}_{\textrm{eff}}\) is symmetric and positive-definite, then option=0 is the fastest alternative.
    The structure of the \(\textbf{K}_{\textrm{eff}}\) matrix can become symmetric when using PML, then mode=1 should be employed.