On Sun, May 28, 2017 at 1:49 AM, Dave May <[email protected]> wrote:
On Sun, 28 May 2017 at 08:31, leejearl <[email protected]> wrote:
Hi, PETSc developer:
I need to create a PetscSection with a struct. The struct is defined as follow,
typedef struct { PetscReal x; PetscInt id; } testStruct;
When I run the program, I got a wrong output as follow,
Vec Object: 1 MPI processes type: seq 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324 2. 4.94066e-324
But when I defined the struct as
typedef struct { PetscReal x; PetscReal id; } testStruct;
The output is ok. It seems that there is some wrong with the memories when I define the "id" as a PetscInt type.
Yep.
I can not find out the reasons, and any one can help me with it?
The Vec object can only store quantities of type PetscScalar. It cannot store PetscInt's and it definitely cannot represent a mixture of PetscReal's and PetscInt's.
Dave is correct. However this usage completely misses the point of Section. Section is a device for storing indices into ANY storage, not just Vec and IS. I would manage an array of the structs that I allocate, and use the Section to index into. Matt
Thanks, Dave
The
source file "test.c" is attached.
Thanks,
leejearl
-- 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 http://www.caam.rice.edu/~mk51/