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

Reply via email to