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