During the analysis of linear and nonlinear FE problems, systems of linear equations must be solved. In most cases, the matrices are sparse, and often, they are symmetric as well. The solution of these systems of linear equations constitutes an important part of the FE solving procedures and as such has a great influence on the robustness and effectiveness of any FE analysis.
B2000++ contains a variety of different solvers for sparse systems of linear equations. By default, the linear, nonlinear, static or dynamic FE solver (selected with the MDL command analysis) automatically selects in function of the discretised FE problem the sparse linear (matrix) solver. This chapter describes how to override these default settings.
The following commands may be specified in the case block.
sparse_linear_solver dmumpsdmumps_dpdlldmfdmf_oocdmf_ooc_nommapdpastixicgigmres

Selects the type of sparse linear solver:
dmumps

Direct multifrontal solver with pivoting, for use with general symmetric matrices, making use of the the MUMPS library. This solver is used by default. It is particularly robust and effective on matrices containing Lagrange multipliers (that is, whenever nonlinear constraints are present in the FE model). It has outofcore support. The sequential version is available on all platforms, the parallel version is available on RedHat Enterprise Linux 6.x and Fedora 21.
The parallel version is activated via the mpirun command. Example:
$
mpirun np 8 b2000++ DBNAME
The following options are available:
autospc yesno

Enables fixing of singular or nearlysingular degreesoffreedom. Default is
no
. This option may be useful for example in conjunction with Lagrange multipliers, or shell elements with free 6th degreesoffreedom.The
autospc
option should be used with caution as it may significantly influence the solution in nonforeseeable ways, especially in freevibration analysis and in linearised buckling analysis. For shell FE models, it is recommended to use artificial drill stiffness (drills
) instead.f
autospc_value
v

If
autospc
is enabled, use this value to fix singular or nearlysingular degreesoffreedom. A value of 0.0 indicates thatautospc_value
should be determined automatically. Default is 0.0. autospc_threshold
v

If
autospc
is enabled, use this value to determine singular or nearlysingular degreesoffreedom. A value of 0.0 indicates thatautospc_threshold
will be chosen automatically. Default is 0.0. compute_null_space_vector
n

If
autospc
is enabled, compute maximumn
first null space vectors (zeroenergy modes) and store them on the database asDISP_NS
datasets. Default is 0.Use of this option requires sometimes to adjust
autospc_threshold
.The following example is a single 2D quadrilateral element. No degreesoffreedom are constrained, hence 3 zeroenergy modes are present.
nodes 1 0.0 0.0 0.0 2 1.0 0.0 0.0 3 1.0 1.0 0.0 4 0.0 1.0 0.0 end elements type Q4.S.2D.TL mid 1 thickness 0.1 1 1 2 3 4 end material 1 type isotropic e 73.e3 nu 0.3 end case 1 analysis linear sparse_linear_solver dmumps autospc yes autospc_threshold 1.e15 compute_null_space_vector 3 end adir case 1 end
mumps_ooc yesno

Enables the outofcore solver.
mumps_ooc_tmpdir
directory

When the outofcore solver is active, specifies
where the temporary files should be created. By default, thedirectory
/tmp
directory is used. mumps_ooc_prefix
name

When the outofcore solver is active, specifies
as prefix for the temporary files.name
mumps_icntl
v

Sets one or several values in the ICNTL (integer) array, which is used to control the behaviour of the MUMPS solver. The string
consists of commaseparatedv
pairs, wherekey
:value
is the index into the ICNTL array, starting from 1, andkey
is an integer number.value
The following example enforces the use of the SCOTCH library for pivoting by setting "ICNTL(7)=3":
case 1 analysis linear sparse_linear_solver dmumps mumps_icntl "7:3" end
Only in rare cases it is necessary to set ICNTL, the defaults that are set by B2000++ are usually satisfactory or are supported directly. While ICNTL allows to finetune the workings of MUMPS, not all options will work with B2000++. Refer to the MUMPS user's guide, section 5.1, for an explanation of ICNTL.
mumps_cntl
v

Sets one or several values in the CNTL (floatingpoint) array, which is used to control the behaviour of the MUMPS solver. The string
consists of commaseparatedv
pairs, wherekey
:value
is the index into the CNTL array, starting from 1, andkey
is a floatingpoint number.value
Only in rare cases it is required to set CNTL, the defaults that are set by B2000++ are usually satisfactory or are supported directly (e.g.
autospc_threshold
andautospc_value
). Refer to the MUMPS user's guide, section 5.2, for an explanation of CNTL.
dmumps_dp

Direct multifrontal solver without pivoting, for use with symmetric positive definite matrices, making use of the MUMPS library. It has outofcore support. Since the matrices have to be symmetric positive definite, this solver cannot be used in FE analysis involving Lagrange multipliers. This solver is moderately faster than
dmumps
and supports the same set of options. dll

Sequential direct supernodal leftlooking sparse solver for symmetric problems. The matrices need not be positive definite, however, no zero elements on the diagonal must be present.
dmf

Parallel direct multifrontal sparse solver for symmetric problems. The matrices need not be positive definite, however, no zero elements on the diagonal must be present.
dmf_ooc

Direct multifrontal, outofcore, sparse symmetric solver. This solver is similar to
dmf
, but can also be used for FE analyses where the problem's memory footprint exceeds the available memory. The outofcore data is stored in a temporary file and is mapped into memory using UNIX's mmap mechanism. dmf_ooc_nommap

Similar to
dmf_ooc
, but less efficient. Makes use of a regular file instead of a mmap'ed file. To be used on platforms where mmap is not reliable. dpastix

Parallel direct leftlooking supernodal solver with static pivoting, for use with positivedefinite symmetric matrices, making use of the the PASTIX library.
In B2000++, the solver is executed with multithreading enabled and MPI and outofcore support disabled. This solver is available for RedHat Enterprise Linux 6.x and Fedora 18.
icg
origmres

Iterative conjugategradient (
icg
) and GMRES (igmres
) solver for use with symmetric resp. unsymmetric problems, making use of the GMM++ library. Note that the successful use of iterative solvers largely depends on the type of problem and the preconditioner.The following options are available:
sls_tol_residuum

Specifies the tolerance (default 1.0e8) for the residuum. When the residuum becomes lower than this tolerance, the iterative solution process is considered converged.
sls_max_iter

Specifies maximum number of iterations. By default, an infinite amount of iterations is permitted.
sls_precond

Specifies the type of preconditioner to use. For the symmetric solver (
icg
) , theildlt
(default),ildltt
, anddiagonal
preconditioners are available. For the unsymmetric solver (igmres
), theilu
(default),ilut
,ilutp
,diagonal
, andmr_approx_inverse
preconditioners are available. sls_restart

Specifies after how many iterations the preconditioner should be applied again. Default is 200.
sls_verbosity

Specifies the amount of information that GMM++ should print to the console. A value of 0 (default) means no information, a value of 1 will print the iterations, and a value of 2 will print iterations and subiterations.
unsymmetric yesno

Specifies whether an unsymmetric sparse linear solver should be used. If the problem is per se symmetric, default is
no
. This option is normally not necessary as B2000++ automatically detects whether the problem is unsymmetric and selects the appropriate sparse linear solver. complex yesno

Specifies whether a complex sparse linear solver should be used. For noncomplex problems, default is
no
. This option is normally not necessary as B2000++ automatically detects whether the problem is complex and selects the appropriate sparse linear solver.