Waad Subber w_subber at
Tue May 20 19:15:25 CDT 2008

Thank you Matt and Barry,

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.

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> 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.


> Thanks again
> Waad
> 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  
> adding up
> > 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
> >
> > Waad
> >
> -- 
> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the petsc-users mailing list