Rate This Document
Findability
Accuracy
Completeness
Readability

KmlDssSymSet?II

Interface Definition

C interface:

int KmlDssSymSetSII(KmlSolverTask **pHandle, enum KmlSolverParam param, int *value, int nvalue);

int KmlDssSymSetDII(KmlSolverTask **pHandle, enum KmlSolverParam param, int *value, int nvalue);

int KmlDssSymSetCII(KmlSolverTask **pHandle, enum KmlSolverParam param, int *value, int nvalue);

int KmlDssSymSetZII(KmlSolverTask **pHandle, enum KmlSolverParam param, int *value, int nvalue);

Parameters

Parameter

Type

Description

Input/Output

pHandle

KmlSolverTask **

Solver handle. pHandle cannot be a null pointer.

Input

param

enum KmlSolverParam

  • KMLSS_PERM indicates the user-defined matrix ordering.
  • KMLSS_REFINEMENT_MAX_STEPS indicates the maximum number of iterative refinement operations.
  • KMLSS_BOOST_THRESHOLD indicates the boost threshold.
  • KMLSS_SCALING_TYPE indicates the scaling algorithm type.
  • KMLSS_MATCHING_TYPE indicates the matching algorithm type.
  • KMLSS_REFINEMENT_TOLERANCE_LEVEL indicates the threshold set by the iterative refinement algorithm. The value is a negative power of 10.

Input

value

int*

Array containing parameters related to direct resolution

Input

nvalue

int

Number of elements in the value array

Input

The value varies with the param option. Especially, some values can be constants. The following table lists the options.

Param Option

Value

Description

KMLSS_PERM

One-dimensional array. The array length is the same as the matrix dimension.

User-defined row/column reordering

KMLSS_REFINEMENT_MAX_STEPS

Address of a positive integer array or positive integer whose length is 1

Maximum number of iteration refinement times

KMLSS_BOOST_THRESHOLD

Address of a positive integer array or positive integer whose length is 1

Controls the boost parameter in the solver.

KMLSS_SCALING_TYPE

KMLSS_NO_SCALING

No scaling operation

KMLSS_ROWCOLUMN_SCALING

Performs row/column scaling.

KMLSS_MATCHBASED_SCALING

Performs scaling operations related to the Match algorithm.

KMLSS_MATCHING_TYPE

KMLSS_MATCHING_OFF

Disables the Match algorithm.

KMLSS_MATCHING_HUNGARIAN

Hungarian algorithm

KMLSS_REFINEMENT_TOLERANCE_LEVEL

Address of a positive integer array or positive integer whose length is 1

Threshold set by the iterative refinement algorithm. The value is a negative power of 10.

Return Value

Return Value

Type

Description

KMLSS_NO_ERROR

int

The execution is successful.

KMLSS_NULL_ARGUMENT

int

The handle or data pointer is null.

KMLSS_BAD_HANDLE

int

The format of pHandle is incorrect.

KMLSS_BAD_SELECTOR

int

The input value of KML_SOLVER_PARAM is not supported currently or does not exist during the analysis.

KMLSS_BAD_DATA

int

The user-defined value does not meet the requirements.

Dependencies

#include "kml_dss.h" or #include "kml_solver.h"

Examples

C interface:

int n = 8;
int ia[9] = {0, 2, 4, 6, 7, 8, 9, 10, 11};
int ja[11] = {0, 7, 1, 6, 2, 5, 3, 4, 5, 6, 7};
double a[11] = {1.0, 2.0, -2.0, 3.0, 3.0, 4.0, -4.0, 5.0, -6.0, 7.0, 8.0};

double b[8] = {3.0, 1.0, 7.0, -4.0, 5.0, -2.0, 10.0, 10.0};
double x[8];
int nrhs = 1;
int ldx = n, ldb = n;

KmlSolverTask *handle;
int ierr = KmlDssSymInitDI(&handle, n, a, ja, ia);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymInitDI: %d", ierr);
}
ierr = KmlDssSymAnalyzeDI(&handle);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymAnalyzeDI: %d", ierr);
}
ierr = KmlDssSymFactorizeDI(&handle);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymFactorizeDI: %d", ierr);
}

double tolerance = 1.e-12;
ierr = KmlDssSymSetDID(&handle, KMLSS_REFINEMENT_TOLERANCE_LEVEL, &tolerance, 1);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymSetDID: %d", ierr);
}
int nsteps = 2;
ierr = KmlDssSymSetDII(&handle, KMLSS_REFINEMENT_MAX_STEPS, &nsteps, 1);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymSetDII: %d", ierr);
}

ierr = KmlDssSymSolveDI(&handle, nrhs, x, ldx, b, ldb);
if (ierr != 0) {
        printf("\nERROR in KmlDssSymSolveDI: %d", ierr);
}

int nstep;
ierr = KmlDssSymGetDII(&handle, KMLSS_REFINEMENT_STEPS, &nstep, 1);
printf("REFINEMENT_STEP = %d\n", nstep);
Output:
REFINEMENT_STEP = 1