<!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/sdp/sdpconesetup.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_23046874d7fed141927c769a66d8e3a5.html">src</a> </li> <li class="navelem"><a class="el" href="dir_2c21778722bc8593635d5ebd154ac3f7.html">sdp</a> </li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <div class="title">sdpconesetup.c</div> </div> </div> <div class="contents"> <a href="sdpconesetup_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="dsdpsdp_8h.html" title="Internal SDPCone data structures and routines.">dsdpsdp.h</a>"</span> <a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="dsdpsys_8h.html" title="Error handling, printing, and profiling.">dsdpsys.h</a>"</span> <a name="l00008"></a>00008 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPDataTransposeInitialize"</span> <a name="l00010"></a>00010 <span class="preprocessor"></span> <a name="l00015"></a><a class="code" href="sdpconesetup_8c.html#a9f90fe14904405597f69159a091603d7">00015</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#a121e1aef433daad0b3ebd97a45dc022c" title="Initialize transpose structure for data.">DSDPDataTransposeInitialize</a>(<a class="code" href="structDSDPDataTranspose.html" title="Internal structure for transpose of data.">DSDPDataTranspose</a> *ATranspose){ <a name="l00016"></a>00016 DSDPFunctionBegin; <a name="l00017"></a>00017 ATranspose->nnzblocks=0; <a name="l00018"></a>00018 ATranspose->nzblocks=0; <a name="l00019"></a>00019 ATranspose->idA=0; <a name="l00020"></a>00020 ATranspose->idAP=0; <a name="l00021"></a>00021 ATranspose->ttnzmat=0; <a name="l00022"></a>00022 ATranspose->nnzblocks=0; <a name="l00023"></a>00023 DSDPFunctionReturn(0); <a name="l00024"></a>00024 } <a name="l00025"></a>00025 <a name="l00026"></a>00026 <span class="preprocessor">#undef __FUNCT__</span> <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPDataTransposeSetup"</span> <a name="l00028"></a>00028 <span class="preprocessor"></span> <a name="l00036"></a><a class="code" href="sdpconesetup_8c.html#a96f674a6d4943dc478003ddf582e0dd6">00036</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#a4286c8cd1fea9d84fd03c1ebd0e75343" title="Set up transpose structure for data.">DSDPDataTransposeSetup</a>(<a class="code" href="structDSDPDataTranspose.html" title="Internal structure for transpose of data.">DSDPDataTranspose</a> *ATranspose, <a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk, <span class="keywordtype">int</span> nblocks, <span class="keywordtype">int</span> m){ <a name="l00037"></a>00037 <a name="l00038"></a>00038 <span class="keywordtype">int</span> i,ii,kk,vvar,info; <a name="l00039"></a>00039 <span class="keywordtype">int</span> nnzmats,tnzmats=0; <a name="l00040"></a>00040 DSDPFunctionBegin; <a name="l00041"></a>00041 <a name="l00042"></a>00042 info=<a class="code" href="dsdpsdp_8h.html#a686a5277874324e2c056f97f20ba6bb4" title="Free transpose structure for data.">DSDPDataTransposeTakeDown</a>(ATranspose);DSDPCHKERR(info); <a name="l00043"></a>00043 <span class="comment">/* Determine sparsity pattern of SDP Data Matrices */</span> <a name="l00044"></a>00044 <a name="l00045"></a>00045 DSDPCALLOC2(&ATranspose->nnzblocks,<span class="keywordtype">int</span>,(m),&info);DSDPCHKERR(info); <a name="l00046"></a>00046 DSDPCALLOC2(&ATranspose->nzblocks,<span class="keywordtype">int</span>*,(m),&info);DSDPCHKERR(info); <a name="l00047"></a>00047 DSDPCALLOC2(&ATranspose->idA,<span class="keywordtype">int</span>*,(m),&info);DSDPCHKERR(info); <a name="l00048"></a>00048 ATranspose->m=m; <a name="l00049"></a>00049 <span class="keywordflow">for</span> (i=0;i<m;i++){ ATranspose->nnzblocks[i]=0; } <a name="l00050"></a>00050 <span class="keywordflow">for</span> (kk=0; kk<nblocks; kk++){ <a name="l00051"></a>00051 info=<a class="code" href="dsdpblock_8c.html#a5b2d38845e4f571e1ca58e7c17e9a593" title="Mark which variable in block have a data matrix.">DSDPBlockDataMarkNonzeroMatrices</a>(&blk[kk].ADATA,ATranspose->nnzblocks);DSDPCHKERR(info); <a name="l00052"></a>00052 } <a name="l00053"></a>00053 <span class="keywordflow">for</span> (tnzmats=0,i=0;i<m;i++){ tnzmats += ATranspose->nnzblocks[i];} <a name="l00054"></a>00054 <a name="l00055"></a>00055 DSDPCALLOC2(&ATranspose->ttnzmat,<span class="keywordtype">int</span>,tnzmats,&info);DSDPCHKERR(info); <a name="l00056"></a>00056 ATranspose->nzblocks[0]=ATranspose->ttnzmat; <a name="l00057"></a>00057 <span class="keywordflow">for</span> (i=1;i<m;i++){ <a name="l00058"></a>00058 ATranspose->nzblocks[i]=ATranspose->nzblocks[i-1]+ATranspose->nnzblocks[i-1]; <a name="l00059"></a>00059 } <a name="l00060"></a>00060 <a name="l00061"></a>00061 DSDPCALLOC2(&ATranspose->idAP,<span class="keywordtype">int</span>,tnzmats,&info);DSDPCHKERR(info); <a name="l00062"></a>00062 ATranspose->idA[0]=ATranspose->idAP; <a name="l00063"></a>00063 <span class="keywordflow">for</span> (i=1;i<m;i++){ <a name="l00064"></a>00064 ATranspose->idA[i]=ATranspose->idA[i-1]+ATranspose->nnzblocks[i-1]; <a name="l00065"></a>00065 } <a name="l00066"></a>00066 <a name="l00067"></a>00067 <span class="keywordflow">for</span> (i=0;i<m;i++){ATranspose->nnzblocks[i]=0;} <a name="l00068"></a>00068 <span class="keywordflow">for</span> (kk=0; kk<nblocks; kk++){ <a name="l00069"></a>00069 info=<a class="code" href="dsdpblock_8c.html#aa48f55168b6780852229dea20c3f1d38" title="Count how many data matrices are in a block of data.">DSDPBlockCountNonzeroMatrices</a>(&blk[kk].ADATA,&nnzmats);DSDPCHKERR(info); <a name="l00070"></a>00070 <span class="keywordflow">for</span> (i=0;i<nnzmats;i++){ <a name="l00071"></a>00071 info=<a class="code" href="dsdpblock_8c.html#a4154d7692828019b8f2d0f407310188c" title="Get a data matrix from a block of data.">DSDPBlockGetMatrix</a>(&blk[kk].ADATA,i,&ii,0,0);DSDPCHKERR(info); <a name="l00072"></a>00072 vvar=ATranspose->nnzblocks[ii]; <a name="l00073"></a>00073 ATranspose->nzblocks[ii][vvar]=kk; <a name="l00074"></a>00074 ATranspose->idA[ii][vvar]=i; <a name="l00075"></a>00075 ATranspose->nnzblocks[ii]++; <a name="l00076"></a>00076 } <a name="l00077"></a>00077 } <a name="l00078"></a>00078 <a name="l00079"></a>00079 DSDPFunctionReturn(0); <a name="l00080"></a>00080 } <a name="l00081"></a>00081 <a name="l00082"></a>00082 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPDataTransposeTakeDown"</span> <a name="l00084"></a>00084 <span class="preprocessor"></span> <a name="l00089"></a><a class="code" href="sdpconesetup_8c.html#a9ef8f365ed34a4fdbd391bffe58a75a6">00089</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#a686a5277874324e2c056f97f20ba6bb4" title="Free transpose structure for data.">DSDPDataTransposeTakeDown</a>(<a class="code" href="structDSDPDataTranspose.html" title="Internal structure for transpose of data.">DSDPDataTranspose</a> *ATranspose){ <a name="l00090"></a>00090 <span class="keywordtype">int</span> info; <a name="l00091"></a>00091 DSDPFunctionBegin; <a name="l00092"></a>00092 DSDPFREE(&ATranspose->ttnzmat,&info);DSDPCHKERR(info); <a name="l00093"></a>00093 DSDPFREE(&ATranspose->idAP,&info);DSDPCHKERR(info); <a name="l00094"></a>00094 DSDPFREE(&ATranspose->nzblocks,&info);DSDPCHKERR(info); <a name="l00095"></a>00095 DSDPFREE(&ATranspose->nnzblocks,&info);DSDPCHKERR(info); <a name="l00096"></a>00096 DSDPFREE(&ATranspose->idA,&info);DSDPCHKERR(info); <a name="l00097"></a>00097 info=<a class="code" href="dsdpsdp_8h.html#a121e1aef433daad0b3ebd97a45dc022c" title="Initialize transpose structure for data.">DSDPDataTransposeInitialize</a>(ATranspose);DSDPCHKERR(info); <a name="l00098"></a>00098 DSDPFunctionReturn(0); <a name="l00099"></a>00099 } <a name="l00100"></a>00100 <a name="l00101"></a>00101 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPCreateSDPCone"</span> <a name="l00103"></a>00103 <span class="preprocessor"></span> <a name="l00113"></a>00113 <span class="keywordtype">int</span> DSDPCreateSDPCone(<a class="code" href="structDSDP__C.html" title="Internal structures for the DSDP solver.">DSDP</a> dsdp, <span class="keywordtype">int</span> blocks, <a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a>* dspcone){ <a name="l00114"></a>00114 <span class="keywordtype">int</span> i,info; <a name="l00115"></a>00115 <a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone; <a name="l00116"></a>00116 <a name="l00117"></a>00117 DSDPFunctionBegin; <a name="l00118"></a>00118 DSDPCALLOC1(&sdpcone,<span class="keyword">struct</span> <a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone_C</a>,&info);DSDPCHKERR(info); <a name="l00119"></a>00119 *dspcone=sdpcone; <a name="l00120"></a>00120 sdpcone->keyid=SDPCONEKEY; <a name="l00121"></a>00121 info=<a class="code" href="dsdpsdp_8h.html#af777a03f652ec0fb5ccc1fc24a193c6b" title="Pass a semidefinite cone to the solver.">DSDPAddSDP</a>(dsdp,sdpcone);DSDPCHKERR(info); <a name="l00122"></a>00122 <a name="l00123"></a>00123 info=<a class="code" href="group__DSDPSolution.html#gae212bb3666f5c021f9d310a49438e94b" title="Copy the number of variables y.">DSDPGetNumberOfVariables</a>(dsdp,&sdpcone->m);DSDPCHKERR(info); <a name="l00124"></a>00124 DSDPCALLOC2(&sdpcone->blk,<a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a>,blocks,&info); DSDPCHKERR(info); <a name="l00125"></a>00125 <span class="keywordflow">for</span> (i=0;i<blocks; i++){ <a name="l00126"></a>00126 info=<a class="code" href="dsdpsdp_8h.html#aba330b2531cd72baf655f261bd57973d" title="Initialize data structures in one block of the cone.">DSDPBlockInitialize</a>(&sdpcone->blk[i]); DSDPCHKBLOCKERR(i,info); <a name="l00127"></a>00127 } <a name="l00128"></a>00128 <a name="l00129"></a>00129 sdpcone->nblocks=blocks; <a name="l00130"></a>00130 sdpcone->optype=3; <a name="l00131"></a>00131 info=DSDPUseDefaultDualMatrix(sdpcone); DSDPCHKERR(info); <a name="l00132"></a>00132 <a name="l00133"></a>00133 sdpcone->nn=0; <a name="l00134"></a>00134 sdpcone->dsdp=dsdp; <a name="l00135"></a>00135 info=<a class="code" href="dsdpsdp_8h.html#a121e1aef433daad0b3ebd97a45dc022c" title="Initialize transpose structure for data.">DSDPDataTransposeInitialize</a>(&sdpcone->ATR); DSDPCHKERR(info); <a name="l00136"></a>00136 info=DSDPBlockEventZero();DSDPCHKERR(info); <a name="l00137"></a>00137 info=DSDPDualMatEventZero();DSDPCHKERR(info); <a name="l00138"></a>00138 info=DSDPVMatEventZero();DSDPCHKERR(info); <a name="l00139"></a>00139 DSDPFunctionReturn(0); <a name="l00140"></a>00140 } <a name="l00141"></a>00141 <a name="l00142"></a>00142 <a name="l00143"></a>00143 <span class="keywordtype">int</span> <a class="code" href="sdpconesetup_8c.html#a2b57f5f8c4d3e67caec5ec409afc8bcd" title="Create S1, S2, and DS.">DSDPCreateS</a>(<a class="code" href="structDSDPBlockData.html" title="Internal structure for data in one block of semidefintie.">DSDPBlockData</a>*,<span class="keywordtype">char</span>,<span class="keywordtype">int</span>,<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>,<a class="code" href="structDSDPVMat__C.html" title="Dense symmetric matrix for one block in the semidefinite cone.">DSDPVMat</a>,<a class="code" href="structSDPConeVec__C.html" title="Vector whose length corresponds to dimension of a block in a cone.">SDPConeVec</a>,<a class="code" href="structSDPConeVec__C.html" title="Vector whose length corresponds to dimension of a block in a cone.">SDPConeVec</a>,<a class="code" href="structDSDPDualMat__C.html" title="Represents an S matrix for one block in the semidefinite cone.">DSDPDualMat</a>*, <a class="code" href="structDSDPDualMat__C.html" title="Represents an S matrix for one block in the semidefinite cone.">DSDPDualMat</a>*, <a class="code" href="structDSDPDSMat__C.html" title="Symmetric Delta S matrix for one block in the semidefinite cone.">DSDPDSMat</a>*, <span class="keywordtype">void</span>*); <a name="l00144"></a>00144 <a name="l00145"></a>00145 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPBlockSetup"</span> <a name="l00147"></a>00147 <span class="preprocessor"></span> <a name="l00154"></a><a class="code" href="sdpconesetup_8c.html#a186cb249adcc0871dfea7c2390e384ed">00154</a> <span class="keywordtype">int</span> <a class="code" href="sdpconesetup_8c.html#a186cb249adcc0871dfea7c2390e384ed" title="Allocate data structures of one block the cone.">DSDPBlockSetup</a>(<a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk, <span class="keywordtype">int</span> blockj, <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> WY){ <a name="l00155"></a>00155 <span class="keywordtype">int</span> n,info,trank,flag; <a name="l00156"></a>00156 DSDPFunctionBegin; <a name="l00157"></a>00157 <span class="comment">/* </span> <a name="l00158"></a>00158 <span class="comment"> info=DSDPBlockTakeDown(blk);DSDPCHKERR(info);</span> <a name="l00159"></a>00159 <span class="comment"> */</span> <a name="l00160"></a>00160 n=blk->n; <a name="l00161"></a>00161 info=<a class="code" href="dsdpxmat_8c.html#aae8cc5530449adc05a8f13d7ee56d00a" title="Answer whether the array has been allocated or not.">DSDPVMatExist</a>(blk->T,&flag);DSDPCHKERR(info); <a name="l00162"></a>00162 <span class="keywordflow">if</span> (flag==0){ <a name="l00163"></a>00163 info=<a class="code" href="dsdpsdp_8h.html#aff1b2849be280d7a70e9480e4089cd74" title="Allocate V matrix.">DSDPMakeVMat</a>(blk->format,n,&blk->T);DSDPCHKERR(info); <a name="l00164"></a>00164 } <a name="l00165"></a>00165 <a name="l00166"></a>00166 info = <a class="code" href="sdpconevec_8c.html#a53a8408afb7550464ba8e0c5ff84f949" title="Allocate array for indices.">DSDPIndexCreate</a>(blk->n,&blk->IS);DSDPCHKERR(info); <a name="l00167"></a>00167 info = SDPConeVecCreate(blk->n,&blk->W);DSDPCHKERR(info); <a name="l00168"></a>00168 info = <a class="code" href="sdpconevec_8c.html#a0b5c0b92c582546c95a5d676a3ed06c4" title="Allocate another vector with the same structure as the first.">SDPConeVecDuplicate</a>(blk->W,&blk->W2);DSDPCHKERR(info); <a name="l00169"></a>00169 <a name="l00170"></a>00170 <span class="comment">/* Build Lanczos structures */</span> <a name="l00171"></a>00171 info=<a class="code" href="dsdplanczos_8h.html#a94aaca7c5feb571597a089bc7302a021" title="Set parameter.">DSDPSetMaximumLanczosIterations</a>(&blk->Lanczos,20); DSDPCHKERR(info); <a name="l00172"></a>00172 <span class="keywordflow">if</span> (n>30){info=<a class="code" href="dsdplanczos_8h.html#a94aaca7c5feb571597a089bc7302a021" title="Set parameter.">DSDPSetMaximumLanczosIterations</a>(&blk->Lanczos,20); DSDPCHKERR(info);} <a name="l00173"></a>00173 <span class="keywordflow">if</span> (n>300){info=<a class="code" href="dsdplanczos_8h.html#a94aaca7c5feb571597a089bc7302a021" title="Set parameter.">DSDPSetMaximumLanczosIterations</a>(&blk->Lanczos,40); DSDPCHKERR(info);} <a name="l00174"></a>00174 <span class="keywordflow">if</span> (n>1000){info=<a class="code" href="dsdplanczos_8h.html#a94aaca7c5feb571597a089bc7302a021" title="Set parameter.">DSDPSetMaximumLanczosIterations</a>(&blk->Lanczos,50); DSDPCHKERR(info);} <a name="l00175"></a>00175 <span class="keywordflow">if</span> (1){ <a name="l00176"></a>00176 info=<a class="code" href="dsdplanczos_8h.html#a0db98a9eb4ae08a45498bf56de769636" title="Use Lanczos procedure. Assume off tridiagonal entries are zero.">DSDPFastLanczosSetup</a>(&blk->Lanczos,blk->W);DSDPCHKERR(info); <a name="l00177"></a>00177 DSDPLogInfo(0,19,<span class="stringliteral">"SDP Block %d using Fast Lanczos\n"</span>,blockj); <a name="l00178"></a>00178 } <span class="keywordflow">else</span> { <a name="l00179"></a>00179 info=<a class="code" href="dsdplanczos_8h.html#af016e5b9270f774d081faff7296f0259" title="Use slowerer but more robust method.">DSDPRobustLanczosSetup</a>(&blk->Lanczos,blk->W);DSDPCHKERR(info); <a name="l00180"></a>00180 DSDPLogInfo(0,19,<span class="stringliteral">"SDP Block %d using Full Lanczos\n"</span>,blockj); <a name="l00181"></a>00181 } <a name="l00182"></a>00182 <a name="l00183"></a>00183 <span class="comment">/* Eigenvalues and Eigenvectors */</span> <a name="l00184"></a>00184 info=<a class="code" href="dsdpblock_8c.html#acc8cf4482d76bba62bf861f2d2296a78" title="Factor the data matrices.">DSDPBlockFactorData</a>(&blk->ADATA,blk->T,blk->W);DSDPCHKERR(info); <a name="l00185"></a>00185 info=DSDPBlockDataRank(&blk->ADATA,&trank,n);DSDPCHKERR(info); <a name="l00186"></a>00186 <a name="l00187"></a>00187 info=<a class="code" href="sdpconesetup_8c.html#a2b57f5f8c4d3e67caec5ec409afc8bcd" title="Create S1, S2, and DS.">DSDPCreateS</a>(&blk->ADATA,blk->format,trank,WY,blk->T,blk->W,blk->W2,&blk->S,&blk->SS,&blk->DS,0);DSDPCHKERR(info); <a name="l00188"></a>00188 <a name="l00189"></a>00189 DSDPFunctionReturn(0); <a name="l00190"></a>00190 } <a name="l00191"></a>00191 <a name="l00192"></a>00192 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00193"></a>00193 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "SDPConeBlockNNZ"</span> <a name="l00194"></a>00194 <span class="preprocessor"></span><span class="keywordtype">int</span> SDPConeBlockNNZ(<a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk,<span class="keywordtype">int</span> m){ <a name="l00195"></a>00195 <span class="keywordtype">int</span> i,ii,n,info,nnz,nnzmats,tnnzmats,tnnz=0; <a name="l00196"></a>00196 <span class="keywordtype">double</span> scl; <a name="l00197"></a>00197 <a class="code" href="structDSDPDataMat__C.html" title="Symmetric data matrix for one block in the semidefinite cone.">DSDPDataMat</a> AA; <a name="l00198"></a>00198 DSDPFunctionBegin; <a name="l00199"></a>00199 nnzmats=blk->ADATA.nnzmats;tnnzmats=nnzmats; <a name="l00200"></a>00200 n=blk->n; <a name="l00201"></a>00201 <a name="l00202"></a>00202 <span class="keywordflow">for</span> (i=0;i<nnzmats;i++){ <a name="l00203"></a>00203 info=<a class="code" href="dsdpblock_8c.html#a4154d7692828019b8f2d0f407310188c" title="Get a data matrix from a block of data.">DSDPBlockGetMatrix</a>(&blk->ADATA,i,&ii,&scl,&AA);DSDPCHKERR(info); <a name="l00204"></a>00204 <span class="keywordflow">if</span> (ii==0){tnnzmats--; <span class="keywordflow">continue</span>;} <a name="l00205"></a>00205 <span class="keywordflow">if</span> (ii==m-1){<span class="keywordflow">continue</span>;} <a name="l00206"></a>00206 info = <a class="code" href="dsdpdatamat_8c.html#ab728c1dc951c326d197490022b917c52" title="Compute the square of the Frobenius norm.">DSDPDataMatCountNonzeros</a>(AA,&nnz,n); DSDPCHKERR(info); <a name="l00207"></a>00207 tnnz+= (nnz*(tnnzmats-i)); <a name="l00208"></a>00208 } <a name="l00209"></a>00209 <span class="keywordflow">if</span> (tnnzmats>1){ tnnz=tnnz/((tnnzmats)*(tnnzmats+1)/2); } <a name="l00210"></a>00210 <span class="keywordflow">if</span> (tnnz<1) tnnz = 1; <a name="l00211"></a>00211 blk->nnz=tnnz; <a name="l00212"></a>00212 DSDPFunctionReturn(0); <a name="l00213"></a>00213 } <a name="l00214"></a>00214 <a name="l00215"></a>00215 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00216"></a>00216 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "SDPConeSetup2"</span> <a name="l00217"></a>00217 <span class="preprocessor"></span> <a name="l00224"></a><a class="code" href="sdpconesetup_8c.html#a8ef21ade6b5c6fadf5c0af6940c84e29">00224</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#a5012d0653a4214916b95fd1548789f0b" title="Allocate data structure of the cone.">SDPConeSetup2</a>(<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone, <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> yy0, <a class="code" href="structDSDPSchurMat__C.html" title="Schur complement matrix whose solution is the Newton direction.">DSDPSchurMat</a> M){ <a name="l00225"></a>00225 <span class="keywordtype">int</span> kk,n,m,info; <a name="l00226"></a>00226 <span class="keywordtype">double</span> nn=0; <a name="l00227"></a>00227 <a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk; <a name="l00228"></a>00228 DSDPFunctionBegin; <a name="l00229"></a>00229 info=DSDPVecGetSize(yy0,&m);DSDPCHKERR(info); <a name="l00230"></a>00230 <span class="keywordflow">for</span> (kk=0; kk<sdpcone->nblocks; kk++){ <a name="l00231"></a>00231 blk=&sdpcone->blk[kk]; <a name="l00232"></a>00232 n=blk->n; <a name="l00233"></a>00233 info=SDPConeBlockNNZ(blk,m);DSDPCHKERR(info); <a name="l00234"></a>00234 info=<a class="code" href="sdpconesetup_8c.html#a186cb249adcc0871dfea7c2390e384ed" title="Allocate data structures of one block the cone.">DSDPBlockSetup</a>(blk,kk,sdpcone->Work);DSDPCHKERR(info); <a name="l00235"></a>00235 nn+=n*blk->gammamu; <a name="l00236"></a>00236 } <a name="l00237"></a>00237 sdpcone->nn=(int)nn; <a name="l00238"></a>00238 DSDPFunctionReturn(0); <a name="l00239"></a>00239 } <a name="l00240"></a>00240 <a name="l00241"></a>00241 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00242"></a>00242 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "SDPConeSetup"</span> <a name="l00243"></a>00243 <span class="preprocessor"></span> <a name="l00249"></a><a class="code" href="sdpconesetup_8c.html#a871866362598869ebdeb3c1e0aa75d06">00249</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#aa08e7793b0e39e2280f857a1259f423e" title="Allocate data structure of the cone.">SDPConeSetup</a>(<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone, <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> yy0){ <a name="l00250"></a>00250 <span class="keywordtype">int</span> kk,n,m,info; <a name="l00251"></a>00251 DSDPFunctionBegin; <a name="l00252"></a>00252 <a name="l00253"></a>00253 info = DSDPVecGetSize(yy0,&m);DSDPCHKERR(info); <a name="l00254"></a>00254 <span class="keywordflow">if</span> (m!=sdpcone->m+2){DSDPSETERR(8,<span class="stringliteral">"CHECK DIMENSION\n"</span>);} <a name="l00255"></a>00255 info = DSDPVecDuplicate(yy0,&sdpcone->Work);DSDPCHKERR(info); <a name="l00256"></a>00256 info = DSDPVecDuplicate(yy0,&sdpcone->Work2);DSDPCHKERR(info); <a name="l00257"></a>00257 info = DSDPVecDuplicate(yy0,&sdpcone->YY);DSDPCHKERR(info); <a name="l00258"></a>00258 info = DSDPVecDuplicate(yy0,&sdpcone->YX);DSDPCHKERR(info); <a name="l00259"></a>00259 info = DSDPVecDuplicate(yy0,&sdpcone->DYX);DSDPCHKERR(info); <a name="l00260"></a>00260 <span class="keywordflow">for</span> (kk=0; kk<sdpcone->nblocks; kk++){ <a name="l00261"></a>00261 n=sdpcone->blk[kk].n; <a name="l00262"></a>00262 info=<a class="code" href="dsdpadddatamat_8c.html#a5d965be4615ce48c2b0bd3d88399a40c" title="Add identify matrix to dual matrix.">SDPConeSetRIdentity</a>(sdpcone,kk,n,1.0);DSDPCHKERR(info); <a name="l00263"></a>00263 } <a name="l00264"></a>00264 <a name="l00265"></a>00265 info=<a class="code" href="dsdpsdp_8h.html#a4286c8cd1fea9d84fd03c1ebd0e75343" title="Set up transpose structure for data.">DSDPDataTransposeSetup</a>(&sdpcone->ATR,sdpcone->blk,sdpcone->nblocks,m); DSDPCHKERR(info); <a name="l00266"></a>00266 info=DSDPBlockEventInitialize();DSDPCHKERR(info); <a name="l00267"></a>00267 info=DSDPDualMatEventInitialize();DSDPCHKERR(info); <a name="l00268"></a>00268 info=DSDPVMatEventInitialize();DSDPCHKERR(info); <a name="l00269"></a>00269 DSDPFunctionReturn(0); <a name="l00270"></a>00270 } <a name="l00271"></a>00271 <a name="l00272"></a>00272 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPBlockInitialize"</span> <a name="l00274"></a>00274 <span class="preprocessor"></span> <a name="l00279"></a><a class="code" href="sdpconesetup_8c.html#a6b852a8cecad1f54266a1b1894fde3ba">00279</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#aba330b2531cd72baf655f261bd57973d" title="Initialize data structures in one block of the cone.">DSDPBlockInitialize</a>(<a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk){ <a name="l00280"></a>00280 <span class="keywordtype">int</span> info; <a name="l00281"></a>00281 DSDPFunctionBegin; <a name="l00282"></a>00282 blk->n=0; <a name="l00283"></a>00283 blk->format=<span class="charliteral">'N'</span>; <a name="l00284"></a>00284 blk->gammamu=1.0; <a name="l00285"></a>00285 blk->bmu=0.0; <a name="l00286"></a>00286 blk->nnz=10000000; <a name="l00287"></a>00287 <a name="l00288"></a>00288 info = <a class="code" href="dsdpdualmat_8c.html#a23fcb33f75e4ba4aa70cf519123745c4" title="Set pointers to null.">DSDPDualMatInitialize</a>(&blk->S); DSDPCHKERR(info); <a name="l00289"></a>00289 info = <a class="code" href="dsdpdualmat_8c.html#a23fcb33f75e4ba4aa70cf519123745c4" title="Set pointers to null.">DSDPDualMatInitialize</a>(&blk->SS); DSDPCHKERR(info); <a name="l00290"></a>00290 info = <a class="code" href="dsdpdsmat_8c.html#af3f1124787ca6a784818a70fcd7aaa83" title="Set pointers to null.">DSDPDSMatInitialize</a>(&blk->DS); DSDPCHKERR(info); <a name="l00291"></a>00291 info = <a class="code" href="dsdpxmat_8c.html#a0088d6c397591c98f9e52a019c385304" title="Set pointers to null.">DSDPVMatInitialize</a>(&blk->T); DSDPCHKERR(info); <a name="l00292"></a>00292 info = <a class="code" href="dsdplanczos_8h.html#a5f6b8919f166ba6149cf12e71b8d3bca" title="Initialize Lanczos structure.">DSDPLanczosInitialize</a>(&blk->Lanczos); DSDPCHKERR(info); <a name="l00293"></a>00293 info = <a class="code" href="dsdpblock_8c.html#a45c16dcc217a9865cbe223bcf7b4d603" title="Set pointers to null.">DSDPBlockDataInitialize</a>(&blk->ADATA); DSDPCHKERR(info); <a name="l00294"></a>00294 info = <a class="code" href="sdpconevec_8c.html#aece9ed7b85bae935bfb13788aa0de60c" title="Set structure pointers to 0.">DSDPIndexInitialize</a>(&blk->IS); DSDPCHKERR(info); <a name="l00295"></a>00295 DSDPFunctionReturn(0); <a name="l00296"></a>00296 } <a name="l00297"></a>00297 <a name="l00298"></a>00298 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00299"></a>00299 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPBlockTakeDown"</span> <a name="l00300"></a>00300 <span class="preprocessor"></span> <a name="l00305"></a><a class="code" href="sdpconesetup_8c.html#a0d09bd6d03e468abb4a7fc393e181821">00305</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#ad61e0abe2e4377911e6e75f6bf34a678" title="Free data structures in one block of the cone.">DSDPBlockTakeDown</a>(<a class="code" href="structSDPblk.html" title="Internal structure for block of semidefinite cone.">SDPblk</a> *blk){ <a name="l00306"></a>00306 <span class="keywordtype">int</span> info; <a name="l00307"></a>00307 DSDPFunctionBegin; <a name="l00308"></a>00308 <span class="keywordflow">if</span> (!blk){DSDPFunctionReturn(0);} <a name="l00309"></a>00309 info=<a class="code" href="dsdpblock_8c.html#afe404f36fc31fa861ff1100777171941" title="Free structures in block of data.">DSDPBlockTakeDownData</a>(&blk->ADATA);DSDPCHKERR(info); <a name="l00310"></a>00310 info=SDPConeVecDestroy(&blk->W);DSDPCHKERR(info); <a name="l00311"></a>00311 info=SDPConeVecDestroy(&blk->W2);DSDPCHKERR(info); <a name="l00312"></a>00312 info=<a class="code" href="sdpconevec_8c.html#a21a43b855d553444080b135912c2227d" title="Deallocate memory.">DSDPIndexDestroy</a>(&blk->IS);DSDPCHKERR(info); <a name="l00313"></a>00313 info=<a class="code" href="dsdplanczos_8h.html#a13450b87544302fa3e6ceda031189a7a" title="Free data structure.">DSDPLanczosDestroy</a>(&blk->Lanczos);DSDPCHKERR(info); <a name="l00314"></a>00314 info=<a class="code" href="dsdpdualmat_8c.html#aa27a146654de21980c02f192660550ab" title="Free the matrix structure.">DSDPDualMatDestroy</a>(&blk->SS);DSDPCHKERR(info); <a name="l00315"></a>00315 info=<a class="code" href="dsdpdualmat_8c.html#aa27a146654de21980c02f192660550ab" title="Free the matrix structure.">DSDPDualMatDestroy</a>(&blk->S);DSDPCHKERR(info); <a name="l00316"></a>00316 info=<a class="code" href="dsdpdsmat_8c.html#ab3e28c12ae70491cc1fb6d0e4024757a" title="Free the data structure.">DSDPDSMatDestroy</a>(&blk->DS);DSDPCHKERR(info); <a name="l00317"></a>00317 info=<a class="code" href="dsdpxmat_8c.html#acb23f3beb4969a6d69d1e3af7ccba034" title="Deallocate matrix.">DSDPVMatDestroy</a>(&blk->T);DSDPCHKERR(info); <a name="l00318"></a>00318 DSDPFunctionReturn(0); <a name="l00319"></a>00319 } <a name="l00320"></a>00320 <a name="l00321"></a>00321 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00322"></a>00322 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "DSDPConeTakeDown"</span> <a name="l00323"></a>00323 <span class="preprocessor"></span> <a name="l00328"></a><a class="code" href="sdpconesetup_8c.html#a000169a392448536951f6429f357d140">00328</a> <span class="keywordtype">int</span> <a class="code" href="sdpconesetup_8c.html#a000169a392448536951f6429f357d140" title="Free data structure of the cone.">DSDPConeTakeDown</a>(<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone){ <a name="l00329"></a>00329 <span class="keywordtype">int</span> blockj,info; <a name="l00330"></a>00330 DSDPFunctionBegin; <a name="l00331"></a>00331 <span class="keywordflow">for</span> (blockj=0; blockj<sdpcone->nblocks; blockj++){ <a name="l00332"></a>00332 info=<a class="code" href="dsdpsdp_8h.html#ad61e0abe2e4377911e6e75f6bf34a678" title="Free data structures in one block of the cone.">DSDPBlockTakeDown</a>(&sdpcone->blk[blockj]);DSDPCHKERR(info); <a name="l00333"></a>00333 } <a name="l00334"></a>00334 info=DSDPVecDestroy(&sdpcone->Work);DSDPCHKERR(info); <a name="l00335"></a>00335 info=DSDPVecDestroy(&sdpcone->Work2);DSDPCHKERR(info); <a name="l00336"></a>00336 info=DSDPVecDestroy(&sdpcone->YY);DSDPCHKERR(info); <a name="l00337"></a>00337 info=DSDPVecDestroy(&sdpcone->YX);DSDPCHKERR(info); <a name="l00338"></a>00338 info=DSDPVecDestroy(&sdpcone->DYX);DSDPCHKERR(info); <a name="l00339"></a>00339 info=<a class="code" href="dsdpsdp_8h.html#a686a5277874324e2c056f97f20ba6bb4" title="Free transpose structure for data.">DSDPDataTransposeTakeDown</a>(&sdpcone->ATR);DSDPCHKERR(info); <a name="l00340"></a>00340 DSDPFunctionReturn(0); <a name="l00341"></a>00341 } <a name="l00342"></a>00342 <a name="l00343"></a>00343 <span class="preprocessor">#undef __FUNCT__ </span> <a name="l00344"></a>00344 <span class="preprocessor"></span><span class="preprocessor">#define __FUNCT__ "SDPConeDestroy"</span> <a name="l00345"></a>00345 <span class="preprocessor"></span> <a name="l00350"></a><a class="code" href="sdpconesetup_8c.html#a875286e811bbc54ea7f54e272028f8ec">00350</a> <span class="keywordtype">int</span> <a class="code" href="dsdpsdp_8h.html#a7dee9dca02543b2809d76d7a6e0493d8" title="Free data structure of the cone.">SDPConeDestroy</a>(<a class="code" href="structSDPCone__C.html" title="Internal structure for semidefinite cone.">SDPCone</a> sdpcone){ <a name="l00351"></a>00351 <span class="keywordtype">int</span> blockj,info; <a name="l00352"></a>00352 DSDPFunctionBegin; <a name="l00353"></a>00353 info=<a class="code" href="sdpconesetup_8c.html#a000169a392448536951f6429f357d140" title="Free data structure of the cone.">DSDPConeTakeDown</a>(sdpcone);DSDPCHKERR(info); <a name="l00354"></a>00354 <span class="keywordflow">for</span> (blockj=0; blockj<sdpcone->nblocks; blockj++){ <a name="l00355"></a>00355 info=<a class="code" href="dsdpblock_8c.html#a308bb1d9ec0ec39af374e457934552dd" title="Free the data matrices.">DSDPBlockDataDestroy</a>(&sdpcone->blk[blockj].ADATA);DSDPCHKERR(info); <a name="l00356"></a>00356 } <a name="l00357"></a>00357 DSDPFREE(&sdpcone->blk,&info);DSDPCHKERR(info); <a name="l00358"></a>00358 DSDPFREE(&sdpcone,&info);DSDPCHKERR(info); <a name="l00359"></a>00359 info=DSDPBlockEventZero();DSDPCHKERR(info); <a name="l00360"></a>00360 info=DSDPDualMatEventZero();DSDPCHKERR(info); <a name="l00361"></a>00361 info=DSDPVMatEventZero();DSDPCHKERR(info); <a name="l00362"></a>00362 DSDPFunctionReturn(0); <a name="l00363"></a>00363 } <a name="l00364"></a>00364 </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>