<div dir="auto">You can verify there is a generalization of the inertia theorem thanks to Ikramov. Furthermore, recall the inertia theorem is about eigenvalues; for a Hermitian matrix, you can diagonalize it in a form that has real entries, and that preserves the eigenvalues.<div dir="auto"><br></div><div dir="auto">Of course, being able to apply the theorem and actually applying the theorem/method are very different. Should be something that could be added to MUMPS. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Feb 22, 2018 8:39 PM, "Anthony Ruth" <<a href="mailto:Anthony.J.Ruth.12@nd.edu">Anthony.J.Ruth.12@nd.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello,</div><div><br></div><div>I am trying to diagonalize a hermitian matrix using the Eigen Problem Solver in SLEPc, I run into errors on calls to MatGetInertia() with complex hermitian matrices that I did not see with real matrices. The complex and real versions were done with separate PETSC_ARCH. I do not know if the problem is with the set up of the matrix or more generally a problem calculating the inertia for a complex matrix. </div><div>The matrix is created by:</div><div><br></div><div><div><span style="white-space:pre-wrap">      </span>ierr = MatSetType(A,MATAIJ);CHKERRQ(<wbr>ierr);<br></div><div><span style="white-space:pre-wrap">  </span>ierr = MatSetSizes(A,PETSC_DECIDE,<wbr>PETSC_DECIDE,N,N);CHKERRQ(<wbr>ierr);</div><div>        ierr = MatSetFromOptions(A);CHKERRQ(<wbr>ierr);    </div><div><span style="white-space:pre-wrap">  </span>ierr = MatSetUp(A);CHKERRQ(ierr);</div><div><span style="white-space:pre-wrap">        </span>ierr = MatSetOption(A,MAT_HERMITIAN,<wbr>PETSC_TRUE);CHKERRQ(ierr);<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>ierr = MatGetOwnershipRange(A,&first_<wbr>row,&last_row);CHKERRQ(ierr);</div><div><span style="white-space:pre-wrap">    </span>ierr = MatSetValues(A,m,idxm,n,idxn,<wbr>data,INSERT_VALUES);CHKERRQ(<wbr>ierr);</div><div><span style="white-space:pre-wrap">     </span>ierr = MatAssemblyBegin(A,MAT_FINAL_<wbr>ASSEMBLY);CHKERRQ(ierr);</div><div><span style="white-space:pre-wrap">  </span>ierr = MatAssemblyEnd(A,MAT_FINAL_<wbr>ASSEMBLY);CHKERRQ(ierr);</div></div><div><br></div><div>For a hermitian matrix, all the eigenvalues are real, so I believe it is possible to calculate an inertia by looking at the signs of the diagonal entries. I believe if it was complex but not hermitian, the complex eigenvalues calculating inertia would be difficult.  Is there some problem with doing this through sparse iterative methods? Is there a certain place the matrix needs to be specified as hermitian besides upon assembly? </div><div><br></div><div>Here is the error stack I see when running:</div><div><br></div><div><br></div><div><div>Mat Object: 1 MPI processes</div><div>  type: seqaij</div><div>row 0: (0, 0.)  (1, 1. + 1. i) (2, 0.)  (3, 0.)  (4, 0.) </div><div>row 1: (0, 1. - 1. i) (1, 0.)  (2, 1. + 1. i) (3, 0.)  (4, 0.) </div><div>row 2: (0, 0.)  (1, 1. - 1. i) (2, 0.)  (3, 1. + 1. i) (4, 0.) </div><div>row 3: (0, 0.)  (1, 0.)  (2, 1. - 1. i) (3, 0.)  (4, 1. + 1. i)</div><div>row 4: (0, 0.)  (1, 0.)  (2, 0.)  (3, 1. - 1. i) (4, 0.) </div><div>[0]PETSC ERROR: --------------------- Error Message ------------------------------<wbr>------------------------------<wbr>--<br></div><div>[0]PETSC ERROR: No support for this operation for this object type</div><div>[0]PETSC ERROR: Mat type mumps</div><div>[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/<wbr>documentation/faq.html</a> for trouble shooting.</div><div>[0]PETSC ERROR: Petsc Release Version 3.8.2, Nov, 09, 2017 </div><div>[0]PETSC ERROR: Configure options --download-metis --download-mumps --download-parmetis --download-scalapack --with-scalar-type=complex<br></div><div>[0]PETSC ERROR: #1 MatGetInertia() line 8416 in /home/anthony/DFTB+SIPs/petsc-<wbr>3.8.2/src/mat/interface/<wbr>matrix.c</div><div>[0]PETSC ERROR: #2 EPSSliceGetInertia() line 333 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/ks-slice.c</div><div>[0]PETSC ERROR: #3 EPSSetUp_KrylovSchur_Slice() line 459 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/ks-slice.c</div><div>[0]PETSC ERROR: #4 EPSSetUp_KrylovSchur() line 146 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/krylovschur.c</div><div>[0]PETSC ERROR: #5 EPSSetUp() line 165 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/interface/<wbr>epssetup.c</div><div>[0]PETSC ERROR: #6 EPSSliceGetEPS() line 298 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/ks-slice.c</div><div>[0]PETSC ERROR: #7 EPSSetUp_KrylovSchur_Slice() line 408 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/ks-slice.c</div><div>[0]PETSC ERROR: #8 EPSSetUp_KrylovSchur() line 146 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/impls/krylov/<wbr>krylovschur/krylovschur.c</div><div>[0]PETSC ERROR: #9 EPSSetUp() line 165 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/interface/<wbr>epssetup.c</div><div>[0]PETSC ERROR: #10 SIPSolve() line 195 in /home/anthony/DFTB+SIPs/dftb-<wbr>eig15/sips.c</div><div>[0]PETSC ERROR: --------------------- Error Message ------------------------------<wbr>------------------------------<wbr>--</div><div>[0]PETSC ERROR: Invalid argument</div><div>[0]PETSC ERROR: Wrong type of object: Parameter # 1</div><div>[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/<wbr>documentation/faq.html</a> for trouble shooting.</div><div>[0]PETSC ERROR: Petsc Release Version 3.8.2, Nov, 09, 2017 </div><div>[0]PETSC ERROR: Configure options --download-metis --download-mumps --download-parmetis --download-scalapack --with-scalar-type=complex<br></div><div>[0]PETSC ERROR: #11 EPSGetConverged() line 257 in /home/anthony/DFTB+SIPs/slepc-<wbr>3.8.1/src/eps/interface/<wbr>epssolve.c</div><div>[0]PETSC ERROR: #12 squareFromEPS() line 131 in /home/anthony/DFTB+SIPs/dftb-<wbr>eig15/sips_square.c</div></div><div><br></div><div><br></div><div><br></div>regards,<br clear="all"><div><div class="m_4901389753272975807gmail_signature"><div dir="ltr"><div><div dir="ltr">Anthony Ruth</div><div dir="ltr"><div><div><div>Condensed Matter Theory</div><div>University of Notre Dame</div></div></div></div></div></div></div></div>
</div>
</blockquote></div></div>