<div dir="ltr"><div dir="ltr"><div>def solve_eigensystem(DynMatrix_nn, Unity_nn, Dimension, LowerLimit, UpperLimit):</div><div><span style="white-space:pre"> </span># Create the EPS solver </div><div><span style="white-space:pre">     </span>E = SLEPc.EPS().create()</div><div><br></div><div><span style="white-space:pre">     </span># Create the preconditioner and set it to Cholesky</div><div><span style="white-space:pre">    </span>pc = PETSc.PC().create()</div><div><span style="white-space:pre">      </span>pc.setType(pc.Type.CHOLESKY)</div><div><br></div><div><span style="white-space:pre"> </span># Create the KSP object</div><div><span style="white-space:pre">       </span>ksp = PETSc.KSP().create()</div><div><span style="white-space:pre">    </span>ksp.setType(ksp.Type.PREONLY)</div><div><span style="white-space:pre"> </span>ksp.setPC(pc)</div><div><br></div><div><span style="white-space:pre">        </span># Set up the spectral transformations </div><div><span style="white-space:pre">       </span>st = SLEPc.ST().create()</div><div><span style="white-space:pre">      </span>st.setType("sinvert")</div><div><span style="white-space:pre">       </span>st.setKSP(ksp)</div><div><span style="white-space:pre">        </span># Setup spectral transformation </div><div><span style="white-space:pre">     </span>E.setST(st)</div><div><span style="white-space:pre">   </span></div><div><span style="white-space:pre">      </span># Eigenvalues should be real, therefore we start to order them from the smallest real value |l.real|</div><div><span style="white-space:pre">  </span>E.setWhichEigenpairs(E.Which.ALL)</div><div><span style="white-space:pre">     </span># Set the interval of spectrum slicing</div><div><span style="white-space:pre">        </span>E.setInterval(LowerLimit, UpperLimit)</div><div><span style="white-space:pre"> </span># Since the dynamical matrix is symmetric and real it is hermitian. Use GHEP for the spectrum slicing. Operatormatrix B is just a unit matrix </div><div><span style="white-space:pre">       </span>E.setProblemType(SLEPc.EPS.ProblemType.GHEP)</div><div><span style="white-space:pre">  </span># Use the Krylov Schur method to solve the eigenvalue problem</div><div><span style="white-space:pre"> </span>E.setType(E.Type.KRYLOVSCHUR)</div><div><span style="white-space:pre"> </span># Partition the Krylov schnur problem in npart procceses</div><div><span style="white-space:pre">      </span>E.setKrylovSchurPartitions(10)</div><div><span style="white-space:pre">        </span># Set the convergence criterion to relative to the eigenvalue and the maximal number of iterations</div><div><span style="white-space:pre">    </span>E.setConvergenceTest(E.Conv.REL)</div><div><span style="white-space:pre">      </span>E.setTolerances(tol = 1e-7, max_it = 1000)</div><div><span style="white-space:pre">    </span># Set the matrix in order to solve </div><div><span style="white-space:pre">  </span>E.setOperators(DynMatrix_nn, Unity_nn)</div><div><span style="white-space:pre">        </span># Sets EPS options from the options database. </div><div><span style="white-space:pre">       </span>E.setFromOptions()</div><div><span style="white-space:pre">    </span># Sets up all the internal data structures necessary for the execution of the eigensolver.</div><div><span style="white-space:pre">    </span>E.setUp()</div><div><br></div><div><span style="white-space:pre">    </span># Solve eigenvalue problem     </div><div><span style="white-space:pre">    </span>startClock = time.clock()</div><div><span style="white-space:pre">     </span>startTime = time.time()</div><div><span style="white-space:pre">       </span>E.solve()</div><div><br></div><div>Has maybe one of you any idea why this happens and where the problem is ? </div></div></div><br><div class="gmail_quote"><div dir="ltr">Am Mo., 17. Sep. 2018 um 10:40 Uhr schrieb Jan Grießer <<a href="mailto:griesser.jan@googlemail.com">griesser.jan@googlemail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I am aware that SLEPc is not supposed to calculate all eigenvalues and eigenvectors, my problem is simply that i want for a physical large enough system all of them before i can make the transition to go to the smallest ones. <br>Competitiveness is of secondary importance at the moment. <br>But ihave a problem connected with spectrum slicing. I followed the instructions in the manual of Chap. 3.4.5 Spectrum Slicing and converted them to the python package. <br>But now i get the following error. It appears to me that it is not able to find the ksp object, but i actually do not know why this is the case. <br><div dir="ltr">aceback (most recent call last):</div><div dir="ltr">  File "Eigensolver_spectrum_slicing.py", line 216, in <module></div><div dir="ltr">    solve_eigensystem(DynMatrix_nn, Unity_nn, D_nn.shape, opt_dict.LowLimit, opt_dict.UpperLimit)</div><div dir="ltr">  File "Eigensolver_spectrum_slicing.py", line 121, in solve_eigensystem</div><div dir="ltr">    E.setUp()</div><div dir="ltr">  File "SLEPc/EPS.pyx", line 1099, in slepc4py.SLEPc.EPS.setUp</div><div dir="ltr">petsc4py.PETSc.Error: error code 92</div><div dir="ltr">[14] EPSSetUp() line 165 in /tmp/pip-install-golhudw7/slepc/src/eps/interface/epssetup.c</div><div dir="ltr">[14] EPSSetUp_KrylovSchur() line 146 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/krylovschur.c</div><div dir="ltr">[14] EPSSetUp_KrylovSchur_Slice() line 410 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/ks-slice.c</div><div dir="ltr">[14] EPSSliceGetEPS() line 300 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/ks-slice.c</div><div dir="ltr">[14] EPSSetUp() line 165 in /tmp/pip-install-golhudw7/slepc/src/eps/interface/epssetup.c</div><div dir="ltr">[14] EPSSetUp_KrylovSchur() line 146 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/krylovschur.c</div><div dir="ltr">[14] EPSSetUp_KrylovSchur_Slice() line 461 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/ks-slice.c</div><div dir="ltr">[14] EPSSliceGetInertia() line 331 in /tmp/pip-install-golhudw7/slepc/src/eps/impls/krylov/krylovschur/ks-slice.c</div><div dir="ltr">[14] STSetUp() line 271 in /tmp/pip-install-golhudw7/slepc/src/sys/classes/st/interface/stsolve.c</div><div dir="ltr">[14] STSetUp_Sinvert() line 132 in /tmp/pip-install-golhudw7/slepc/src/sys/classes/st/impls/sinvert/sinvert.c</div><div dir="ltr">[14] KSPSetUp() line 381 in /tmp/pip-install-xmiaat2t/petsc/src/ksp/ksp/interface/itfunc.c</div><div dir="ltr">[14] PCSetUp() line 923 in /tmp/pip-install-xmiaat2t/petsc/src/ksp/pc/interface/precon.c</div><div dir="ltr">[14] PCSetUp_Cholesky() line 86 in /tmp/pip-install-xmiaat2t/petsc/src/ksp/pc/impls/factor/cholesky/cholesky.c</div><div dir="ltr">[14] MatGetFactor() line 4318 in /tmp/pip-install-xmiaat2t/petsc/src/mat/interface/matrix.c</div><div dir="ltr">[14] See <a href="http://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html">http://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html</a> for possible LU and Cholesky solvers</div><div dir="ltr">[14] Could not locate a solver package. Perhaps you must ./configure with --download-<package></div><div><br></div><div>The code i used to solve the problem is </div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">Am Fr., 14. Sep. 2018 um 18:34 Uhr schrieb Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Sep 14, 2018 at 12:19 PM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" target="_blank">jroman@dsic.upv.es</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div>El 14 sept 2018, a las 17:45, Jan Grießer <<a href="mailto:griesser.jan@googlemail.com" target="_blank">griesser.jan@googlemail.com</a>> escribió:<br></div><div><br></div><blockquote type="cite"><div><div dir="ltr"><div dir="ltr"><div dir="ltr">Hey there,<div>first i want to say thanks to <span style="color:rgb(0,0,0);white-space:pre-wrap"><span id="m_-8858589791107172582m_-290301358860726103:1br.1">Satish</span> and </span><font color="#000000"><span style="white-space:pre-wrap">Matt for helping with with my last problem with the <span id="m_-8858589791107172582m_-290301358860726103:1br.2">mpi</span> compilation. I have two <span id="m_-8858589791107172582m_-290301358860726103:1br.3">questions</span> related to solving a big, <span id="m_-8858589791107172582m_-290301358860726103:1br.4">hermitian</span>, standard eigenvalue problem using SLEPc4py., compiled with Intel <span id="m_-8858589791107172582m_-290301358860726103:1br.5">MKL</span> and Intel <span id="m_-8858589791107172582m_-290301358860726103:1br.7">MPI</span>. </span></font><font color="#000000"><span style="white-space:pre-wrap">
- I am using slepc4py with <span id="m_-8858589791107172582m_-290301358860726103:1br.8">mpi</span> and run it with around -n 20 cores at the moment and how i wanted to ask if there is an easy way to retrieve the <span id="m_-8858589791107172582m_-290301358860726103:1br.9">eigenvectors</span>? When i run my code and print </span></font>
<font color="#000000"><span style="white-space:pre-wrap">for i in range(<span id="m_-8858589791107172582m_-290301358860726103:1br.10">nconv</span>):</span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">            </span>for i in range(<span id="m_-8858589791107172582m_-290301358860726103:1br.11">nconv</span>):<span style="white-space:pre-wrap">
                        val = E.<span id="m_-8858589791107172582m_-290301358860726103:1br.12">getEigenpair</span>(i, <span id="m_-8858589791107172582m_-290301358860726103:1br.13">vr</span>, vi)
                        Print(<span id="m_-8858589791107172582m_-290301358860726103:1br.14">vr</span>.<span id="m_-8858589791107172582m_-290301358860726103:1br.15">getArray</span>())</span></font>
 </div><div><font color="#000000"><span style="white-space:pre-wrap"> i get the parts of the <span id="m_-8858589791107172582m_-290301358860726103:1br.16">eigenvectors</span> according to the partition of the matrix. Is there any easy way to put them together in an array and write them to file ? (I am struggling a little bit with the building them in the correct order)</span></font></div></div></div></div></div></blockquote><div><br></div><div>You need <a name="m_-8858589791107172582_m_-290301358860726103_VecScatterCreateToZero"><h1 style="display:inline!important"><font color="#000000"><span style="font-size:19px;background-color:rgba(255,255,255,0)">VecScatterCreateToZero. </span></font></h1></a>There must be an equivalent in python.</div></div></blockquote><div><br></div><div>An alternative to this which you should consider, because it is simpler, is to write the vector to a file</div><div>using some format that PETSc understands, Then you just need vr.view(viewer) for a viewer like</div><div>the binary viewer or some ASCII format you like.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><blockquote type="cite"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><font color="#000000"><span style="white-space:pre-wrap">- I need to solve eigenvalue problems up to a dimension of 100000 degrees of freedom and i need all eigenvalues and <span id="m_-8858589791107172582m_-290301358860726103:1br.17">eigenvectors</span>. I think solving all eigenvalues in one process is far too much and i thought about if it is possible to apply the spectrum slicing described in Chap. 3.4.5.  Due to the nature of my problem, i am able to simulate smaller systems of 10000 <span id="m_-8858589791107172582m_-290301358860726103:1br.18">DOF</span> and extract the biggest eigenvalue, which will be the same for larger systems sizes. Is this in general possible since i have a standard HEP problem or is there a better and faster <span id="m_-8858589791107172582m_-290301358860726103:1br.20">possibility</span> to do this?</span></font></div></div></div></div></div></blockquote><div><br></div><div>In general, SLEPc is not intended for computing the whole spectrum. You can try with spectrum slicing but this will be competitive if computing just a percentage of eigenvalues, 50% say. </div><div><br></div><div>Jose</div><br><blockquote type="cite"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">Thank you very much!</span></font></div></div></div></div>
</div></blockquote></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-8858589791107172582gmail_signature" data-smartmail="gmail_signature"><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></div>
</blockquote></div></blockquote></div>