psls_control_type structure#

#include <galahad_psls.h>

struct psls_control_type {
    // fields

    bool f_indexing;
    ipc_ error;
    ipc_ out;
    ipc_ print_level;
    ipc_ preconditioner;
    ipc_ semi_bandwidth;
    ipc_ scaling;
    ipc_ ordering;
    ipc_ max_col;
    ipc_ icfs_vectors;
    ipc_ mi28_lsize;
    ipc_ mi28_rsize;
    rpc_ min_diagonal;
    bool new_structure;
    bool get_semi_bandwidth;
    bool get_norm_residual;
    bool space_critical;
    bool deallocate_error_fatal;
    char definite_linear_solver[31];
    char prefix[31];
    struct sls_control_type sls_control;
    struct mi28_control mi28_control;
};

detailed documentation#

control derived type as a C struct

components#

bool f_indexing

use C or Fortran sparse matrix indexing

ipc_ error

unit for error messages

ipc_ out

unit for monitor output

ipc_ print_level

controls level of diagnostic output

ipc_ preconditioner

which preconditioner to use:

  • <0 no preconditioning occurs, \(P = I\)

  • 0 the preconditioner is chosen automatically (forthcoming, and currently defaults to 1).

  • 1 \(A\) is replaced by the diagonal, \(P\) = diag( max(\(A\), .min_diagonal ) ).

  • 2 \(A\) is replaced by the band \(P\) = band(\(A\)) with semi-bandwidth .semi_bandwidth.

  • 3 \(A\) is replaced by the reordered band \(P\) = band( order(\(A\)) ) with semi-bandwidth .semi_bandwidth, where order is chosen by the HSL package MC61 to move entries closer to the diagonal.

  • 4 \(P\) is a full factorization of \(A\) using Schnabel-Eskow modifications, in which small or negative diagonals are made sensibly positive during the factorization.

  • 5 \(P\) is a full factorization of \(A\) due to Gill, Murray, Ponceleon and Saunders, in which an indefinite factorization is altered to give a positive definite one.

  • 6 \(P\) is an incomplete Cholesky factorization of \(A\) using the package ICFS due to Lin and More’.

  • 7 \(P\) is an incomplete factorization of \(A\) implemented as HSL_MI28 from HSL.

  • 8 \(P\) is an incomplete factorization of \(A\) due to Munskgaard (forthcoming).

  • >8 treated as 0.

N.B. Options 3-8 may require additional external software that is not part of the package, and that must be obtained separately.

ipc_ semi_bandwidth

the semi-bandwidth for band(H) when .preconditioner = 2,3

ipc_ scaling

not used at present

ipc_ ordering

see scaling

ipc_ max_col

maximum number of nonzeros in a column of \(A\) for Schur-complement factorization to accommodate newly deleted rpws and columns

ipc_ icfs_vectors

number of extra vectors of length n required by the Lin-More’ incomplete Cholesky preconditioner when .preconditioner = 6

ipc_ mi28_lsize

the maximum number of fill entries within each column of the incomplete factor L computed by HSL_MI28 when .preconditioner = 7. In general, increasing mi28_lsize improve the quality of the preconditioner but increases the time to compute and then apply the preconditioner. Values less than 0 are treated as 0

ipc_ mi28_rsize

the maximum number of entries within each column of the strictly lower triangular matrix \(R\) used in the computation of the preconditioner by HSL_MI28 when .preconditioner = 7. Rank-1 arrays of size .mi28_rsize \* n are allocated internally to hold \(R\). Thus the amount of memory used, as well as the amount of work involved in computing the preconditioner, depends on mi28_rsize. Setting mi28_rsize > 0 generally leads to a higher quality preconditioner than using mi28_rsize = 0, and choosing mi28_rsize >= mi28_lsize is generally recommended

rpc_ min_diagonal

the minimum permitted diagonal in diag(max(H,.min_diagonal))

bool new_structure

set new_structure true if the storage structure for the input matrix has changed, and false if only the values have changed

bool get_semi_bandwidth

set get_semi_bandwidth true if the semi-bandwidth of the submatrix is to be calculated

bool get_norm_residual

set get_norm_residual true if the residual when applying the preconditioner are to be calculated

bool space_critical

if space is critical, ensure allocated arrays are no bigger than needed

bool deallocate_error_fatal

exit if any deallocation fails

char definite_linear_solver[31]

the name of the definite linear equation solver used. Possible choices are currently: ‘sils’, ‘ma27’, ‘ma57’, ‘ma77’, ‘ma86’, ‘ma87’, ‘ma97’, ‘ssids’, ‘mumps’, ‘pardiso’, ‘mkl_pardiso’, ‘pastix’, ‘wsmp’, ‘potr’, ‘sytr’ and ‘pbtr’, although only ‘potr’, ‘sytr’, ‘pbtr’ and, for OMP 4.0-compliant compilers, ‘ssids’ are installed by default; others are easily installed (see README.external). More details of the capabilities of each solver are provided in the documentation for galahad_sls.

char prefix[31]

all output lines will be prefixed by prefix(2:LEN(TRIM(.prefix))-1) where prefix contains the required string enclosed in quotes, e.g. “string” or ‘string’

struct sls_control_type sls_control

control parameters for SLS

struct mi28_control mi28_control

control parameters for HSL_MI28