Barry, I started to code all this, and have more or less ready the
parts up to VecSetUp(), but found a serious issue...

The following sequence of calls should work

VecCreate()
VecSetType()
VecSetSizes()
VecSetBlockSize()
VecGetArray() /* gotcha !!!*/

VecGetArray() is intended to be a local operation, then I cannot make
it automatically call the collective VecSetUp()... Asking users to
call VecSetUp() before VecGetArray() seems a nonsense...


On Wed, Jul 22, 2009 at 6:53 PM, Barry Smith<bsmith at mcs.anl.gov> wrote:
>
> ? ?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
>
>



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

Reply via email to