# Implementation Details

Several aspects of the Intel MKL DSS interface are platform-specific and language-specific. To promote portability across platforms and ease of use across different languages, one of the following Intel MKL DSS language-specific header files can be included:

- mkl_dss.f77 for F77 programs

- mkl_dss.f90 for F90 programs

- mkl_dss.h for C programs

These header files define symbolic constants for error returns, function options, certain defined data types, and function prototypes.

### Note

Constants for options, error returns, and message severities must be referred only by the symbolic names that are defined in these header files. Use of the Intel MKL DSS software without including one of the above header files is not supported.

## Memory Allocation and Handles

To simplify the use of the Intel MKL DSS routines, they do not require the user to allocate any temporary working storage. The solver itself allocates any required storage. To enable multiple users to access the solver simultaneously, the solver keeps track of the storage allocated for a particular application by using an opaque data object called a handle.

Each of the Intel MKL DSS routines creates, uses or deletes a handle. Consequently, user programs must be able to allocate storage for a handle. The exact syntax for allocating storage for a handle varies from language to language. To standardize the handle declarations, the language-specific header files declare constants and defined data types that should be used when declaring a handle object in the user code.

Fortran 90 programmers should declare a handle as:
`INCLUDE "mkl_dss.f90"`
`TYPE(MKL_DSS_HANDLE) handle`
C and C++ programmers should declare a handle as:
`#include "mkl_dss.h"`
`_MKL_DSS_HANDLE_t handle;`
FORTRAN 77 programmers using compilers that support eight byte integers, should declare a handle as:
`INCLUDE "mkl_dss.f77"`
`INTEGER*8 handle`

Otherwise they should replace the INTEGER*8 data types with the DOUBLE PRECISION data type.

In addition to the definition for the correct declaration of a handle, the include file also defines the following:

- function prototypes for languages that support prototypes

- symbolic constants that are used for the error returns

- user options for the solver routines

- message severity.

Parent topic: Direct Sparse Solver (DSS) Interface Routines