How do you know it is exactly the MatPtAP() routine that is taking the large 
time? 

   Please send the output of a run with -log_view so we can see where the time 
is being spent.

   Barry


> On Jun 1, 2018, at 8:21 AM, Samuel Lanthaler <[email protected]> wrote:
> 
> Hi,
> 
> I was wondering what the most efficient way to use MatPtAP would be in the 
> following situation: I am discretizing a PDE system. The discretization 
> yields a matrix A that has a band structure (with k upper and lower bands, 
> say). In order to implement the boundary conditions, I use a transformation 
> matrix P which is essentially the unit matrix, except for the entries P_{ij} 
> where i,j<k and n-i,n-j<k, so
> 
> P =  [ B, 0, 0, 0, ..., 0, 0 ]
>       [  0, 1, 0, 0, ..., 0, 0 ]
>       [                              ]
>       [                              ]
>       [                  ..., 1, 0 ]
>       [  0, 0, 0, 0, ..., 0, C ]
> 
> with B,C are (k-by-k) matrices.
> Right now, I'm simply constructing A, P and calling
> 
>    CALL 
> MatPtAP(petsc_matA,petsc_matP,MAT_INITIAL_MATRIX,PETSC_DEFAULT_REAL,petsc_matPtAP,ierr)
> 
> where I haven't done anything to pestc_matPtAP, prior to this call. Is this 
> the way to do it?
> 
> I'm asking because, currently, setting up the matrices A and P takes very 
> little time, whereas the operation MatPtAP is taking quite long, which seems 
> very odd... The matrices are of type MPIAIJ. In my problem, the total matrix 
> dimension is around 10'000 and the matrix blocks (B,C) are of size ~100.
> 
> Thanks in advance for any ideas.
> 
> Cheers,
> Samuel

Reply via email to