Trouble with DA, multiple degrees of freedom
Matthew Knepley
knepley at gmail.com
Tue Feb 5 13:58:58 CST 2008
The easiest thing to do in C is to declare a struct:
typedef struct {
PetscScalar v[3];
PetscScalar p;
} Space;
and then cast pointers
Space ***array;
DAVecGetArray(da, u, (void *) &array);
array[k][j][i].v *= -1.0;
Thanks,
Matt
On Feb 5, 2008 1:50 PM, Pearl Flath <pflath at ices.utexas.edu> wrote:
> Dear All,
> I have a code where the velocity (three components) and pressure are all
> stored in a distributed array with 4 degrees of freedom per node. I'd like
> to take one component of the velocity and multiply it by -1, but I am having
> trouble figuring out how to access that. I believe it must involve
> DAVecGetArrayDOF or DAVecGetArray, but I haven't managed to get either to
> work. I've attached a code fragment where it loads the velocity. Could
> someone suggest how to do this or point me to where I can find additional
> discussion of this? I've read the users manual on DA already.
> Sincerely,
> Pearl Flath
> ICES, UT Austin
> ---------------------------------
> DACreate3d(PETSC_COMM_WORLD,DA_NONPERIODIC,DA_STENCIL_BOX,m,n,p,
> PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,
> 4,1,PETSC_NULL,PETSC_NULL,PETSC_NULL,&daV);
>
> DACreateGlobalVector(daV, &vel);
>
> // Set the velocity file to read from
> PetscTruth flg ;
> PetscViewer view_u;
> char velocityfile[1024] ;
> PetscOptionsGetString(0,"-velocityfile",velocityfile,1023,&flg);
>
> PetscViewerBinaryOpen(PETSC_COMM_WORLD, velocityfile,
> FILE_MODE_READ, &view_u);
> VecLoadIntoVector(view_u, vel);
> PetscViewerDestroy(view_u);
>
>
>
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which
their experiments lead.
-- Norbert Wiener
More information about the petsc-users
mailing list