I would use MatGetRedundantMatrix()

On Sep 6, 2013, at 4:52 PM, Matthew Knepley <[email protected]> wrote:

> On Fri, Sep 6, 2013 at 4:25 PM, Lukasz Kaczmarczyk 
> <[email protected]> wrote:
> Hello,
> 
> I solve system of eq. generated by finite element method.
> 
> I  apply some projection matrix to stiffness matrix K,
> P=I-CT[(CTC)^-1]C
> where C  is some not square matrix.
> 
> Resulting stiffness matrix K' has form
> K' = PT K P,
> with that at hand I solve problem K' *x = f'
> 
> I manage to build shell matrix where I use sub ksp solver to get solution for 
> (CTC)*b = C*x, where [ b = (CTC^-1*C*x)] . Using penalised matrix for 
> preconditioner, where  K_prec = alpha*CCT + K, where alpha is penalty I can 
> get solution in efficient way.
> 
> Now I like to avoid penalty parameter, in order to do that I will need to 
> apply penalty matrix for each individual finite element  matrix before it is 
> assembled into K. No problem with that, using scattering it can be done.
> 
> Problem is with  solution (CTC)*b = C*x, C and CTC matrices are parallel, 
> since I have parallelised assembly functions, problem (CTC)*b = C*x need to 
> be solved on each processor independently without communication. It is not 
> problem, but to do that I need to transform C and CTC matrix form MATMPIAIJ 
> to MATAIJ.
> 
> I think this might be what you want:
> 
>   
> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatGetSubMatrices.html
> 
>    Thanks,
> 
>       Matt
>  
> I know that MatConvert will not do it. I wonder it is any other way that form 
> very beginning to assemble matrix C as a serial matrix.
> 
> Regards,
> Lukasz
> 
> 
> 
> 
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments 
> is infinitely more interesting than any results to which their experiments 
> lead.
> -- Norbert Wiener

Reply via email to