Ok. I’ll take care of that in a new branch Stefano
On Jun 26, 2015, at 5:27 PM, Barry Smith <[email protected]> wrote: > >> On Jun 26, 2015, at 7:28 AM, Stefano Zampini <[email protected]> >> wrote: >> >> I merged the fix for MatCreateVecs into next >> >> https://bitbucket.org/petsc/petsc/commits/248f4e93fc838f918a85fe2b6cf6cc3494943f33 >> >> If we agree on MatGetDefaultVecType, I will create a new branch for it >> Maybe we don’t need a new function, but just store the default vec type into >> Mat (defaulting to VECSTANDARD) and then have MPICUSP and others override >> the default when their are instantiated. What do you think? > > Better to have a Set and Get because one must free the old string and > PetscStrallocpy() the new string and if each mat type is doing this manually > likely someone will forget the free or cut and paste wrong. > > Barry > >> >> Stefano >> >> On Jun 25, 2015, at 8:10 PM, Stefano Zampini <[email protected]> >> wrote: >> >>> Yes. With this approach, only MatNest will need a specialized getvecs >>> operation and we can get rid of the others. >>> >>> On Jun 25, 2015, at 7:06 PM, Barry Smith <[email protected]> wrote: >>> >>>> >>>>> On Jun 25, 2015, at 12:32 PM, Stefano Zampini <[email protected]> >>>>> wrote: >>>>> >>>>> pushed a fix >>>>> https://bitbucket.org/petsc/petsc/commits/ae287a2e7a141494f7c41f9dd537addb63b556e3 >>>>> >>>>> However, it appears that the functions below for CUSP, CUSPARSE and >>>>> VIENNACL are mere copies of the interface. >>>>> What about defining the type of the Vec in the interface and get rid of >>>>> these? >>>> >>>> What do you mean by "the type of Vec in the interface"? Do you mean have >>>> a method such as >>>> >>>> MatGetDefaultVecType(mat,const VecType *vtype); >>>> >>>> that defines the default vector type compatible with the matrix? So we >>>> could have >>>> >>>> #undef __FUNCT__ >>>> #define __FUNCT__ "MatCreateVecs_Default" >>>> PetscErrorCode MatCreateVecs_Default(Mat mat,Vec *right,Vec *left) >>>> { >>>> PetscErrorCode ierr; >>>> PetscInt rbs,cbs; >>>> const VecType vtype; >>>> >>>> PetscFunctionBegin; >>>> ierr = MatGetDefaultVecType(mat,&vtype);CHKERRQ(ierr); >>>> ierr = MatGetBlockSizes(mat,&rbs,&cbs);CHKERRQ(ierr); >>>> if (right) { >>>> ierr = VecCreate(PetscObjectComm((PetscObject)mat),right);CHKERRQ(ierr); >>>> ierr = VecSetSizes(*right,mat->cmap->n,PETSC_DETERMINE);CHKERRQ(ierr); >>>> ierr = VecSetBlockSize(*right,cbs);CHKERRQ(ierr); >>>> ierr = VecSetType(*right,vtype);CHKERRQ(ierr); >>>> ierr = VecSetLayout(*right,mat->cmap);CHKERRQ(ierr); >>>> } >>>> if (left) { >>>> ierr = VecCreate(PetscObjectComm((PetscObject)mat),left);CHKERRQ(ierr); >>>> ierr = VecSetSizes(*left,mat->rmap->n,PETSC_DETERMINE);CHKERRQ(ierr); >>>> ierr = VecSetBlockSize(*left,rbs);CHKERRQ(ierr); >>>> ierr = VecSetType(*left,vtype);CHKERRQ(ierr); >>>> ierr = VecSetLayout(*left,mat->rmap);CHKERRQ(ierr); >>>> } >>>> PetscFunctionReturn(0); >>>> } >>>> >>>> or something else? >>>> >>>> Barry >>>> >>>> >>>>> >>>>> src/mat/impls/aij/mpi/mpicusp/mpiaijcusp.cu: A->ops->getvecs = >>>>> MatCreateVecs_MPIAIJCUSP; >>>>> src/mat/impls/aij/mpi/mpicusparse/mpiaijcusparse.cu: A->ops->getvecs >>>>> = MatCreateVecs_MPIAIJCUSPARSE; >>>>> src/mat/impls/aij/mpi/mpiviennacl/mpiaijviennacl.cxx: A->ops->getvecs >>>>> = MatCreateVecs_MPIAIJViennaCL; >>>>> src/mat/impls/aij/seq/seqcusp/aijcusp.cu: B->ops->getvecs = >>>>> MatCreateVecs_SeqAIJCUSP; >>>>> src/mat/impls/aij/seq/seqcusparse/aijcusparse.cu: B->ops->getvecs >>>>> = MatCreateVecs_SeqAIJCUSPARSE; >>>>> src/mat/impls/aij/seq/seqviennacl/aijviennacl.cxx: B->ops->getvecs >>>>> = MatCreateVecs_SeqAIJViennaCL; >>>>> >>>>> Stefano >>>>> >>>>> >>>>> On Jun 25, 2015, at 4:34 PM, Barry Smith <[email protected]> wrote: >>>>> >>>>>> >>>>>> I think you are right, go ahead and make a pull request or send a patch >>>>>> >>>>>> Barry >>>>>> >>>>>>> On Jun 25, 2015, at 9:43 AM, Stefano Zampini >>>>>>> <[email protected]> wrote: >>>>>>> >>>>>>> Why the current interface in MatCreateVecs requires that a matrix has >>>>>>> been already either allocated or setup ? >>>>>>> Shouldn’t be enough to check if the layout has been already setup? >>>>>>> >>>>>>> Stefano >>>>>>> >>>>>> >>>>> >>>> >>> >> >
