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

Lisandro Dalcin dalcinl at gmail.com
Wed Jul 22 13:47:42 CDT 2009


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