# DSS Interface Description

As noted in Memory Allocation and Handles section, each DSS routine reads or writes an opaque data object called a handle. It is declared as being of type MKL_DSS_HANDLE in this documentation. You can refer to Memory Allocation and Handles to determine the correct method for declaring a handle argument.

All other types in this documentation refer to the common Fortran types, INTEGER, REAL, COMPLEX, DOUBLE PRECISION, and DOUBLE COMPLEX.

C and C++ programmers should refer to Calling Direct Sparse Solver and Preconditioner Routines From C/C++ section for information on mapping Fortran types to C/C++ types.

## Routine Options

The DSS routines have an integer argument (referred below to as opt) for passing various options to the routines. The permissible values for opt should be specified using only the symbol constants defined in the language-specific header files (see Implementation Details). The routines accept options for setting the message and termination levels as described in Table “Symbolic Names for the Message and Termination Levels Options”. Additionally, the routines accept the option MKL_DSS_DEFAULTS that establishes the documented default options for each DSS routine.

Symbolic Names for the Message and Termination Levels Options
Message Level | Termination Level
--- | ---
MKL_DSS_MSG_LVL_SUCCESS | MKL_DSS_TERM_LVL_SUCCESS
MKL_DSS_MSG_LVL_INFO | MKL_DSS_TERM_LVL_INFO
MKL_DSS_MSG_LVL_WARNING | MKL_DSS_TERM_LVL_WARNING
MKL_DSS_MSG_LVL_ERROR | MKL_DSS_TERM_LVL_ERROR
MKL_DSS_MSG_LVL_FATAL | MKL_DSS_TERM_LVL_FATAL

The settings for message and termination levels can be set on any call to a DSS routine. However, once set to a particular level, they remain at that level until they are changed in another call to a DSS routine.

Users can specify multiple options for a DSS routine by adding the options together. For example, to set the message level to `debug` and the termination level to `error` for all the DSS routines, use the following call:
`CALL dss_create( handle, MKL_DSS_MSG_LVL_INFO + MKL_DSS_TERM_LVL_ERROR)`

## User Data Arrays

Many of the DSS routines take arrays of user data as input. For example, user arrays are passed to the routine dss_define_structure to describe the location of the non-zero entries in the matrix. To minimize storage requirements and improve overall run-time efficiency, the Intel MKL DSS routines do not make copies of the user input arrays.

### Warning

The contents of these arrays cannot be modified after they are passed to one of the solver routines.

Parent topic: Direct Sparse Solver (DSS) Interface Routines