Vec: types, sizes, and block sizes...

Barry Smith bsmith at mcs.anl.gov
Wed Jul 22 16:53:56 CDT 2009


     VecCreate()
     VecSetXXX
     VecSetYYY
     VecSetBlockSize()
     VecSetUp()   (called also automatically as needed by later vector  
routines, like PCSetUp()/KSPSetUp()/SNESSetUp()/TSSetUp() are called)
       use the beast

     To make this universal we need to fix Mat to have the  
MatXXXSetPreallocation() to just stash the preallocation information  
not do the allocation on the spot, but wait until the MatSetUp().


    Barry


On Jul 22, 2009, at 1:47 PM, Lisandro Dalcin wrote:

> Starting a new thread ...
>
> Here you have simple example about creating Vec's. PETSc let me set
> first the type, or first the size and block size... However...
> setting FIRST the TYPE is currently broken...
>
> Anything we are going to do to fix this will require to handle the
> case above... At first, the only way I can imagine of doing that is by
> using a macro VecPreallocated() (more or less like in Mat), in charge
> of checking and setting-up the sizes&blocksizes and the allocated
> array. But then this macro have to be called on almost all Vec
> interface calls...
>
> Note: the code below have to be run in 2(two) processes to show the
> problems (at second block, when creating vector "y")...
>
> #include "petscvec.h"
>
> #undef __FUNCT__
> #define __FUNCT__ "main"
> int main(int argc,char **argv)
> {
>  PetscErrorCode ierr;
>  ierr = PetscInitialize(&argc,&argv,0,0);CHKERRQ(ierr);
>  if (1) {
>    Vec x;
>    ierr = VecCreate(PETSC_COMM_WORLD, &x);CHKERRQ(ierr);
>    ierr = VecSetSizes(x, PETSC_DECIDE, 9);CHKERRQ(ierr);
>    ierr = VecSetBlockSize(x, 3);CHKERRQ(ierr);
>    ierr = VecSetType(x, VECMPI);CHKERRQ(ierr);
>    ierr = VecDestroy(x);CHKERRQ(ierr);
>  }
>  if (1) {
>    Vec y;
>    ierr = VecCreate(PETSC_COMM_WORLD, &y);CHKERRQ(ierr);
>    ierr = VecSetType(y, VECMPI);CHKERRQ(ierr);
>    ierr = VecSetSizes(y, PETSC_DECIDE, 9);CHKERRQ(ierr);
>    ierr = VecSetBlockSize(y, 3);CHKERRQ(ierr);
>    ierr = VecDestroy(y);CHKERRQ(ierr);
>  }
>  ierr = PetscFinalize();CHKERRQ(ierr);
>  return 0;
> }
>
>
>
> -- 
> Lisandro Dalcín
> ---------------
> Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
> Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
> Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
> PTLC - Güemes 3450, (3000) Santa Fe, Argentina
> Tel/Fax: +54-(0)342-451.1594




More information about the petsc-dev mailing list