<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Thanks Jose for the prompt  (as always) reply. <div class="">I will post further questions if I encounter any issues with the outlined approach.<div class=""><br class=""><div class="">
<div class="">Kind regards,</div><div class="">Denis </div>

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 29 Oct 2015, at 18:39, Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" class="">jroman@dsic.upv.es</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="Apple-interchange-newline">El 29/10/2015, a las 13:32, Denis Davydov <<a href="mailto:davydden@gmail.com" class="">davydden@gmail.com</a>> escribió:<br class=""><br class="">Dear all,<span class="Apple-converted-space"> </span><br class=""><br class="">I am currently looking at ways to extend deal.II PETSc/SLEPc wrappers classes to allow<span class="Apple-converted-space"> </span><br class="">specification of linear solvers and preconditioners to be used in SLEPc eigensolvers<span class="Apple-converted-space"> </span><br class="">using deal.II objects and NOT the command line arguments.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Yes, current deal.II wrappers for SLEPc are quite limited.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="">All examples and unit tests I came across in SLEPc work with EPSCreate() followed by<span class="Apple-converted-space"> </span><br class="">EPSGetST(), STGetKSP() and KSPGetPC(). This however does not fit well into object-oriented C++ code.<br class="">Thus I plan to create each objects separately and pass them around.<br class=""><br class="">I would like to ask if the way I see it (in terms of PETSc/SLEPc functions called) is conceptually correct:<br class=""><br class="">— PETSc: Preconditioner class:<br class="">PCCreate()<br class="">PCSetType()<br class="">PCSetFromOptions();<br class="">—<br class=""><br class="">— PETSc: Solver class (uses Preconditioner class):<br class="">KSPCreate()<br class="">KSPSetType()<br class="">KSPSetPC() // set PC created above<br class="">KSPSetConvergenceTest()<br class="">KSPSetFromOptions()<br class="">—<br class=""><br class="">— SLEPc: SpectralTransformation class (uses Solver class)<br class="">STCreate()<br class="">STSetType()<br class="">STSetShift() // some specific settings to transformation<br class="">STSetKSP() // set KSP created above<br class="">—<br class=""><br class="">— SLEPc: Eigensolver class (uses SpectralTransformation class)<br class="">EPSCreate()<br class="">EPSSetTolerances()<br class="">EPSSetConvergenceTest()<br class="">EPSSetWhichEigenpairs()<br class="">EPSSetProblemType()<br class="">EPSSetType()<br class="">EPSArnoldiSetDelayed() // any specific options to eigensolver<br class="">EPSSetST() // set spectral transformation created above<br class="">// solve<br class="">EPSSetDimensions()<br class="">EPSSetFromOptions()<br class="">EPSSolve()<br class="">—<br class=""><br class="">Do this usage model sounds correct from SLEPc perspective?<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">I see no problem with this approach.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">What bothers me is that i do not call PCSetOperators()/PCSetUp() and KSPSetOperators()/KSPSetUp(),<span class="Apple-converted-space"> </span><br class="">which one would call while setting up PETSc objects to solve SLAE.<br class="">Nonetheless I assume those functions are executed somewhere inside SLEPc depending on<br class="">SHEP/GHEP and ST to be used.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Correct, EPS/ST handle the KSP coefficient matrix so KSPSetUp() must be done at EPSSetUp() and not before.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Jose</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="">Kind regards,<br class="">Denis.</blockquote></div></blockquote></div><br class=""></div></div></body></html>