On Mon, May 14, 2012 at 12:01 PM, Giacomo Mulas <span dir="ltr">&lt;<a href="mailto:gmulas@oa-cagliari.inaf.it" target="_blank">gmulas@oa-cagliari.inaf.it</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello.<br>
<br>
I am relatively new to petsc and slepc. I am trying to use slepc to solve a<br>
sparse eigenvalue problem, in particular getting all eigenvalues in an<br>
interval (spectral slicing). To run in parallel, the documentation states<br>
that I have to specify an external linear solver, e.g. mumps, and explains<br>
that I can use the command line options<br>
<br>
-st_ksp_type preonly -st_pc_type cholesky \<br>
-st_pc_factor_mat_solver_<u></u>package mumps -mat_mumps_icntl_13 1<br>
<br>
to set everything up for it. I was indeed able to get my code to work with<br>
these command line options (even if I will need some additional work to make<br>
it run faster in parallel, but that&#39;s another story). However, I would<br>
rather like to be able to put these options in my code itself, as defaults.<br></blockquote><div><br></div><div>The problems below are exactly why we do not advocate this strategy. However, you</div><div>can get this effect using <a href="http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Sys/PetscOptionsSetValue.html">http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Sys/PetscOptionsSetValue.html</a></div>
<div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So far, I was able to do so for all command line options except for<br>
-mat_mumps_icntl_13 1<br>
<br>
How should I do that? Here goes a snippet of the relevant code:<br>
<br>
(... omit creation/population of H matrix ...)<br>
      ierr = EPSCreate(mixpars-&gt;slepc_comm,<u></u>&amp;eps);CHKERRQ(ierr);<br>
      ierr = EPSSetOperators(eps,H,PETSC_<u></u>NULL);CHKERRQ(ierr);<br>
      ierr = EPSSetProblemType(eps,EPS_HEP)<u></u>;CHKERRQ(ierr);<br>
      ierr = EPSSetTolerances(eps, tol, PETSC_DECIDE);<br>
      if (statesinlist&gt;500)<br>
        ierr = EPSSetDimensions(eps, 500, PETSC_IGNORE, PETSC_IGNORE);<br>
      else<br>
        ierr = EPSSetDimensions(eps, statesinlist, PETSC_IGNORE,<br>
                                PETSC_IGNORE);<br>
      CHKERRQ(ierr);<br>
      if (statesinlist&lt;50) ierr = EPSSetType(eps, EPSLAPACK);<br>
      else {<br>
        ierr = EPSGetST(eps,&amp;st);CHKERRQ(<u></u>ierr);<br>
        ierr = STSetType(st,STSINVERT);<u></u>CHKERRQ(ierr);<br>
        ierr = STGetKSP(st,&amp;ksp);CHKERRQ(<u></u>ierr);<br>
        ierr = KSPSetType(ksp,KSPPREONLY);<br>
        ierr = KSPGetPC(ksp, &amp;pc);CHKERRQ(ierr);<br>
        ierr = PCSetType(pc, PCCHOLESKY);CHKERRQ(ierr);<br>
        if (mixpars-&gt;slepc_size&gt;1) {<br>
          ierr = PCFactorSetMatSolverPackage(<u></u>pc,MATSOLVERMUMPS);CHKERRQ(<u></u>ierr);<br>
          /*<br>
          Mat F;<br>
          ierr = PCFactorGetMatrix(pc,&amp;F);<u></u>CHKERRQ(ierr);<br>
          PetscInt icntl = 13;<br>
          PetscInt ival = 1;<br>
          ierr = MatMumpsSetIcntl(F,icntl,ival)<u></u>; CHKERRQ(ierr);<br>
          */<br>
        }<br>
      }<br>
      ierr = EPSSetFromOptions(eps); CHKERRQ(ierr);<br>
      ierr = EPSSetInterval(eps,<br>
                            (PetscScalar) currsubclass-&gt;lowtargetlimit[<u></u>j],<br>
                            (PetscScalar) currsubclass-&gt;uptargetlimit[j]<u></u>);<br>
      CHKERRQ(ierr);<br>
      ierr = EPSSetWhichEigenpairs(eps, EPS_ALL); CHKERRQ(ierr);<br>
      ierr = EPSSolve(eps);CHKERRQ(ierr);<br>
<br>
The part which is commented out is what I tried to use to try to obtain the<br>
same effect as the -mat_mumps_icntl_13 1 command line option. However, if I<br>
decomment it, I get the following error:<br>
<br>
[0]PETSC ERROR: --------------------- Error Message<br>
------------------------------<u></u>------<br>
[0]PETSC ERROR: Operation done in wrong order!<br>
[0]PETSC ERROR: Matrix not yet factored; call after KSPSetUp() or PCSetUp()!<br>
[0]PETSC ERROR:<br>
------------------------------<u></u>------------------------------<u></u>------------<br>
[0]PETSC ERROR: Petsc Release Version 3.2.0, Patch 5, Sat Oct 29 13:45:54<br>
CDT 2011 [0]PETSC ERROR: See docs/changes/index.html for recent updates.<br>
[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.<br>
[0]PETSC ERROR: See docs/index.html for manual pages.<br>
<br>
The code works fine if I comment out the lines from Mat F;<br>
to<br>
ierr = MatMumpsSetIcntl(F,icntl,ival)<u></u>; CHKERRQ(ierr);<br>
and use the command line option -mat_mumps_icntl_13 1<br>
<br>
Is it indeed possible to set this as a default in the code, and if yes, is<br>
it documented somewhere? Can someone give me a hint?<br>
<br>
A side issue: should I explicitly free the PC, KSP and ST I get using the EPSGetST(), STGetKSP() and KSPGetPC() calls respectively? I only use them to<br>
set up default options (instead of giving them on the command line). Or can<br>
I trust that EPSDestroy() will do it?<br>
<br>
Thanks in advance, bye<br>
Giacomo Mulas<br>
<br>
-- <br>
______________________________<u></u>______________________________<u></u>_____<br>
<br>
Giacomo Mulas &lt;<a href="mailto:gmulas@oa-cagliari.inaf.it" target="_blank">gmulas@oa-cagliari.inaf.it</a>&gt;<br>
______________________________<u></u>______________________________<u></u>_____<br>
<br>
OSSERVATORIO ASTRONOMICO DI CAGLIARI<br>
Str. 54, Loc. Poggio dei Pini * 09012 Capoterra (CA)<br>
<br>
Tel. (OAC): <a href="tel:%2B39%20070%2071180%20248" value="+3907071180248" target="_blank">+39 070 71180 248</a>     Fax : <a href="tel:%2B39%20070%2071180%20222" value="+3907071180222" target="_blank">+39 070 71180 222</a><br>

Tel. (UNICA): <a href="tel:%2B39%20070%20675%204916" value="+390706754916" target="_blank">+39 070 675 4916</a><br>
______________________________<u></u>______________________________<u></u>_____<br>
<br>
&quot;When the storms are raging around you, stay right where you are&quot;<br>
                         (Freddy Mercury)<br>
______________________________<u></u>______________________________<u></u>_____<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>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<br>