- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "mkl_dss.h"
#include "mkl_types.h"
/*
** Define the array and rhs vectors
[9 1.5 6 0.75 3] [ ] [1 6]
[ 0.5 ] [ ] [2 7]
[ 12 ] [ ] = [3 8]
[ 0.625 ] [ ] [4 9]
[ 16] [ ] [5 10]
*/
#define NROWS 5
#define NCOLS 5
#define NNONZEROS 9
#define NRHS 2
static const MKL_INT nRows = NROWS;
static const MKL_INT nCols = NCOLS;
static const MKL_INT nNonZeros = NNONZEROS;
static const MKL_INT nRhs = NRHS;
//zero-base indexing
static _INTEGER_t rowIndex[NROWS + 1] = { 0, 5, 6, 7, 8, 9 };
static _INTEGER_t columns[NNONZEROS] = { 0, 1, 2, 3, 4, 1, 2, 3, 4 };
static _DOUBLE_PRECISION_t values[NNONZEROS] = { 9, 1.5, 6, .75, 3, 0.5, 12, .625, 16 };
static _DOUBLE_PRECISION_t rhs[NCOLS*NRHS] = { 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10};
MKL_INT main() {
MKL_INT i;
/* Allocate storage for the solver handle and the right-hand side. */
_DOUBLE_PRECISION_t solValues[NROWS];
_MKL_DSS_HANDLE_t handle;
_INTEGER_t error;
MKL_INT opt = MKL_DSS_DEFAULTS;
MKL_INT opt_handle = MKL_DSS_ZERO_BASED_INDEXING;
MKL_INT sym = MKL_DSS_SYMMETRIC;
MKL_INT type = MKL_DSS_POSITIVE_DEFINITE;
/* --------------------- */
/* Initialize the solver */
/* --------------------- */
error = dss_create(handle, opt_handle);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------------------------------- */
/* Define the non-zero structure of the matrix */
/* ------------------------------------------- */
error = dss_define_structure(handle, sym, rowIndex, nRows, nCols, columns, nNonZeros);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------ */
/* Reorder the matrix */
/* ------------------ */
error = dss_reorder(handle, opt, 0);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------ */
/* Factor the matrix */
/* ------------------ */
error = dss_factor_real(handle, type, values);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------------ */
/* Get the solution vector */
/* ------------------------ */
error = dss_solve_real(handle, opt, rhs, nRhs, solValues);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* -------------------------- */
/* Deallocate solver storage */
/* -------------------------- */
error = dss_delete(handle, opt);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ---------------------- */
/* Print solution vector */
/* ---------------------- */
printf(" Solution array: ");
for (i = 0; i < nCols * nRhs; i++)
printf(" %g", solValues);
printf("\n");
system("Pause");
exit(0);
printError:
printf("Solver returned error code %d\n", error);
system("Pause");
exit(1);
}
By running the above code, I discovered that the solution `solValues` and `rhs` are column-major.
- Tags:
- Parallel Computing
Link Copied
0 Replies
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page