<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am trying to solve a mixed complementarity problem using the TAO SSILS Solver . <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>C(x) = A x + d ,    l <= x <= u<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>where A = n x n matrix<o:p></o:p></p><p class=MsoNormal>               D = n x 1 vector<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The Jacobian matrix is equal to the matrix A and is constant at each iteration.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have setup the Jacobian update function<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>PetscErrorCode FormJacobian(Tao, Vec X, Mat H, Mat, void *ptr)<o:p></o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>AppCtx         *data = (AppCtx *)ptr;<o:p></o:p></p><p class=MsoNormal>                PetscErrorCode ierr;<o:p></o:p></p><p class=MsoNormal>                PetscInt       N;<o:p></o:p></p><p class=MsoNormal>                PetscInt       zero = 0;<o:p></o:p></p><p class=MsoNormal>                PetscScalar    *d, v;<o:p></o:p></p><p class=MsoNormal>                PetscBool      assembled;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                PetscFunctionBegin;<o:p></o:p></p><p class=MsoNormal>                ierr = MatAssembled(H, &assembled); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal>                if (assembled) { ierr = MatZeroEntries(H); CHKERRQ(ierr); }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                /* Get pointers to vector data */<o:p></o:p></p><p class=MsoNormal>                VecGetSize(X, &N);<o:p></o:p></p><p class=MsoNormal>                for (auto i = zero; i != N; ++i)<o:p></o:p></p><p class=MsoNormal>                {<o:p></o:p></p><p class=MsoNormal>                                for (auto j = zero; j != N; ++j)<o:p></o:p></p><p class=MsoNormal>                                {<o:p></o:p></p><p class=MsoNormal>                                                ierr = MatGetValue(data->A, i, j, &v);<o:p></o:p></p><p class=MsoNormal>                                                ierr = MatSetValue(H, i, j, v, INSERT_VALUES);<o:p></o:p></p><p class=MsoNormal>                                }<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                /* Assemble the matrix */<o:p></o:p></p><p class=MsoNormal>                ierr = MatSetOption(H, MAT_IGNORE_ZERO_ENTRIES, PETSC_TRUE); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal>                ierr = MatAssemblyBegin(H, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal>                ierr = MatAssemblyEnd(H, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal>                PetscFunctionReturn(0);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In this case, after iterating over all the row and column indexes and assembling the matrix the function seems to run correctly.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>But when I try to copy the matrix<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>PetscErrorCode FormJacobian(Tao, Vec X, Mat H, Mat, void *ptr)<o:p></o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-indent:.5in'>PetscFunctionReturn(0);<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>AppCtx         *data = (AppCtx *)ptr;<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>PetscErrorCode ierr;<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>ierr = MatAssembled(H, &assembled); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>if (assembled) { ierr = MatZeroEntries(H); CHKERRQ(ierr); }<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>ierr = MatConvert(data->A, MATSAME, MatReuse::MAT_INITIAL_MATRIX, &H); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                /* Assemble the matrix */<o:p></o:p></p><p class=MsoNormal>                ierr = MatAssemblyBegin(H, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); <o:p></o:p></p><p class=MsoNormal>                ierr = MatAssemblyEnd(H, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);<o:p></o:p></p><p class=MsoNormal>                PetscFunctionReturn(0);<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I get the following error messages.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Problem size: 259 rows<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: Object is in wrong state<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: Not for unassembled matrix<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: Petsc Release Version 3.6.3, Dec, 03, 2015<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: Unknown Name on a arch-mswin-c-debug named LAGRANGE by Christopher Mon Apr 11 19:57:37 2016<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: Configure options --with-cc="win32fe cl" --with-fc=0 --with-mpi=0 --download-f2cblaslapack=1 --with-debugging=1<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #1 MatMult() line 2210 in C:\Apps\Projects\petsc-3.6.3\src\mat\interface\matrix.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #2 MatDFischer() line 284 in C:\Apps\Projects  \petsc-3.6.3\src\tao\util\tao_util.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #3 Tao_SSLS_FunctionGradient() line 64 in C:\Apps\Projects  \petsc-3.6.3\src\tao\complementarity\impls\ssls\ssls.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #4 TaoLineSearchComputeObjectiveAndGradient() line 941 in C:\Apps\Projects \petsc-3.6.3\src\tao\linesearch\interface\taolinesearch.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #5 TaoSolve_SSILS() line 64 in C:\Apps\Projects \petsc-3.6.3\src\tao\complementarity\impls\ssls\ssils.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #6 TaoSolve() line 204 in C:\Apps\Projects\ petsc-3.6.3\src\tao\interface\taosolver.c<o:p></o:p></p><p class=MsoNormal>[0]PETSC ERROR: #7 run_complementarity() line 394 in c:\apps\projects \complementarity.cpp<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am new to PETSC. Can anyone help me?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Chris Athiade<o:p></o:p></p></div></body></html>