[petsc-users] MatSetValues() for MATMPICUSP

Jed Brown jedbrown at mcs.anl.gov
Sat Feb 11 11:06:58 CST 2012

On Sat, Feb 11, 2012 at 10:58, recrusader <recrusader at gmail.com> wrote:

>     "    ierr = MatCreateMPIAIJ (libMesh::COMM_WORLD,
>   m_local, n_local,
>                                 m_global, n_global,
>                                 PETSC_NULL, (int*) &n_nz[0],
>                                 PETSC_NULL, (int*) &n_oz[0], &_mat);
>              CHKERRABORT(libMesh::COMM_WORLD,ierr);
> Yujie
>       std::cout<<"MatSetOption"<<std::endl;"
> I run the same codes in CPU and GPU modes (the same parameters except that
> GPU uses '-vec_type mpicusp -mat_type mpiaijcusp'). I can find
> "MatSetOption" output from both the modes. Does that mean that the codes
> set the options for both the modes?

Libmesh is calling MatSetFromOptions() after MatCreateMPIAIJ() which means
the preallocation information will be lost if the type is changed. The code
should be written differently

  ierr = MatCreate(comm,A);CHKERRQ(ierr);
  ierr = MatSetSizes(*A,m,n,M,N);CHKERRQ(ierr);
  ierr = MPI_Comm_size(comm,&size);CHKERRQ(ierr);
  ierr = MatSetType(*A,MATAIJ);CHKERRQ(ierr);
  ierr = MatSetOptionsPrefix(*A,optional_prefix);CHKERRQ(ierr);
  ierr = MatSetFromOptions(*A);CHKERRQ(ierr);
  ierr = MatMPIAIJSetPreallocation(*A,d_nz,d_nnz,o_nz,o_nnz);CHKERRQ(ierr);
  ierr = MatSeqAIJSetPreallocation(*A,d_nz,d_nnz);CHKERRQ(ierr);

I can talk to the libmesh developers about making this change.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120211/6772c7bf/attachment.htm>

More information about the petsc-users mailing list