A generic API for using Sparse Direct Solvers, written in modern Fortran. It is designed to work with:
librefblas.a
liblapack.a
libmetis.a
libmpiseq.a
libmumps_common.a
libdmumps.a
libamd.a
libcamd.a
libcolamd.a
libccolamd.a
libcholmod.a
libsuitesparseconfig.a
libumfpack.a
libsuperlu.a
libhsl_ma48.a
test_solvers proposes to test the solvers on two systems, a very small one and a "bigger" one. Some solvers have an "analyze" step during which symbolic factorization is performed. Hence if the sparsity of a new system does not change much, the symbolic factorisation is reused for the numerical factorization. To assess the time gained, after the first resolution other resolution are proposed with the same matrix pattern. After each resolution, the error is assessed remultipying the solution by the matrix and comparing it to the right-hand side.
By default,
The package MUSST is developped to handle some lubrication problems thanks to a multiscale approach. During the processe, sparse linear systems are solved either on concurrent threads or using all threads. In the first case, 'OpenMP' is not usefull because each thread is dedicated to the resolution of its own bunch of systems (Bottom Scale systems). In the second case, 'OpenMP' is desirable to speed up the resolution (Top Scale systems). For the moment, MUSST isn't designed for distributed shared memory architectures. Therefore the following choices are made:
The solver libraries must be downloaded and statically compiled together with their prerequisites:
dmumps_struc.h
provided by MUMPS and it includes mpif.h
, also provided by MUMPS. It is to be noticed that almost all global variables are deactivated in mpif.h
.common90.f90
, ddeps90.f90
and hsl_ma48d.f90
, renamed hsl_common90.f90 and hsl_ddeps90.f90 for the two first.
In order to work with arrays independently from the solvers, the global solver type MAT_SOLV contains the system arrays –like eltptr
, eltvar
, a_elt
, etc.– pointed by a solver type, for instance ZD11_TYPE. Therefore, in version 3.3 of HSL_MA48, the attribute allocatable
(in ZD11_TYPE) of row
, col
, ptr
and val
is changed to pointer
.General syntax:
make clean all "DEBUG=[yes,'']" "GPROF=[yes,'']"
Examples:
prg
for profilingmake clean make all "DEBUG=yes" "GPROF=yes"
make all
The aim of the present project is to provide generic subroutines for the direct full resolution of sparse linear systems:
call solve_syst(mat=system_type, step='ini')
call solve_syst(mat=system_type, step='ana')
call solve_syst(mat=system_type, step='fac')
call solve_syst(mat=system_type, step='sol')
call solve_syst(mat=system_type, step='fre')
call solve_syst(mat=system_type, step='end')
system_type
is of complex type MAT_SOLV built to deal with MUMPS, UMFPACK, SuperLU and MA48 requirements.