<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">
<div dir="ltr">Jan:<br>
</div>
<div>Mumps manual says:</div>
<div>
<div class="gmail-page" title="Page 89">
<div class="gmail-layoutArea">
<div class="gmail-column">
<p><span style="font-size:9pt;font-family:NimbusMonL">--3 MUMPS </span><span style="font-size:9pt;font-family:NimbusRomNo9L">was called with an invalid value for </span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">.
 This may happen if the analysis (</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">=1)was not performed (or failed) before the factorization (</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">=2),
 or the factorization was not performed (or failed) before the solve (</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">=3), or the initialization phase (</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">=-1)
 was performed a second time on an instance not freed (</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">=-2). See description of
</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB
</span><span style="font-size:9pt;font-family:NimbusRomNo9L">in </span><span style="font-size:9pt;font-family:NimbusRomNo9L;color:rgb(0,26,128)">Section 4</span><span style="font-size:9pt;font-family:NimbusRomNo9L">. This error also occurs if
</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB
</span><span style="font-size:9pt;font-family:NimbusRomNo9L">does not contain the same value on all processes on entry to
</span><span style="font-size:9pt;font-family:NimbusMonL">MUMPS</span><span style="font-size:9pt;font-family:NimbusRomNo9L">.
</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">INFO(2)
</span><span style="font-size:9pt;font-family:NimbusRomNo9L">is then set to the local value of
</span><span style="font-size:9pt;font-family:NimbusMonL;color:rgb(0,26,128)">JOB</span><span style="font-size:9pt;font-family:NimbusRomNo9L">. </span></p>
<p><span style="font-size:9pt;font-family:NimbusRomNo9L">However, your code seems identical to </span>petsc/src/ksp/ksp/examples/tests/ex27.c which works fine. Can you test your matrices using ex27.c?</p>
<p>Hong</p>
</div>
</div>
</div>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div style="overflow-wrap: break-word;">Hey,
<div>I tried your proposed way. The factorization seems to work but the I get an error when solving A*X=B. When I run the appended code </div>
<div>I get the following error message:</div>
<div><br>
</div>
<div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">Traceback (most recent call last):</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">  File "inverse_matrix.py", line 145, in <module></span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">    compute_inverse_mat(dynamical_matrix_nn, args.dynamical_matrix_dimension, args.m_cols_rows)</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">  File "inverse_matrix.py", line 130, in compute_inverse_mat</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">    greens_function = fac_dyn_matrix.matSolve(B,x)</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">  File "PETSc/Mat.pyx", line 1509, in petsc4py.PETSc.Mat.matSolve</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">petsc4py.PETSc.Error: error code 76</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">[1] MatMatSolve() line 3380 in /Users/griesserj/Libaries/petsc/src/mat/interface/matrix.c</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">[1] MatMatSolve_MUMPS() line 1177 in /Users/griesserj/Libaries/petsc/src/mat/impls/aij/mpi/mumps/mumps.c</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">[1] Error in external library</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">[1] Error reported by MUMPS in solve phase: INFOG(1)=-3</span></div>
</div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures"><br>
</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
Do you have an idea where this error can come from or did I miss to set some necessary options?</div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<br>
</div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
Thank you very much in advance!</div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures"><br>
</span></div>
<div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo">
<span style="font-variant-ligatures:no-common-ligatures">Code:</span></div>
<div>
<div>def compute_inverse_mat(dynamical_matrix_nn, dyn_matrix_dim, m_cols_rows):</div>
<div>    # Set up the matrix B </div>
<div>    B = PETSc.Mat().create(comm=comm)</div>
<div>    B.setSizes((dyn_matrix_dim,m_cols_rows))</div>
<div>    B.setType("dense")</div>
<div>    B.setFromOptions()</div>
<div>    B.setUp()</div>
<div>    Rstart, Rend = B.getOwnershipRange()</div>
<div>    print("rank, size, start_frame, end_frame \n", rank, " / ", size, " / ", Rstart, " / ", Rend)</div>
<div>    # Fill the matrix B </div>
<div>    if (Rstart < m_cols_rows) and (Rend <= m_cols_rows):</div>
<div>    <span style="white-space:pre-wrap"></span>for i in range(Rstart, Rend):</div>
<div>    <span style="white-space:pre-wrap"></span>B[i,i] = 1</div>
<div>    if (Rstart < m_cols_rows) and (Rend >= m_cols_rows):</div>
<div>    <span style="white-space:pre-wrap"></span>for i in range(Rstart, m_cols_rows):</div>
<div>    <span style="white-space:pre-wrap"></span>B[i,i] = 1</div>
<div>    # Assemble B </div>
<div>    B.assemble()</div>
<div><br>
</div>
<div>    # Set up matrix x</div>
<div>    x = PETSc.Mat().create(comm=comm)</div>
<div>    x.setSizes((dyn_matrix_dim,m_cols_rows))</div>
<div>    x.setType("dense")</div>
<div>    x.setFromOptions()</div>
<div>    x.setUp()</div>
<div>    x.assemble()</div>
<div><br>
</div>
<div>    # Create the linear solver and set various options</div>
<div>    ksp = PETSc.KSP().create(comm=comm)</div>
<div>    # This implements a stub method that applies ONLY the preconditioner.</div>
<div>    ksp.setType("preonly")</div>
<div>    # Set the matrix associated with the linear system </div>
<div>    ksp.setOperators(dynamical_matrix_nn, dynamical_matrix_nn)</div>
<div>    # Define the preconditioner object</div>
<div>    pc = ksp.getPC()</div>
<div>    # Set the preconditioner to LU-factorization</div>
<div>    pc.setType("lu")</div>
<div>    # Use MUMPS </div>
<div>    pc.setFactorSolverType("mumps")</div>
<div>    # Prepares for the use of the preconditioner </div>
<div>    pc.setFromOptions()</div>
<div>    pc.setUp()</div>
<div>    # Sets up the inernal data structures for the later use of an iterative solver </div>
<div>    ksp.setFromOptions()</div>
<div>    ksp.setUp()</div>
<div><br>
</div>
<div>    # Get the factorized dynamical matrix </div>
<div>    fac_dyn_matrix = pc.getFactorMatrix()</div>
<div><br>
</div>
<div>    # Compute part of the inverse by solving</div>
<div>    # A*X=B </div>
<div>    greens_function = fac_dyn_matrix.matSolve(B,x)</div>
<div>
<blockquote type="cite">
<div>Am 01.10.2019 um 10:09 schrieb Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>:</div>
<br>
<div>
<div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">
<div dir="ltr">On Tue, Oct 1, 2019 at 4:07 AM Jan Grießer <<a href="mailto:griesser.jan@googlemail.com" target="_blank">griesser.jan@googlemail.com</a>> wrote:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div>Hey Matt,</div>
Can you elaborate a little bit on your idea for calculating the inverse matrix ?<span> </span><br>
</div>
</blockquote>
<div><br>
</div>
<div>It is exactly what you were doing before, except you use KSP with</div>
<div><br>
</div>
<div>  -ksp_type preonly -pc_type lu -pc_mat_solver_package mumps</div>
<div><br>
</div>
<div>and then MatMatSolve on the identity matrix.</div>
<div><br>
</div>
<div>  Thanks,</div>
<div><br>
</div>
<div>     Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Greetings Jan </div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Am Mo., 30. Sept. 2019 um 17:50 Uhr schrieb Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">I think the easier way to do it is to use a KSP which is configured to do preonly and LU. That will do the right thing in parallel.
<div><br>
</div>
<div>   Matt</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, Sep 30, 2019 at 11:47 AM Smith, Barry F. via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
   The Python wrapper for PETSc may be missing some functionality; there is a manual process involved in creating new ones. You could poke around the petsc4py source and see how easy it would be to add more functionality that you need.<br>
<br>
<br>
<br>
> On Sep 30, 2019, at 10:13 AM, Jan Grießer <<a href="mailto:griesser.jan@googlemail.com" target="_blank">griesser.jan@googlemail.com</a>> wrote:<br>
><span> </span><br>
> I configured PETSc with MUMPS and tested it already for the spectrum slicing method in Slepc4py but i have problems in setting up the LU factorization in the PETSc4py. Since i do not find the corresponding methods and commands in the source code. Thats why
 is was wondering if this is even possible in the python version.<span> </span><br>
><span> </span><br>
> Am Mo., 30. Sept. 2019 um 16:57 Uhr schrieb Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>>:<br>
><span> </span><br>
>   If you want a parallal LU (and hence the ability to build the inverse in parallel) you need to configure PETSc with --download-mumps --download-scalapack<span> </span><br>
><span> </span><br>
>   Barry<br>
><span> </span><br>
><span> </span><br>
> > On Sep 30, 2019, at 9:44 AM, Jan Grießer <<a href="mailto:griesser.jan@googlemail.com" target="_blank">griesser.jan@googlemail.com</a>> wrote:<br>
> ><span> </span><br>
> > Is the MatMumpsGetInverse also wrapped to the python version in PETSc4py ? If yes is there any example for using it ?<span> </span><br>
> > My other question is related to the LU factoriation (<a href="https://www.mcs.anl.gov/petsc/documentation/faq.html#invertmatrix" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/documentation/faq.html#invertmatrix</a>).<span> </span><br>
> > Is the LU factorization only possible for sequential Aij matrices ? I read in the docs that this is the case for ordering.<span> </span><br>
> > After setting up my matrix A, B and x i tried:<br>
> >  r, c = dynamical_matrix_nn.getOrdering("nd")<br>
> >  fac_dyn_matrix = dynamical_matrix_nn.factorLU(r,c)<br>
> ><span> </span><br>
> > resulting in an error:<br>
> > [0] No support for this operation for this object type<br>
> > [0] Mat type mpiaij<br>
> ><span> </span><br>
> > Am Fr., 27. Sept. 2019 um 16:26 Uhr schrieb Zhang, Hong <<a href="mailto:hzhang@mcs.anl.gov" target="_blank">hzhang@mcs.anl.gov</a>>:<br>
> > See ~petsc/src/mat/examples/tests/ex214.c on how to compute selected entries of inv(A) using mumps.<br>
> > Hong<br>
> ><span> </span><br>
> > On Fri, Sep 27, 2019 at 8:04 AM Smith, Barry F. via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
> ><span> </span><br>
> > MatMumpsGetInverse() maybe useful. Also simply using MatMatSolve() with the first 1000 columns of the identity and "throwing away" the part you don't need may be most effective.<br>
> ><span> </span><br>
> >    Barry<br>
> ><span> </span><br>
> ><span> </span><br>
> ><span> </span><br>
> > > On Sep 27, 2019, at 3:34 AM, Jan Grießer via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
> > ><span> </span><br>
> > > Hi all,<br>
> > > i am using petsc4py. I am dealing with rather large sparse matrices up to 600kx600k and i am interested in calculating a part of the inverse of the matrix(I know it will be a dense matrix). Due to the nature of my problem, I am only interested in approximately
 the first 1000 rows and 1000 columns (i.e. a large block in the upper left ofthe matrix).  Before I start to play around now, I wanted to ask if there is a clever way to tackle this kind of problem in PETSc in principle. For any input I would be very grateful!<br>
> > > Greetings Jan<span> </span><br>
> ><span> </span><br>
><span> </span><br>
<br>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
--<span> </span><br>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
--<span> </span><br>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
</div>
</body>
</html>