# MatMerge_SeqsToMPI

Lisandro Dalcin dalcinl at gmail.com
Tue May 20 19:44:32 CDT 2008

```On 5/20/08, Waad Subber <w_subber at yahoo.com> wrote:
> The system I am trying to solve is the interface problem in iterative
> substructuring DDM. Where A_i represents [R_i^T*S_i*R_i] and f_i is
> [R_i^T*g_i].
>
> Each process  constructs the local Schur complement matrix (S_i) , the
> restriction matrix(R_i) as SeqAIJ and the RHS vector (g_i) as a sequential
> vector.

Two questions:

1) How do you actually get the local Schur complements. You
explicitelly compute its entries, or do you compute it after computing
the inverse (or LU factors) of a 'local' matrix?

2) Your R_i matrix is actually a matrix? In that case, it is a trivial
restrinction operation with ones and zeros? Or R_i is actually a
VecScatter?

And finally: are you trying to apply a Krylov method over the global
Schur complement? In such a case, are you going to implement a
preconditioner for it?

> Now having the Schur complement matrix for each subdomain, I need to solve
> the interface problem (Sum[R_i^T*S_i*R_i])u=Sum[R_i^T*g_i],
> .. i=1.. to No. of process (subdomains) in parallel.
>
> For the global vector I construct one MPI vector and use VecGetArray ()  for
> each of the sequential vector then use  VecSetValues () to add the values
> into the global MPI vector. That works fine.
>
> However for the global schur complement matix I try the same idea by
> creating one parallel MPIAIJ matrix and using MatGetArray( ) and
> MatSetValues () in order to add the values to the global matrix.
> MatGetArray( ) gives me only the values without indices, so I don't know how
> to add these valuse to the global MPI matrix.
>
> Thanks agin
>
>
> Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> On May 20, 2008, at 3:16 PM, Waad Subber wrote:
>
> > Thank you Matt,
> >
> > Any suggestion to solve the problem I am trying to tackle. I want to
> > solve a linear system:
> >
> > Sum(A_i) u= Sum(f_i) , i=1.... to No. of CPUs.
> >
> > Where A_i is a sparse sequential matrix and f_i is a sequential
> > vector. Each CPU has one matrix and one vector of the same size. Now
> > I want to sum up and solve the system in parallel.
>
>  Does each A_i have nonzero entries (mostly) associated with one
> part of the matrix? Or does each process have values
> scattered all around the matrix?
>
>  In the former case you should simply create one parallel MPIAIJ
> matrix and call MatSetValues() to put the values
> into it. We don't have any kind of support for the later case, perhaps
> if you describe how the matrix entries come about someone
> would have suggestions on how to proceed.
>
>  Barry
>
> >
> >
> > Thanks again
> >
> >
> > Matthew Knepley wrote: On Tue, May 20, 2008 at
> > 2:12 PM, Waad Subber wrote:
> > > Hi,
> > >
> > > I am trying to construct a sparse parallel matrix (MPIAIJ) by
> > > sparse sequential matrices (SeqAIJ) from each CPU. I am using
> > >
> > > MatMerge_SeqsToMPI(MPI_Comm comm,Mat seqmat,PetscInt m,PetscInt
> > n,MatReuse
> > > scall,Mat *mpimat)
> > >
> > > to do that. However, when I compile the code I get the following
> > >
> > > undefined reference to `matmerge_seqstompi_'
> > > collect2: ld returned 1 exit status
> > > make: *** [all] Error 1
> > >
> > > Am I using this function correctly ?
> >
> > These have no Fortran bindings right now.
> >
> > Matt
> >
> > > Thanks
> > >
> > >
> >
> >
> >
> > --
> > What most experimenters take for granted before they begin their
> > experiments is infinitely more interesting than any results to which
> > -- Norbert Wiener
> >
> >
> >
>
>
>
>
>

--
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594

```