<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi Folks,<br>
<br>
I'm in the process of porting our Ipopt build over to Intel's MKL
Pardiso. I started getting crashes because the PT_ and IPARM_
arrays weren't being initialised. I think there's an error in the
code that sets up the solver if it's the MKL version (in
IpPardisoSolverInterface.cpp) There's a call to PARDISOINIT_FUNC
around lines 400 - 405, which is defined earlier in the file with
the comment:<br>
<pre><font face="Lucida Console">// The following is a fix to allow linking with Pardiso library under Windows</font></pre>
In the Intel MKL version of PARDISO there isn't a 6-parameter
PARDISO call that's described in the docs. It passes in the linker
though, so it must be exposed by the MKL library (possibly by
mistake?). If you call it though it takes out everything. In the
Intel version the initialisation is just performed as part of the
first PARDISO call (typically PHASE = 11).<br>
<br>
This can be fixed by wrapping the the call to PARDISOINIT_FUNC in a
#ifdef HAVE_PARDISO_MKL check and initialising the PT_ and IPARM_
arrays: <br>
<br>
<small><small><font face="Lucida Console"> // Call Pardiso's
initialization routine<br>
IPARM_[0] = 0; // Tell it to fill IPARM with default
values(?)<br>
#ifdef HAVE_PARDISO_MKL //MKL check<br>
for (int i = 0; i < 64; i++)<br>
{<br>
IPARM_[i] = 0;<br>
PT_[i] = 0;<br>
}<br>
#else<br>
#ifndef HAVE_PARDISO_OLDINTERFACE<br>
ipfint ERROR = 0;<br>
ipfint SOLVER = 0; // initialize only direct solver<br>
<br>
PARDISOINIT_FUNC(PT_, &MTYPE_, &SOLVER, IPARM_,
DPARM_, &ERROR);<br>
#else<br>
PARDISOINIT_FUNC(PT_, &MTYPE_, IPARM_);<br>
#endif<br>
<br>
#endif //end MKL check<br>
</font></small></small><br>
This runs happily on my machine in 32 and 64-bit. Do you want this
as a patch (or have I messed something else up in the compile with
defines, and this shouldn't be necessary?)<br>
<br>
Cheers,<br>
<br>
Damien <br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>