[petsc-users] A problem with MPI Derived Data Type and 'calloc'
Jed Brown
jedbrown at mcs.anl.gov
Thu Apr 12 13:22:01 CDT 2012
On Thu, Apr 12, 2012 at 13:16, Zhenglun (Alan) Wei
<zhenglun.wei at gmail.com>wrote:
> Thank you for your reply. It gives me another way to solve this
> problem. However, I failed several times while I was trying it. Can I
> repeat your idea to make sure that I understand it.
> 1) should define a new one-dimensional pointer array, i.e. TESTVAR *array;
> 2) I allocate this array with array = (TESTVAR*) calloc(SIZE*SIZE,
> sizeof(TESTVAR));
> 3) then, I setup pointer of 'a[i][j]' to array.
>
the_struct **a = malloc(SIZE*sizeof(the_struct));
for (i=0; i<SIZE; i++) a = &array[i*SIZE];
Now you can use a[i][j] instead of array[i*SIZE+j].
With C99, you can just create a VLA pointer:
Scalar (*a)[SIZE] = (Scalar(*)[SIZE])array;
and then use a[i][j] syntax without needing to allocate those pointers.
It's a shame Microsoft refuses to do any maintenance on their old C
compiler.
> Are they correct? BTW, does PETSc have any data structure can be an
> alternative so that I do not need to use MPI derived data type?
>
You can use VecScatter, for example.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120412/76ae40fc/attachment-0001.htm>
More information about the petsc-users
mailing list