Quantcast
Channel: Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
Viewing all articles
Browse latest Browse all 2652

Inaccurate results while using PARDISO

$
0
0

Hello, 

I am trying to utilize the PARDISO sparse matrix solver to test out a solution with my sparse matrix. The goal of this experiment was to see if I can replicate the same solution that I had while using MATLAB's backslash operator. The results of PARDISO and the solution using the backslash operator were no where near the same. 

In order to do this, I exported the sparse matrix arrays from MATLAB into binary files in COO format.  I re-imported the sparse matrix arrays into my C program in which I then converted it into CSR format for use with PARDISO using mkl_?csrcoo. I then set up PARDISO to solve it but ended up with  inaccurate results. Attached is my code, the matrix bin files, a makefile (just to see what my linking and compiling parameters were) and the original MATLAB sparse matrix in .mat format 

My sparse matrix is set up as a nonsymmetric real matrix. I wonder if it's possible to achieve matching results if I set up the right iparm parameters or if the problem lies else where in my program. Either way, I wish to gain insight into my mistake. 

The matrix is of size 122860x122860. 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>

#include "mkl.h"
#include "mkl_pardiso.h"
#include "mkl_types.h"
#include <time.h>

int main()
{
#define N 122860
#define NNZ_G 491063
#define INFO 0
#define P 64
	//***************************************************************************************************
	//* Import sparse G matrix data in COO sparse matrix format
	//***************************************************************************************************

	FILE *ptr;
	char pathG1[] = "./Gmat122860x122860/Gvalues122860x122860.bin";
	char pathG2[] = "./Gmat122860x122860/Grows122860x122860.bin";
	char pathG3[] = "./Gmat122860x122860/Gcols122860x122860.bin";

	double *gval = (double*) calloc(NNZ_G, sizeof(double));
	MKL_INT *grow = (MKL_INT*) calloc(NNZ_G, sizeof(MKL_INT));
	MKL_INT *gcol = (MKL_INT*) calloc(NNZ_G, sizeof(MKL_INT));

	double *gcsr = (double*) calloc(NNZ_G, sizeof(double));
	MKL_INT *jg = (MKL_INT*) calloc(NNZ_G, sizeof(MKL_INT));
	MKL_INT *ig = (MKL_INT*) calloc(N + 1, sizeof(MKL_INT));

	ptr = fopen(pathG1, "rb");
	fread(gval, sizeof(double), NNZ_G, ptr);
	fclose(ptr);

	ptr = fopen(pathG2, "rb");
	fread(grow, sizeof(MKL_INT), NNZ_G, ptr);
	fclose(ptr);

	ptr = fopen(pathG3, "rb");
	fread(gcol, sizeof(MKL_INT), NNZ_G, ptr);
	fclose(ptr);

	//***************************************************************************************************
	//* Convert sparse matrix format of G from COO to CSR - base 1 indexing
	//***************************************************************************************************

	MKL_INT job[6];
	MKL_INT n = N, nnz_g = NNZ_G;

	job[0] = 2;
	job[1] = 1;
	job[2] = 1;
	job[3] = 0;
	job[4] = 0;
	job[5] = 0;

	MKL_INT info = INFO;
	mkl_dcsrcoo(job, &n, gcsr, jg, ig, &nnz_g, gval, grow, gcol, &info);

	//***************************************************************************************************
	// Set up for PARDISO and loop
	//***************************************************************************************************

	void    *pt[P];
	MKL_INT iparm[P];
	MKL_INT i, maxfct, mnum, mtype, idum;
	MKL_INT msglvl, error, phase;
	MKL_INT nrhs = 1;

	mtype = 11;
	maxfct = 1;        //  Maximum number of numerical factorizations.
	mnum = 1;        //  Which factorization to use.
	msglvl = 0;        // Print statistical information in file
	error = 0;        //  Initialize error flag

	pardisoinit(pt, &mtype, iparm);

	iparm[34] = 0; // One based indexing

	char transa = 'n';

	double *b0 = (double*) calloc(N, sizeof(double));
	b0[N-1] = -0.8;

	double *x0 = (double*) calloc(N, sizeof(double));

	phase = 13;
	PARDISO(pt, &maxfct, &mnum, &mtype, &phase, &n, gcsr, ig, jg, &idum, &nrhs, iparm, &msglvl, b0, x0, &error);

	return 0;
}

 

AttachmentSize
Downloadapplication/zipprogram data.zip1.64 MB

Viewing all articles
Browse latest Browse all 2652

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>