<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><div>Hi all:<br><br>I have a rather large portfolio optimization problem.&nbsp; I am trying to use IpOpt with Mumps (due to licensing issues).<br>I first outline the steps to create the problem.<br><br>I derive a class COpt from IpOpt.&nbsp; <br>An instance of COpt is p_optdata<br><br>I next create the two smart pointers as follows:<br>SmartPtr&lt;COpt&gt; p_optdata;<br>SmartPtr&lt;TNLP&gt; p_optdata_tnlp;<br><br>p_optdata = new COpt();<br>p_optdata_tnlp = GetRawPtr(p_optdata);<br><br>I set up the problem as follows:<br><br>void CBMOptDoc::optimize()<br>{<br>&nbsp;&nbsp;&nbsp; // Create an instance of the IpoptApplication<br>&nbsp;&nbsp;&nbsp; SmartPtr&lt;IpoptApplication&gt; app = new IpoptApplication(false, false);<br>&nbsp;&nbsp;&nbsp; // Initialize the IpoptApplication and process the
 options<br>&nbsp;&nbsp;&nbsp; ApplicationReturnStatus status;<br>&nbsp;&nbsp;&nbsp; status = app-&gt;Initialize();<br>&nbsp;&nbsp;&nbsp; if (status != Solve_Succeeded) <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AfxMessageBox("Error during initialization");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; status = app-&gt;OptimizeTNLP(p_optdata_tnlp);<br><br>&nbsp;&nbsp;&nbsp; if (status == Solve_Succeeded)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Index iter_count = app-&gt;Statistics()-&gt;IterationCount();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Number final_obj = app-&gt;Statistics()-&gt;FinalObjective();<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br><br><br><br><br>bool COpt::get_nlp_info(Index&amp; n, Index&amp; m, Index&amp; nnz_jac_g,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Index&amp;
 nnz_h_lag, IndexStyleEnum&amp; index_style)<br>{<br>&nbsp;&nbsp;&nbsp; int nassets = ml.m_nAssets;<br>&nbsp;&nbsp;&nbsp; int kvars = nRI + nInd;<br>&nbsp;&nbsp;&nbsp; n = 2 * nassets;<br><br>&nbsp;&nbsp;&nbsp; m = 4 + kvars;<br><br>&nbsp;&nbsp;&nbsp; // nonzeros in the jacobian,<br>&nbsp;&nbsp;&nbsp; nnz_jac_g = (7 + 2 * kvars) * nassets ;<br><br>&nbsp;&nbsp;&nbsp; // and nonzeros in the hessian of the lagrangian<br>&nbsp;&nbsp;&nbsp; nnz_h_lag = (2 * nassets + 1) * (nassets + 1);<br><br>&nbsp;&nbsp;&nbsp; // We use the C index style for row/col entries<br>&nbsp;&nbsp;&nbsp; index_style = C_STYLE;<br><br>&nbsp;&nbsp;&nbsp; return true;<br>}<br><br><br><br>Here nassets = 501, kvars = 22 so the number of non-zeros are fairly large.&nbsp; I provide the needed jacobians and hessians.<br><br>When I get into app-&gt;OptimizeTNLP(p_optdata_tnlp), the application gets as far as line 1022 of dmumps-part7.f and crashes.&nbsp; The reason is that the arrays&nbsp;
 IRN and ICN in the module are corrupted .&nbsp; A partial look at IRN shows that IRN(1) has garbage in it.<br><br>-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN&nbsp;&nbsp;&nbsp; {...}&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(1)&nbsp;&nbsp;&nbsp; -842150450&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(2)&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(3)&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(4)&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(5)&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; INTEGER(4) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IRN(6)&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; INTEGER(4) <br><br>Similarly ICN is also corrupted at ICN(1).<br><br>Any thoughts on where I could be going wrong?&nbsp; Appreciate your help as I have put in a lot of
 effort over the last two months on this.I wouldn't have gotten this far without your feedback. If needed I can provide the jacobian and hessians.<br><br>Thanks a lot.<br><br>Krish<br></div></div><br>

      </body></html>