i have a strange problem using the pardiso solver. i have a 32bit (vc++2008) application that uses the pardiso solverand which works fine. i just recompiled the app for 64bits: in this version (no code changes), pardisoemmediately returns '-3' (reordering problems.) - iow: nothing gets solved.
i couldn't find any documentation for the error code besides 'a reordering problem occured'.
i already verified that the matrices passed to the 32bit and the 64bit version are completely identical. (just to make sure the input data did not get garbled due to some other error introduced by compiling for 64bit.). they _are_ identical.
any suggestions what might be causing this behaviour in the 64bit build ?
Please show at least the calls to Pardiso and the declarations of the arguments in the calls.
/I"C:\Statik\kernel\include" /Zi /nologo /W4 /WX- /Od /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_AFXEXT" /D "WINVER=0x500" /D "XFEM_DLL_EXPORTS" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_MBCS" /D "_AFXDLL" /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"DebugX64\kernel.native.calculations.fem64.pch" /Fa"DebugX64" /Fo"DebugX64" /Fd"DebugX64\vc100.pdb" /Gd /errorReport:queue
prototype for the call:
"C" int PARDISO( INT_PTR*, int*, int*, int*, int*, int*, double*, int*, int*, int*, int*, int*, int*, double*, double*, int*);
FEMatrix::Pardiso( int targetPhase, double* rightHandSide, double* solution, int &uEquitation )
if ( pardisoPhase == -1 ) PardisoInit();
int phase = pardisoPhase * 10 + targetPhase;
int mtype = 2; /* Real symmetric positive definite matrix */
int nrhs = 1; /* Number of right hand sides. */
int maxfct = 1; /* Maximum number of numerical factorizations. */
int mnum = 1; /* Which factorization to use. */
int msglvl = 0; /* Print statistical information in file */
int error = 0; /* Initialize error flag */
PARDISO( pardisoInternalMemory, &maxfct, &mnum, &mtype, &phase, &dimension,
this->values, this->rowStartIndices, this->columIndices, NULL, &nrhs,
pardisoControl, &msglvl, rightHandSide, solution, &error );
if ( error )
uEquitation = pardisoControl;
pardisoPhase = targetPhase;
instead linking mkl statically, i linked it dynamically. the problems went away.