It is gone. Use the development version of petsc On Sep 6, 2013, at 5:44 PM, Lukasz Kaczmarczyk <[email protected]> wrote:
> Thanks, for very fast help, > > Last qestion, how I should interpret, > PetscInt mlocal_red, i.e. number of local rows of the redundant matrix, > what if mlocal_red is smaller than total number or rows in mat. > > Lukasz > > On 6 Sep 2013, at 23:37, Barry Smith <[email protected]> wrote: > >> >> >> MPI_Comm_size(PETSC_COMM_WORLD,&Np); >> >> Use Np and MPI_COMM_NULL. Note that you should be using PETSc from >> https://bitbucket.org/petsc/petsc >> >> Barry >> >> Yes, the phrasing is a little confusing. >> >> On Sep 6, 2013, at 5:32 PM, Lukasz Kaczmarczyk >> <[email protected]> wrote: >> >>> On 6 Sep 2013, at 23:00, Barry Smith <[email protected]> wrote: >>> >>>> >>>> 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 >>>> >>> >>> Thanks Matt and Barry, >>> >>> Sorry for taking your time, I should find that by myself. >>> How to use MatGetSubMatrices is clear. >>> >>> I have feeling that MatGetRedundantMatrix could be more efficient. However, >>> apologise my ignorance, I have problem with MatGetRedundantMatrix, >>> >>> *) is this should be equal to number of process in the communicator group, >>> in my case 1 since I like to use PETSC_COMM_SELF? >>> nsubcomm - the number of subcommunicators (= number of redundant >>> parallel or sequential matrices) >>> subcomm - MPI communicator split from the communicator where mat >>> resides in >>> >>> *) it could be equal to total number of rows in MPIAIJ? What if this number >>> is smaller, the first mlocal_red are stored in redundant matrix? >>> mlocal_red - number of local rows of the redundant matrix >>> >>> >>> Regards, >>> Lukasz >>> >>> >> >
