1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
3 * (C) 2009 by Argonne National Laboratory.
4 * See COPYRIGHT in top-level directory.
6 /* Regression test for MPICH trac ticket #972, originally written by
7 * Rob Latham <robl@mcs.anl.gov> as a simplification of a type
8 * encountered by the HDF5 library.
10 * Should be run with 1 process. */
15 /* uncomment to use debugging routine in MPICH
16 extern int MPIDU_Datatype_debug(MPI_Datatype type, int depth);
19 int makeHDF5type0(MPI_Datatype *type);
20 int makeHDF5type0(MPI_Datatype *type)
22 MPI_Datatype ctg, vect, structype, vec2, structype2,
23 vec3, structype3, vec4, structype4, vec5;
29 MPI_Type_contiguous(4, MPI_BYTE, &ctg);
31 MPI_Type_vector(1, 5, 1, ctg, &vect);
33 b[0] = b[1] = b[2] = 1;
34 d[0] = 0; d[1] = 0; d[2] = 40;
35 t[0] = MPI_LB; t[1] = vect; t[2] = MPI_UB;
36 MPI_Type_create_struct(3, b, d, t, &structype);
38 MPI_Type_vector(1, 5, 1, structype, &vec2);
40 b[0] = b[1] = b[2] = 1;
41 d[0] = 0; d[1] = 2000; d[2] = 400;
42 t[0] = MPI_LB; t[1] = vec2; t[2] = MPI_UB;
43 MPI_Type_create_struct(3, b, d, t, &structype2);
45 MPI_Type_vector(1, 5, 1, structype2, &vec3);
47 b[0] = b[1] = b[2] = 1;
48 d[0] = 0; d[1] = 0; d[2] = 4000;
49 t[0] = MPI_LB; t[1] = vec3; t[2] = MPI_UB;
50 MPI_Type_create_struct(3, b, d, t, &structype3);
52 MPI_Type_vector(1, 5, 1, structype3, &vec4);
54 b[0] = b[1] = b[2] = 1;
55 d[0] = 0; d[1] = 0; d[2] = 40000;
56 t[0] = MPI_LB; t[1] = vec4; t[2] = MPI_UB;
57 MPI_Type_create_struct(3, b, d, t, &structype4);
59 MPI_Type_vector(1, 1, 1, structype4, &vec5);
61 b[0] = b[1] = b[2] = 1;
62 d[0] = 0; d[1] = 160000; d[2] = 200000;
63 t[0] = MPI_LB; t[1] = vec5; t[2] = MPI_UB;
64 MPI_Type_create_struct(3, b, d, t, type);
68 MPI_Type_free(&structype);
70 MPI_Type_free(&structype2);
72 MPI_Type_free(&structype3);
74 MPI_Type_free(&structype4);
76 MPI_Type_commit(type);
81 int makeHDF5type1(MPI_Datatype *type);
82 int makeHDF5type1(MPI_Datatype *type)
84 MPI_Datatype ctg, vect, structype, vec2, structype2,
85 vec3, structype3, vec4, structype4, vec5;
91 MPI_Type_contiguous(4, MPI_BYTE, &ctg);
93 MPI_Type_vector(1, 5, 1, ctg, &vect);
95 b[0] = b[1] = b[2] = 1;
96 d[0] = 0; d[1] = 20; d[2] = 40;
97 t[0] = MPI_LB; t[1] = vect; t[2] = MPI_UB;
98 MPI_Type_create_struct(3, b, d, t, &structype);
100 MPI_Type_vector(1, 5, 1, structype, &vec2);
102 b[0] = b[1] = b[2] = 1;
103 d[0] = 0; d[1] = 0; d[2] = 400;
104 t[0] = MPI_LB; t[1] = vec2; t[2] = MPI_UB;
105 MPI_Type_create_struct(3, b, d, t, &structype2);
107 MPI_Type_vector(1, 5, 1, structype2, &vec3);
109 b[0] = b[1] = b[2] = 1;
110 d[0] = 0; d[1] = 0; d[2] = 4000;
111 t[0] = MPI_LB; t[1] = vec3; t[2] = MPI_UB;
112 MPI_Type_create_struct(3, b, d, t, &structype3);
114 MPI_Type_vector(1, 5, 1, structype3, &vec4);
116 b[0] = b[1] = b[2] = 1;
117 d[0] = 0; d[1] = 0; d[2] = 40000;
118 t[0] = MPI_LB; t[1] = vec4; t[2] = MPI_UB;
119 MPI_Type_create_struct(3, b, d, t, &structype4);
121 MPI_Type_vector(1, 1, 1, structype4, &vec5);
123 b[0] = b[1] = b[2] = 1;
124 d[0] = 0; d[1] = 160000; d[2] = 200000;
125 t[0] = MPI_LB; t[1] = vec5; t[2] = MPI_UB;
126 MPI_Type_create_struct(3, b, d, t, type);
129 MPI_Type_free(&vect);
130 MPI_Type_free(&structype);
131 MPI_Type_free(&vec2);
132 MPI_Type_free(&structype2);
133 MPI_Type_free(&vec3);
134 MPI_Type_free(&structype3);
135 MPI_Type_free(&vec4);
136 MPI_Type_free(&structype4);
137 MPI_Type_free(&vec5);
138 MPI_Type_commit(type);
143 int makeHDF5type(MPI_Datatype *type);
144 int makeHDF5type(MPI_Datatype *type)
150 int blocklens[NTYPES];
151 MPI_Aint disps[NTYPES];
153 MPI_Datatype types[NTYPES];
154 makeHDF5type0(&(types[0]));
155 makeHDF5type1(&(types[1]));
157 for (i=0; i< NTYPES; i++) {
162 MPI_Type_create_struct(NTYPES, blocklens, disps, types, type);
163 MPI_Type_commit(type);
165 for(i=0; i<NTYPES; i++) {
166 MPI_Type_free(&(types[i]));
171 int main(int argc, char **argv)
173 MPI_Datatype hdf5type;
175 MPI_Init(&argc, &argv);
176 makeHDF5type(&hdf5type);
178 /*MPIDU_Datatype_debug(hdf5type, 32);*/
180 MPI_Type_free(&hdf5type);
183 printf(" No Errors\n");