Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > df736a3bc446df5b16150bebb7296274 > files > 150

DSDP-devel-5.8-2.fc14.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>DSDP: src/solver/dsdpx.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">DSDP</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="dir_23046874d7fed141927c769a66d8e3a5.html">src</a>      </li>
      <li class="navelem"><a class="el" href="dir_03c647d51c93e018646ff83aa2eeb169.html">solver</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<div class="title">dsdpx.c</div>  </div>
</div>
<div class="contents">
<a href="dsdpx_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include &quot;<a class="code" href="dsdp_8h.html" title="Internal data structure for the DSDP solver.">dsdp.h</a>&quot;</span>
<a name="l00002"></a>00002 <span class="preprocessor">#include &quot;<a class="code" href="dsdpsys_8h.html" title="Error handling, printing, and profiling.">dsdpsys.h</a>&quot;</span>
<a name="l00003"></a>00003 <span class="preprocessor">#include &quot;<a class="code" href="dsdp5_8h.html" title="The API to DSDP for those applications using DSDP as a subroutine library.">dsdp5.h</a>&quot;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00010"></a>00010 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPInspectXY&quot;</span>
<a name="l00011"></a>00011 <span class="preprocessor"></span><span class="keywordtype">int</span> DSDPInspectXY(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">double</span> xmakermu, <a class="code" href="dsdpvec_8h.html#a421243d35437ad44ded3c1e34198e8e9" title="This object hold m+2 variables: a scaling of C, the y variables, and r.">DSDPVec</a> xmakery, <a class="code" href="dsdpvec_8h.html#a421243d35437ad44ded3c1e34198e8e9" title="This object hold m+2 variables: a scaling of C, the y variables, and r.">DSDPVec</a> xmakerdy, <a class="code" href="dsdpvec_8h.html#a421243d35437ad44ded3c1e34198e8e9" title="This object hold m+2 variables: a scaling of C, the y variables, and r.">DSDPVec</a> AX, <span class="keywordtype">double</span> *tracexs2, <span class="keywordtype">double</span> *pobj2, <span class="keywordtype">double</span> *rpinfeas2){
<a name="l00012"></a>00012   <span class="keywordtype">int</span> info;
<a name="l00013"></a>00013   DSDPFunctionBegin;
<a name="l00014"></a>00014 
<a name="l00015"></a>00015   info=BoundYConeAddX(dsdp-&gt;ybcone,xmakermu,xmakery,xmakerdy,AX,tracexs2); DSDPCHKERR(info);
<a name="l00016"></a>00016   info=DSDPVecGetC(AX,pobj2);DSDPCHKERR(info);
<a name="l00017"></a>00017 
<a name="l00018"></a>00018   info=DSDPVecSetC(AX,0);DSDPCHKERR(info);
<a name="l00019"></a>00019   info=DSDPVecSetR(AX,0);DSDPCHKERR(info);
<a name="l00020"></a>00020   info=DSDPVecNorm1(AX,rpinfeas2); DSDPCHKERR(info);
<a name="l00021"></a>00021   DSDPFunctionReturn(0); 
<a name="l00022"></a>00022 }
<a name="l00023"></a>00023 
<a name="l00053"></a>00053 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPComputeX&quot;</span>
<a name="l00055"></a><a class="code" href="group__DSDPBasic.html#gacd271769549030ce365597101946220b">00055</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPBasic.html#gacd271769549030ce365597101946220b" title="Compute the X variables.">DSDPComputeX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp){
<a name="l00056"></a>00056   <span class="keywordtype">int</span> i,info;
<a name="l00057"></a>00057   <span class="keywordtype">double</span> pobj=0,ppobj2=0,ddobj,tracexs=0,tracexs2=0,rpinfeas=0,rpinfeas2=0,rpobjerr=0;
<a name="l00058"></a>00058   <span class="keywordtype">double</span> err1,cc,rrr,bigM,ymax,pfeastol=dsdp-&gt;pinfeastol;
<a name="l00059"></a>00059   <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3a" title="There are many reasons to terminate the solver.">DSDPTerminationReason</a> reason;
<a name="l00060"></a>00060   <a class="code" href="dsdpvec_8h.html#a421243d35437ad44ded3c1e34198e8e9" title="This object hold m+2 variables: a scaling of C, the y variables, and r.">DSDPVec</a> AX=dsdp-&gt;ytemp;
<a name="l00061"></a>00061 
<a name="l00062"></a>00062   DSDPFunctionBegin;
<a name="l00063"></a>00063   info=<a class="code" href="group__DSDPConverge.html#ga637bf541e030c5aef4d436a9792714a2" title="Copy the reason why the solver terminated.">DSDPStopReason</a>(dsdp,&amp;reason);DSDPCHKERR(info);
<a name="l00064"></a>00064   info=<a class="code" href="group__DSDPSolution.html#gadb9e055ef8b2194ae67ed14ca06f1d01" title="Copy the objective value (DD).">DSDPGetDDObjective</a>(dsdp,&amp;ddobj);DSDPCHKERR(info);
<a name="l00065"></a>00065   info=<a class="code" href="group__DSDPSolution.html#gae2e8b2a5e1b71d699d753a045de95add" title="Copy the the infinity norm of the variables y.">DSDPGetMaxYElement</a>(dsdp,&amp;ymax);DSDPCHKERR(info);
<a name="l00066"></a>00066   info=<a class="code" href="group__DSDPSolution.html#gacfa8e29ecd7eaaeb6a4e31eb07961de3" title="Copy the infeasibility in (D), or the variable r in (DD).">DSDPGetR</a>(dsdp,&amp;rrr); DSDPCHKERR(info);
<a name="l00067"></a>00067   info=DSDPGetPenalty(dsdp,&amp;bigM);DSDPCHKERR(info);
<a name="l00068"></a>00068   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;cc);DSDPCHKERR(info);
<a name="l00069"></a>00069 
<a name="l00070"></a>00070   dsdp-&gt;pdfeasible=<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90a6ebc36bcf5037f059ae5e9014e76cee0">DSDP_PDFEASIBLE</a>;
<a name="l00071"></a>00071   <span class="keywordflow">for</span> (i=0;i&lt;MAX_XMAKERS;i++){
<a name="l00072"></a>00072     <span class="keywordflow">if</span> (i&gt;0 &amp;&amp; dsdp-&gt;xmaker[i].pstep&lt;1) <span class="keywordflow">continue</span>;
<a name="l00073"></a>00073     info=<a class="code" href="dsdp_8h.html#a871c5d28852a40e2593f75e635855296" title="Compute the X variables in each cone.">DSDPComputeXVariables</a>(dsdp,dsdp-&gt;xmaker[i].mu,dsdp-&gt;xmaker[i].y,dsdp-&gt;xmaker[i].dy,AX,&amp;tracexs);DSDPCHKERR(info);
<a name="l00074"></a>00074     info=DSDPVecGetC(AX,&amp;pobj); DSDPCHKERR(info);    
<a name="l00075"></a>00075     info=DSDPVecGetR(AX,&amp;dsdp-&gt;tracex); DSDPCHKERR(info);
<a name="l00076"></a>00076     info=DSDPVecSetC(AX,0);DSDPCHKERR(info);
<a name="l00077"></a>00077     info=DSDPVecSetR(AX,0);DSDPCHKERR(info);
<a name="l00078"></a>00078     info=DSDPVecNormInfinity(AX,&amp;rpinfeas);DSDPCHKERR(info);
<a name="l00079"></a>00079     rpinfeas=rpinfeas/(dsdp-&gt;tracex+1);
<a name="l00080"></a>00080 
<a name="l00081"></a>00081     DSDPLogInfo(0,2,<span class="stringliteral">&quot;POBJ: %4.4e, DOBJ:  %4.4e\n&quot;</span>,pobj,ddobj/cc);
<a name="l00082"></a>00082     
<a name="l00083"></a>00083     info=DSDPVecNorm2(AX,&amp;err1);DSDPCHKERR(info);
<a name="l00084"></a>00084     dsdp-&gt;tracexs=tracexs;
<a name="l00085"></a>00085     dsdp-&gt;perror=err1;
<a name="l00086"></a>00086     dsdp-&gt;pobj=cc*pobj;
<a name="l00087"></a>00087     
<a name="l00088"></a>00088     info=DSDPInspectXY(dsdp,dsdp-&gt;xmaker[i].mu,dsdp-&gt;xmaker[i].y,dsdp-&gt;xmaker[i].dy,AX,&amp;tracexs2,&amp;ppobj2,&amp;rpinfeas2);DSDPCHKERR(info);
<a name="l00089"></a>00089     rpinfeas2=rpinfeas2/(dsdp-&gt;tracex+1);
<a name="l00090"></a>00090     <span class="comment">/* rpinfeas is infeasibility of (P) while rpinfeas2 is infeasibility of (PP) */</span>
<a name="l00091"></a>00091 
<a name="l00092"></a>00092     DSDPLogInfo(0,2,<span class="stringliteral">&quot;X P Infeas: %4.2e , PObj: %4.8e\n&quot;</span>,rpinfeas,pobj*(cc));
<a name="l00093"></a>00093     DSDPLogInfo(0,2,<span class="stringliteral">&quot;TOTAL  P Infeas: %4.2e PObj: %4.8e\n&quot;</span>,rpinfeas2,ppobj2*(cc));
<a name="l00094"></a>00094     rpobjerr= fabs(pobj-dsdp-&gt;ppobj)/(1+fabs(dsdp-&gt;ppobj));
<a name="l00095"></a>00095     
<a name="l00096"></a>00096     <span class="keywordflow">if</span> (rpinfeas2 &lt; pfeastol){ <span class="comment">/* (PP) must be close to feasible */</span>
<a name="l00097"></a>00097       
<a name="l00098"></a>00098       <span class="keywordflow">if</span> (dsdp-&gt;rgap&lt;0.1){
<a name="l00099"></a>00099         <span class="keywordflow">if</span> (rpinfeas&gt;pfeastol/100 &amp;&amp; fabs(rrr)&gt;dsdp-&gt;dinfeastol){
<a name="l00100"></a>00100           dsdp-&gt;pdfeasible=<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90a7dfad20f823f952f1442144a8fa5c208">DSDP_PDUNKNOWN</a>;
<a name="l00101"></a>00101           DSDPLogInfo(0,2,<span class="stringliteral">&quot;Warning: Try Increasing penalty parameter\n&quot;</span>);
<a name="l00102"></a>00102         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rpinfeas&gt;pfeastol &amp;&amp; ddobj&gt;0 &amp;&amp; ppobj2&lt;0 &amp;&amp; fabs(rrr)&lt;dsdp-&gt;dinfeastol){
<a name="l00103"></a>00103           dsdp-&gt;pdfeasible=<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90a0008f194b20fc02f61eca61fab25ed05">DSDP_UNBOUNDED</a>;
<a name="l00104"></a>00104           DSDPLogInfo(0,2,<span class="stringliteral">&quot;Warning: D probably unbounded\n&quot;</span>);
<a name="l00105"></a>00105           
<a name="l00106"></a>00106         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="comment">/* fabs(bigM)-dsdp-&gt;tracex &lt; fabs(rrr) &amp;&amp; rpinfeas&lt;pfeastol */</span> fabs(rrr)&gt;dsdp-&gt;dinfeastol){
<a name="l00107"></a>00107           dsdp-&gt;pdfeasible=<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90abb5750f090ec5d7e1d8c1aead6565a52">DSDP_INFEASIBLE</a>;
<a name="l00108"></a>00108           DSDPLogInfo(0,2,<span class="stringliteral">&quot;Warning: D probably infeasible \n&quot;</span>);
<a name="l00109"></a>00109         }
<a name="l00110"></a>00110       }
<a name="l00111"></a>00111       i=i+10;
<a name="l00112"></a>00112       <span class="keywordflow">break</span>;
<a name="l00113"></a>00113 
<a name="l00114"></a>00114     } <span class="keywordflow">else</span> { 
<a name="l00115"></a>00115       <span class="comment">/* Step direction was not accurate enough to compute X from Schur complement */</span>
<a name="l00116"></a>00116       DSDPLogInfo(0,2,<span class="stringliteral">&quot;Try backup X\n&quot;</span>);
<a name="l00117"></a>00117       info=<a class="code" href="group__DSDPConverge.html#ga1293e76a2fb57bd963713c3df7e88221" title="Monitor each iteration of the solver.">DSDPSetConvergenceFlag</a>(dsdp,<a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aafd547daf59da4b0986d7894d38d3d269">DSDP_NUMERICAL_ERROR</a>); DSDPCHKERR(info); 
<a name="l00118"></a>00118     }
<a name="l00119"></a>00119     
<a name="l00120"></a>00120   }
<a name="l00121"></a>00121 
<a name="l00122"></a>00122   DSDPFunctionReturn(0);
<a name="l00123"></a>00123 }
<a name="l00124"></a>00124 
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 <span class="preprocessor">#undef __FUNCT__</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPSaveBackupYForX&quot;</span>
<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="keywordtype">int</span> DSDPSaveBackupYForX(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">int</span> count,<span class="keywordtype">double</span> mu, <span class="keywordtype">double</span> pstep){
<a name="l00129"></a>00129   <span class="keywordtype">int</span> info;
<a name="l00130"></a>00130   <span class="keywordtype">double</span> pnorm;
<a name="l00131"></a>00131   DSDPFunctionBegin;
<a name="l00132"></a>00132   info=DSDPVecCopy(dsdp-&gt;y,dsdp-&gt;xmaker[count].y);DSDPCHKERR(info);
<a name="l00133"></a>00133   info=<a class="code" href="dsdp_8h.html#ab857999f0834880cea633350bd673f2e" title="Compute the step direction.">DSDPComputeDY</a>(dsdp,mu,dsdp-&gt;xmaker[count].dy,&amp;pnorm); DSDPCHKERR(info);
<a name="l00134"></a>00134   dsdp-&gt;xmaker[count].pstep=pstep;
<a name="l00135"></a>00135   dsdp-&gt;xmaker[count].mu = mu;
<a name="l00136"></a>00136   DSDPFunctionReturn(0);
<a name="l00137"></a>00137 }
<a name="l00138"></a>00138 
<a name="l00147"></a>00147 <span class="preprocessor">#undef __FUNCT__</span>
<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPSaveYForX&quot;</span>
<a name="l00149"></a><a class="code" href="dsdpx_8c.html#a0ca67c8b05fac8e7c8b32340dd435b81">00149</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="dsdp_8h.html#acd704d80e2686ff321f3a63bc3c3b63f" title="Save the current solution for later computation of X.">DSDPSaveYForX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">double</span> mu, <span class="keywordtype">double</span> pstep){
<a name="l00150"></a>00150   <span class="keywordtype">int</span> info,isgood=0;
<a name="l00151"></a>00151   <span class="keywordtype">double</span> pnorm,newgap,ymax,dd=0;
<a name="l00152"></a>00152   DSDPFunctionBegin;
<a name="l00153"></a>00153   dsdp-&gt;pstepold=dsdp-&gt;pstep;
<a name="l00154"></a>00154   info=<a class="code" href="group__DSDPSolution.html#gae2e8b2a5e1b71d699d753a045de95add" title="Copy the the infinity norm of the variables y.">DSDPGetMaxYElement</a>(dsdp,&amp;ymax);DSDPCHKERR(info);
<a name="l00155"></a>00155   <span class="keywordflow">if</span> (pstep==0){
<a name="l00156"></a>00156     info=DSDPVecCopy(dsdp-&gt;y,dsdp-&gt;xmaker[0].y);DSDPCHKERR(info);
<a name="l00157"></a>00157     dsdp-&gt;xmaker[0].pstep=pstep;
<a name="l00158"></a>00158   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dsdp-&gt;Mshift*ymax&gt;dsdp-&gt;pinfeastol*10){
<a name="l00159"></a>00159     info=<a class="code" href="dsdp_8h.html#a5cad8f283551874464395089d3aa76b0" title="Compute the current duality gap.">DSDPComputeDualityGap</a>(dsdp,mu,&amp;newgap);DSDPCHKERR(info);
<a name="l00160"></a>00160     <span class="keywordflow">if</span> (pstep==1 &amp;&amp; newgap&gt;0){
<a name="l00161"></a>00161       dsdp-&gt;ppobj = dsdp-&gt;ddobj + newgap; dsdp-&gt;mu=(newgap)/(dsdp-&gt;np);
<a name="l00162"></a>00162       dsdp-&gt;dualitygap=newgap;
<a name="l00163"></a>00163     }
<a name="l00164"></a>00164     info=DSDPVecZero(dsdp-&gt;rhstemp); DSDPCHKERR(info);
<a name="l00165"></a>00165     info=BoundYConeAddX(dsdp-&gt;ybcone,dsdp-&gt;xmaker[0].mu,dsdp-&gt;xmaker[0].y,dsdp-&gt;xmaker[0].dy,dsdp-&gt;rhstemp,&amp;dd); DSDPCHKERR(info);
<a name="l00166"></a>00166     info=DSDPVecSetC(dsdp-&gt;rhstemp,0);
<a name="l00167"></a>00167     info=DSDPVecSetR(dsdp-&gt;rhstemp,0);
<a name="l00168"></a>00168     info=DSDPVecNormInfinity(dsdp-&gt;rhstemp,&amp;dsdp-&gt;pinfeas); DSDPCHKERR(info);
<a name="l00169"></a>00169     dsdp-&gt;pinfeas+=dsdp-&gt;Mshift*ymax;
<a name="l00170"></a>00170     <span class="keywordflow">if</span> (0==1){info=DSDPVecView(dsdp-&gt;rhstemp);}
<a name="l00171"></a>00171     <span class="comment">/* Not good enough to save */</span>
<a name="l00172"></a>00172   } <span class="keywordflow">else</span> {
<a name="l00173"></a>00173     info=DSDPVecCopy(dsdp-&gt;y,dsdp-&gt;xmaker[0].y);DSDPCHKERR(info);
<a name="l00174"></a>00174     dsdp-&gt;xmaker[0].pstep=pstep;
<a name="l00175"></a>00175     info=<a class="code" href="dsdp_8h.html#a2291b15b24f36be603dbca274db5997f" title="Compute the right-hand side of the linear system that determines the step direction.">DSDPComputeRHS</a>(dsdp,mu,dsdp-&gt;xmakerrhs); DSDPCHKERR(info);
<a name="l00176"></a>00176     info=<a class="code" href="dsdp_8h.html#ab857999f0834880cea633350bd673f2e" title="Compute the step direction.">DSDPComputeDY</a>(dsdp,mu,dsdp-&gt;xmaker[0].dy,&amp;pnorm); DSDPCHKERR(info);
<a name="l00177"></a>00177     dsdp-&gt;xmaker[0].mu = mu;
<a name="l00178"></a>00178     info=<a class="code" href="dsdp_8h.html#a5cad8f283551874464395089d3aa76b0" title="Compute the current duality gap.">DSDPComputeDualityGap</a>(dsdp,mu,&amp;newgap);DSDPCHKERR(info);
<a name="l00179"></a>00179     <span class="keywordflow">if</span> (pstep==1 &amp;&amp; newgap&gt;0){
<a name="l00180"></a>00180       dsdp-&gt;ppobj = dsdp-&gt;ddobj + newgap; dsdp-&gt;mu=(newgap)/(dsdp-&gt;np);
<a name="l00181"></a>00181       dsdp-&gt;dualitygap=newgap;
<a name="l00182"></a>00182 
<a name="l00183"></a>00183       info=DSDPVecZero(dsdp-&gt;rhstemp); DSDPCHKERR(info);
<a name="l00184"></a>00184       info=BoundYConeAddX(dsdp-&gt;ybcone,dsdp-&gt;xmaker[0].mu,dsdp-&gt;xmaker[0].y,dsdp-&gt;xmaker[0].dy,dsdp-&gt;rhstemp,&amp;dd); DSDPCHKERR(info);
<a name="l00185"></a>00185       info=DSDPVecSetC(dsdp-&gt;rhstemp,0);
<a name="l00186"></a>00186       info=DSDPVecSetR(dsdp-&gt;rhstemp,0);
<a name="l00187"></a>00187       info=DSDPVecNormInfinity(dsdp-&gt;rhstemp,&amp;dsdp-&gt;pinfeas); DSDPCHKERR(info);
<a name="l00188"></a>00188       dsdp-&gt;pinfeas+=dsdp-&gt;Mshift*ymax;
<a name="l00189"></a>00189       <span class="keywordflow">if</span> (0==1){info=DSDPVecView(dsdp-&gt;rhstemp);}
<a name="l00190"></a>00190 
<a name="l00191"></a>00191     }
<a name="l00192"></a>00192     isgood=1;
<a name="l00193"></a>00193   }
<a name="l00194"></a>00194 
<a name="l00195"></a>00195   <span class="keywordflow">if</span> (isgood==1){
<a name="l00196"></a>00196     <span class="keywordtype">double</span> penalty,r,rx;
<a name="l00197"></a>00197     info=<a class="code" href="dsdp_8h.html#a4d28c58bb5605d6636c6a425c10bf9ea" title="Pass the information needed to compute the variables X in each cone but do not compute X...">DSDPPassXVectors</a>(dsdp,dsdp-&gt;xmaker[0].mu,dsdp-&gt;xmaker[0].y,dsdp-&gt;xmaker[0].dy); DSDPCHKERR(info);
<a name="l00198"></a>00198     info=<a class="code" href="dsdp_8h.html#af433c52034d6fcfdafe637e66851808c" title="Get variable r.">DSDPGetRR</a>(dsdp,&amp;r);DSDPCHKERR(info);
<a name="l00199"></a>00199     <span class="keywordflow">if</span> (r&amp;&amp; dsdp-&gt;rgap&lt;0.1){  <span class="comment">/* Estimate error in X */</span>
<a name="l00200"></a>00200       info=RConeGetRX(dsdp-&gt;rcone,&amp;rx);DSDPCHKERR(info);
<a name="l00201"></a>00201       info=DSDPGetPenalty(dsdp,&amp;penalty);DSDPCHKERR(info);
<a name="l00202"></a>00202       dsdp-&gt;pinfeas = dsdp-&gt;pinfeas *(1+fabs(penalty-rx));
<a name="l00203"></a>00203     }
<a name="l00204"></a>00204   }
<a name="l00205"></a>00205 
<a name="l00206"></a>00206   <span class="keywordflow">if</span> (pstep==1.0 &amp;&amp; dsdp-&gt;rgap&gt;5.0e-1) {
<a name="l00207"></a>00207     info=DSDPSaveBackupYForX(dsdp,MAX_XMAKERS-1,mu,pstep);DSDPCHKERR(info);
<a name="l00208"></a>00208   }
<a name="l00209"></a>00209   <span class="keywordflow">if</span> (pstep==1.0 &amp;&amp; dsdp-&gt;rgap&gt;1.0e-3) {
<a name="l00210"></a>00210     info=DSDPSaveBackupYForX(dsdp,2,mu,pstep);DSDPCHKERR(info);
<a name="l00211"></a>00211   }
<a name="l00212"></a>00212   <span class="keywordflow">if</span> (pstep==1.0 &amp;&amp; dsdp-&gt;rgap&gt;1.0e-5) {
<a name="l00213"></a>00213     info=DSDPSaveBackupYForX(dsdp,1,mu,pstep);DSDPCHKERR(info);
<a name="l00214"></a>00214   }
<a name="l00215"></a>00215   
<a name="l00216"></a>00216   DSDPFunctionReturn(0);
<a name="l00217"></a>00217 }
<a name="l00218"></a>00218 
<a name="l00230"></a>00230 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00231"></a>00231 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetPObjective&quot;</span>
<a name="l00232"></a><a class="code" href="group__DSDPSolution.html#ga0126bd2c9da5d8a7ca0806bd8dd8e56f">00232</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolution.html#ga0126bd2c9da5d8a7ca0806bd8dd8e56f" title="Copy the objective value (P).">DSDPGetPObjective</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> *pobj){ 
<a name="l00233"></a>00233   <span class="keywordtype">int</span> info;
<a name="l00234"></a>00234   <span class="keywordtype">double</span> scale;
<a name="l00235"></a>00235   DSDPFunctionBegin;
<a name="l00236"></a>00236   DSDPValid(dsdp);
<a name="l00237"></a>00237   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;scale);DSDPCHKERR(info);
<a name="l00238"></a>00238   *pobj=(dsdp-&gt;pobj)/scale;
<a name="l00239"></a>00239   DSDPFunctionReturn(0);
<a name="l00240"></a>00240 }
<a name="l00241"></a>00241 
<a name="l00252"></a>00252 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetSolutionType&quot;</span>
<a name="l00254"></a><a class="code" href="group__DSDPBasic.html#ga33e05559ab15ea40b1e9b31ecc206b3e">00254</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPBasic.html#ga33e05559ab15ea40b1e9b31ecc206b3e" title="Solutions can be bounded, infeasible, or unbounded.">DSDPGetSolutionType</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90" title="Formulations (P) and (D) can be feasible and bounded, feasible and unbounded, or infeasible.">DSDPSolutionType</a> *pdfeasible){ 
<a name="l00255"></a>00255   DSDPFunctionBegin;
<a name="l00256"></a>00256   DSDPValid(dsdp);
<a name="l00257"></a>00257   *pdfeasible=dsdp-&gt;pdfeasible;
<a name="l00258"></a>00258   DSDPFunctionReturn(0);
<a name="l00259"></a>00259 }
<a name="l00276"></a>00276 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00277"></a>00277 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetTraceX&quot;</span>
<a name="l00278"></a><a class="code" href="group__DSDPSolution.html#ga2580bcdac912b6477f067a8ccbc801bc">00278</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolution.html#ga2580bcdac912b6477f067a8ccbc801bc" title="Copy the trace of the variables X in (P).">DSDPGetTraceX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">double</span> *tracex){
<a name="l00279"></a>00279   DSDPFunctionBegin;
<a name="l00280"></a>00280   DSDPValid(dsdp);
<a name="l00281"></a>00281   *tracex=dsdp-&gt;tracex;
<a name="l00282"></a>00282   DSDPFunctionReturn(0);
<a name="l00283"></a>00283 }
<a name="l00284"></a>00284 
<a name="l00295"></a>00295 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00296"></a>00296 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetFinalErrors&quot;</span>
<a name="l00297"></a><a class="code" href="group__DSDPSolution.html#ga563ea95890673182c1de4252cf3e5309">00297</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolution.html#ga563ea95890673182c1de4252cf3e5309" title="Copy six different error measurements into an array.">DSDPGetFinalErrors</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">double</span> err[6]){
<a name="l00298"></a>00298   <span class="keywordtype">int</span> info;
<a name="l00299"></a>00299   <span class="keywordtype">double</span> scale,rr,bnorm,dobj=0,pobj=0;
<a name="l00300"></a>00300   DSDPFunctionBegin;
<a name="l00301"></a>00301   DSDPValid(dsdp);
<a name="l00302"></a>00302   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;scale);DSDPCHKERR(info);
<a name="l00303"></a>00303   info=DSDPVecGetR(dsdp-&gt;y,&amp;rr); DSDPCHKERR(info);
<a name="l00304"></a>00304   info=<a class="code" href="group__DSDPSolution.html#ga0126bd2c9da5d8a7ca0806bd8dd8e56f" title="Copy the objective value (P).">DSDPGetPObjective</a>(dsdp,&amp;pobj);DSDPCHKERR(info);
<a name="l00305"></a>00305   info=<a class="code" href="group__DSDPSolution.html#ga2752cf39e1774945b484bddf7c2a5ef2" title="Copy the objective value (D).">DSDPGetDObjective</a>(dsdp,&amp;dobj);DSDPCHKERR(info);
<a name="l00306"></a>00306   err[0]=dsdp-&gt;perror;
<a name="l00307"></a>00307   err[1]=0;
<a name="l00308"></a>00308   err[2]=fabs(rr)/scale;
<a name="l00309"></a>00309   err[3]=0;
<a name="l00310"></a>00310   err[4]=pobj - dobj;
<a name="l00311"></a>00311   err[5]=dsdp-&gt;tracexs/scale;
<a name="l00312"></a>00312 
<a name="l00313"></a>00313   err[2] /= (1.0+dsdp-&gt;cnorm);
<a name="l00314"></a>00314   info=DSDPVecCopy(dsdp-&gt;b,dsdp-&gt;ytemp);DSDPCHKERR(info);
<a name="l00315"></a>00315   info=DSDPVecSetC(dsdp-&gt;ytemp,0);DSDPCHKERR(info);
<a name="l00316"></a>00316   info=DSDPVecSetR(dsdp-&gt;ytemp,0);DSDPCHKERR(info);
<a name="l00317"></a>00317   info=DSDPVecNormInfinity(dsdp-&gt;ytemp,&amp;bnorm);
<a name="l00318"></a>00318   err[0]=dsdp-&gt;perror/(1.0+bnorm);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320   err[4]=(err[4])/(1.0+fabs(pobj)+fabs(dobj));
<a name="l00321"></a>00321   err[5]=(err[5])/(1.0+fabs(pobj)+fabs(dobj));
<a name="l00322"></a>00322   DSDPFunctionReturn(0);
<a name="l00323"></a>00323 }
<a name="l00324"></a>00324 
<a name="l00341"></a>00341 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00342"></a>00342 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetPInfeasibility&quot;</span>
<a name="l00343"></a><a class="code" href="group__DSDPConverge.html#ga88aa3c65b2eb3699f6c2d203c3f11963">00343</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPConverge.html#ga88aa3c65b2eb3699f6c2d203c3f11963" title="Copy the infeasibility in (P).">DSDPGetPInfeasibility</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">double</span> *pperror){ 
<a name="l00344"></a>00344   DSDPFunctionBegin;
<a name="l00345"></a>00345   DSDPValid(dsdp);
<a name="l00346"></a>00346   <span class="keywordflow">if</span> (pperror) *pperror=dsdp-&gt;pinfeas;
<a name="l00347"></a>00347   DSDPFunctionReturn(0);
<a name="l00348"></a>00348 }
<a name="l00349"></a>00349 
<a name="l00363"></a>00363 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPSetPTolerance&quot;</span>
<a name="l00365"></a><a class="code" href="group__DSDPConverge.html#gad0a3f0df89bd8b3e4b7fb1f6c738d330">00365</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPConverge.html#gad0a3f0df89bd8b3e4b7fb1f6c738d330" title="Classify (P) as feasible only if the infeasibility is less than this tolerance.">DSDPSetPTolerance</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> inftol){ 
<a name="l00366"></a>00366   DSDPFunctionBegin;
<a name="l00367"></a>00367   DSDPValid(dsdp);
<a name="l00368"></a>00368   <span class="keywordflow">if</span> (inftol &gt; 0) dsdp-&gt;pinfeastol  = inftol;
<a name="l00369"></a>00369   DSDPLogInfo(0,2,<span class="stringliteral">&quot;Set P Infeasibility Tolerance: %4.4e\n&quot;</span>,inftol);
<a name="l00370"></a>00370   DSDPFunctionReturn(0);
<a name="l00371"></a>00371 }
<a name="l00372"></a>00372 
<a name="l00384"></a>00384 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetPTolerance&quot;</span>
<a name="l00386"></a><a class="code" href="group__DSDPConverge.html#ga8c3bf97d823880a151321f7c7c43aaf8">00386</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPConverge.html#ga8c3bf97d823880a151321f7c7c43aaf8" title="Copy the feasibility tolerance.">DSDPGetPTolerance</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> *inftol){ 
<a name="l00387"></a>00387   DSDPFunctionBegin;
<a name="l00388"></a>00388   DSDPValid(dsdp);
<a name="l00389"></a>00389   <span class="keywordflow">if</span> (inftol) *inftol=dsdp-&gt;pinfeastol;
<a name="l00390"></a>00390   DSDPFunctionReturn(0);
<a name="l00391"></a>00391 }
<a name="l00392"></a>00392 
<a name="l00393"></a>00393 
<a name="l00407"></a>00407 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPSetRTolerance&quot;</span>
<a name="l00409"></a><a class="code" href="group__DSDPConverge.html#ga8fa9a4a362aaa64e12538a55f215e8ce">00409</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPConverge.html#ga8fa9a4a362aaa64e12538a55f215e8ce" title="Classify (D) as feasible only if the variable r is less than this tolerance.">DSDPSetRTolerance</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> inftol){ 
<a name="l00410"></a>00410   DSDPFunctionBegin;
<a name="l00411"></a>00411   DSDPValid(dsdp);
<a name="l00412"></a>00412   <span class="keywordflow">if</span> (inftol &gt; 0) dsdp-&gt;dinfeastol  = inftol;
<a name="l00413"></a>00413   DSDPLogInfo(0,2,<span class="stringliteral">&quot;Set D Infeasibility Tolerance: %4.4e\n&quot;</span>,inftol);
<a name="l00414"></a>00414   DSDPFunctionReturn(0);
<a name="l00415"></a>00415 }
<a name="l00416"></a>00416 
<a name="l00432"></a>00432 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetRTolerance&quot;</span>
<a name="l00434"></a><a class="code" href="group__DSDPConverge.html#ga48cc08979850c048b38d7f1fd423deec">00434</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPConverge.html#ga48cc08979850c048b38d7f1fd423deec" title="Copy the maximum infeasibility allowed (D).">DSDPGetRTolerance</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> *inftol){ 
<a name="l00435"></a>00435   DSDPFunctionBegin;
<a name="l00436"></a>00436   DSDPValid(dsdp);
<a name="l00437"></a>00437   *inftol=dsdp-&gt;dinfeastol;
<a name="l00438"></a>00438   DSDPFunctionReturn(0);
<a name="l00439"></a>00439 }
<a name="l00440"></a>00440 
<a name="l00453"></a>00453 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00454"></a>00454 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetYMakeX&quot;</span>
<a name="l00455"></a><a class="code" href="group__DSDPSolver.html#gaedd5042b277efcd2774898fbf3bdd860">00455</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolver.html#gaedd5042b277efcd2774898fbf3bdd860" title="Copies the variables y used to construct X into an array.">DSDPGetYMakeX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> y[], <span class="keywordtype">int</span> m){ 
<a name="l00456"></a>00456   <span class="keywordtype">int</span> i,info;
<a name="l00457"></a>00457   <span class="keywordtype">double</span> scale,*yy;
<a name="l00458"></a>00458   DSDPFunctionBegin;
<a name="l00459"></a>00459   DSDPValid(dsdp);
<a name="l00460"></a>00460   <span class="keywordflow">if</span> (dsdp-&gt;m &lt; m-1) DSDPFunctionReturn(1);
<a name="l00461"></a>00461   <span class="keywordflow">if</span> (dsdp-&gt;m &gt; m) DSDPFunctionReturn(1);
<a name="l00462"></a>00462   info=DSDPVecCopy(dsdp-&gt;xmaker[0].y,dsdp-&gt;ytemp); DSDPCHKERR(info);
<a name="l00463"></a>00463   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;scale);DSDPCHKERR(info);
<a name="l00464"></a>00464   info=DSDPVecGetArray(dsdp-&gt;ytemp,&amp;yy);DSDPCHKERR(info);
<a name="l00465"></a>00465   <span class="keywordflow">for</span> (i=0;i&lt;m;i++) y[i]=yy[i+1]/scale;
<a name="l00466"></a>00466   info=DSDPVecRestoreArray(dsdp-&gt;ytemp,&amp;yy);DSDPCHKERR(info);
<a name="l00467"></a>00467   DSDPFunctionReturn(0);
<a name="l00468"></a>00468 }
<a name="l00469"></a>00469 
<a name="l00481"></a>00481 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00482"></a>00482 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetDYMakeX&quot;</span>
<a name="l00483"></a><a class="code" href="group__DSDPSolver.html#ga79f8ff912fa519dea6ad93f06518b544">00483</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolver.html#ga79f8ff912fa519dea6ad93f06518b544" title="Copies the variables dy used to construct X into an array.">DSDPGetDYMakeX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> dy[], <span class="keywordtype">int</span> m){ 
<a name="l00484"></a>00484   <span class="keywordtype">int</span> i,info;
<a name="l00485"></a>00485   <span class="keywordtype">double</span> scale,*yy;
<a name="l00486"></a>00486   DSDPFunctionBegin;
<a name="l00487"></a>00487   DSDPValid(dsdp);
<a name="l00488"></a>00488   <span class="keywordflow">if</span> (dsdp-&gt;m &lt; m-1) DSDPFunctionReturn(1);
<a name="l00489"></a>00489   <span class="keywordflow">if</span> (dsdp-&gt;m &gt; m) DSDPFunctionReturn(1);
<a name="l00490"></a>00490   info=DSDPVecCopy(dsdp-&gt;xmaker[0].dy,dsdp-&gt;ytemp); DSDPCHKERR(info);
<a name="l00491"></a>00491   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;scale);DSDPCHKERR(info);
<a name="l00492"></a>00492   info=DSDPVecGetArray(dsdp-&gt;ytemp,&amp;yy);DSDPCHKERR(info);
<a name="l00493"></a>00493   <span class="keywordflow">for</span> (i=0;i&lt;m;i++) dy[i]=yy[i+1]/scale;
<a name="l00494"></a>00494   info=DSDPVecRestoreArray(dsdp-&gt;ytemp,&amp;yy);DSDPCHKERR(info);
<a name="l00495"></a>00495   DSDPFunctionReturn(0);
<a name="l00496"></a>00496 }
<a name="l00497"></a>00497 
<a name="l00509"></a>00509 <span class="preprocessor">#undef __FUNCT__  </span>
<a name="l00510"></a>00510 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ &quot;DSDPGetMuMakeX&quot;</span>
<a name="l00511"></a><a class="code" href="group__DSDPSolver.html#ga44ba54bc182256482af4ca016c60e435">00511</a> <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="group__DSDPSolver.html#ga44ba54bc182256482af4ca016c60e435" title="Copies the value of mu used to construct X.">DSDPGetMuMakeX</a>(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<span class="keywordtype">double</span> *mu){ 
<a name="l00512"></a>00512   <span class="keywordtype">int</span> info;
<a name="l00513"></a>00513   <span class="keywordtype">double</span> scale;
<a name="l00514"></a>00514   DSDPFunctionBegin;
<a name="l00515"></a>00515   DSDPValid(dsdp);
<a name="l00516"></a>00516   info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&amp;scale);DSDPCHKERR(info);
<a name="l00517"></a>00517   *mu=dsdp-&gt;xmaker[0].mu/scale;
<a name="l00518"></a>00518   DSDPFunctionReturn(0);
<a name="l00519"></a>00519 }
<a name="l00520"></a>00520 
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Jun 8 2011 for DSDP by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>