If you obtained the PC object with KSPGetPC() then you do not have to destroy 
it, only the KSP object. KSPGetPC() only gives a pointer to the internal 
object, which is managed by the KSP.
Jose


> El 24 mar 2020, a las 17:18, Perceval Desforges 
> <perceval.desfor...@polytechnique.edu> escribió:
> 
> Thank you very much, this seems to work well.
> 
> I have another question linked to this which is probably a bit basic so I 
> apologize.
> 
> At the end of my program, I want to destroy all the petsc objects. I start by 
> destroying the matrixes, then the ksp and pc objects similarly to how it's 
> done in the examples. However I get an error when attempting to destroy the 
> KSP and PC objects :
> 
> [0]PETSC ERROR: Invalid argument
> 
> [0]PETSC ERROR: Wrong type of object: Parameter # 1
> 
> I've tried switching the order around, but I still get the same errors. 
> 
> And if I don't destroy these objects I get a memory leak, which I'd like to 
> avoid.
> 
> My question is I don't really understand when and how I'm supposed to destroy 
> the KSP and PC objects? 
> 
> Thanks again,
> 
> Best regards,
> 
> Perceval,
> 
> 
> 
> 
> 
>> You can do this directly in PETSc. Create a KSP object with PREONLY and 
>> PCCHOLESKY (or just a PC object). Then call KSPSetUp (or PCSetUp) and 
>> extract the factored matrix with PCFactorGetMatrix(). Then call 
>> MatGetInertia() on the factored matrix. Repeat this for each value of E.
>> 
>> I guess it can be even shorter if you call MatCholeskyFactor() directly.
>> 
>> Jose
>> 
>> 
>>> El 24 mar 2020, a las 11:07, Perceval Desforges 
>>> <perceval.desfor...@polytechnique.edu> escribió:
>>> 
>>> Dear petsc developers,
>>> 
>>> I am interested in calculating the inertias of matrixes. Specifically, for 
>>> a certain matrix A, and for different real numbers E, I want to calculate 
>>> the inertias of (A - E * I), in order to get the number of eigenvalues less 
>>> than E. 
>>> 
>>> In order to do this I have been setting up a slepc EPS object with spectrum 
>>> slicing, and using EPSKrylovSchurGetInertias. I realize this is a bit 
>>> convoluted, and was wondering if there is a better way to do this?
>>> 
>>> Best regards,
>>> 
>>> Perceval,
>>> 
>>> P.S. my last email seems to not have been sent (I couldn't find it in the 
>>> archives) so I am trying again...
>>> 
> 
> 

Reply via email to