> El 2 nov 2016, a las 14:55, Peetz, Darin T <[email protected]> escribió:
> 
> I don't fully understand what the empty KSP is doing either, because it seems 
> to me that if a KSP object was properly destroyed, KSPCreate() should have to 
> be called again before it is used again, right?  So it must not be fully 
> destroyed or else the second linear system solve would fail, but something is 
> happening to it such that the symbolic factorization is redone.
> 
> Like I said, the fix I implemented seems to work (even if it doesn't seem 
> necessary), so I don't know that it really needs any more attention.  
> However, I was able to reproduce the behavior in the example you sent me.  If 
> you're curious, running the program as normal should behave the same way as 
> the original example.  Running with the option "-destroy_eps" destroys and 
> recreates the EPS object, and running with the additional option "-empty_ksp" 
> gives the EPS object an empty KSP before it is destroyed.  At least when I 
> ran it on my machine, I got 1 symbolic factorization for the original 
> program, 2 with the "-destroy_eps" option, and 1 with both "-destroy_eps" and 
> "-empty_ksp".
> 
> Thanks,
> Darin

The -empty_ksp option does not work for me because, first, the compiler gives a 
warning about an uninitialized variable "empty", and second if I initialize 
empty=NULL then STSetKSP() fails because the ksp argument is not valid.

Regarding the -destroy_eps option, the explanation is the following: when 
EPSDestroy() is called the following sequence of calls
  EPSDestroy --> EPSReset --> STReset --> KSPReset
results in the assignment
  ksp->setupstage = KSP_SETUP_NEW
That makes a difference because then the next call to KSPSolve will force a 
setup (including the symbolic factorization).

Jose

Reply via email to