<!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: examples/readsdpa.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 Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data 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 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_0a4f0a65bb1e36a4913e16ae18cb477d.html">examples</a> </li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <div class="title">readsdpa.c</div> </div> </div> <div class="contents"> <a href="readsdpa_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 "<a class="code" href="dsdp5_8h.html" title="The API to DSDP for those applications using DSDP as a subroutine library.">dsdp5.h</a>"</span> <a name="l00002"></a>00002 <span class="preprocessor">#include <string.h></span> <a name="l00003"></a>00003 <span class="preprocessor">#include <stdio.h></span> <a name="l00004"></a>00004 <span class="preprocessor">#include <math.h></span> <a name="l00005"></a>00005 <span class="preprocessor">#include <stdlib.h></span> <a name="l00006"></a>00006 <a name="l00011"></a>00011 <span class="keyword">static</span> <span class="keywordtype">char</span> help[]=<span class="stringliteral">"\</span> <a name="l00012"></a>00012 <span class="stringliteral">DSDP Usage: dsdp5 filename <sdpa format file> \n\</span> <a name="l00013"></a>00013 <span class="stringliteral"> -print <10> - print information at each k iteration\n\</span> <a name="l00014"></a>00014 <span class="stringliteral"> -save <Solution File in SDPA format> \n\</span> <a name="l00015"></a>00015 <span class="stringliteral"> -fout <filename> to print standard monitor to a file\n\</span> <a name="l00016"></a>00016 <span class="stringliteral"> -y0 <initial solution file> \n\</span> <a name="l00017"></a>00017 <span class="stringliteral"> -benchmark <file containing names of SDPA files> \n\</span> <a name="l00018"></a>00018 <span class="stringliteral"> -directory <directory containing benchmark SDPA files> \n\</span> <a name="l00019"></a>00019 <span class="stringliteral"> -suffix <add to each benchmark problem name> \n\</span> <a name="l00020"></a>00020 <span class="stringliteral"> -dloginfo <0> - print more information for higher numbers \n\</span> <a name="l00021"></a>00021 <span class="stringliteral"> -dlogsummary <1> - print timing information \n\</span> <a name="l00022"></a>00022 <span class="stringliteral"> -help for this help message\n"</span>; <a name="l00023"></a>00023 <a name="l00024"></a>00024 <span class="keyword">static</span> <span class="keywordtype">int</span> qusort(<span class="keywordtype">int</span>[],<span class="keywordtype">int</span>[],<span class="keywordtype">int</span>[],<span class="keywordtype">double</span>[],<span class="keywordtype">int</span>,<span class="keywordtype">int</span>); <a name="l00025"></a>00025 <span class="keyword">static</span> <span class="keywordtype">int</span> partition(<span class="keywordtype">int</span>[],<span class="keywordtype">int</span>[],<span class="keywordtype">int</span>[],<span class="keywordtype">double</span>[],<span class="keywordtype">int</span>, <span class="keywordtype">int</span>); <a name="l00026"></a>00026 <span class="keyword">static</span> <span class="keywordtype">int</span> Parseline(<span class="keywordtype">char</span> *,<span class="keywordtype">int</span> *,<span class="keywordtype">int</span> *,<span class="keywordtype">int</span> *,<span class="keywordtype">int</span> *,<span class="keywordtype">double</span> *, <span class="keywordtype">int</span> *); <a name="l00027"></a>00027 <span class="keyword">static</span> <span class="keywordtype">int</span> ReadInitialPoint(<span class="keywordtype">char</span>*, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>[]); <a name="l00028"></a>00028 <span class="keyword">static</span> <span class="keywordtype">int</span> TCheckArgs0(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a>,<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">char</span> *[]); <a name="l00029"></a>00029 <span class="keyword">static</span> <span class="keywordtype">int</span> TCheckArgs(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a>,<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">char</span> *[]); <a name="l00030"></a>00030 <span class="keyword">static</span> <span class="keywordtype">int</span> CheckForConstantMat(<span class="keywordtype">double</span>[],<span class="keywordtype">int</span>, <span class="keywordtype">int</span>); <a name="l00031"></a>00031 <span class="keyword">static</span> <span class="keywordtype">int</span> CountNonzeroMatrices(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>[],<span class="keywordtype">int</span>[], <span class="keywordtype">int</span>*); <a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="keyword">typedef</span> <span class="keyword">struct</span>{ <a name="l00034"></a>00034 <span class="keywordtype">char</span> sformat; <a name="l00035"></a>00035 <span class="keywordtype">int</span> blocksize; <a name="l00036"></a>00036 } DBlock; <a name="l00037"></a>00037 <a name="l00038"></a>00038 <span class="keyword">typedef</span> <span class="keyword">struct</span>{ <a name="l00039"></a>00039 <span class="keywordtype">int</span> *block,*constraint,*matind; <a name="l00040"></a>00040 <span class="keywordtype">double</span>*nnz; <a name="l00041"></a>00041 <span class="keywordtype">char</span> *sformat; <a name="l00042"></a>00042 <span class="keywordtype">int</span> totalnonzeros; <a name="l00043"></a>00043 <span class="keywordtype">double</span> *dobj,*y0; <a name="l00044"></a>00044 <span class="keywordtype">char</span> *conetypes; <a name="l00045"></a>00045 <span class="keywordtype">int</span> *blocksizes; <a name="l00046"></a>00046 <span class="keywordtype">int</span> m; <span class="keywordtype">int</span> n; <span class="keywordtype">int</span> nblocks; <a name="l00047"></a>00047 <span class="keywordtype">int</span> lpn,lpspot,lpblock,lpnnz; <a name="l00048"></a>00048 <span class="keywordtype">int</span> *lpi,*lui,*cmap; <a name="l00049"></a>00049 <span class="keywordtype">double</span> cnorm; <a name="l00050"></a>00050 <span class="keywordtype">double</span> fixedvari; <a name="l00051"></a>00051 <span class="keywordtype">double</span> fixedvard,xout; <a name="l00052"></a>00052 } DSDPData; <a name="l00053"></a>00053 <a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span> ReadSDPA2(<span class="keywordtype">char</span>*,DSDPData*); <a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span> GetMarkers(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>*, <span class="keywordtype">int</span>*, <span class="keywordtype">int</span>*); <a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">int</span> ComputeY0(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a>,DSDPData); <a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> rank=0; <a name="l00058"></a>00058 <span class="keywordtype">int</span> <a class="code" href="group__Examples.html#gad55ed549a46bd8ac3aaa4488d7255f39" title="Read SDPA formatted file and solve the semidefinite program.">ReadSDPAFile</a>(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> *argv[]); <a name="l00059"></a>00059 <a name="l00060"></a>00060 <span class="preprocessor">#define CHKDATA(a,b,c) { if (c){ printf("Possible problem in variable %d, block %d. \n",a+1,b+1);} }</span> <a name="l00061"></a>00061 <span class="preprocessor"></span> <a name="l00062"></a>00062 <a name="l00063"></a>00063 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "main"</span> <a name="l00065"></a>00065 <span class="preprocessor"></span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> *argv[]){ <a name="l00066"></a>00066 <span class="keywordtype">int</span> info; <a name="l00067"></a>00067 info=<a class="code" href="group__Examples.html#gad55ed549a46bd8ac3aaa4488d7255f39" title="Read SDPA formatted file and solve the semidefinite program.">ReadSDPAFile</a>(argc,argv); <a name="l00068"></a>00068 <span class="keywordflow">return</span> info; <a name="l00069"></a>00069 } <a name="l00070"></a>00070 <a name="l00071"></a>00071 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "ReadSDPAFile"</span> <a name="l00073"></a>00073 <span class="preprocessor"></span> <a name="l00080"></a><a class="code" href="group__Examples.html#gad55ed549a46bd8ac3aaa4488d7255f39">00080</a> <span class="keywordtype">int</span> <a class="code" href="group__Examples.html#gad55ed549a46bd8ac3aaa4488d7255f39" title="Read SDPA formatted file and solve the semidefinite program.">ReadSDPAFile</a>(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> *argv[]){ <a name="l00081"></a>00081 <a name="l00082"></a>00082 <span class="keywordtype">int</span> i,j,m,n,np,its,info; <a name="l00083"></a>00083 <span class="keywordtype">int</span> spot,ijnnz,nzmats,sdpnmax,sdpn,stat1,printsummary=1; <a name="l00084"></a>00084 <span class="keywordtype">int</span> runbenchmark=0,saveit=0,justone=1,fileout=0; <a name="l00085"></a>00085 <span class="keywordtype">double</span> t1,t2,t3,t4,t5,dd,yhigh; <a name="l00086"></a>00086 <span class="keywordtype">double</span> derr[6],dnorm[3]; <a name="l00087"></a>00087 <span class="keywordtype">double</span> ddobj,ppobj,scl,dpot; <a name="l00088"></a>00088 <span class="keywordtype">char</span> problemname[100],thisline[100], filename[300],savefile[100]; <a name="l00089"></a>00089 <span class="keywordtype">char</span> directory[100]=<span class="stringliteral">"/home/benson/sdpexamples/sdplib/"</span>; <a name="l00090"></a>00090 <span class="keywordtype">char</span> outputfile[50]=<span class="stringliteral">""</span>,suffix[20]=<span class="stringliteral">".dat-s"</span>, tablename[20]=<span class="stringliteral">"results-dsdp-5.8"</span>; <a name="l00091"></a>00091 <span class="keywordtype">char</span> success=<span class="charliteral">'s'</span>,sformat; <a name="l00092"></a>00092 FILE *fp1=0,*fp2=0,*fout; <a name="l00093"></a>00093 DSDPData dddd; <a name="l00094"></a>00094 <a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp; <a name="l00095"></a>00095 <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3a" title="There are many reasons to terminate the solver.">DSDPTerminationReason</a> reason; <a name="l00096"></a>00096 <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="l00097"></a>00097 <a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone=0; <a name="l00098"></a>00098 <a class="code" href="dsdp5_8h.html#ab974b47d582ebca94a1486e5bb0cdd18" title="The LPCone object points to blocks of data that specify linear scalar inequality constraints.">LPCone</a> lpcone=0; <a name="l00099"></a>00099 <span class="keywordtype">int</span> *ittt,sspot,ione=1; <a name="l00100"></a>00100 <a name="l00101"></a>00101 <span class="keywordflow">if</span> (argc<2){ printf(<span class="stringliteral">"%s"</span>,help); <a class="code" href="group__DSDPSolver.html#gac2a0ebe706b56fd4cf7f9f8b3d205efe" title="Print runtime options;.">DSDPPrintOptions</a>(); <span class="keywordflow">return</span>(0); } <a name="l00102"></a>00102 <span class="keywordflow">for</span> (i=0; i<argc; i++){ <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-help"</span>,5)==0){ <a name="l00103"></a>00103 printf(<span class="stringliteral">"%s"</span>,help); <a class="code" href="group__DSDPSolver.html#gac2a0ebe706b56fd4cf7f9f8b3d205efe" title="Print runtime options;.">DSDPPrintOptions</a>(); <span class="keywordflow">return</span>(0);}} <a name="l00104"></a>00104 <span class="keywordflow">for</span> (i=1; i<argc; i++){ printf(<span class="stringliteral">"%s "</span>,argv[i]); } printf(<span class="stringliteral">"\n"</span>); <a name="l00105"></a>00105 <span class="keywordflow">for</span> (i=1; i<argc-1; i++){ <span class="comment">/* Are we reading a file with a lot of problem names? */</span> <a name="l00106"></a>00106 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-benchmark"</span>,8)==0){ <a name="l00107"></a>00107 strncpy(thisline,argv[i+1],90); fp1=fopen(thisline,<span class="stringliteral">"r"</span>);runbenchmark=1; justone=0; <a name="l00108"></a>00108 }; <a name="l00109"></a>00109 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-directory"</span>,8)==0){strncpy(directory,argv[i+1],90);} <a name="l00110"></a>00110 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-table"</span>,4)==0){strncpy(tablename,argv[i+1],20);}; <a name="l00111"></a>00111 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-suffix"</span>,4)==0){strncpy(suffix,argv[i+1],20);}; <a name="l00112"></a>00112 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-save"</span>,5)==0){ strncpy(savefile,argv[i+1],40);saveit=1;}; <a name="l00113"></a>00113 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-dlogsummary"</span>,8)==0){printsummary=atoi(argv[i+1]);} <a name="l00114"></a>00114 <span class="keywordflow">if</span> (rank==0&&strncmp(argv[i],<span class="stringliteral">"-fout"</span>,5)==0){ strncpy(outputfile,argv[i+1],45);fileout=1;}; <a name="l00115"></a>00115 } <a name="l00116"></a>00116 <a name="l00117"></a>00117 <span class="keywordflow">if</span> (runbenchmark || argc>2){ <a name="l00118"></a>00118 fp2=fopen(tablename,<span class="stringliteral">"a"</span>); <a name="l00119"></a>00119 <span class="keywordflow">for</span> (i=1; i<argc; i++){ fprintf(fp2,<span class="stringliteral">"%s "</span>,argv[i]); } fprintf(fp2,<span class="stringliteral">"\n"</span>); <a name="l00120"></a>00120 fclose(fp2); <a name="l00121"></a>00121 } <a name="l00122"></a>00122 <a name="l00123"></a>00123 <span class="keywordflow">while</span> ((runbenchmark && !feof(fp1)) || justone==1){ <a name="l00124"></a>00124 justone=0; <a name="l00125"></a>00125 <span class="keywordflow">if</span> (runbenchmark){ <span class="comment">/* Get filename with the data */</span> <a name="l00126"></a>00126 fgets(thisline,100,fp1); <span class="keywordflow">if</span> (sscanf(thisline,<span class="stringliteral">"%s"</span>,problemname)<1) <span class="keywordflow">break</span>; <a name="l00127"></a>00127 strncpy(filename,directory,90); strncat(filename,problemname,90);strncat(filename,suffix,90); <a name="l00128"></a>00128 printf(<span class="stringliteral">"%s\n"</span>,problemname); <a name="l00129"></a>00129 } <span class="keywordflow">else</span> { <a name="l00130"></a>00130 strncpy(filename,argv[1],90); <a name="l00131"></a>00131 strncpy(problemname,argv[1],90); <a name="l00132"></a>00132 } <a name="l00133"></a>00133 <a name="l00134"></a>00134 <span class="keywordflow">if</span> (rank==0 && fileout){ <a name="l00135"></a>00135 dsdpoutputfile=fopen(outputfile,<span class="stringliteral">"a"</span>); <a name="l00136"></a>00136 fprintf(dsdpoutputfile,<span class="stringliteral">"%s\n"</span>,problemname); <a name="l00137"></a>00137 } <span class="keywordflow">else</span> {dsdpoutputfile=0;fileout=0;} <a name="l00138"></a>00138 DSDPTime(&t1); <a name="l00139"></a>00139 <a name="l00140"></a>00140 info=ReadSDPA2(filename, &dddd); m=dddd.m; <a name="l00141"></a>00141 <span class="keywordflow">if</span> (info){ printf(<span class="stringliteral">"Problem reading SDPA file\n"</span>); <span class="keywordflow">return</span> 1;} <a name="l00142"></a>00142 DSDPTime(&t2); <a name="l00143"></a>00143 <span class="keywordflow">if</span> (printsummary && rank==0){ <a name="l00144"></a>00144 printf(<span class="stringliteral">"\nVariables %d \n"</span>,dddd.m); <a name="l00145"></a>00145 printf(<span class="stringliteral">"Matrix Blocks: %d, "</span>,dddd.nblocks); <a name="l00146"></a>00146 printf(<span class="stringliteral">"Total Number of Constraints: %d \n"</span>,dddd.n); <a name="l00147"></a>00147 printf(<span class="stringliteral">"Nonzeros in Constraints: %d\n\n"</span>,dddd.totalnonzeros); <a name="l00148"></a>00148 printf(<span class="stringliteral">"Read Data File into Buffer: %4.3e seconds\n"</span>,t2-t1); <a name="l00149"></a>00149 } <a name="l00150"></a>00150 <a name="l00151"></a>00151 <span class="keywordflow">for</span> (i=0; i<argc-1; i++){ <a name="l00152"></a>00152 <span class="keywordflow">if</span> (strncmp(argv[i],<span class="stringliteral">"-dloginfo"</span>,8)==0){ info=DSDPLogInfoAllow(atoi(argv[i+1]),0);}; <a name="l00153"></a>00153 } <a name="l00154"></a>00154 <a name="l00155"></a>00155 info = <a class="code" href="group__DSDPBasic.html#gaa32509ded8359326d02782adb91c745a" title="Create a DSDP solver. FIRST DSDP routine!">DSDPCreate</a>(dddd.m,&dsdp); <a name="l00156"></a>00156 info = DSDPCreateSDPCone(dsdp,dddd.nblocks,&sdpcone); <a name="l00157"></a>00157 <span class="comment">/* Set Dual objective vector */</span> <a name="l00158"></a>00158 <span class="keywordflow">for</span> (i=0;i<m;i++){info = <a class="code" href="group__DSDPBasic.html#ga7e1b78dc7d7407fcf84e05b9c42fc72c" title="Set the objective vector b in (D).">DSDPSetDualObjective</a>(dsdp,i+1,dddd.dobj[i]);} <a name="l00159"></a>00159 <a name="l00160"></a>00160 <span class="comment">/* Set initial point */</span> <a name="l00161"></a>00161 <span class="keywordflow">for</span> (i=0; i<m; i++) <a name="l00162"></a>00162 <span class="keywordflow">if</span> (dddd.dobj[i]> 0.0) dddd.y0[i]=-0.0; <span class="keywordflow">else</span> dddd.y0[i]=0.0; <a name="l00163"></a>00163 <span class="keywordflow">for</span> (i=0; i<m; i++){info = <a class="code" href="group__DSDPSolution.html#gacf5a2bd7ecb03b319caa22e545ef8e01" title="Set the initial values of variables y in (D).">DSDPSetY0</a>(dsdp,i+1,dddd.y0[i]);} <a name="l00164"></a>00164 info=ComputeY0(dsdp,dddd); <a name="l00165"></a>00165 <span class="keywordflow">if</span> (dddd.fixedvari){ <a name="l00166"></a>00166 info = <a class="code" href="group__DSDPSolution.html#gacf5a2bd7ecb03b319caa22e545ef8e01" title="Set the initial values of variables y in (D).">DSDPSetY0</a>(dsdp,(<span class="keywordtype">int</span>)dddd.fixedvari,dddd.fixedvard); <a name="l00167"></a>00167 printf(<span class="stringliteral">"Fixed: %2.0f %4.2f ?\n"</span>,dddd.fixedvari,dddd.fixedvard); <a name="l00168"></a>00168 info=<a class="code" href="group__DSDPSolver.html#gabaa520cba1ca164175fb45cff1b2d6e3" title="Fix variable y to exact values.">DSDPSetFixedVariables</a>(dsdp,&dddd.fixedvari,&dddd.fixedvard,&dddd.xout,ione); <a name="l00169"></a>00169 } <a name="l00170"></a>00170 <a name="l00171"></a>00171 spot=0;ijnnz=0;np=0;sdpnmax=1;sdpn=0;stat1=1; <a name="l00172"></a>00172 <span class="comment">/* Insert the SDP data */</span> <a name="l00173"></a>00173 <span class="keywordflow">for</span> (j=0;j<dddd.nblocks; j++){ <a name="l00174"></a>00174 <span class="keywordflow">if</span> (dddd.conetypes[j]==<span class="charliteral">'S'</span>){ <a name="l00175"></a>00175 n=dddd.blocksizes[j]; <a name="l00176"></a>00176 sformat=dddd.sformat[j]; <a name="l00177"></a>00177 info=CountNonzeroMatrices(j+1,dddd.block+spot,dddd.constraint+spot,&nzmats); <a name="l00178"></a>00178 info=<a class="code" href="group__SDPRoutines.html#ga0c3a5c6eee6aca0ab0c222fbfcca1d19" title="Set the dimension of one block in the semidefinite cone.">SDPConeSetBlockSize</a>(sdpcone,j,n); DSDPCHKERR(info); <a name="l00179"></a>00179 info=<a class="code" href="group__SDPRoutines.html#ga40728695e4c841900c02c615a8d96ab0" title="Set the number of nonzero matrices in a block of the semidefinite cone.">SDPConeSetSparsity</a>(sdpcone,j,nzmats); DSDPCHKERR(info); <a name="l00180"></a>00180 info=<a class="code" href="group__SDPData.html#gadb309e9fe9d1cbc1a0e3a30d051be2aa" title="Set the dense storage format of a block in the semidefinite cone.">SDPConeSetStorageFormat</a>(sdpcone,j,sformat); DSDPCHKERR(info); <a name="l00181"></a>00181 np+=n; sdpn+=n; <a name="l00182"></a>00182 <span class="keywordflow">if</span> (sdpnmax<n) sdpnmax=n; <a name="l00183"></a>00183 <span class="keywordflow">if</span> (stat1<nzmats) stat1=nzmats; <a name="l00184"></a>00184 <span class="keywordflow">for</span> (i=0; i<=m; i++){ <a name="l00185"></a>00185 info=GetMarkers(j+1,i,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00186"></a>00186 <span class="keywordflow">if</span> (0==1){ <a name="l00187"></a>00187 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ijnnz==0 ){ <span class="comment">/* info=DSDPSetZeroMat(dsdp,j,i,n); */</span> <a name="l00188"></a>00188 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (CheckForConstantMat(dddd.nnz+spot,ijnnz,n)){ <a name="l00189"></a>00189 info=<a class="code" href="group__SDPData.html#ga3af8e9398c77b07799bd3cfe29faa070" title="Set a matrix whose elements are all the same.">SDPConeSetConstantMat</a>(sdpcone,j,i,n,dddd.nnz[spot+1]);CHKDATA(i,j,info); <a name="l00190"></a>00190 <span class="keywordflow">if</span>(sformat==<span class="charliteral">'P'</span>){info=<a class="code" href="group__SDPRoutines.html#gaa3db1133fbf2edbfc1e48521bb367705" title="Provide an array for the SDPCone object can use to store dense matrices.">SDPConeSetXArray</a>(sdpcone,j,n,dddd.nnz+spot,n*(n+1)/2);} <a name="l00191"></a>00191 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sformat==<span class="charliteral">'P'</span> && ijnnz==n*(n+1)/2 ){ <span class="comment">/* check for dense matrix */</span> <a name="l00192"></a>00192 info=<a class="code" href="group__SDPBasic.html#ga9e2cd5d5922b5e45c48ec58c7345def0" title="Set a matrix in a dense format.">SDPConeSetADenseVecMat</a>(sdpcone,j,i,n,1.0,dddd.nnz+spot,ijnnz);CHKDATA(i,j,info); <a name="l00193"></a>00193 } <span class="keywordflow">else</span> { <span class="comment">/* sparse matrix */</span> <a name="l00194"></a>00194 info=<a class="code" href="group__SDPBasic.html#gaa6ed45b2539266f04bd4b8401aa89c06" title="Set data matrix in a sparse format.">SDPConeSetASparseVecMat</a>(sdpcone,j,i,n,1.0,0,dddd.matind+spot,dddd.nnz+spot,ijnnz);CHKDATA(i,j,info); <a name="l00195"></a>00195 } <a name="l00196"></a>00196 <span class="keywordflow">if</span> (0==1){ info=<a class="code" href="group__SDPBasic.html#ga66567faeecc4cb75f7ae3a3eed966bd4" title="Print a data matrix to the screen.">SDPConeViewDataMatrix</a>(sdpcone,j,i);} <a name="l00197"></a>00197 spot+=ijnnz; <a name="l00198"></a>00198 <span class="comment">/* SDPConeScaleBarrier(sdpcone,j,j+1.0); */</span> <a name="l00199"></a>00199 } <a name="l00200"></a>00200 <span class="keywordflow">if</span> (0==1){info=<a class="code" href="group__SDPData.html#gaafa7a20cefd79a41d5ba024227f96c85" title="Print the SDP cone to the screen in a second way.">SDPConeView2</a>(sdpcone);} <a name="l00201"></a>00201 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dddd.conetypes[j]==<span class="charliteral">'L'</span>){ <a name="l00202"></a>00202 info=<a class="code" href="group__LPRoutines.html#ga0d29bfae7b375bfb3bc8ccab769a4003" title="Create a new object for linear programs and scalar inequalities.">DSDPCreateLPCone</a>(dsdp,&lpcone); sformat=<span class="charliteral">'P'</span>; <a name="l00203"></a>00203 info=<a class="code" href="group__SDPData.html#gadb309e9fe9d1cbc1a0e3a30d051be2aa" title="Set the dense storage format of a block in the semidefinite cone.">SDPConeSetStorageFormat</a>(sdpcone,j,sformat); DSDPCHKERR(info); <a name="l00204"></a>00204 n=dddd.blocksizes[j]; <a name="l00205"></a>00205 np+=n; <a name="l00206"></a>00206 sspot=spot; <a name="l00207"></a>00207 DSDPCALLOC2(&ittt,<span class="keywordtype">int</span>,(m+2),&info); <a name="l00208"></a>00208 <span class="keywordflow">for</span> (i=0;i<=m;i++){ittt[i]=0;} <a name="l00209"></a>00209 <span class="keywordflow">for</span> (i=0;i<=m;i++){ <a name="l00210"></a>00210 info=GetMarkers(j+1,i,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00211"></a>00211 ittt[i+1]=ijnnz; spot+=ijnnz; <a name="l00212"></a>00212 } <a name="l00213"></a>00213 <span class="keywordflow">for</span> (i=1;i<=m;i++)ittt[i+1]+=ittt[i]; <a name="l00214"></a>00214 info=<a class="code" href="group__LPRoutines.html#gad0de1037f6c6d599c94d9b3c54a5b890" title="Set data into the LP cone.">LPConeSetData</a>(lpcone,n,ittt,dddd.matind+sspot,dddd.nnz+sspot);CHKDATA(i,0,info); <a name="l00215"></a>00215 <span class="keywordflow">if</span> (0==1){info=<a class="code" href="group__LPRoutines.html#ga9eff46728f001c00a0fb6ef11a5f7813" title="Print the data in the LP cone to the screen.">LPConeView</a>(lpcone);} <a name="l00216"></a>00216 <span class="keywordflow">if</span> (0==1){info=<a class="code" href="group__LPRoutines.html#ga68f95f33e6eea33133c5d4f31e85187c" title="Print the data in the LP cone to the screen.">LPConeView2</a>(lpcone);} <a name="l00217"></a>00217 <span class="comment">/* info=DSDPFree(&ittt); */</span> <a name="l00218"></a>00218 } <a name="l00219"></a>00219 } <a name="l00220"></a>00220 <span class="keywordflow">if</span> (0==1){ <a name="l00221"></a>00221 <a class="code" href="dsdp5_8h.html#a266598a85e3c9c12e8706e21cf7f0f45" title="The BCone object points to lower and upper bounds on the variable y in (D).">BCone</a> bcone; <a name="l00222"></a>00222 info=<a class="code" href="group__Bounds.html#ga66c37f394d6efb45e686aed600015d09" title="Create a new cone that represents bounds on the y variables.">DSDPCreateBCone</a>(dsdp, &bcone); <a name="l00223"></a>00223 info=<a class="code" href="group__Bounds.html#gade1222d9b36e71a1b9a97fb7ffc07e76" title="Set a surplus variable in constraint in (P).">BConeAllocateBounds</a>(bcone,2*m); <a name="l00224"></a>00224 <span class="keywordflow">for</span> (i=0;i<m;i++){ <a name="l00225"></a>00225 info=<a class="code" href="group__Bounds.html#ga28c140fa13c908eaae22fb4c087ea2ea" title="Set an upper bound on a variable y.">BConeSetUpperBound</a>(bcone,i+1,10); <a name="l00226"></a>00226 } <a name="l00227"></a>00227 <span class="keywordflow">for</span> (i=0;i<m;i++){ <a name="l00228"></a>00228 info=<a class="code" href="group__Bounds.html#ga297f00a5e6f5879e63d12eca63dbc715" title="Set a lower bound on a variable y.">BConeSetLowerBound</a>(bcone,i+1,-10); <a name="l00229"></a>00229 } <a name="l00230"></a>00230 } <a name="l00231"></a>00231 <a name="l00232"></a>00232 DSDPTime(&t3); <a name="l00233"></a>00233 <span class="keywordflow">if</span> (printsummary && rank==0){printf(<span class="stringliteral">"DSDP Set Data: %4.3e seconds\n"</span>,t3-t2);} <a name="l00234"></a>00234 <a name="l00235"></a>00235 its=(m-2)/sdpnmax; <a name="l00236"></a>00236 <span class="keywordflow">if</span> (np<100 && its==0) its=1; <a name="l00237"></a>00237 <span class="keywordflow">if</span> (its>=1) its++; <a name="l00238"></a>00238 its=its*its; <a name="l00239"></a>00239 <span class="keywordflow">if</span> (m<2000 && its>10) its=10; <a name="l00240"></a>00240 <span class="keywordflow">if</span> (its>12) its=12; <a name="l00241"></a>00241 <a name="l00242"></a>00242 info=<a class="code" href="group__DSDPSolver.html#ga903ff948f2ba766430ba3918b9447ee7" title="Reuse the Hessian of the barrier function multiple times at each DSDP iteration.">DSDPReuseMatrix</a>(dsdp,its); <a name="l00243"></a>00243 <a name="l00244"></a>00244 DSDPFREE(&dddd.blocksizes,&info); <a name="l00245"></a>00245 DSDPFREE(&dddd.sformat,&info); <a name="l00246"></a>00246 DSDPFREE(&dddd.dobj,&info); <a name="l00247"></a>00247 DSDPFREE(&dddd.y0,&info); <a name="l00248"></a>00248 DSDPFREE(&dddd.conetypes,&info); <a name="l00249"></a>00249 DSDPFREE(&dddd.constraint,&info); <a name="l00250"></a>00250 DSDPFREE(&dddd.block,&info); <a name="l00251"></a>00251 <a name="l00252"></a>00252 info=<a class="code" href="group__DSDPSolution.html#gae103a4b863adc10f37d2eda9f94a982b" title="Copy the norms of the data C, A, and b into an array.">DSDPGetDataNorms</a>(dsdp, dnorm); <a name="l00253"></a>00253 <span class="keywordflow">if</span> (dnorm[0]==0){ <a name="l00254"></a>00254 info=<a class="code" href="group__DSDPSolution.html#ga846e363115b1fba5622306efc2e0ba38" title="Set an initial value for the variable r in (DD)">DSDPSetR0</a>(dsdp,np); <a name="l00255"></a>00255 info=<a class="code" href="group__DSDPConverge.html#ga4c0fa6941c40cca7643c2f4a9ae813bf" title="Terminate the solver when the relative duality gap is less than this tolerance.">DSDPSetGapTolerance</a>(dsdp,1e-3); <a name="l00256"></a>00256 info=<a class="code" href="group__DSDPSolver.html#gad73a74d9d294e87b58ad3a7e939a43ad" title="Bound the variables y.">DSDPSetYBounds</a>(dsdp,-1.0,1.0); <a name="l00257"></a>00257 } <span class="keywordflow">else</span> { <a name="l00258"></a>00258 } <a name="l00259"></a>00259 info = TCheckArgs0(dsdp,sdpcone,dddd.m,argc,argv); <a name="l00260"></a>00260 info = TCheckArgs(dsdp,sdpcone,dddd.m,argc,argv); <a name="l00261"></a>00261 <a name="l00262"></a>00262 info = <a class="code" href="group__DSDPBasic.html#ga2bd311ea1ecad8f690255b8a35f694a0" title="Set up data structures in the solver and the cones associated with it.">DSDPSetup</a>(dsdp); <span class="keywordflow">if</span> (info){ printf(<span class="stringliteral">"\nProblem Setting problem. Likely insufficient memory\n"</span>); <span class="keywordflow">return</span> 1;} <a name="l00263"></a>00263 <span class="keywordflow">if</span> (0==1){info=<a class="code" href="group__SDPData.html#ga479e45b5543849df14aa0d1c56e25753" title="Check the matrix operations on a data matrix;.">SDPConeCheckData</a>(sdpcone);} <a name="l00264"></a>00264 <a name="l00265"></a>00265 <a name="l00266"></a>00266 DSDPTime(&t4); <a name="l00267"></a>00267 info=<a class="code" href="group__DSDPSolver.html#ga89e093b87698c2524d27fd97a8cbd3f6" title="Copy the internal scaling factor from the solver.">DSDPGetScale</a>(dsdp,&scl); <a name="l00268"></a>00268 info=<a class="code" href="group__DSDPSolver.html#ga0cc2e91620e27338d0a508d60f8761ce" title="Copy the potential parameter.">DSDPGetPotentialParameter</a>(dsdp,&dpot); <a name="l00269"></a>00269 info=<a class="code" href="group__DSDPSolver.html#gaf45e1f4f8329adb347b476d183d35885" title="Copy this parameter.">DSDPGetReuseMatrix</a>(dsdp,&its); <a name="l00270"></a>00270 <span class="keywordflow">if</span> (printsummary && rank==0){ <a name="l00271"></a>00271 printf(<span class="stringliteral">"DSDP Process Data: %4.3e seconds\n\n"</span>,t4-t3); <a name="l00272"></a>00272 printf(<span class="stringliteral">"Data Norms: C: %4.2e, A: %4.2e, b: %4.2e\n"</span>,dnorm[0],dnorm[1],dnorm[2]); <a name="l00273"></a>00273 printf(<span class="stringliteral">"Scale C: %4.2e\n\n"</span>,scl); <a name="l00274"></a>00274 printf(<span class="stringliteral">"Potential Parameter: %4.2f\n"</span>,dpot); <a name="l00275"></a>00275 printf(<span class="stringliteral">"Reapply Schur matrix: %d\n\n"</span>,its); <a name="l00276"></a>00276 } <a name="l00277"></a>00277 <span class="keywordflow">if</span> (0==1){info=<a class="code" href="group__Examples.html#ga3407a19db2d6789625316f4194072ff3" title="Print data in SDPA format to a file named "output.sdpa".">DSDPPrintData</a>(dsdp,sdpcone,lpcone);} <a name="l00278"></a>00278 <a name="l00279"></a>00279 info = <a class="code" href="group__DSDPBasic.html#gabf7f1440bad5dd2a609288912743c8e9" title="Apply DSDP to the problem.">DSDPSolve</a>(dsdp); <a name="l00280"></a>00280 <span class="keywordflow">if</span> (info){ printf(<span class="stringliteral">"\nNumerical errors encountered in DSDPSolve(). \n"</span>);} <a name="l00281"></a>00281 <a name="l00282"></a>00282 info=<a class="code" href="group__DSDPConverge.html#ga637bf541e030c5aef4d436a9792714a2" title="Copy the reason why the solver terminated.">DSDPStopReason</a>(dsdp,&reason); <a name="l00283"></a>00283 <span class="keywordflow">if</span> (reason!=<a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa7f8800e949dce9fa0f5e41b9bca69e02">DSDP_INFEASIBLE_START</a>){ <a name="l00284"></a>00284 info=<a class="code" href="group__DSDPBasic.html#gacd271769549030ce365597101946220b" title="Compute the X variables.">DSDPComputeX</a>(dsdp);DSDPCHKERR(info); <a name="l00285"></a>00285 } <a name="l00286"></a>00286 info=<a class="code" href="group__DSDPConverge.html#ga637bf541e030c5aef4d436a9792714a2" title="Copy the reason why the solver terminated.">DSDPStopReason</a>(dsdp,&reason); <a name="l00287"></a>00287 info=<a class="code" href="group__DSDPBasic.html#ga33e05559ab15ea40b1e9b31ecc206b3e" title="Solutions can be bounded, infeasible, or unbounded.">DSDPGetSolutionType</a>(dsdp,&pdfeasible); <a name="l00288"></a>00288 <a name="l00289"></a>00289 DSDPTime(&t5); <a name="l00290"></a>00290 <a name="l00291"></a>00291 info=<a class="code" href="group__DSDPSolution.html#ga2752cf39e1774945b484bddf7c2a5ef2" title="Copy the objective value (D).">DSDPGetDObjective</a>(dsdp,&ddobj); <a name="l00292"></a>00292 info=<a class="code" href="group__DSDPSolution.html#ga0126bd2c9da5d8a7ca0806bd8dd8e56f" title="Copy the objective value (P).">DSDPGetPObjective</a>(dsdp,&ppobj); <a name="l00293"></a>00293 info=<a class="code" href="group__DSDPSolution.html#ga563ea95890673182c1de4252cf3e5309" title="Copy six different error measurements into an array.">DSDPGetFinalErrors</a>(dsdp,derr); <a name="l00294"></a>00294 info=<a class="code" href="group__DSDPConverge.html#gaaeaa2ec0c50c43f4499aaffea692ede8" title="Copy the current iteration number.">DSDPGetIts</a>(dsdp,&its); <a name="l00295"></a>00295 <a name="l00296"></a>00296 success=<span class="charliteral">'s'</span>; <a name="l00297"></a>00297 <span class="keywordflow">if</span> (printsummary && rank==0){ <a name="l00298"></a>00298 <a name="l00299"></a>00299 <span class="keywordflow">if</span> (reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa9d1d9628ba1a342cc5403338bc84ae6b">DSDP_CONVERGED</a>){ <a name="l00300"></a>00300 printf(<span class="stringliteral">"DSDP Converged. \n"</span>); <a name="l00301"></a>00301 success=<span class="charliteral">'s'</span>; <a name="l00302"></a>00302 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa3cf44a69251d45275e6c6564f08b3e08">DSDP_UPPERBOUND</a> ){ <a name="l00303"></a>00303 printf(<span class="stringliteral">"DSDP Terminated Because Dual Objective Exceeded its Bound\n"</span>); <a name="l00304"></a>00304 success=<span class="charliteral">'c'</span>; <a name="l00305"></a>00305 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aaaae024f404b3e21b95c40583917f1c5f">DSDP_SMALL_STEPS</a> ){ <a name="l00306"></a>00306 printf(<span class="stringliteral">"DSDP Terminated Due to Small Steps\n"</span>); <a name="l00307"></a>00307 success=<span class="charliteral">'c'</span>; <a name="l00308"></a>00308 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa2bf71cc572ec2d45e18e8182a6341854">DSDP_MAX_IT</a>){ <a name="l00309"></a>00309 printf(<span class="stringliteral">"DSDP Terminated Due Maximum Number of Iterations\n"</span>); <a name="l00310"></a>00310 success=<span class="charliteral">'c'</span>; <a name="l00311"></a>00311 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa7f8800e949dce9fa0f5e41b9bca69e02">DSDP_INFEASIBLE_START</a>){ <a name="l00312"></a>00312 printf(<span class="stringliteral">"DSDP Terminated Due to Infeasible Starting Point\n"</span>); <a name="l00313"></a>00313 success=<span class="charliteral">'c'</span>; <a name="l00314"></a>00314 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa00cee4470de06c0e859c051ec0374788">DSDP_INDEFINITE_SCHUR_MATRIX</a>){ <a name="l00315"></a>00315 printf(<span class="stringliteral">"DSDP Terminated Due to Indefinite Schur Complement\n"</span>); <a name="l00316"></a>00316 success=<span class="charliteral">'c'</span>; <a name="l00317"></a>00317 } <span class="keywordflow">else</span> { <a name="l00318"></a>00318 printf(<span class="stringliteral">"DSDP Finished\n"</span>); <a name="l00319"></a>00319 success=<span class="charliteral">'c'</span>; <a name="l00320"></a>00320 } <a name="l00321"></a>00321 <a name="l00322"></a>00322 <span class="keywordflow">if</span> (pdfeasible == <a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90a0008f194b20fc02f61eca61fab25ed05">DSDP_UNBOUNDED</a> ){ <a name="l00323"></a>00323 printf(<span class="stringliteral">"DSDP Dual Unbounded, Primal Infeasible\n"</span>); <a name="l00324"></a>00324 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( pdfeasible == <a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90abb5750f090ec5d7e1d8c1aead6565a52">DSDP_INFEASIBLE</a> ){ <a name="l00325"></a>00325 printf(<span class="stringliteral">"DSDP Primal Unbounded, Dual Infeasible\n"</span>); <a name="l00326"></a>00326 } <a name="l00327"></a>00327 <a name="l00328"></a>00328 <a name="l00329"></a>00329 printf(<span class="stringliteral">"\nP Objective : %16.8e \n"</span>,ppobj); <a name="l00330"></a>00330 printf(<span class="stringliteral">"DSDP Solution: %16.8e \n\n"</span>,ddobj); <a name="l00331"></a>00331 printf(<span class="stringliteral">"DSDP Solve Time: %4.3e seconds\n"</span>,t5-t4); <a name="l00332"></a>00332 printf(<span class="stringliteral">"DSDP Preparation and Solve Time: %4.3e seconds\n\n"</span>,t5-t3); <a name="l00333"></a>00333 <a name="l00334"></a>00334 } <span class="keywordflow">else</span> { <a name="l00335"></a>00335 <span class="keywordflow">if</span> (reason == <a class="code" href="dsdpbasictypes_8h.html#a2a68c4cccb1289043bf9b59a58f55b3aa9d1d9628ba1a342cc5403338bc84ae6b">DSDP_CONVERGED</a>){success=<span class="charliteral">'s'</span>;} <span class="keywordflow">else</span> {success=<span class="charliteral">'c'</span>;} <a name="l00336"></a>00336 } <a name="l00337"></a>00337 <a name="l00338"></a>00338 <span class="keywordflow">if</span> (rank==0){ <a name="l00339"></a>00339 fp2=fopen(tablename,<span class="stringliteral">"a"</span>); <a name="l00340"></a>00340 <span class="keywordflow">if</span> (pdfeasible==<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90a0008f194b20fc02f61eca61fab25ed05">DSDP_UNBOUNDED</a>){ <a name="l00341"></a>00341 fprintf(fp2,<span class="stringliteral">" %-18s & %4d & %4d & infeasible & unbounded & %4.0e & %c & %3d & %6.2f \\\\\n"</span>,problemname,m,np,derr[0],success,its,t5-t3); <a name="l00342"></a>00342 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pdfeasible==<a class="code" href="dsdpbasictypes_8h.html#a7c124046b4ddae3d637157242af2df90abb5750f090ec5d7e1d8c1aead6565a52">DSDP_INFEASIBLE</a>){ <a name="l00343"></a>00343 fprintf(fp2,<span class="stringliteral">" %-18s & %4d & %4d & unbounded & infeasible & %4.0e & %c & %3d & %6.2f \\\\\n"</span>,problemname,m,np,derr[0],success,its,t5-t3); <a name="l00344"></a>00344 } <span class="keywordflow">else</span> { <a name="l00345"></a>00345 fprintf(fp2,<span class="stringliteral">" %-18s & %4d & %4d & %13.7f & %13.7f & %4.0e & %c & %3d & %6.2f \\\\\n"</span>,problemname,m,np,-ppobj,-ddobj,derr[0],success,its,t5-t3); <a name="l00346"></a>00346 } <a name="l00347"></a>00347 fclose(fp2); <a name="l00348"></a>00348 } <a name="l00349"></a>00349 <a name="l00350"></a>00350 <span class="keywordflow">if</span> (printsummary && rank==0){ <a name="l00351"></a>00351 <span class="comment">/* info=DSDPComputeMinimumXEigenvalue(dsdp,&derr[1]); */</span> <a name="l00352"></a>00352 printf(<span class="stringliteral">"\nP Infeasible: %8.2e \n"</span>,derr[0]); <a name="l00353"></a>00353 printf(<span class="stringliteral">"D Infeasible: %8.2e \n"</span>,derr[2]); <a name="l00354"></a>00354 printf(<span class="stringliteral">"Minimal P Eigenvalue: %6.2e \n"</span>,derr[1]); <a name="l00355"></a>00355 printf(<span class="stringliteral">"Minimal D Eigenvalue: 0.00 \n"</span>); <a name="l00356"></a>00356 printf(<span class="stringliteral">"Relative P - D Objective values: %4.2e \n"</span>,derr[4]); <a name="l00357"></a>00357 printf(<span class="stringliteral">"Relative X Dot S: %4.2e \n"</span>,derr[5]); <a name="l00358"></a>00358 info=<a class="code" href="group__DSDPSolver.html#gaeb2f494ff50c552de67a02bf68f7b47e" title="Copy the bounds on the variables y.">DSDPGetYBounds</a>(dsdp,&dd,&yhigh); <a name="l00359"></a>00359 info=<a class="code" href="group__DSDPSolution.html#ga1a3be937e209108fe9acd088508feb95" title="Copy the the infinity norm of the variables y.">DSDPGetYMaxNorm</a>(dsdp,&dd); <a name="l00360"></a>00360 printf(<span class="stringliteral">"\nMax Y: %10.8e, Bounded by %6.1e\n"</span>,dd,yhigh); <a name="l00361"></a>00361 info=<a class="code" href="group__DSDPSolution.html#ga2580bcdac912b6477f067a8ccbc801bc" title="Copy the trace of the variables X in (P).">DSDPGetTraceX</a>(dsdp,&dd); <a name="l00362"></a>00362 printf(<span class="stringliteral">"Trace X: %4.8e, "</span>,dd); <a name="l00363"></a>00363 info=<a class="code" href="group__DSDPSolver.html#gae27461735f62031b5fd794672b026b78" title="Copy the penalty parameter Gamma.">DSDPGetPenaltyParameter</a>(dsdp,&dd); <a name="l00364"></a>00364 printf(<span class="stringliteral">"Bounded by Penalty Parameter: %4.1e \n\n"</span>,dd); <a name="l00365"></a>00365 <a name="l00366"></a>00366 <span class="keywordflow">if</span> (printsummary){ DSDPEventLogSummary();} <a name="l00367"></a>00367 printf(<span class="stringliteral">"--- DSDP Finished ---\n\n"</span>); <a name="l00368"></a>00368 } <a name="l00369"></a>00369 <a name="l00370"></a>00370 <span class="keywordflow">if</span> (rank==0){ <a name="l00371"></a>00371 <span class="keywordflow">if</span> (saveit){ <a name="l00372"></a>00372 fout=fopen(savefile,<span class="stringliteral">"w"</span>); <a name="l00373"></a>00373 <span class="comment">/* fprintf(fout,"** %s \n",filename); Deleted */</span> <a name="l00374"></a>00374 info= <a class="code" href="group__Examples.html#ga716726788d17d15b6148571132c0dfa7" title="Print solution in SDPA format.">DSDPPrintSolution</a>(fout,dsdp,sdpcone,lpcone); <a name="l00375"></a>00375 <span class="keywordflow">if</span> (dddd.fixedvari){ <a name="l00376"></a>00376 sspot=dddd.nblocks+1,dd=dddd.xout; <a name="l00377"></a>00377 fprintf(fout,<span class="stringliteral">"1 %d 1 1 1.0e-11\n1 %d 2 2 1.0e-11\n"</span>,sspot,sspot); <a name="l00378"></a>00378 fprintf(fout,<span class="stringliteral">"2 %d 1 1 %12.8e\n"</span>,sspot,DSDPMax(1.0e-10,dd)); <a name="l00379"></a>00379 fprintf(fout,<span class="stringliteral">"2 %d 2 2 %12.8e\n"</span>,sspot,DSDPMax(1e-10,-dd)); <a name="l00380"></a>00380 } <a name="l00381"></a>00381 fclose(fout); <a name="l00382"></a>00382 } <a name="l00383"></a>00383 } <a name="l00384"></a>00384 <a name="l00385"></a>00385 <span class="keywordflow">for</span> (i=0; i<argc; i++){ <a name="l00386"></a>00386 <span class="keywordflow">if</span> (rank==0 && strncmp(argv[i],<span class="stringliteral">"-view"</span>,5)==0){<a class="code" href="group__DSDPBasic.html#ga79dacb16d2807f1b6819d296e3073aa5" title="Print many of the parameters currently set in DSDP.">DSDPView</a>(dsdp);} <a name="l00387"></a>00387 } <a name="l00388"></a>00388 <a name="l00389"></a>00389 info = <a class="code" href="group__DSDPBasic.html#ga3242b32d5e9c5e5358da5f79ae5d08dd" title="Free the internal data structures of the solver and the cones associated with it.">DSDPDestroy</a>(dsdp); <a name="l00390"></a>00390 DSDPFREE(&dddd.matind,&info); <a name="l00391"></a>00391 DSDPFREE(&dddd.nnz,&info); <a name="l00392"></a>00392 <a name="l00393"></a>00393 <span class="keywordflow">if</span> (fileout){fclose(dsdpoutputfile);} <a name="l00394"></a>00394 <span class="keywordflow">if</span> (0){ DSDPMemoryLog();} <a name="l00395"></a>00395 <a name="l00396"></a>00396 } <a name="l00397"></a>00397 <span class="keywordflow">if</span> (runbenchmark){ fclose(fp1);} <a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="keywordflow">return</span> 0; <a name="l00400"></a>00400 } <span class="comment">/* main */</span> <a name="l00401"></a>00401 <a name="l00402"></a>00402 <a name="l00403"></a>00403 <a name="l00404"></a>00404 <span class="preprocessor">#define BUFFERSIZ 4000</span> <a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define BUFFERSIZ 4000</span> <a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#undef __FUNCT__</span> <a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "ReadSDPA2"</span> <a name="l00408"></a>00408 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> ReadSDPA2(<span class="keywordtype">char</span> *filename, DSDPData*ddd){ <a name="l00409"></a>00409 FILE*fp; <a name="l00410"></a>00410 <span class="keywordtype">char</span> ctmp,refline[BUFFERSIZ]=<span class="stringliteral">"*"</span>,thisline[BUFFERSIZ]=<span class="stringliteral">"*"</span>; <a name="l00411"></a>00411 <span class="keywordtype">int</span> info,tline,line=0; <a name="l00412"></a>00412 <span class="keywordtype">int</span> i,k,m,n; <a name="l00413"></a>00413 <span class="comment">/* int spot,nzmark, */</span> <a name="l00414"></a>00414 <span class="keywordtype">int</span> bigint=1000000; <a name="l00415"></a>00415 <span class="keywordtype">int</span> i1,nblk,nmat,col,row; <a name="l00416"></a>00416 <span class="keywordtype">int</span> np=0,nblocks; <a name="l00417"></a>00417 <span class="keywordtype">int</span> nargs,nonzero; <a name="l00418"></a>00418 <span class="keywordtype">double</span> val; <a name="l00419"></a>00419 <a name="l00420"></a>00420 fp=fopen(filename,<span class="stringliteral">"r"</span>); <a name="l00421"></a>00421 <span class="keywordflow">if</span> (!fp){ <a name="l00422"></a>00422 printf(<span class="stringliteral">"Cannot open file %s !"</span>,filename); <span class="keywordflow">return</span>(1); <a name="l00423"></a>00423 } <a name="l00424"></a>00424 <a name="l00425"></a>00425 <span class="comment">/* Read comments */</span> <a name="l00426"></a>00426 <span class="keywordflow">while</span>(!feof(fp) && (thisline[0] == <span class="charliteral">'*'</span> || thisline[0] == <span class="charliteral">'"'</span>) ){ <a name="l00427"></a>00427 fgets(thisline,BUFFERSIZ,fp); line++; <a name="l00428"></a>00428 } <a name="l00429"></a>00429 <span class="comment">/* Read number of constraints */</span> <a name="l00430"></a>00430 <span class="keywordflow">if</span> (sscanf(thisline,<span class="stringliteral">"%d"</span>,&m)<1){ <a name="l00431"></a>00431 printf(<span class="stringliteral">"Error: line %d. Number of constraints not given.\n"</span>,line); <a name="l00432"></a>00432 <span class="keywordflow">return</span>(1); <a name="l00433"></a>00433 } <a name="l00434"></a>00434 <span class="comment">/* Read number of blocks */</span> <a name="l00435"></a>00435 fgets(thisline,BUFFERSIZ,fp); line++; <a name="l00436"></a>00436 <span class="keywordflow">if</span> (sscanf(thisline,<span class="stringliteral">"%d"</span>,&nblocks)!=1){ <a name="l00437"></a>00437 printf(<span class="stringliteral">"Error: line %d. Number of blocks not given.\n"</span>,line); <a name="l00438"></a>00438 <span class="keywordflow">return</span>(1); <a name="l00439"></a>00439 } <a name="l00440"></a>00440 ddd->lpn=0;ddd->lpspot=0;ddd->lpblock=0;ddd->cnorm=0; <a name="l00441"></a>00441 <span class="comment">/* Read block sizes */</span> <a name="l00442"></a>00442 DSDPCALLOC2(&ddd->sformat,<span class="keywordtype">char</span>, (nblocks+1),&info); <a name="l00443"></a>00443 DSDPCALLOC2(&ddd->blocksizes,<span class="keywordtype">int</span>, (nblocks+1),&info); <a name="l00444"></a>00444 DSDPCALLOC2(&ddd->conetypes,<span class="keywordtype">char</span>, (nblocks+1),&info ); <a name="l00445"></a>00445 line++; <a name="l00446"></a>00446 <span class="keywordflow">for</span> (i=0;i<nblocks; i++){ <a name="l00447"></a>00447 <span class="keywordflow">if</span> (fscanf(fp,<span class="stringliteral">"{"</span>)==1 || fscanf(fp,<span class="stringliteral">"("</span>)==1 || fscanf(fp,<span class="stringliteral">","</span>)==1 ){ <a name="l00448"></a>00448 i--; <a name="l00449"></a>00449 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fscanf(fp,<span class="stringliteral">"%d"</span>,&col)==1){ <a name="l00450"></a>00450 <span class="keywordflow">if</span> (col>0) { ddd->blocksizes[i]=col; np+=col; ddd->conetypes[i]=<span class="charliteral">'S'</span>; <a name="l00451"></a>00451 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (col>0){ddd->blocksizes[i]=-col; np+=-col; ddd->conetypes[i]=<span class="charliteral">'S'</span>; <a name="l00452"></a>00452 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (col<0){ddd->blocksizes[i]=-col; np += -col; ddd->conetypes[i]=<span class="charliteral">'L'</span>;ddd->lpn=-col;ddd->lpblock=i; <a name="l00453"></a>00453 } <span class="keywordflow">else</span> { ddd->blocksizes[i]=0; ddd->conetypes[i]=<span class="charliteral">'N'</span>;} <a name="l00454"></a>00454 <span class="keywordflow">if</span> (ddd->blocksizes[i]<10){ddd->sformat[i]=<span class="charliteral">'U'</span>;} <span class="keywordflow">else</span> {ddd->sformat[i]=<span class="charliteral">'P'</span>;} <a name="l00455"></a>00455 } <a name="l00456"></a>00456 <span class="keywordflow">else</span>{ printf(<span class="stringliteral">"Error block sizes, line %d"</span>,line); <span class="keywordflow">return</span>(1);} <a name="l00457"></a>00457 } <a name="l00458"></a>00458 <span class="keywordflow">if</span> (ddd->blocksizes[nblocks-1]==0) nblocks--; <a name="l00459"></a>00459 fgets(thisline,BUFFERSIZ,fp); <a name="l00460"></a>00460 <a name="l00461"></a>00461 <span class="comment">/* Read objective vector */</span> <a name="l00462"></a>00462 DSDPCALLOC2(&ddd->y0,<span class="keywordtype">double</span>,m,&info); <a name="l00463"></a>00463 DSDPCALLOC2(&ddd->dobj,<span class="keywordtype">double</span>,m,&info); <a name="l00464"></a>00464 line++; <a name="l00465"></a>00465 <span class="keywordflow">for</span> (i=0;i<m;i++){ <a name="l00466"></a>00466 <span class="keywordflow">if</span> (fscanf(fp,<span class="stringliteral">","</span>)==1){ <a name="l00467"></a>00467 i--; <a name="l00468"></a>00468 <span class="keywordflow">continue</span>; <a name="l00469"></a>00469 } <a name="l00470"></a>00470 <span class="keywordflow">while</span> (fscanf(fp,<span class="stringliteral">"%lg"</span>,&val)!=1){ <a name="l00471"></a>00471 fscanf(fp,<span class="stringliteral">"%c"</span>,&ctmp); <a name="l00472"></a>00472 <span class="keywordflow">if</span> (ctmp==<span class="charliteral">'\n'</span>){ <a name="l00473"></a>00473 printf(<span class="stringliteral">"Constraints: %d, Blocks: %d\n"</span>,m,nblocks); <a name="l00474"></a>00474 printf(<span class="stringliteral">"Error reading objective, line %d, i=%d \n"</span>,line,i); <span class="keywordflow">return</span> 1; <a name="l00475"></a>00475 } <a name="l00476"></a>00476 } <a name="l00477"></a>00477 ddd->dobj[i]=val; <a name="l00478"></a>00478 } <a name="l00479"></a>00479 <a name="l00480"></a>00480 fgets(thisline,BUFFERSIZ,fp); <a name="l00481"></a>00481 tline=line; <a name="l00482"></a>00482 <a name="l00483"></a>00483 fseek(fp,0,SEEK_SET); <a name="l00484"></a>00484 line=0; <a name="l00485"></a>00485 <span class="keywordflow">for</span> (i=0;i<tline;i++){ctmp=<span class="charliteral">'*'</span>; <span class="keywordflow">while</span> (ctmp!=<span class="charliteral">'\n'</span>){ fscanf(fp,<span class="stringliteral">"%c"</span>,&ctmp);} line++;} <a name="l00486"></a>00486 <a name="l00487"></a>00487 nargs=5; nonzero=0; <a name="l00488"></a>00488 <span class="keywordflow">while</span>(!feof(fp)){ <a name="l00489"></a>00489 thisline[0]=<span class="charliteral">'\0'</span>; <a name="l00490"></a>00490 nmat=-1; nblk=-1; row=-1; col=-1; val=0.0; <a name="l00491"></a>00491 fgets(thisline,BUFFERSIZ,fp); line++; <a name="l00492"></a>00492 info = Parseline(thisline,&nmat,&nblk,&row,&col,&val,&nargs); <a name="l00493"></a>00493 <span class="keywordflow">if</span> (!feof(fp)&&nargs!=5&&nargs>0){ <a name="l00494"></a>00494 printf(<span class="stringliteral">"Error: line %d \n%s\n"</span>,line,thisline);<span class="keywordflow">return</span> 1;} <a name="l00495"></a>00495 <span class="keywordflow">if</span> (nargs==5 && val!=0.0){ <a name="l00496"></a>00496 nonzero++; <a name="l00497"></a>00497 i1=row*(row+1)/2 + col; <a name="l00498"></a>00498 <span class="keywordflow">if</span> (row >= ddd->blocksizes[nblk-1] || col >= ddd->blocksizes[nblk-1] ) { <a name="l00499"></a>00499 printf(<span class="stringliteral">"Data Error in line: %d. Row %d or col %d > blocksize %d\n%s"</span>,line,row+1,col+1,ddd->blocksizes[nblk-1],thisline); <a name="l00500"></a>00500 <span class="keywordflow">return</span> 1; <a name="l00501"></a>00501 } <a name="l00502"></a>00502 <span class="keywordflow">if</span> (row<0 || col<0){ <a name="l00503"></a>00503 printf(<span class="stringliteral">"Data Error in line: %d. Row %d or col %d <= 0 \n%s"</span>,line,row+1,col+1,thisline); <a name="l00504"></a>00504 <span class="keywordflow">return</span> 1; <a name="l00505"></a>00505 } <a name="l00506"></a>00506 <span class="keywordflow">if</span> (nmat>m || nmat<0){ <a name="l00507"></a>00507 printf(<span class="stringliteral">"Data Error in line: %d. Is Var 0 <= %d <= %d \n%s"</span>,line,nmat,m,thisline); <a name="l00508"></a>00508 <span class="keywordflow">return</span> 1; <a name="l00509"></a>00509 } <a name="l00510"></a>00510 <span class="keywordflow">if</span> (nblk>nblocks || nblk<0){ <a name="l00511"></a>00511 printf(<span class="stringliteral">"Data Error in line: %d. Is Block 0 <= %d <= %d \n%s"</span>,line,nmat,m,thisline); <a name="l00512"></a>00512 <span class="keywordflow">return</span> 1; <a name="l00513"></a>00513 } <a name="l00514"></a>00514 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nargs==5 && val==0.0){ <a name="l00515"></a>00515 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nargs<5 && nargs>0){ <a name="l00516"></a>00516 printf(<span class="stringliteral">"Too few numbers. \n"</span>); <a name="l00517"></a>00517 printf(<span class="stringliteral">"Problem Reading SDPA file at line %d: %s\n"</span>,line, thisline); <a name="l00518"></a>00518 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nargs==0){ <a name="l00519"></a>00519 } <span class="keywordflow">else</span> { <a name="l00520"></a>00520 printf(<span class="stringliteral">"Problem Reading SDPA file at line %d: %s\n"</span>,line, thisline); <a name="l00521"></a>00521 } <a name="l00522"></a>00522 } <a name="l00523"></a>00523 <a name="l00524"></a>00524 <span class="comment">/* Allocate memory for the data */</span> <a name="l00525"></a>00525 nonzero++; <a name="l00526"></a>00526 DSDPCALLOC2(&ddd->matind,<span class="keywordtype">int</span>,nonzero,&info); <a name="l00527"></a>00527 DSDPCALLOC2(&ddd->nnz,<span class="keywordtype">double</span>,nonzero,&info); <a name="l00528"></a>00528 DSDPCALLOC2(&ddd->block,<span class="keywordtype">int</span>,nonzero,&info); <a name="l00529"></a>00529 DSDPCALLOC2(&ddd->constraint,<span class="keywordtype">int</span>,nonzero,&info); <a name="l00530"></a>00530 nonzero--; <a name="l00531"></a>00531 <a name="l00532"></a>00532 fseek(fp,0,SEEK_SET); <a name="l00533"></a>00533 line=0; <a name="l00534"></a>00534 <span class="keywordflow">for</span> (i=0;i<tline;i++){ctmp=<span class="charliteral">'*'</span>; <span class="keywordflow">while</span> (ctmp!=<span class="charliteral">'\n'</span>) fscanf(fp,<span class="stringliteral">"%c"</span>,&ctmp); line++;} <a name="l00535"></a>00535 <a name="l00536"></a>00536 nargs=5;k=0; <a name="l00537"></a>00537 <span class="keywordflow">while</span>(!feof(fp) <span class="comment">/* && nargs==5 */</span>){ <a name="l00538"></a>00538 thisline[0]=<span class="charliteral">'\0'</span>; <a name="l00539"></a>00539 fgets(thisline,BUFFERSIZ,fp); <a name="l00540"></a>00540 <span class="keywordflow">if</span> (k==0){strncpy(refline,thisline,BUFFERSIZ-1); } <a name="l00541"></a>00541 info = Parseline(thisline,&nmat,&nblk,&row,&col,&val,&nargs); <a name="l00542"></a>00542 <span class="keywordflow">if</span> (!feof(fp)&&nargs!=5&&nargs<0){ <a name="l00543"></a>00543 <span class="comment">/* if (k>=nonzero && !feof(fp) ){ */</span> <a name="l00544"></a>00544 printf(<span class="stringliteral">"Problem Reading SDPA file at line %d: %s\n"</span>,line, thisline); <a name="l00545"></a>00545 printf(<span class="stringliteral">"Problem could be earlier in file \n"</span>); <a name="l00546"></a>00546 printf(<span class="stringliteral">"The first recorded matix nonzero in the file occured at line %d: \n %s"</span>,tline,refline); <a name="l00547"></a>00547 printf(<span class="stringliteral">" Please check data file\n"</span>); <a name="l00548"></a>00548 <span class="keywordflow">return</span> 1; <a name="l00549"></a>00549 } <a name="l00550"></a>00550 <span class="keywordflow">if</span> (nargs==5 && val!=0.0){ <a name="l00551"></a>00551 <span class="keywordflow">if</span> (row>col){ <a name="l00552"></a>00552 printf(<span class="stringliteral">"Warning: Line: %d Row < Column. %s \n"</span>,line,thisline); <a name="l00553"></a>00553 } <a name="l00554"></a>00554 i=row;row=col;col=i; <a name="l00555"></a>00555 n=ddd->blocksizes[nblk-1]; <a name="l00556"></a>00556 <span class="keywordflow">if</span> (nmat==0) {val=-val;} <a name="l00557"></a>00557 <span class="keywordflow">if</span> (ddd->conetypes[nblk-1]==<span class="charliteral">'S'</span>){ <a name="l00558"></a>00558 <span class="comment">/* if (row==col) val/=2; */</span> <a name="l00559"></a>00559 ddd->matind[k]=row*(row+1)/2 + col; <a name="l00560"></a>00560 <span class="keywordflow">if</span> (ddd->sformat[nblk-1]==<span class="charliteral">'U'</span>){ddd->matind[k]=row*n + col;} <a name="l00561"></a>00561 } <span class="keywordflow">else</span> { <a name="l00562"></a>00562 ddd->matind[k]=col; <a name="l00563"></a>00563 } <a name="l00564"></a>00564 ddd->block[k]=nblk; <a name="l00565"></a>00565 ddd->constraint[k]=nmat; <a name="l00566"></a>00566 ddd->nnz[k]=val; <a name="l00567"></a>00567 k++; <a name="l00568"></a>00568 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nargs==5 && val==0.0){ <a name="l00569"></a>00569 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nargs==0){ <a name="l00570"></a>00570 } <span class="keywordflow">else</span> { <a name="l00571"></a>00571 printf(<span class="stringliteral">"Problem Reading SDPA file at line %d: %s\n"</span>,line, thisline); <a name="l00572"></a>00572 printf(<span class="stringliteral">"Problem could be earlier in file \n"</span>); <a name="l00573"></a>00573 printf(<span class="stringliteral">"The first recorded matix nonzero in the file occured at line %d: \n %s"</span>,tline,refline); <a name="l00574"></a>00574 printf(<span class="stringliteral">" Please check data file\n"</span>); <a name="l00575"></a>00575 <span class="keywordflow">return</span> 1; <a name="l00576"></a>00576 } <a name="l00577"></a>00577 } <a name="l00578"></a>00578 ddd->block[k]=nblocks+1; ddd->constraint[k]=m+2; <a name="l00579"></a>00579 ddd->matind[k]=10000000; ddd->nnz[k]=0.0; <a name="l00580"></a>00580 <a name="l00581"></a>00581 qusort(ddd->block,ddd->constraint,ddd->matind,ddd->nnz,0,nonzero-1); <a name="l00582"></a>00582 <a name="l00583"></a>00583 <span class="keywordflow">for</span> (i=0;i<nonzero-1; i++){ <a name="l00584"></a>00584 <span class="keywordflow">while</span> (i<nonzero-1 && ddd->matind[i]==ddd->matind[i+1] && <a name="l00585"></a>00585 ddd->constraint[i]==ddd->constraint[i+1] && <a name="l00586"></a>00586 ddd->block[i]==ddd->block[i+1] ){ <a name="l00587"></a>00587 printf(<span class="stringliteral">"DSDPError: Reading Input File:\n"</span>); <a name="l00588"></a>00588 printf(<span class="stringliteral">"Possible problem with data input file: Double Entry: \n"</span>); <a name="l00589"></a>00589 printf(<span class="stringliteral">" %d %d %d %2.10e\n"</span>, <a name="l00590"></a>00590 ddd->constraint[i],ddd->block[i],ddd->matind[i]+1,ddd->nnz[i]); <a name="l00591"></a>00591 printf(<span class="stringliteral">" %d %d %d %2.10e\n\n"</span>, <a name="l00592"></a>00592 ddd->constraint[i+1],ddd->block[i+1],ddd->matind[i+1]+1,ddd->nnz[i+1]); <a name="l00593"></a>00593 <span class="keywordflow">for</span> (k=i+1;k<nonzero-1;k++){ <a name="l00594"></a>00594 ddd->constraint[k]=ddd->constraint[k+1]; ddd->block[k]=ddd->block[k+1]; <a name="l00595"></a>00595 ddd->matind[k]=ddd->matind[k+1];ddd->nnz[k]=ddd->nnz[k+1]; <a name="l00596"></a>00596 } <a name="l00597"></a>00597 ddd->constraint[nonzero-1]=bigint;ddd->nnz[nonzero-1]=0; <a name="l00598"></a>00598 nonzero--; <a name="l00599"></a>00599 } <a name="l00600"></a>00600 } <a name="l00601"></a>00601 <a name="l00602"></a>00602 ddd->fixedvari=0;ddd->fixedvard=0; <a name="l00603"></a>00603 <span class="keywordflow">if</span> (ddd->lpblock>0){ <a name="l00604"></a>00604 <span class="keywordtype">int</span> spot; <a name="l00605"></a>00605 <span class="keywordflow">if</span> (ddd->blocksizes[ddd->lpblock]==2){ <a name="l00606"></a>00606 i=0;k=0; <a name="l00607"></a>00607 <span class="keywordflow">while</span> (ddd->block[i]<=ddd->lpblock && i<nonzero){ i++;} spot=i; <a name="l00608"></a>00608 <span class="keywordflow">while</span> (ddd->block[i]==ddd->lpblock+1 && i<nonzero){ i++;k++;} <a name="l00609"></a>00609 <span class="keywordflow">if</span> (k==4){ <a name="l00610"></a>00610 <span class="keywordflow">if</span> (ddd->constraint[spot]==ddd->constraint[spot+1] && <a name="l00611"></a>00611 ddd->constraint[spot+2]==ddd->constraint[spot+3] && <a name="l00612"></a>00612 ddd->matind[spot]==ddd->matind[spot+2] && <a name="l00613"></a>00613 ddd->matind[spot+1]==ddd->matind[spot+3] && <a name="l00614"></a>00614 fabs(ddd->nnz[spot+2])==1.0 && fabs(ddd->nnz[spot+3])==1.0 && <a name="l00615"></a>00615 fabs(ddd->nnz[spot] + ddd->nnz[spot+1]) <=1e-6 ){ <a name="l00616"></a>00616 ddd->fixedvari=ddd->constraint[spot+2]; <a name="l00617"></a>00617 ddd->fixedvard=ddd->nnz[spot]/ddd->nnz[spot+2]; <a name="l00618"></a>00618 nblocks--;ddd->lpblock=0; <a name="l00619"></a>00619 } <a name="l00620"></a>00620 } <a name="l00621"></a>00621 } <a name="l00622"></a>00622 } <a name="l00623"></a>00623 <a name="l00624"></a>00624 ddd->totalnonzeros=nonzero; <a name="l00625"></a>00625 <span class="keywordflow">for</span> (ddd->n=0,i=0;i<nblocks;i++) ddd->n += ddd->blocksizes[i]; <a name="l00626"></a>00626 ddd->m=m; <a name="l00627"></a>00627 ddd->nblocks=nblocks; <a name="l00628"></a>00628 fclose(fp); <a name="l00629"></a>00629 <span class="keywordflow">return</span> 0; <a name="l00630"></a>00630 } <a name="l00631"></a>00631 <a name="l00632"></a>00632 <a name="l00633"></a>00633 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00634"></a>00634 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "Parseline"</span> <a name="l00635"></a>00635 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> Parseline(<span class="keywordtype">char</span> thisline[],<span class="keywordtype">int</span> *nmat,<span class="keywordtype">int</span> *nblk,<span class="keywordtype">int</span> *row, <a name="l00636"></a>00636 <span class="keywordtype">int</span> *col,<span class="keywordtype">double</span> *value, <span class="keywordtype">int</span> *nargs){ <a name="l00637"></a>00637 <a name="l00638"></a>00638 <span class="keywordtype">int</span> temp; <a name="l00639"></a>00639 <span class="keywordtype">int</span> rtmp,coltmp; <a name="l00640"></a>00640 <a name="l00641"></a>00641 *nargs=0; <a name="l00642"></a>00642 *nmat=-1;*nblk=-1;rtmp=-1;coltmp=-1;*value=0.0; <a name="l00643"></a>00643 temp=sscanf(thisline,<span class="stringliteral">"%d %d %d %d %lg"</span>,nmat,nblk,&rtmp,&coltmp,value); <a name="l00644"></a>00644 <span class="keywordflow">if</span> (temp==5) *nargs=5; <a name="l00645"></a>00645 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (temp>0 && temp<5) *nargs=temp; <a name="l00646"></a>00646 *row=rtmp-1; *col=coltmp-1; <a name="l00647"></a>00647 <a name="l00648"></a>00648 <span class="keywordflow">return</span>(0); <a name="l00649"></a>00649 } <a name="l00650"></a>00650 <a name="l00651"></a>00651 <a name="l00652"></a>00652 <span class="keyword">static</span> <span class="keywordtype">int</span> partition(<span class="keywordtype">int</span> list1[], <span class="keywordtype">int</span> list2[], <span class="keywordtype">int</span> list3[], <span class="keywordtype">double</span> list5[], <span class="keywordtype">int</span> lstart, <span class="keywordtype">int</span> lend){ <a name="l00653"></a>00653 <span class="keywordtype">int</span> k=lend; <a name="l00654"></a>00654 <span class="keywordtype">int</span> pivot1=list1[k],pivot2=list2[k],pivot3=list3[k]; <a name="l00655"></a>00655 <span class="keywordtype">double</span> pivot5 = list5[k]; <a name="l00656"></a>00656 <span class="keywordtype">int</span> bottom = lstart-1, top = lend; <a name="l00657"></a>00657 <span class="keywordtype">int</span> done = 0; <a name="l00658"></a>00658 <span class="keywordtype">int</span> ordered=1; <a name="l00659"></a>00659 <span class="keywordflow">while</span> (!done){ <a name="l00660"></a>00660 <a name="l00661"></a>00661 <span class="keywordflow">while</span> (!done) { <a name="l00662"></a>00662 bottom = bottom+1; <a name="l00663"></a>00663 <a name="l00664"></a>00664 <span class="keywordflow">if</span> (bottom == top){ <a name="l00665"></a>00665 done = 1; <a name="l00666"></a>00666 <span class="keywordflow">break</span>; <a name="l00667"></a>00667 } <a name="l00668"></a>00668 <span class="keywordflow">if</span> ( list1[bottom] > pivot1 || <a name="l00669"></a>00669 (list1[bottom] == pivot1 && list2[bottom] > pivot2) || <a name="l00670"></a>00670 (list1[bottom] == pivot1 && list2[bottom] == pivot2 && <a name="l00671"></a>00671 list3[bottom] > pivot3) ){ <a name="l00672"></a>00672 list1[top] = list1[bottom]; <a name="l00673"></a>00673 list2[top] = list2[bottom]; <a name="l00674"></a>00674 list3[top] = list3[bottom]; <a name="l00675"></a>00675 list5[top] = list5[bottom]; <a name="l00676"></a>00676 ordered=0; <a name="l00677"></a>00677 <span class="keywordflow">break</span>; <a name="l00678"></a>00678 } <a name="l00679"></a>00679 } <a name="l00680"></a>00680 <span class="keywordflow">while</span> (!done){ <a name="l00681"></a>00681 top = top-1; <a name="l00682"></a>00682 <a name="l00683"></a>00683 <span class="keywordflow">if</span> (top == bottom){ <a name="l00684"></a>00684 done = 1; <a name="l00685"></a>00685 <span class="keywordflow">break</span>; <a name="l00686"></a>00686 } <a name="l00687"></a>00687 <span class="keywordflow">if</span> ( list1[top] < pivot1 || <a name="l00688"></a>00688 (list1[top] == pivot1 && list2[top] < pivot2) || <a name="l00689"></a>00689 (list1[top] == pivot1 && list2[top] == pivot2 && list3[top] < pivot3)){ <a name="l00690"></a>00690 list1[bottom] = list1[top]; <a name="l00691"></a>00691 list2[bottom] = list2[top]; <a name="l00692"></a>00692 list3[bottom] = list3[top]; <a name="l00693"></a>00693 list5[bottom] = list5[top]; <a name="l00694"></a>00694 ordered=0; <a name="l00695"></a>00695 <span class="keywordflow">break</span>; <a name="l00696"></a>00696 } <a name="l00697"></a>00697 } <a name="l00698"></a>00698 } <a name="l00699"></a>00699 list1[top] = pivot1; <a name="l00700"></a>00700 list2[top] = pivot2; <a name="l00701"></a>00701 list3[top] = pivot3; <a name="l00702"></a>00702 list5[top] = pivot5; <a name="l00703"></a>00703 <a name="l00704"></a>00704 ordered=0; <a name="l00705"></a>00705 <a name="l00706"></a>00706 <span class="keywordflow">if</span> (bottom==lend){ <a name="l00707"></a>00707 ordered=1; <a name="l00708"></a>00708 <span class="keywordflow">for</span> (k=lstart;k<lend-1;k++){ <a name="l00709"></a>00709 <span class="keywordflow">if</span> ( (list1[k] > list1[k+1]) || <a name="l00710"></a>00710 (list1[k] == list1[k+1] && list2[k] > list2[k+1]) || <a name="l00711"></a>00711 (list1[k] == list1[k+1] && list2[k] == list2[k+1] && list3[k] > list3[k+1]) ){ <a name="l00712"></a>00712 ordered=0; <a name="l00713"></a>00713 <span class="keywordflow">break</span>; <a name="l00714"></a>00714 } <a name="l00715"></a>00715 } <a name="l00716"></a>00716 } <a name="l00717"></a>00717 <span class="keywordflow">if</span> (ordered && lend-lstart>2){ <a name="l00718"></a>00718 top=(lend+lstart)/2; <a name="l00719"></a>00719 } <a name="l00720"></a>00720 <span class="keywordflow">return</span> top; <a name="l00721"></a>00721 } <a name="l00722"></a>00722 <a name="l00723"></a>00723 <a name="l00724"></a>00724 <a name="l00725"></a>00725 <span class="keyword">static</span> <span class="keywordtype">int</span> qusort(<span class="keywordtype">int</span> list1[], <span class="keywordtype">int</span> list2[], <span class="keywordtype">int</span> list3[], <span class="keywordtype">double</span> list5[], <span class="keywordtype">int</span> lstart, <span class="keywordtype">int</span> lend){ <a name="l00726"></a>00726 <span class="keywordtype">int</span> split; <a name="l00727"></a>00727 <span class="keywordflow">if</span> (lstart < lend){ <a name="l00728"></a>00728 split = partition(list1, list2, list3, list5,lstart, lend); <a name="l00729"></a>00729 qusort(list1, list2, list3, list5, lstart, split-1); <a name="l00730"></a>00730 qusort(list1, list2, list3, list5, split+1, lend); <a name="l00731"></a>00731 } <span class="keywordflow">else</span> { <a name="l00732"></a>00732 <span class="keywordflow">return</span> 0; <a name="l00733"></a>00733 } <a name="l00734"></a>00734 <span class="keywordflow">return</span> 0; <a name="l00735"></a>00735 } <a name="l00736"></a>00736 <a name="l00737"></a>00737 <a name="l00738"></a>00738 <a name="l00739"></a>00739 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00740"></a>00740 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "GetMarkers"</span> <a name="l00741"></a>00741 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> GetMarkers(<span class="keywordtype">int</span> block, <span class="keywordtype">int</span> constraint, <span class="keywordtype">int</span> blockn[], <span class="keywordtype">int</span> constraintn[], <a name="l00742"></a>00742 <span class="keywordtype">int</span>*m3){ <a name="l00743"></a>00743 <span class="keywordtype">int</span> i=0; <a name="l00744"></a>00744 <span class="keywordflow">while</span> (blockn[i]==block && constraintn[i]==constraint){ i++;} <a name="l00745"></a>00745 *m3=i; <a name="l00746"></a>00746 <span class="keywordflow">return</span> 0; <a name="l00747"></a>00747 } <a name="l00748"></a>00748 <a name="l00749"></a>00749 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00750"></a>00750 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "CountNonzeroMatrices"</span> <a name="l00751"></a>00751 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> CountNonzeroMatrices(<span class="keywordtype">int</span> block, <span class="keywordtype">int</span> blockn[], <span class="keywordtype">int</span> constraintn[], <span class="keywordtype">int</span>*m3){ <a name="l00752"></a>00752 <span class="keywordtype">int</span> i=0,cvar=-1,nnzmats=0; <a name="l00753"></a>00753 <span class="keywordflow">while</span> (blockn[i]==block){ <a name="l00754"></a>00754 <span class="keywordflow">if</span> (constraintn[i]>cvar){ cvar=constraintn[i];nnzmats++;} <a name="l00755"></a>00755 i++; <a name="l00756"></a>00756 } <a name="l00757"></a>00757 *m3=nnzmats; <a name="l00758"></a>00758 <span class="keywordflow">return</span> 0; <a name="l00759"></a>00759 } <a name="l00760"></a>00760 <a name="l00761"></a>00761 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00762"></a>00762 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "CheckForConstantMat"</span> <a name="l00763"></a>00763 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> CheckForConstantMat(<span class="keywordtype">double</span> v[],<span class="keywordtype">int</span> nnz, <span class="keywordtype">int</span> n){ <a name="l00764"></a>00764 <span class="keywordtype">int</span> i; <span class="keywordtype">double</span> vv; <a name="l00765"></a>00765 <span class="keywordflow">if</span> (n<=1){ <span class="keywordflow">return</span> 0; } <a name="l00766"></a>00766 <span class="keywordflow">if</span> (nnz!=(n*n+n)/2){ <span class="keywordflow">return</span> 0; } <a name="l00767"></a>00767 <span class="keywordflow">for</span> (vv=v[0],i=1;i<nnz;i++){ <a name="l00768"></a>00768 <span class="keywordflow">if</span> (v[i]!=vv){ <span class="keywordflow">return</span> 0;} <a name="l00769"></a>00769 } <a name="l00770"></a>00770 <span class="keywordflow">return</span> 1; <a name="l00771"></a>00771 } <a name="l00772"></a>00772 <a name="l00773"></a>00773 <span class="keyword">static</span> <span class="keywordtype">int</span> ComputeY0(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,DSDPData dddd){ <a name="l00774"></a>00774 <span class="keywordtype">int</span> i,ii,info,ijnnz=0,spot=0,ddiag=0,diag=0,n=dddd.blocksizes[0],m=dddd.m; <a name="l00775"></a>00775 <span class="keywordtype">double</span> aa,bb=0,ddmax=0,dd=0,cnorm=0; <a name="l00776"></a>00776 <span class="keywordtype">char</span> sformat=dddd.sformat[0]; <a name="l00777"></a>00777 <span class="keywordflow">if</span> (dddd.nblocks>1) <span class="keywordflow">return</span> 0; <a name="l00778"></a>00778 <span class="keywordflow">if</span> (dddd.fixedvari) <span class="keywordflow">return</span> 0; <a name="l00779"></a>00779 <a name="l00780"></a>00780 info=GetMarkers(1,0,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00781"></a>00781 <span class="keywordflow">for</span> (i=0;i<ijnnz;i++){<span class="keywordflow">if</span> (cnorm<fabs(dddd.nnz[i])) cnorm=fabs(dddd.nnz[i]);} <a name="l00782"></a>00782 spot+=ijnnz; <a name="l00783"></a>00783 <a name="l00784"></a>00784 <span class="keywordflow">for</span> (i=1;i<=m;i++,spot+=ijnnz){ <a name="l00785"></a>00785 info=GetMarkers(1,i,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00786"></a>00786 ddiag=0; <a name="l00787"></a>00787 <span class="keywordflow">if</span> (ijnnz==n){ <a name="l00788"></a>00788 dd=dddd.nnz[spot]; ddiag=1;bb=dddd.dobj[i-1]; <a name="l00789"></a>00789 <span class="keywordflow">for</span> (ii=0;ii<n;ii++){ <a name="l00790"></a>00790 <span class="keywordflow">if</span> (sformat==<span class="charliteral">'U'</span>){ <a name="l00791"></a>00791 <span class="keywordflow">if</span> (dddd.matind[spot+ii] != ii*n+ii || dddd.nnz[spot+i]!=dd){ ddiag=0;} <a name="l00792"></a>00792 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sformat==<span class="charliteral">'P'</span>){ <a name="l00793"></a>00793 <span class="keywordflow">if</span> (dddd.matind[spot+ii] != ii*(ii+1)/2+ii || dddd.nnz[spot+i]!=dd){ ddiag=0;} <a name="l00794"></a>00794 } <a name="l00795"></a>00795 } <a name="l00796"></a>00796 } <a name="l00797"></a>00797 <span class="keywordflow">if</span> (ddiag){ <a name="l00798"></a>00798 info=<a class="code" href="group__DSDPSolution.html#gacf5a2bd7ecb03b319caa22e545ef8e01" title="Set the initial values of variables y in (D).">DSDPSetY0</a>(dsdp,i,-100*n*cnorm*dddd.dobj[i-1]); <a name="l00799"></a>00799 info=<a class="code" href="group__DSDPSolution.html#ga846e363115b1fba5622306efc2e0ba38" title="Set an initial value for the variable r in (DD)">DSDPSetR0</a>(dsdp,0); <a name="l00800"></a>00800 info=<a class="code" href="group__DSDPSolver.html#ga2795069b8aaa6551a8c1c248bbb2cb1a" title="Set an upper bound on the objective value at the solution.">DSDPSetZBar</a>(dsdp,100*dd/bb*cnorm); <a name="l00801"></a>00801 info=<a class="code" href="group__DSDPSolver.html#ga5d737fca8ae872f57fd37cc7784feede" title="Set the potential parameter.">DSDPSetPotentialParameter</a>(dsdp,5.0); <a name="l00802"></a>00802 } <a name="l00803"></a>00803 } <a name="l00804"></a>00804 <a name="l00805"></a>00805 <span class="keywordflow">if</span> (m==n){ <a name="l00806"></a>00806 spot=0; info=GetMarkers(1,0,dddd.block+spot,dddd.constraint+spot,&ijnnz); spot+=ijnnz; <a name="l00807"></a>00807 dd=dddd.nnz[spot]; bb=dddd.dobj[0]; <a name="l00808"></a>00808 <span class="keywordflow">for</span> (diag=1,i=0;i<n;i++,spot+=ijnnz){ <a name="l00809"></a>00809 info=GetMarkers(1,i+1,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00810"></a>00810 dd=dddd.nnz[spot];bb=dddd.dobj[i]; <a name="l00811"></a>00811 <span class="keywordflow">if</span> (ddmax<bb/dd) ddmax=bb/dd; <a name="l00812"></a>00812 <span class="keywordflow">if</span> (sformat==<span class="charliteral">'P'</span>){ <a name="l00813"></a>00813 <span class="keywordflow">if</span> (ijnnz!=1 || bb!=dddd.dobj[i] || dd!=dddd.nnz[spot] || dddd.matind[spot]!= ((i+1)*(i+2))/2-1) { diag=0; } <a name="l00814"></a>00814 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sformat==<span class="charliteral">'U'</span>){ <a name="l00815"></a>00815 <span class="keywordflow">if</span> (ijnnz!=1 || bb!=dddd.dobj[i] || dd!=dddd.nnz[spot] || dddd.matind[spot]!= ((i)*n)+i) { diag=0; } <a name="l00816"></a>00816 } <a name="l00817"></a>00817 } <a name="l00818"></a>00818 <span class="keywordflow">if</span> (diag && cnorm*sqrt(1.0*n)<1e6){ <a name="l00819"></a>00819 <span class="keywordflow">for</span> (i=0;i<n;i++){info = <a class="code" href="group__DSDPSolution.html#gacf5a2bd7ecb03b319caa22e545ef8e01" title="Set the initial values of variables y in (D).">DSDPSetY0</a>(dsdp,i+1,-10*sqrt(1.0*n)*cnorm);} <a name="l00820"></a>00820 info=<a class="code" href="group__DSDPSolution.html#ga846e363115b1fba5622306efc2e0ba38" title="Set an initial value for the variable r in (DD)">DSDPSetR0</a>(dsdp,0); info=<a class="code" href="group__DSDPSolver.html#ga2795069b8aaa6551a8c1c248bbb2cb1a" title="Set an upper bound on the objective value at the solution.">DSDPSetZBar</a>(dsdp,100*ddmax*n*cnorm); info=<a class="code" href="group__DSDPSolver.html#ga5d737fca8ae872f57fd37cc7784feede" title="Set the potential parameter.">DSDPSetPotentialParameter</a>(dsdp,5.0); info=<a class="code" href="group__DSDPSolver.html#ga903ff948f2ba766430ba3918b9447ee7" title="Reuse the Hessian of the barrier function multiple times at each DSDP iteration.">DSDPReuseMatrix</a>(dsdp,0); <a name="l00821"></a>00821 } <a name="l00822"></a>00822 } <a name="l00823"></a>00823 <span class="keywordflow">if</span> (m==n+1){ <a name="l00824"></a>00824 spot=0; info=GetMarkers(1,0,dddd.block+spot,dddd.constraint+spot,&ijnnz); spot+=ijnnz; <a name="l00825"></a>00825 dd=dddd.nnz[spot]; bb=dddd.dobj[0];diag=1; <a name="l00826"></a>00826 info=GetMarkers(1,1,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00827"></a>00827 <span class="keywordflow">if</span> (CheckForConstantMat(dddd.nnz+spot,ijnnz,n)){aa=dddd.nnz[0]; spot+=ijnnz;ii=2;} <span class="keywordflow">else</span> {ii=1;} <a name="l00828"></a>00828 <span class="keywordflow">for</span> (i=0;i<n;i++,spot+=ijnnz){ <a name="l00829"></a>00829 info=GetMarkers(1,i+ii,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00830"></a>00830 dd=dddd.nnz[spot];bb=dddd.dobj[i+ii-1]; <a name="l00831"></a>00831 <span class="keywordflow">if</span> (ddmax<bb/dd) ddmax=bb/dd; <a name="l00832"></a>00832 <span class="keywordflow">if</span> (sformat==<span class="charliteral">'U'</span>){ <a name="l00833"></a>00833 <span class="keywordflow">if</span> (ijnnz!=1 || bb!=dddd.dobj[ii-1] || dd!=dddd.nnz[spot] || dddd.matind[spot]!= ((i)*(n))+i ) { diag=0; } <a name="l00834"></a>00834 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sformat==<span class="charliteral">'P'</span>){ <a name="l00835"></a>00835 <span class="keywordflow">if</span> (ijnnz!=1 || bb!=dddd.dobj[ii-1] || dd!=dddd.nnz[spot] || dddd.matind[spot]!= ((i+1)*(i+2))/2-1) { diag=0; } <a name="l00836"></a>00836 } <a name="l00837"></a>00837 } <a name="l00838"></a>00838 <span class="keywordflow">if</span> (ii==1 && diag==1){ <a name="l00839"></a>00839 info=GetMarkers(1,m,dddd.block+spot,dddd.constraint+spot,&ijnnz); <a name="l00840"></a>00840 <span class="keywordflow">if</span> (CheckForConstantMat(dddd.nnz+spot,ijnnz,n)){aa=dddd.nnz[spot];} <span class="keywordflow">else</span> {diag=0;} <a name="l00841"></a>00841 } <a name="l00842"></a>00842 <span class="keywordflow">if</span> (diag && cnorm*sqrt(1.0*n)<1e5){ <a name="l00843"></a>00843 <span class="comment">/*</span> <a name="l00844"></a>00844 <span class="comment"> if (ii=2){info = DSDPSetY0(dsdp,1,-10000*aa);} else {info = DSDPSetY0(dsdp,m,-10000*aa);}</span> <a name="l00845"></a>00845 <span class="comment"> for (i=0;i<n;i++){info = DSDPSetY0(dsdp,i+ii,-100*sqrt(1.0*n)*cnorm);} </span> <a name="l00846"></a>00846 <span class="comment"> */</span> <a name="l00847"></a>00847 <span class="comment">/* info=DSDPSetR0(dsdp,cnorm); info=DSDPSetZBar(dsdp,n*n*n*ddmax*cnorm); */</span> info=<a class="code" href="group__DSDPSolver.html#ga5d737fca8ae872f57fd37cc7784feede" title="Set the potential parameter.">DSDPSetPotentialParameter</a>(dsdp,5.0); info=<a class="code" href="group__DSDPSolver.html#ga903ff948f2ba766430ba3918b9447ee7" title="Reuse the Hessian of the barrier function multiple times at each DSDP iteration.">DSDPReuseMatrix</a>(dsdp,0); <a name="l00848"></a>00848 } <a name="l00849"></a>00849 } <a name="l00850"></a>00850 <span class="keywordflow">return</span> 0; <a name="l00851"></a>00851 } <a name="l00852"></a>00852 <a name="l00853"></a>00853 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00854"></a>00854 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "TCheckArgs0"</span> <a name="l00855"></a>00855 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> TCheckArgs0(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone, <span class="keywordtype">int</span> m,<span class="keywordtype">int</span> nargs,<span class="keywordtype">char</span> *runargs[]){ <a name="l00856"></a>00856 <a name="l00857"></a>00857 <span class="keywordtype">int</span> kk,info,iloginfo=0; <a name="l00858"></a>00858 <span class="keywordflow">for</span> (kk=1; kk<nargs-1; kk++){ <a name="l00859"></a>00859 <span class="keywordflow">if</span> (0){ <a name="l00860"></a>00860 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(runargs[kk],<span class="stringliteral">"-dloginfo"</span>,8)==0){ <a name="l00861"></a>00861 iloginfo=atoi(runargs[kk+1]); <a name="l00862"></a>00862 } <a name="l00863"></a>00863 } <a name="l00864"></a>00864 info=DSDPLogInfoAllow(iloginfo,0); <a name="l00865"></a>00865 <span class="keywordflow">return</span> 0; <a name="l00866"></a>00866 } <a name="l00867"></a>00867 <a name="l00868"></a>00868 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00869"></a>00869 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "TCheckArgs"</span> <a name="l00870"></a>00870 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> TCheckArgs(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp,<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone, <span class="keywordtype">int</span> m,<span class="keywordtype">int</span> nargs,<span class="keywordtype">char</span> *runargs[]){ <a name="l00871"></a>00871 <a name="l00872"></a>00872 <span class="keywordtype">int</span> i,kk, info; <a name="l00873"></a>00873 <span class="keywordtype">int</span> printlevel=10; <a name="l00874"></a>00874 <span class="keywordtype">double</span> *yy0; <a name="l00875"></a>00875 <a name="l00876"></a>00876 <span class="keywordflow">for</span> (kk=1; kk<nargs-1; kk++){ <a name="l00877"></a>00877 <span class="keywordflow">if</span> (strncmp(runargs[kk],<span class="stringliteral">"-y0"</span>,7)==0){ <a name="l00878"></a>00878 DSDPCALLOC2(&yy0,<span class="keywordtype">double</span>,m,&info); <a name="l00879"></a>00879 <span class="keywordflow">for</span> (i=0;i<m;i++) yy0[i]=0.0; <a name="l00880"></a>00880 info = ReadInitialPoint(runargs[kk+1],m,yy0); <a name="l00881"></a>00881 <span class="keywordflow">for</span> (i=0;i<m;i++){info = <a class="code" href="group__DSDPSolution.html#gacf5a2bd7ecb03b319caa22e545ef8e01" title="Set the initial values of variables y in (D).">DSDPSetY0</a>(dsdp,i+1,yy0[i]);} <a name="l00882"></a>00882 DSDPFREE(&yy0,&info); <a name="l00883"></a>00883 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(runargs[kk],<span class="stringliteral">"-params"</span>,6)==0){ <a name="l00884"></a>00884 info=<a class="code" href="group__DSDPSolver.html#gab1340aac2a0c79108be725389f481979" title="Read DSDP parameters from a file.">DSDPReadOptions</a>(dsdp,runargs[kk+1]); <a name="l00885"></a>00885 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(runargs[kk],<span class="stringliteral">"-print"</span>,6)==0){ <a name="l00886"></a>00886 printlevel=atoi(runargs[kk+1]); <a name="l00887"></a>00887 } <a name="l00888"></a>00888 } <a name="l00889"></a>00889 <a name="l00890"></a>00890 info=<a class="code" href="group__DSDPBasic.html#ga5f1941aaedfa888e940bad968ac0d847" title="Read command line arguments to set options in DSDP.">DSDPSetOptions</a>(dsdp,runargs,nargs); <a name="l00891"></a>00891 <span class="comment">/* if (lpcone){info=LPConeScaleBarrier(lpcone,lpb); */</span> <a name="l00892"></a>00892 <span class="keywordflow">if</span> (rank==0){info=<a class="code" href="group__DSDPBasic.html#ga945023e6d663d0897d3d04a7d738608d" title="Print at every kth iteration.">DSDPSetStandardMonitor</a>(dsdp,printlevel);} <a name="l00893"></a>00893 <span class="keywordflow">if</span> (rank==0){info=DSDPSetFileMonitor(dsdp,printlevel);} <a name="l00894"></a>00894 <span class="keywordflow">return</span>(0); <a name="l00895"></a>00895 } <a name="l00896"></a>00896 <a name="l00897"></a>00897 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00898"></a>00898 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "ReadInitialPoint"</span> <a name="l00899"></a>00899 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> ReadInitialPoint(<span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> yy0[]) <a name="l00900"></a>00900 { <a name="l00901"></a>00901 FILE *fp; <a name="l00902"></a>00902 <span class="keywordtype">int</span> i,count; <a name="l00903"></a>00903 <a name="l00904"></a>00904 fp = fopen(filename,<span class="stringliteral">"r"</span>); <a name="l00905"></a>00905 <span class="keywordflow">if</span>(!fp) <a name="l00906"></a>00906 { printf(<span class="stringliteral">"\n Cannot open file containing initial dual solution %s"</span>,filename); <a name="l00907"></a>00907 <span class="keywordflow">return</span> 0; <a name="l00908"></a>00908 } <a name="l00909"></a>00909 <a name="l00910"></a>00910 <span class="keywordflow">for</span>(count=0,i=0;(i < m) &&(!feof(fp));i++){ <a name="l00911"></a>00911 <span class="keywordflow">if</span>(fscanf(fp,<span class="stringliteral">"%lf"</span>,&yy0[i] ) ){ count++; } <a name="l00912"></a>00912 } <a name="l00913"></a>00913 <a name="l00914"></a>00914 <span class="keywordflow">if</span> (count < m){ <a name="l00915"></a>00915 printf(<span class="stringliteral">"Warning: reading initial y vector: \n"</span>); <a name="l00916"></a>00916 printf(<span class="stringliteral">" Expecting %d entries but read only %d entries \n"</span>,m,count); <a name="l00917"></a>00917 } <a name="l00918"></a>00918 fclose(fp); <a name="l00919"></a>00919 <span class="keywordflow">return</span> 0; <a name="l00920"></a>00920 } <span class="comment">/* ReadUserY */</span> </pre></div></div> </div> <hr class="footer"/><address class="footer"><small>Generated on Wed Jun 8 2011 for DSDP by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address> </body> </html>