1 /* Copyright (c) 2012-2014. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
10 int main( argc, argv )
15 struct { int a;int c; double b;int tab[2][3];} value;
16 MPI_Datatype mystruct;
19 MPI_Datatype old_types[3], type2;
22 MPI_Init( &argc, &argv );
24 MPI_Comm_rank( MPI_COMM_WORLD, &rank );
26 int tab[2][3]={{1*rank,2*rank,3*rank},{7*rank,8*rank,9*rank}};
27 MPI_Type_contiguous(3, MPI_INT, &type2);
28 MPI_Type_commit(&type2);
30 /* One value of each type, and two for the contiguous one */
35 old_types[0] = MPI_INT;
36 old_types[1] = MPI_DOUBLE;
38 /* The locations of each element */
39 MPI_Address( &value.a, &indices[0] );
40 MPI_Address( &value.b, &indices[1] );
41 MPI_Address( &tab, &indices[2] );
43 indices[2] = indices[2] - indices[0];
44 indices[1] = indices[1] - indices[0];
47 MPI_Type_struct( 3, blocklens, indices, old_types, &mystruct );
48 MPI_Type_commit( &mystruct );
58 MPI_Bcast( &value, 1, mystruct, 0, MPI_COMM_WORLD );
60 printf( "Process %d got %d (-2?) and %f (8.0?), tab (should be all 0): ", rank, value.a, value.b );
64 printf("%d ", tab[j][i]);
69 /* Clean up the type */
70 MPI_Type_free( &mystruct );
71 MPI_Type_free( &type2 );