On Sun, May 28, 2017 at 1:49 AM, Dave May <dave.mayhe...@gmail.com> wrote:
> > On Sun, 28 May 2017 at 08:31, leejearl <leeje...@126.com> 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/