i've been preallocating the full matrix

   const PetscScalar zerotol = 1.e-6;
   PetscInt M,N,m,n;
   ierr = MatGetSize(MatDense,&M,&N);CHKERRQ(ierr);
   ierr = MatGetLocalSize(MatDense,&m,&n);CHKERRQ(ierr);
   ierr = MatCreateMPIAIJ(PETSC_COMM_WORLD,m,n,M,N,n,PETSC_NULL,
                                        
N-n,PETSC_NULL,&SparseMat);CHKERRQ(ierr);

and when I convert I try to get only the non-zero entries

   const PetscScalar  *vwork;
   const PetscInt     *cwork;
   PetscInt Istart,Iend, nz;

   ierr=PetscPrintf(PETSC_COMM_WORLD,
                    "  Converting...\n");CHKERRQ(ierr);
   ierr = MatGetOwnershipRange(MatDense,&Istart,&Iend);CHKERRQ(ierr);
   for (PetscInt Ii=Istart; Ii<Iend; Ii++) {
     ierr = MatGetRow(MatDense,Ii,&nz,&cwork,&vwork);CHKERRQ(ierr);
     for (PetscInt Jj=0; Jj<nz; Jj++) {
       //ierr = 
MatSetValues(SparseMat,1,&Ii,nz,cwork,vwork,INSERT_VALUES);CHKERRQ(ierr);
       if( std::abs(vwork[Jj]) > zerotol ) {
         MatSetValue(SparseMat ,Ii,cwork[Jj],vwork[Jj],INSERT_VALUES);
       }
     }
     ierr = MatRestoreRow(MatDense,Ii,&nz,&cwork,&vwork);CHKERRQ(ierr);
   }

   ierr=PetscPrintf(PETSC_COMM_WORLD,
                    "  Assembling...\n");CHKERRQ(ierr);
   ierr = MatAssemblyBegin(SparseMat ,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
   ierr = MatAssemblyEnd(  SparseMat ,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);


I haven't gotten a chance to look further into it, but I'm not sure if the

       if( std::abs(vwork[Jj]) > zerotol ) {
         MatSetValue(SparseMat ,Ii,cwork[Jj],vwork[Jj],INSERT_VALUES);
       }


helps performance w/ future calls to matmatmult_mpiaij_mpiaij as 
I would suspect...









df











On Sun, 5 Apr 2009, Yujie wrote:

> 
> Dear David:
> 
> Thank you very much for your help. I tried to do this. However, there is not 
> MatConvert_MPIDense() to convert dense
> matrix to aij format. Maybe, the possible method is to create new aij matrix 
> and copy the data into new matrix.
> Thanks.
> 
> Regards,
> 
> Yujie
> 
> 
> On Sun, Apr 5, 2009 at 1:48 PM, David Fuentes <fuentesdt at gmail.com> wrote:
>       Hi Yujie,
> 
>
>       as a work around have you tried converting your dense
>       matrices to aij format and using MatMatMult_MPIAIJ_MPIAIJ()??
> 
> 
> 
>
>       df
> 
> 
> 
> 
> 
> 
>
>       On Fri, 3 Apr 2009, Yujie wrote:
> 
>
>             Dear Barry:
>
>             I am trying to debug the codes you have written with ex123.c. 
> After commenting the error
>             output
>             (SETERRQ(PETSC_ERR_LIB,"Due to aparent bugs in PLAPACK,this is 
> not currently supported");)
>             in
>             MatMatMultSymbolic_MPIDense_MPIDense().?
>
>             The errors I got is "Caught signal number 11 SEGV: Segmentation 
> Violation". It takes place
>             in
>             ?"PLA_Obj_set_to_zero(lu->A);" in?
>
>             MatMPIDenseCopyToPlapack().?
>
>             To my understanding, if you want to set "lu->A" to zero, you 
> first assign memory to "lu->A".
>             However, I can't find
>             which function you do this in? Could you give me some advice? 
> thanks a lot.
>
>             Regards,
>
>             Yujie
> 
>
>             On Thu, Apr 2, 2009 at 8:02 PM, Barry Smith <bsmith at 
> mcs.anl.gov> wrote:
>
>             ? ? ?On Apr 2, 2009, at 9:19 PM, Yujie wrote:
>
>             ? ? ? ? ? ?Hi, PETSc Developers
>
>             ? ? ? ? ? ?I am wondering whether MatMatMult_MPIDense_MPIDense() 
> works currently based on
>             PLAPACK?
>             ? ? ? ? ? ?Thanks a lot.
> 
>
>             ?No, if you run it you will see it print an error message.
>
>             ?I tried to debug PLAPACK to determine the problem but it was 
> awfully complicated and had to
>             give up.
>             Certainly someone else
>             could try to debug PLAPACK to determine the problem. PLAPACK is 
> not supported so
>             unfortunately there is no one
>             to complain to about it and you'd have to fix it yourself.
>
>             ?Barry
> 
> 
>
>             ? ? ?Regards,
>
>             ? ? ?Yujie
> 
> 
> 
> 
> 
> 
>

Reply via email to