a question about PetscSectionCreate
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. I can not find out the reasons, and any one can help me with it? The source file "test.c" is attached. Thanks, leejearl
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. Thanks, Dave The
source file "test.c" is attached.
Thanks,
leejearl
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/
Thanks for your kind replies. I will give a result after the test. On 2017年05月28日 19:32, Matthew Knepley wrote:
On Sun, May 28, 2017 at 1:49 AM, Dave May <[email protected] <mailto:[email protected]>> wrote:
On Sun, 28 May 2017 at 08:31, leejearl <[email protected] <mailto:[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/ <http://www.caam.rice.edu/%7Emk51/>
-- 李季 西北工业大学航空学院流体力学系 Phone: 17792092487 QQ: 188524324
participants (3)
-
Dave May -
leejearl -
Matthew Knepley