<div dir="ltr"><div><div><div><div><div>Hi. Not really what I need. Every time I run my program, I need to pass the non-trivial solver setup that works as a command line argument (I am using Schur complement with BCGS and Hypre as internal KSP and PC). I want to hardcode the complex solver setup so that I can use it depending on a runtime switch. Like this:<br><br></div>if(use_schur) {<br></div>  // change global PETSc options to the settings I know to work.<br>}<br><br></div>my_solver_struct *s = create_petsc_solver();<br><br></div>if(use_schur) {<br></div>  // restore original PETSc options.<br>}<br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-05-26 19:55 GMT-03:00 Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
   I do not think you want to do this. The standard way we handle what it seems you need is to use PetscObjectSetOptionsPrefix() for the different PETSc objects giving them different prefixes and then appending the prefix for the options when you provide them to the options database. For example if you have a KSP for a flow solver and a KSP for a pressure solver you might do<br>
<br>
    KSPCreate(PETSC_COMM_WORLD,&<wbr>flow);<br>
    KSPSetOptionsPrefix(flow,"u");<br>
<br>
    KSPCreate(PETSC_COMM_WORLD,&<wbr>pressure);<br>
    KSPSetOptionsPrefix(pressure,"<wbr>p");<br>
<br>
    and set options like<br>
<br>
     -u_pc_type jacobi<br>
<br>
     -p_pc_type gamg<br>
<br>
    Will this do what you need?<br>
<br>
   Barry<br>
<br>
     Because the options data base can be accessed by any object at any time (not just when it is created), it doesn't make sense to change the default options database ever because it would be uncertain what objects the change affected or did not affect.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
> On May 26, 2017, at 4:20 PM, Lucas Clemente Vella <<a href="mailto:lvella@gmail.com">lvella@gmail.com</a>> wrote:<br>
><br>
> Here is what I want to do:<br>
> - Take the global PetscOptions and store it somewhere;<br>
> - Create my own PetscOptions;<br>
> - Populate it with my options;<br>
> - Set my new PetscOptions as the global default;<br>
> - Create some PETSc objects;<br>
> - Restore old PetscOptions as default global;<br>
> - Destroy the PetscOptions I created.<br>
><br>
> I could not find a function to replace global PetscOptions, or to copy one PetscOptions to another. Is it possible to do what I want to do? How?<br>
><br>
> --<br>
> Lucas Clemente Vella<br>
> <a href="mailto:lvella@gmail.com">lvella@gmail.com</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Lucas Clemente Vella<br><a href="mailto:lvella@gmail.com" target="_blank">lvella@gmail.com</a></div>
</div>