Hitmap 1.3
 All Data Structures Namespaces Files Functions Variables Typedefs Friends Macros Groups Pages
hit_comTypeStruct.h
Go to the documentation of this file.
1 
10 // Macro for 1 struct elements
11 #define hit_comTypeStruct1(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A) \
12 { \
13  NATIVE_STRUCT cmdline; \
14  int blockcounts[1] = {(COUNT_A)}; \
15  MPI_Datatype types[1] = {(TYPE_A)}; \
16  MPI_Aint displs[1]; \
17  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
18  int ivarloop; \
19  for(ivarloop=0; ivarloop>=0; ivarloop--){ \
20  displs[ivarloop] -= displs[0]; \
21  } \
22  MPI_Type_create_struct(1, blockcounts, displs, types, new_type); \
23  MPI_Type_commit(new_type); \
24 }
25 
26 // Macro for 2 struct elements
27 #define hit_comTypeStruct2(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B) \
28 { \
29  NATIVE_STRUCT cmdline; \
30  int blockcounts[2] = {(COUNT_A), (COUNT_B)}; \
31  MPI_Datatype types[2] = {(TYPE_A), (TYPE_B)}; \
32  MPI_Aint displs[2]; \
33  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
34  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
35  int ivarloop; \
36  for(ivarloop=1; ivarloop>=0; ivarloop--){ \
37  displs[ivarloop] -= displs[0]; \
38  } \
39  MPI_Type_create_struct(2, blockcounts, displs, types, new_type); \
40  MPI_Type_commit(new_type); \
41 }
42 
43 // Macro for 3 struct elements
44 #define hit_comTypeStruct3(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C) \
45 { \
46  NATIVE_STRUCT cmdline; \
47  int blockcounts[3] = {(COUNT_A), (COUNT_B), (COUNT_C)}; \
48  MPI_Datatype types[3] = {(TYPE_A), (TYPE_B), (TYPE_C)}; \
49  MPI_Aint displs[3]; \
50  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
51  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
52  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
53  int ivarloop; \
54  for(ivarloop=2; ivarloop>=0; ivarloop--){ \
55  displs[ivarloop] -= displs[0]; \
56  } \
57  MPI_Type_create_struct(3, blockcounts, displs, types, new_type); \
58  MPI_Type_commit(new_type); \
59 }
60 
61 // Macro for 4 struct elements
62 #define hit_comTypeStruct4(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D) \
63 { \
64  NATIVE_STRUCT cmdline; \
65  int blockcounts[4] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D)}; \
66  MPI_Datatype types[4] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D)}; \
67  MPI_Aint displs[4]; \
68  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
69  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
70  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
71  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
72  int ivarloop; \
73  for(ivarloop=3; ivarloop>=0; ivarloop--){ \
74  displs[ivarloop] -= displs[0]; \
75  } \
76  MPI_Type_create_struct(4, blockcounts, displs, types, new_type); \
77  MPI_Type_commit(new_type); \
78 }
79 
80 // Macro for 5 struct elements
81 #define hit_comTypeStruct5(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E) \
82 { \
83  NATIVE_STRUCT cmdline; \
84  int blockcounts[5] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E)}; \
85  MPI_Datatype types[5] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E)}; \
86  MPI_Aint displs[5]; \
87  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
88  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
89  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
90  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
91  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
92  int ivarloop; \
93  for(ivarloop=4; ivarloop>=0; ivarloop--){ \
94  displs[ivarloop] -= displs[0]; \
95  } \
96  MPI_Type_create_struct(5, blockcounts, displs, types, new_type); \
97  MPI_Type_commit(new_type); \
98 }
99 
100 // Macro for 6 struct elements
101 #define hit_comTypeStruct6(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F) \
102 { \
103  NATIVE_STRUCT cmdline; \
104  int blockcounts[6] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F)}; \
105  MPI_Datatype types[6] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F)}; \
106  MPI_Aint displs[6]; \
107  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
108  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
109  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
110  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
111  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
112  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
113  int ivarloop; \
114  for(ivarloop=5; ivarloop>=0; ivarloop--){ \
115  displs[ivarloop] -= displs[0]; \
116  } \
117  MPI_Type_create_struct(6, blockcounts, displs, types, new_type); \
118  MPI_Type_commit(new_type); \
119 }
120 
121 // Macro for 7 struct elements
122 #define hit_comTypeStruct7(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G) \
123 { \
124  NATIVE_STRUCT cmdline; \
125  int blockcounts[7] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G)}; \
126  MPI_Datatype types[7] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G)}; \
127  MPI_Aint displs[7]; \
128  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
129  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
130  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
131  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
132  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
133  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
134  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
135  int ivarloop; \
136  for(ivarloop=6; ivarloop>=0; ivarloop--){ \
137  displs[ivarloop] -= displs[0]; \
138  } \
139  MPI_Type_create_struct(7, blockcounts, displs, types, new_type); \
140  MPI_Type_commit(new_type); \
141 }
142 
143 // Macro for 8 struct elements
144 #define hit_comTypeStruct8(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H) \
145 { \
146  NATIVE_STRUCT cmdline; \
147  int blockcounts[8] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H)}; \
148  MPI_Datatype types[8] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H)}; \
149  MPI_Aint displs[8]; \
150  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
151  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
152  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
153  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
154  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
155  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
156  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
157  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
158  int ivarloop; \
159  for(ivarloop=7; ivarloop>=0; ivarloop--){ \
160  displs[ivarloop] -= displs[0]; \
161  } \
162  MPI_Type_create_struct(8, blockcounts, displs, types, new_type); \
163  MPI_Type_commit(new_type); \
164 }
165 
166 // Macro for 9 struct elements
167 #define hit_comTypeStruct9(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I) \
168 { \
169  NATIVE_STRUCT cmdline; \
170  int blockcounts[9] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I)}; \
171  MPI_Datatype types[9] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I)}; \
172  MPI_Aint displs[9]; \
173  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
174  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
175  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
176  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
177  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
178  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
179  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
180  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
181  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
182  int ivarloop; \
183  for(ivarloop=8; ivarloop>=0; ivarloop--){ \
184  displs[ivarloop] -= displs[0]; \
185  } \
186  MPI_Type_create_struct(9, blockcounts, displs, types, new_type); \
187  MPI_Type_commit(new_type); \
188 }
189 
190 // Macro for 10 struct elements
191 #define hit_comTypeStruct10(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J) \
192 { \
193  NATIVE_STRUCT cmdline; \
194  int blockcounts[10] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J)}; \
195  MPI_Datatype types[10] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J)}; \
196  MPI_Aint displs[10]; \
197  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
198  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
199  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
200  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
201  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
202  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
203  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
204  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
205  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
206  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
207  int ivarloop; \
208  for(ivarloop=9; ivarloop>=0; ivarloop--){ \
209  displs[ivarloop] -= displs[0]; \
210  } \
211  MPI_Type_create_struct(10, blockcounts, displs, types, new_type); \
212  MPI_Type_commit(new_type); \
213 }
214 
215 // Macro for 11 struct elements
216 #define hit_comTypeStruct11(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K) \
217 { \
218  NATIVE_STRUCT cmdline; \
219  int blockcounts[11] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K)}; \
220  MPI_Datatype types[11] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K)}; \
221  MPI_Aint displs[11]; \
222  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
223  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
224  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
225  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
226  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
227  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
228  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
229  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
230  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
231  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
232  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
233  int ivarloop; \
234  for(ivarloop=10; ivarloop>=0; ivarloop--){ \
235  displs[ivarloop] -= displs[0]; \
236  } \
237  MPI_Type_create_struct(11, blockcounts, displs, types, new_type); \
238  MPI_Type_commit(new_type); \
239 }
240 
241 // Macro for 12 struct elements
242 #define hit_comTypeStruct12(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L) \
243 { \
244  NATIVE_STRUCT cmdline; \
245  int blockcounts[12] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L)}; \
246  MPI_Datatype types[12] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L)}; \
247  MPI_Aint displs[12]; \
248  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
249  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
250  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
251  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
252  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
253  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
254  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
255  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
256  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
257  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
258  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
259  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
260  int ivarloop; \
261  for(ivarloop=11; ivarloop>=0; ivarloop--){ \
262  displs[ivarloop] -= displs[0]; \
263  } \
264  MPI_Type_create_struct(12, blockcounts, displs, types, new_type); \
265  MPI_Type_commit(new_type); \
266 }
267 
268 // Macro for 13 struct elements
269 #define hit_comTypeStruct13(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M) \
270 { \
271  NATIVE_STRUCT cmdline; \
272  int blockcounts[13] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M)}; \
273  MPI_Datatype types[13] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M)}; \
274  MPI_Aint displs[13]; \
275  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
276  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
277  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
278  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
279  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
280  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
281  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
282  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
283  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
284  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
285  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
286  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
287  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
288  int ivarloop; \
289  for(ivarloop=12; ivarloop>=0; ivarloop--){ \
290  displs[ivarloop] -= displs[0]; \
291  } \
292  MPI_Type_create_struct(13, blockcounts, displs, types, new_type); \
293  MPI_Type_commit(new_type); \
294 }
295 
296 // Macro for 14 struct elements
297 #define hit_comTypeStruct14(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N) \
298 { \
299  NATIVE_STRUCT cmdline; \
300  int blockcounts[14] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N)}; \
301  MPI_Datatype types[14] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N)}; \
302  MPI_Aint displs[14]; \
303  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
304  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
305  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
306  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
307  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
308  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
309  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
310  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
311  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
312  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
313  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
314  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
315  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
316  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
317  int ivarloop; \
318  for(ivarloop=13; ivarloop>=0; ivarloop--){ \
319  displs[ivarloop] -= displs[0]; \
320  } \
321  MPI_Type_create_struct(14, blockcounts, displs, types, new_type); \
322  MPI_Type_commit(new_type); \
323 }
324 
325 // Macro for 15 struct elements
326 #define hit_comTypeStruct15(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O) \
327 { \
328  NATIVE_STRUCT cmdline; \
329  int blockcounts[15] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O)}; \
330  MPI_Datatype types[15] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O)}; \
331  MPI_Aint displs[15]; \
332  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
333  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
334  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
335  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
336  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
337  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
338  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
339  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
340  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
341  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
342  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
343  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
344  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
345  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
346  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
347  int ivarloop; \
348  for(ivarloop=14; ivarloop>=0; ivarloop--){ \
349  displs[ivarloop] -= displs[0]; \
350  } \
351  MPI_Type_create_struct(15, blockcounts, displs, types, new_type); \
352  MPI_Type_commit(new_type); \
353 }
354 
355 // Macro for 16 struct elements
356 #define hit_comTypeStruct16(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P) \
357 { \
358  NATIVE_STRUCT cmdline; \
359  int blockcounts[16] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P)}; \
360  MPI_Datatype types[16] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P)}; \
361  MPI_Aint displs[16]; \
362  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
363  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
364  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
365  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
366  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
367  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
368  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
369  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
370  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
371  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
372  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
373  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
374  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
375  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
376  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
377  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
378  int ivarloop; \
379  for(ivarloop=15; ivarloop>=0; ivarloop--){ \
380  displs[ivarloop] -= displs[0]; \
381  } \
382  MPI_Type_create_struct(16, blockcounts, displs, types, new_type); \
383  MPI_Type_commit(new_type); \
384 }
385 
386 // Macro for 17 struct elements
387 #define hit_comTypeStruct17(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q) \
388 { \
389  NATIVE_STRUCT cmdline; \
390  int blockcounts[17] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q)}; \
391  MPI_Datatype types[17] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q)}; \
392  MPI_Aint displs[17]; \
393  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
394  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
395  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
396  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
397  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
398  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
399  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
400  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
401  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
402  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
403  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
404  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
405  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
406  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
407  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
408  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
409  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
410  int ivarloop; \
411  for(ivarloop=16; ivarloop>=0; ivarloop--){ \
412  displs[ivarloop] -= displs[0]; \
413  } \
414  MPI_Type_create_struct(17, blockcounts, displs, types, new_type); \
415  MPI_Type_commit(new_type); \
416 }
417 
418 // Macro for 18 struct elements
419 #define hit_comTypeStruct18(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R) \
420 { \
421  NATIVE_STRUCT cmdline; \
422  int blockcounts[18] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R)}; \
423  MPI_Datatype types[18] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R)}; \
424  MPI_Aint displs[18]; \
425  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
426  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
427  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
428  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
429  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
430  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
431  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
432  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
433  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
434  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
435  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
436  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
437  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
438  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
439  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
440  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
441  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
442  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
443  int ivarloop; \
444  for(ivarloop=17; ivarloop>=0; ivarloop--){ \
445  displs[ivarloop] -= displs[0]; \
446  } \
447  MPI_Type_create_struct(18, blockcounts, displs, types, new_type); \
448  MPI_Type_commit(new_type); \
449 }
450 
451 // Macro for 19 struct elements
452 #define hit_comTypeStruct19(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S) \
453 { \
454  NATIVE_STRUCT cmdline; \
455  int blockcounts[19] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S)}; \
456  MPI_Datatype types[19] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S)}; \
457  MPI_Aint displs[19]; \
458  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
459  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
460  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
461  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
462  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
463  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
464  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
465  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
466  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
467  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
468  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
469  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
470  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
471  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
472  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
473  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
474  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
475  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
476  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
477  int ivarloop; \
478  for(ivarloop=18; ivarloop>=0; ivarloop--){ \
479  displs[ivarloop] -= displs[0]; \
480  } \
481  MPI_Type_create_struct(19, blockcounts, displs, types, new_type); \
482  MPI_Type_commit(new_type); \
483 }
484 
485 // Macro for 20 struct elements
486 #define hit_comTypeStruct20(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T) \
487 { \
488  NATIVE_STRUCT cmdline; \
489  int blockcounts[20] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T)}; \
490  MPI_Datatype types[20] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T)}; \
491  MPI_Aint displs[20]; \
492  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
493  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
494  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
495  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
496  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
497  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
498  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
499  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
500  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
501  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
502  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
503  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
504  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
505  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
506  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
507  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
508  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
509  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
510  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
511  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
512  int ivarloop; \
513  for(ivarloop=19; ivarloop>=0; ivarloop--){ \
514  displs[ivarloop] -= displs[0]; \
515  } \
516  MPI_Type_create_struct(20, blockcounts, displs, types, new_type); \
517  MPI_Type_commit(new_type); \
518 }
519 
520 // Macro for 21 struct elements
521 #define hit_comTypeStruct21(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U) \
522 { \
523  NATIVE_STRUCT cmdline; \
524  int blockcounts[21] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U)}; \
525  MPI_Datatype types[21] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U)}; \
526  MPI_Aint displs[21]; \
527  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
528  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
529  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
530  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
531  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
532  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
533  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
534  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
535  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
536  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
537  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
538  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
539  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
540  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
541  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
542  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
543  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
544  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
545  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
546  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
547  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
548  int ivarloop; \
549  for(ivarloop=20; ivarloop>=0; ivarloop--){ \
550  displs[ivarloop] -= displs[0]; \
551  } \
552  MPI_Type_create_struct(21, blockcounts, displs, types, new_type); \
553  MPI_Type_commit(new_type); \
554 }
555 
556 // Macro for 22 struct elements
557 #define hit_comTypeStruct22(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V) \
558 { \
559  NATIVE_STRUCT cmdline; \
560  int blockcounts[22] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V)}; \
561  MPI_Datatype types[22] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V)}; \
562  MPI_Aint displs[22]; \
563  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
564  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
565  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
566  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
567  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
568  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
569  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
570  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
571  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
572  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
573  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
574  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
575  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
576  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
577  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
578  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
579  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
580  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
581  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
582  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
583  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
584  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
585  int ivarloop; \
586  for(ivarloop=21; ivarloop>=0; ivarloop--){ \
587  displs[ivarloop] -= displs[0]; \
588  } \
589  MPI_Type_create_struct(22, blockcounts, displs, types, new_type); \
590  MPI_Type_commit(new_type); \
591 }
592 
593 // Macro for 23 struct elements
594 #define hit_comTypeStruct23(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W) \
595 { \
596  NATIVE_STRUCT cmdline; \
597  int blockcounts[23] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W)}; \
598  MPI_Datatype types[23] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W)}; \
599  MPI_Aint displs[23]; \
600  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
601  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
602  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
603  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
604  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
605  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
606  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
607  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
608  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
609  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
610  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
611  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
612  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
613  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
614  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
615  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
616  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
617  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
618  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
619  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
620  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
621  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
622  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
623  int ivarloop; \
624  for(ivarloop=22; ivarloop>=0; ivarloop--){ \
625  displs[ivarloop] -= displs[0]; \
626  } \
627  MPI_Type_create_struct(23, blockcounts, displs, types, new_type); \
628  MPI_Type_commit(new_type); \
629 }
630 
631 // Macro for 24 struct elements
632 #define hit_comTypeStruct24(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X) \
633 { \
634  NATIVE_STRUCT cmdline; \
635  int blockcounts[24] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X)}; \
636  MPI_Datatype types[24] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X)}; \
637  MPI_Aint displs[24]; \
638  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
639  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
640  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
641  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
642  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
643  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
644  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
645  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
646  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
647  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
648  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
649  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
650  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
651  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
652  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
653  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
654  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
655  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
656  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
657  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
658  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
659  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
660  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
661  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
662  int ivarloop; \
663  for(ivarloop=23; ivarloop>=0; ivarloop--){ \
664  displs[ivarloop] -= displs[0]; \
665  } \
666  MPI_Type_create_struct(24, blockcounts, displs, types, new_type); \
667  MPI_Type_commit(new_type); \
668 }
669 
670 // Macro for 25 struct elements
671 #define hit_comTypeStruct25(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y) \
672 { \
673  NATIVE_STRUCT cmdline; \
674  int blockcounts[25] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y)}; \
675  MPI_Datatype types[25] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y)}; \
676  MPI_Aint displs[25]; \
677  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
678  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
679  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
680  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
681  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
682  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
683  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
684  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
685  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
686  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
687  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
688  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
689  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
690  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
691  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
692  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
693  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
694  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
695  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
696  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
697  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
698  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
699  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
700  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
701  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
702  int ivarloop; \
703  for(ivarloop=24; ivarloop>=0; ivarloop--){ \
704  displs[ivarloop] -= displs[0]; \
705  } \
706  MPI_Type_create_struct(25, blockcounts, displs, types, new_type); \
707  MPI_Type_commit(new_type); \
708 }
709 
710 // Macro for 26 struct elements
711 #define hit_comTypeStruct26(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z) \
712 { \
713  NATIVE_STRUCT cmdline; \
714  int blockcounts[26] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z)}; \
715  MPI_Datatype types[26] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z)}; \
716  MPI_Aint displs[26]; \
717  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
718  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
719  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
720  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
721  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
722  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
723  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
724  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
725  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
726  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
727  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
728  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
729  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
730  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
731  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
732  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
733  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
734  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
735  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
736  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
737  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
738  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
739  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
740  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
741  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
742  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
743  int ivarloop; \
744  for(ivarloop=25; ivarloop>=0; ivarloop--){ \
745  displs[ivarloop] -= displs[0]; \
746  } \
747  MPI_Type_create_struct(26, blockcounts, displs, types, new_type); \
748  MPI_Type_commit(new_type); \
749 }
750 
751 // Macro for 27 struct elements
752 #define hit_comTypeStruct27(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA) \
753 { \
754  NATIVE_STRUCT cmdline; \
755  int blockcounts[27] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA)}; \
756  MPI_Datatype types[27] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA)}; \
757  MPI_Aint displs[27]; \
758  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
759  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
760  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
761  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
762  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
763  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
764  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
765  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
766  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
767  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
768  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
769  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
770  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
771  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
772  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
773  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
774  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
775  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
776  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
777  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
778  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
779  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
780  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
781  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
782  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
783  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
784  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
785  int ivarloop; \
786  for(ivarloop=26; ivarloop>=0; ivarloop--){ \
787  displs[ivarloop] -= displs[0]; \
788  } \
789  MPI_Type_create_struct(27, blockcounts, displs, types, new_type); \
790  MPI_Type_commit(new_type); \
791 }
792 
793 // Macro for 28 struct elements
794 #define hit_comTypeStruct28(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB) \
795 { \
796  NATIVE_STRUCT cmdline; \
797  int blockcounts[28] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB)}; \
798  MPI_Datatype types[28] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB)}; \
799  MPI_Aint displs[28]; \
800  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
801  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
802  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
803  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
804  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
805  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
806  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
807  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
808  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
809  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
810  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
811  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
812  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
813  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
814  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
815  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
816  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
817  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
818  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
819  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
820  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
821  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
822  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
823  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
824  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
825  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
826  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
827  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
828  int ivarloop; \
829  for(ivarloop=27; ivarloop>=0; ivarloop--){ \
830  displs[ivarloop] -= displs[0]; \
831  } \
832  MPI_Type_create_struct(28, blockcounts, displs, types, new_type); \
833  MPI_Type_commit(new_type); \
834 }
835 
836 // Macro for 29 struct elements
837 #define hit_comTypeStruct29(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC) \
838 { \
839  NATIVE_STRUCT cmdline; \
840  int blockcounts[29] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC)}; \
841  MPI_Datatype types[29] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC)}; \
842  MPI_Aint displs[29]; \
843  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
844  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
845  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
846  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
847  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
848  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
849  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
850  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
851  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
852  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
853  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
854  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
855  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
856  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
857  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
858  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
859  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
860  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
861  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
862  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
863  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
864  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
865  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
866  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
867  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
868  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
869  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
870  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
871  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
872  int ivarloop; \
873  for(ivarloop=28; ivarloop>=0; ivarloop--){ \
874  displs[ivarloop] -= displs[0]; \
875  } \
876  MPI_Type_create_struct(29, blockcounts, displs, types, new_type); \
877  MPI_Type_commit(new_type); \
878 }
879 
880 // Macro for 30 struct elements
881 #define hit_comTypeStruct30(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD) \
882 { \
883  NATIVE_STRUCT cmdline; \
884  int blockcounts[30] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD)}; \
885  MPI_Datatype types[30] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD)}; \
886  MPI_Aint displs[30]; \
887  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
888  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
889  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
890  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
891  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
892  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
893  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
894  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
895  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
896  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
897  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
898  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
899  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
900  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
901  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
902  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
903  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
904  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
905  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
906  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
907  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
908  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
909  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
910  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
911  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
912  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
913  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
914  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
915  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
916  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
917  int ivarloop; \
918  for(ivarloop=29; ivarloop>=0; ivarloop--){ \
919  displs[ivarloop] -= displs[0]; \
920  } \
921  MPI_Type_create_struct(30, blockcounts, displs, types, new_type); \
922  MPI_Type_commit(new_type); \
923 }
924 
925 // Macro for 31 struct elements
926 #define hit_comTypeStruct31(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE) \
927 { \
928  NATIVE_STRUCT cmdline; \
929  int blockcounts[31] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE)}; \
930  MPI_Datatype types[31] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE)}; \
931  MPI_Aint displs[31]; \
932  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
933  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
934  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
935  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
936  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
937  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
938  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
939  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
940  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
941  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
942  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
943  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
944  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
945  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
946  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
947  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
948  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
949  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
950  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
951  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
952  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
953  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
954  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
955  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
956  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
957  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
958  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
959  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
960  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
961  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
962  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
963  int ivarloop; \
964  for(ivarloop=30; ivarloop>=0; ivarloop--){ \
965  displs[ivarloop] -= displs[0]; \
966  } \
967  MPI_Type_create_struct(31, blockcounts, displs, types, new_type); \
968  MPI_Type_commit(new_type); \
969 }
970 
971 // Macro for 32 struct elements
972 #define hit_comTypeStruct32(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF) \
973 { \
974  NATIVE_STRUCT cmdline; \
975  int blockcounts[32] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF)}; \
976  MPI_Datatype types[32] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF)}; \
977  MPI_Aint displs[32]; \
978  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
979  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
980  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
981  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
982  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
983  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
984  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
985  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
986  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
987  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
988  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
989  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
990  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
991  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
992  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
993  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
994  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
995  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
996  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
997  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
998  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
999  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1000  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1001  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1002  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1003  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1004  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1005  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1006  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1007  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1008  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1009  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1010  int ivarloop; \
1011  for(ivarloop=31; ivarloop>=0; ivarloop--){ \
1012  displs[ivarloop] -= displs[0]; \
1013  } \
1014  MPI_Type_create_struct(32, blockcounts, displs, types, new_type); \
1015  MPI_Type_commit(new_type); \
1016 }
1017 
1018 // Macro for 33 struct elements
1019 #define hit_comTypeStruct33(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG) \
1020 { \
1021  NATIVE_STRUCT cmdline; \
1022  int blockcounts[33] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG)}; \
1023  MPI_Datatype types[33] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG)}; \
1024  MPI_Aint displs[33]; \
1025  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1026  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1027  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1028  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1029  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1030  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1031  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1032  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1033  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1034  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1035  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1036  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1037  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1038  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1039  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1040  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1041  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1042  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1043  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1044  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1045  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1046  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1047  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1048  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1049  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1050  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1051  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1052  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1053  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1054  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1055  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1056  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1057  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1058  int ivarloop; \
1059  for(ivarloop=32; ivarloop>=0; ivarloop--){ \
1060  displs[ivarloop] -= displs[0]; \
1061  } \
1062  MPI_Type_create_struct(33, blockcounts, displs, types, new_type); \
1063  MPI_Type_commit(new_type); \
1064 }
1065 
1066 // Macro for 34 struct elements
1067 #define hit_comTypeStruct34(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH) \
1068 { \
1069  NATIVE_STRUCT cmdline; \
1070  int blockcounts[34] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH)}; \
1071  MPI_Datatype types[34] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH)}; \
1072  MPI_Aint displs[34]; \
1073  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1074  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1075  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1076  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1077  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1078  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1079  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1080  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1081  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1082  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1083  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1084  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1085  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1086  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1087  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1088  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1089  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1090  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1091  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1092  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1093  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1094  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1095  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1096  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1097  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1098  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1099  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1100  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1101  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1102  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1103  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1104  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1105  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1106  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1107  int ivarloop; \
1108  for(ivarloop=33; ivarloop>=0; ivarloop--){ \
1109  displs[ivarloop] -= displs[0]; \
1110  } \
1111  MPI_Type_create_struct(34, blockcounts, displs, types, new_type); \
1112  MPI_Type_commit(new_type); \
1113 }
1114 
1115 // Macro for 35 struct elements
1116 #define hit_comTypeStruct35(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI) \
1117 { \
1118  NATIVE_STRUCT cmdline; \
1119  int blockcounts[35] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI)}; \
1120  MPI_Datatype types[35] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI)}; \
1121  MPI_Aint displs[35]; \
1122  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1123  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1124  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1125  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1126  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1127  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1128  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1129  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1130  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1131  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1132  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1133  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1134  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1135  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1136  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1137  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1138  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1139  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1140  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1141  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1142  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1143  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1144  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1145  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1146  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1147  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1148  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1149  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1150  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1151  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1152  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1153  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1154  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1155  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1156  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1157  int ivarloop; \
1158  for(ivarloop=34; ivarloop>=0; ivarloop--){ \
1159  displs[ivarloop] -= displs[0]; \
1160  } \
1161  MPI_Type_create_struct(35, blockcounts, displs, types, new_type); \
1162  MPI_Type_commit(new_type); \
1163 }
1164 
1165 // Macro for 36 struct elements
1166 #define hit_comTypeStruct36(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ) \
1167 { \
1168  NATIVE_STRUCT cmdline; \
1169  int blockcounts[36] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ)}; \
1170  MPI_Datatype types[36] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ)}; \
1171  MPI_Aint displs[36]; \
1172  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1173  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1174  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1175  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1176  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1177  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1178  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1179  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1180  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1181  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1182  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1183  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1184  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1185  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1186  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1187  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1188  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1189  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1190  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1191  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1192  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1193  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1194  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1195  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1196  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1197  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1198  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1199  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1200  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1201  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1202  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1203  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1204  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1205  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1206  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1207  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1208  int ivarloop; \
1209  for(ivarloop=35; ivarloop>=0; ivarloop--){ \
1210  displs[ivarloop] -= displs[0]; \
1211  } \
1212  MPI_Type_create_struct(36, blockcounts, displs, types, new_type); \
1213  MPI_Type_commit(new_type); \
1214 }
1215 
1216 // Macro for 37 struct elements
1217 #define hit_comTypeStruct37(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK) \
1218 { \
1219  NATIVE_STRUCT cmdline; \
1220  int blockcounts[37] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK)}; \
1221  MPI_Datatype types[37] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK)}; \
1222  MPI_Aint displs[37]; \
1223  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1224  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1225  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1226  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1227  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1228  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1229  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1230  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1231  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1232  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1233  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1234  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1235  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1236  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1237  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1238  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1239  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1240  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1241  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1242  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1243  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1244  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1245  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1246  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1247  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1248  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1249  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1250  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1251  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1252  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1253  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1254  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1255  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1256  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1257  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1258  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1259  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1260  int ivarloop; \
1261  for(ivarloop=36; ivarloop>=0; ivarloop--){ \
1262  displs[ivarloop] -= displs[0]; \
1263  } \
1264  MPI_Type_create_struct(37, blockcounts, displs, types, new_type); \
1265  MPI_Type_commit(new_type); \
1266 }
1267 
1268 // Macro for 38 struct elements
1269 #define hit_comTypeStruct38(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL) \
1270 { \
1271  NATIVE_STRUCT cmdline; \
1272  int blockcounts[38] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL)}; \
1273  MPI_Datatype types[38] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL)}; \
1274  MPI_Aint displs[38]; \
1275  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1276  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1277  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1278  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1279  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1280  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1281  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1282  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1283  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1284  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1285  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1286  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1287  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1288  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1289  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1290  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1291  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1292  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1293  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1294  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1295  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1296  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1297  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1298  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1299  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1300  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1301  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1302  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1303  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1304  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1305  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1306  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1307  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1308  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1309  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1310  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1311  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1312  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1313  int ivarloop; \
1314  for(ivarloop=37; ivarloop>=0; ivarloop--){ \
1315  displs[ivarloop] -= displs[0]; \
1316  } \
1317  MPI_Type_create_struct(38, blockcounts, displs, types, new_type); \
1318  MPI_Type_commit(new_type); \
1319 }
1320 
1321 // Macro for 39 struct elements
1322 #define hit_comTypeStruct39(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM) \
1323 { \
1324  NATIVE_STRUCT cmdline; \
1325  int blockcounts[39] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM)}; \
1326  MPI_Datatype types[39] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM)}; \
1327  MPI_Aint displs[39]; \
1328  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1329  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1330  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1331  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1332  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1333  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1334  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1335  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1336  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1337  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1338  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1339  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1340  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1341  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1342  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1343  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1344  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1345  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1346  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1347  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1348  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1349  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1350  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1351  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1352  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1353  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1354  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1355  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1356  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1357  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1358  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1359  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1360  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1361  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1362  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1363  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1364  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1365  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1366  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1367  int ivarloop; \
1368  for(ivarloop=38; ivarloop>=0; ivarloop--){ \
1369  displs[ivarloop] -= displs[0]; \
1370  } \
1371  MPI_Type_create_struct(39, blockcounts, displs, types, new_type); \
1372  MPI_Type_commit(new_type); \
1373 }
1374 
1375 // Macro for 40 struct elements
1376 #define hit_comTypeStruct40(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN) \
1377 { \
1378  NATIVE_STRUCT cmdline; \
1379  int blockcounts[40] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN)}; \
1380  MPI_Datatype types[40] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN)}; \
1381  MPI_Aint displs[40]; \
1382  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1383  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1384  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1385  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1386  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1387  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1388  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1389  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1390  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1391  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1392  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1393  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1394  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1395  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1396  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1397  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1398  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1399  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1400  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1401  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1402  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1403  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1404  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1405  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1406  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1407  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1408  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1409  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1410  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1411  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1412  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1413  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1414  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1415  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1416  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1417  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1418  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1419  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1420  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1421  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1422  int ivarloop; \
1423  for(ivarloop=39; ivarloop>=0; ivarloop--){ \
1424  displs[ivarloop] -= displs[0]; \
1425  } \
1426  MPI_Type_create_struct(40, blockcounts, displs, types, new_type); \
1427  MPI_Type_commit(new_type); \
1428 }
1429 
1430 // Macro for 41 struct elements
1431 #define hit_comTypeStruct41(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO) \
1432 { \
1433  NATIVE_STRUCT cmdline; \
1434  int blockcounts[41] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO)}; \
1435  MPI_Datatype types[41] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO)}; \
1436  MPI_Aint displs[41]; \
1437  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1438  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1439  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1440  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1441  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1442  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1443  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1444  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1445  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1446  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1447  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1448  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1449  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1450  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1451  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1452  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1453  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1454  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1455  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1456  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1457  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1458  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1459  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1460  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1461  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1462  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1463  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1464  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1465  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1466  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1467  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1468  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1469  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1470  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1471  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1472  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1473  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1474  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1475  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1476  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1477  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1478  int ivarloop; \
1479  for(ivarloop=40; ivarloop>=0; ivarloop--){ \
1480  displs[ivarloop] -= displs[0]; \
1481  } \
1482  MPI_Type_create_struct(41, blockcounts, displs, types, new_type); \
1483  MPI_Type_commit(new_type); \
1484 }
1485 
1486 // Macro for 42 struct elements
1487 #define hit_comTypeStruct42(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP) \
1488 { \
1489  NATIVE_STRUCT cmdline; \
1490  int blockcounts[42] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP)}; \
1491  MPI_Datatype types[42] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP)}; \
1492  MPI_Aint displs[42]; \
1493  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1494  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1495  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1496  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1497  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1498  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1499  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1500  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1501  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1502  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1503  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1504  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1505  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1506  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1507  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1508  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1509  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1510  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1511  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1512  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1513  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1514  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1515  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1516  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1517  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1518  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1519  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1520  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1521  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1522  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1523  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1524  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1525  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1526  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1527  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1528  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1529  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1530  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1531  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1532  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1533  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1534  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1535  int ivarloop; \
1536  for(ivarloop=41; ivarloop>=0; ivarloop--){ \
1537  displs[ivarloop] -= displs[0]; \
1538  } \
1539  MPI_Type_create_struct(42, blockcounts, displs, types, new_type); \
1540  MPI_Type_commit(new_type); \
1541 }
1542 
1543 // Macro for 43 struct elements
1544 #define hit_comTypeStruct43(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ) \
1545 { \
1546  NATIVE_STRUCT cmdline; \
1547  int blockcounts[43] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ)}; \
1548  MPI_Datatype types[43] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ)}; \
1549  MPI_Aint displs[43]; \
1550  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1551  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1552  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1553  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1554  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1555  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1556  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1557  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1558  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1559  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1560  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1561  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1562  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1563  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1564  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1565  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1566  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1567  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1568  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1569  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1570  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1571  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1572  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1573  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1574  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1575  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1576  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1577  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1578  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1579  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1580  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1581  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1582  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1583  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1584  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1585  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1586  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1587  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1588  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1589  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1590  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1591  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1592  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1593  int ivarloop; \
1594  for(ivarloop=42; ivarloop>=0; ivarloop--){ \
1595  displs[ivarloop] -= displs[0]; \
1596  } \
1597  MPI_Type_create_struct(43, blockcounts, displs, types, new_type); \
1598  MPI_Type_commit(new_type); \
1599 }
1600 
1601 // Macro for 44 struct elements
1602 #define hit_comTypeStruct44(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR) \
1603 { \
1604  NATIVE_STRUCT cmdline; \
1605  int blockcounts[44] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR)}; \
1606  MPI_Datatype types[44] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR)}; \
1607  MPI_Aint displs[44]; \
1608  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1609  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1610  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1611  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1612  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1613  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1614  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1615  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1616  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1617  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1618  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1619  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1620  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1621  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1622  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1623  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1624  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1625  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1626  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1627  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1628  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1629  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1630  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1631  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1632  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1633  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1634  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1635  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1636  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1637  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1638  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1639  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1640  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1641  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1642  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1643  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1644  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1645  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1646  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1647  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1648  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1649  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1650  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1651  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1652  int ivarloop; \
1653  for(ivarloop=43; ivarloop>=0; ivarloop--){ \
1654  displs[ivarloop] -= displs[0]; \
1655  } \
1656  MPI_Type_create_struct(44, blockcounts, displs, types, new_type); \
1657  MPI_Type_commit(new_type); \
1658 }
1659 
1660 // Macro for 45 struct elements
1661 #define hit_comTypeStruct45(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS) \
1662 { \
1663  NATIVE_STRUCT cmdline; \
1664  int blockcounts[45] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS)}; \
1665  MPI_Datatype types[45] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS)}; \
1666  MPI_Aint displs[45]; \
1667  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1668  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1669  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1670  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1671  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1672  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1673  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1674  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1675  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1676  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1677  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1678  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1679  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1680  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1681  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1682  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1683  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1684  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1685  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1686  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1687  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1688  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1689  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1690  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1691  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1692  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1693  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1694  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1695  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1696  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1697  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1698  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1699  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1700  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1701  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1702  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1703  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1704  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1705  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1706  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1707  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1708  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1709  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1710  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1711  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
1712  int ivarloop; \
1713  for(ivarloop=44; ivarloop>=0; ivarloop--){ \
1714  displs[ivarloop] -= displs[0]; \
1715  } \
1716  MPI_Type_create_struct(45, blockcounts, displs, types, new_type); \
1717  MPI_Type_commit(new_type); \
1718 }
1719 
1720 // Macro for 46 struct elements
1721 #define hit_comTypeStruct46(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT) \
1722 { \
1723  NATIVE_STRUCT cmdline; \
1724  int blockcounts[46] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT)}; \
1725  MPI_Datatype types[46] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT)}; \
1726  MPI_Aint displs[46]; \
1727  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1728  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1729  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1730  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1731  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1732  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1733  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1734  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1735  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1736  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1737  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1738  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1739  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1740  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1741  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1742  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1743  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1744  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1745  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1746  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1747  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1748  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1749  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1750  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1751  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1752  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1753  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1754  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1755  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1756  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1757  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1758  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1759  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1760  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1761  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1762  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1763  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1764  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1765  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1766  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1767  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1768  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1769  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1770  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1771  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
1772  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
1773  int ivarloop; \
1774  for(ivarloop=45; ivarloop>=0; ivarloop--){ \
1775  displs[ivarloop] -= displs[0]; \
1776  } \
1777  MPI_Type_create_struct(46, blockcounts, displs, types, new_type); \
1778  MPI_Type_commit(new_type); \
1779 }
1780 
1781 // Macro for 47 struct elements
1782 #define hit_comTypeStruct47(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU) \
1783 { \
1784  NATIVE_STRUCT cmdline; \
1785  int blockcounts[47] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU)}; \
1786  MPI_Datatype types[47] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU)}; \
1787  MPI_Aint displs[47]; \
1788  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1789  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1790  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1791  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1792  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1793  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1794  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1795  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1796  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1797  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1798  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1799  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1800  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1801  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1802  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1803  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1804  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1805  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1806  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1807  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1808  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1809  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1810  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1811  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1812  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1813  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1814  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1815  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1816  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1817  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1818  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1819  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1820  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1821  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1822  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1823  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1824  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1825  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1826  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1827  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1828  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1829  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1830  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1831  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1832  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
1833  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
1834  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
1835  int ivarloop; \
1836  for(ivarloop=46; ivarloop>=0; ivarloop--){ \
1837  displs[ivarloop] -= displs[0]; \
1838  } \
1839  MPI_Type_create_struct(47, blockcounts, displs, types, new_type); \
1840  MPI_Type_commit(new_type); \
1841 }
1842 
1843 // Macro for 48 struct elements
1844 #define hit_comTypeStruct48(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV) \
1845 { \
1846  NATIVE_STRUCT cmdline; \
1847  int blockcounts[48] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV)}; \
1848  MPI_Datatype types[48] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV)}; \
1849  MPI_Aint displs[48]; \
1850  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1851  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1852  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1853  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1854  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1855  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1856  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1857  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1858  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1859  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1860  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1861  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1862  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1863  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1864  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1865  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1866  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1867  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1868  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1869  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1870  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1871  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1872  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1873  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1874  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1875  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1876  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1877  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1878  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1879  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1880  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1881  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1882  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1883  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1884  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1885  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1886  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1887  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1888  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1889  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1890  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1891  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1892  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1893  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1894  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
1895  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
1896  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
1897  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
1898  int ivarloop; \
1899  for(ivarloop=47; ivarloop>=0; ivarloop--){ \
1900  displs[ivarloop] -= displs[0]; \
1901  } \
1902  MPI_Type_create_struct(48, blockcounts, displs, types, new_type); \
1903  MPI_Type_commit(new_type); \
1904 }
1905 
1906 // Macro for 49 struct elements
1907 #define hit_comTypeStruct49(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW) \
1908 { \
1909  NATIVE_STRUCT cmdline; \
1910  int blockcounts[49] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW)}; \
1911  MPI_Datatype types[49] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW)}; \
1912  MPI_Aint displs[49]; \
1913  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1914  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1915  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1916  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1917  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1918  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1919  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1920  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1921  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1922  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1923  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1924  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1925  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1926  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1927  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1928  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1929  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1930  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1931  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1932  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1933  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1934  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1935  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
1936  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
1937  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
1938  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
1939  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
1940  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
1941  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
1942  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
1943  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
1944  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
1945  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
1946  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
1947  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
1948  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
1949  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
1950  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
1951  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
1952  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
1953  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
1954  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
1955  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
1956  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
1957  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
1958  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
1959  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
1960  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
1961  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
1962  int ivarloop; \
1963  for(ivarloop=48; ivarloop>=0; ivarloop--){ \
1964  displs[ivarloop] -= displs[0]; \
1965  } \
1966  MPI_Type_create_struct(49, blockcounts, displs, types, new_type); \
1967  MPI_Type_commit(new_type); \
1968 }
1969 
1970 // Macro for 50 struct elements
1971 #define hit_comTypeStruct50(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX) \
1972 { \
1973  NATIVE_STRUCT cmdline; \
1974  int blockcounts[50] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX)}; \
1975  MPI_Datatype types[50] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX)}; \
1976  MPI_Aint displs[50]; \
1977  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
1978  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
1979  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
1980  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
1981  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
1982  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
1983  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
1984  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
1985  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
1986  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
1987  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
1988  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
1989  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
1990  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
1991  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
1992  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
1993  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
1994  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
1995  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
1996  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
1997  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
1998  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
1999  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2000  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2001  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2002  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2003  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2004  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2005  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2006  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2007  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2008  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2009  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2010  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2011  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2012  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2013  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2014  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2015  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2016  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2017  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2018  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2019  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2020  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2021  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2022  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2023  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2024  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2025  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2026  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2027  int ivarloop; \
2028  for(ivarloop=49; ivarloop>=0; ivarloop--){ \
2029  displs[ivarloop] -= displs[0]; \
2030  } \
2031  MPI_Type_create_struct(50, blockcounts, displs, types, new_type); \
2032  MPI_Type_commit(new_type); \
2033 }
2034 
2035 // Macro for 51 struct elements
2036 #define hit_comTypeStruct51(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY) \
2037 { \
2038  NATIVE_STRUCT cmdline; \
2039  int blockcounts[51] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY)}; \
2040  MPI_Datatype types[51] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY)}; \
2041  MPI_Aint displs[51]; \
2042  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2043  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2044  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2045  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2046  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2047  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2048  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2049  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2050  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2051  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2052  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2053  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2054  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2055  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2056  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2057  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2058  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2059  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2060  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2061  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2062  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2063  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2064  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2065  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2066  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2067  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2068  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2069  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2070  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2071  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2072  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2073  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2074  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2075  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2076  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2077  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2078  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2079  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2080  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2081  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2082  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2083  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2084  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2085  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2086  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2087  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2088  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2089  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2090  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2091  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2092  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2093  int ivarloop; \
2094  for(ivarloop=50; ivarloop>=0; ivarloop--){ \
2095  displs[ivarloop] -= displs[0]; \
2096  } \
2097  MPI_Type_create_struct(51, blockcounts, displs, types, new_type); \
2098  MPI_Type_commit(new_type); \
2099 }
2100 
2101 // Macro for 52 struct elements
2102 #define hit_comTypeStruct52(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ) \
2103 { \
2104  NATIVE_STRUCT cmdline; \
2105  int blockcounts[52] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ)}; \
2106  MPI_Datatype types[52] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ)}; \
2107  MPI_Aint displs[52]; \
2108  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2109  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2110  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2111  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2112  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2113  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2114  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2115  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2116  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2117  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2118  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2119  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2120  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2121  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2122  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2123  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2124  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2125  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2126  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2127  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2128  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2129  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2130  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2131  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2132  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2133  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2134  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2135  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2136  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2137  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2138  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2139  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2140  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2141  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2142  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2143  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2144  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2145  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2146  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2147  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2148  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2149  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2150  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2151  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2152  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2153  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2154  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2155  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2156  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2157  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2158  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2159  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2160  int ivarloop; \
2161  for(ivarloop=51; ivarloop>=0; ivarloop--){ \
2162  displs[ivarloop] -= displs[0]; \
2163  } \
2164  MPI_Type_create_struct(52, blockcounts, displs, types, new_type); \
2165  MPI_Type_commit(new_type); \
2166 }
2167 
2168 // Macro for 53 struct elements
2169 #define hit_comTypeStruct53(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA) \
2170 { \
2171  NATIVE_STRUCT cmdline; \
2172  int blockcounts[53] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA)}; \
2173  MPI_Datatype types[53] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA)}; \
2174  MPI_Aint displs[53]; \
2175  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2176  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2177  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2178  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2179  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2180  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2181  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2182  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2183  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2184  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2185  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2186  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2187  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2188  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2189  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2190  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2191  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2192  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2193  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2194  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2195  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2196  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2197  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2198  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2199  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2200  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2201  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2202  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2203  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2204  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2205  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2206  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2207  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2208  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2209  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2210  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2211  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2212  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2213  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2214  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2215  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2216  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2217  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2218  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2219  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2220  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2221  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2222  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2223  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2224  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2225  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2226  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2227  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2228  int ivarloop; \
2229  for(ivarloop=52; ivarloop>=0; ivarloop--){ \
2230  displs[ivarloop] -= displs[0]; \
2231  } \
2232  MPI_Type_create_struct(53, blockcounts, displs, types, new_type); \
2233  MPI_Type_commit(new_type); \
2234 }
2235 
2236 // Macro for 54 struct elements
2237 #define hit_comTypeStruct54(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB) \
2238 { \
2239  NATIVE_STRUCT cmdline; \
2240  int blockcounts[54] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB)}; \
2241  MPI_Datatype types[54] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB)}; \
2242  MPI_Aint displs[54]; \
2243  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2244  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2245  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2246  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2247  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2248  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2249  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2250  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2251  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2252  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2253  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2254  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2255  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2256  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2257  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2258  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2259  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2260  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2261  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2262  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2263  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2264  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2265  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2266  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2267  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2268  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2269  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2270  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2271  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2272  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2273  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2274  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2275  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2276  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2277  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2278  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2279  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2280  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2281  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2282  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2283  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2284  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2285  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2286  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2287  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2288  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2289  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2290  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2291  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2292  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2293  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2294  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2295  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2296  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2297  int ivarloop; \
2298  for(ivarloop=53; ivarloop>=0; ivarloop--){ \
2299  displs[ivarloop] -= displs[0]; \
2300  } \
2301  MPI_Type_create_struct(54, blockcounts, displs, types, new_type); \
2302  MPI_Type_commit(new_type); \
2303 }
2304 
2305 // Macro for 55 struct elements
2306 #define hit_comTypeStruct55(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC) \
2307 { \
2308  NATIVE_STRUCT cmdline; \
2309  int blockcounts[55] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC)}; \
2310  MPI_Datatype types[55] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC)}; \
2311  MPI_Aint displs[55]; \
2312  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2313  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2314  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2315  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2316  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2317  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2318  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2319  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2320  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2321  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2322  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2323  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2324  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2325  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2326  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2327  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2328  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2329  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2330  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2331  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2332  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2333  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2334  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2335  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2336  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2337  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2338  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2339  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2340  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2341  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2342  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2343  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2344  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2345  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2346  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2347  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2348  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2349  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2350  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2351  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2352  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2353  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2354  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2355  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2356  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2357  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2358  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2359  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2360  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2361  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2362  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2363  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2364  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2365  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2366  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2367  int ivarloop; \
2368  for(ivarloop=54; ivarloop>=0; ivarloop--){ \
2369  displs[ivarloop] -= displs[0]; \
2370  } \
2371  MPI_Type_create_struct(55, blockcounts, displs, types, new_type); \
2372  MPI_Type_commit(new_type); \
2373 }
2374 
2375 // Macro for 56 struct elements
2376 #define hit_comTypeStruct56(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD) \
2377 { \
2378  NATIVE_STRUCT cmdline; \
2379  int blockcounts[56] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD)}; \
2380  MPI_Datatype types[56] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD)}; \
2381  MPI_Aint displs[56]; \
2382  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2383  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2384  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2385  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2386  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2387  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2388  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2389  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2390  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2391  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2392  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2393  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2394  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2395  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2396  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2397  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2398  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2399  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2400  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2401  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2402  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2403  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2404  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2405  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2406  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2407  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2408  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2409  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2410  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2411  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2412  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2413  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2414  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2415  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2416  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2417  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2418  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2419  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2420  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2421  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2422  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2423  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2424  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2425  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2426  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2427  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2428  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2429  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2430  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2431  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2432  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2433  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2434  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2435  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2436  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2437  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2438  int ivarloop; \
2439  for(ivarloop=55; ivarloop>=0; ivarloop--){ \
2440  displs[ivarloop] -= displs[0]; \
2441  } \
2442  MPI_Type_create_struct(56, blockcounts, displs, types, new_type); \
2443  MPI_Type_commit(new_type); \
2444 }
2445 
2446 // Macro for 57 struct elements
2447 #define hit_comTypeStruct57(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE) \
2448 { \
2449  NATIVE_STRUCT cmdline; \
2450  int blockcounts[57] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE)}; \
2451  MPI_Datatype types[57] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE)}; \
2452  MPI_Aint displs[57]; \
2453  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2454  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2455  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2456  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2457  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2458  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2459  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2460  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2461  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2462  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2463  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2464  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2465  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2466  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2467  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2468  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2469  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2470  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2471  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2472  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2473  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2474  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2475  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2476  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2477  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2478  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2479  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2480  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2481  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2482  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2483  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2484  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2485  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2486  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2487  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2488  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2489  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2490  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2491  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2492  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2493  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2494  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2495  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2496  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2497  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2498  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2499  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2500  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2501  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2502  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2503  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2504  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2505  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2506  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2507  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2508  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2509  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2510  int ivarloop; \
2511  for(ivarloop=56; ivarloop>=0; ivarloop--){ \
2512  displs[ivarloop] -= displs[0]; \
2513  } \
2514  MPI_Type_create_struct(57, blockcounts, displs, types, new_type); \
2515  MPI_Type_commit(new_type); \
2516 }
2517 
2518 // Macro for 58 struct elements
2519 #define hit_comTypeStruct58(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF) \
2520 { \
2521  NATIVE_STRUCT cmdline; \
2522  int blockcounts[58] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF)}; \
2523  MPI_Datatype types[58] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF)}; \
2524  MPI_Aint displs[58]; \
2525  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2526  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2527  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2528  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2529  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2530  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2531  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2532  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2533  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2534  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2535  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2536  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2537  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2538  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2539  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2540  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2541  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2542  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2543  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2544  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2545  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2546  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2547  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2548  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2549  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2550  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2551  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2552  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2553  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2554  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2555  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2556  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2557  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2558  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2559  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2560  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2561  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2562  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2563  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2564  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2565  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2566  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2567  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2568  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2569  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2570  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2571  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2572  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2573  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2574  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2575  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2576  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2577  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2578  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2579  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2580  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2581  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2582  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2583  int ivarloop; \
2584  for(ivarloop=57; ivarloop>=0; ivarloop--){ \
2585  displs[ivarloop] -= displs[0]; \
2586  } \
2587  MPI_Type_create_struct(58, blockcounts, displs, types, new_type); \
2588  MPI_Type_commit(new_type); \
2589 }
2590 
2591 // Macro for 59 struct elements
2592 #define hit_comTypeStruct59(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG) \
2593 { \
2594  NATIVE_STRUCT cmdline; \
2595  int blockcounts[59] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG)}; \
2596  MPI_Datatype types[59] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG)}; \
2597  MPI_Aint displs[59]; \
2598  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2599  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2600  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2601  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2602  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2603  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2604  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2605  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2606  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2607  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2608  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2609  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2610  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2611  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2612  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2613  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2614  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2615  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2616  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2617  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2618  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2619  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2620  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2621  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2622  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2623  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2624  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2625  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2626  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2627  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2628  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2629  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2630  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2631  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2632  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2633  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2634  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2635  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2636  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2637  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2638  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2639  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2640  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2641  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2642  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2643  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2644  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2645  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2646  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2647  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2648  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2649  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2650  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2651  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2652  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2653  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2654  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2655  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2656  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
2657  int ivarloop; \
2658  for(ivarloop=58; ivarloop>=0; ivarloop--){ \
2659  displs[ivarloop] -= displs[0]; \
2660  } \
2661  MPI_Type_create_struct(59, blockcounts, displs, types, new_type); \
2662  MPI_Type_commit(new_type); \
2663 }
2664 
2665 // Macro for 60 struct elements
2666 #define hit_comTypeStruct60(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH) \
2667 { \
2668  NATIVE_STRUCT cmdline; \
2669  int blockcounts[60] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH)}; \
2670  MPI_Datatype types[60] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH)}; \
2671  MPI_Aint displs[60]; \
2672  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2673  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2674  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2675  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2676  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2677  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2678  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2679  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2680  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2681  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2682  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2683  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2684  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2685  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2686  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2687  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2688  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2689  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2690  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2691  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2692  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2693  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2694  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2695  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2696  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2697  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2698  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2699  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2700  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2701  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2702  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2703  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2704  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2705  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2706  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2707  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2708  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2709  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2710  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2711  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2712  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2713  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2714  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2715  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2716  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2717  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2718  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2719  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2720  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2721  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2722  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2723  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2724  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2725  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2726  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2727  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2728  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2729  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2730  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
2731  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
2732  int ivarloop; \
2733  for(ivarloop=59; ivarloop>=0; ivarloop--){ \
2734  displs[ivarloop] -= displs[0]; \
2735  } \
2736  MPI_Type_create_struct(60, blockcounts, displs, types, new_type); \
2737  MPI_Type_commit(new_type); \
2738 }
2739 
2740 // Macro for 61 struct elements
2741 #define hit_comTypeStruct61(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI) \
2742 { \
2743  NATIVE_STRUCT cmdline; \
2744  int blockcounts[61] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI)}; \
2745  MPI_Datatype types[61] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI)}; \
2746  MPI_Aint displs[61]; \
2747  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2748  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2749  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2750  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2751  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2752  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2753  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2754  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2755  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2756  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2757  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2758  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2759  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2760  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2761  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2762  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2763  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2764  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2765  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2766  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2767  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2768  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2769  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2770  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2771  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2772  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2773  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2774  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2775  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2776  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2777  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2778  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2779  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2780  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2781  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2782  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2783  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2784  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2785  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2786  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2787  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2788  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2789  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2790  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2791  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2792  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2793  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2794  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2795  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2796  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2797  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2798  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2799  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2800  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2801  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2802  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2803  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2804  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2805  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
2806  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
2807  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
2808  int ivarloop; \
2809  for(ivarloop=60; ivarloop>=0; ivarloop--){ \
2810  displs[ivarloop] -= displs[0]; \
2811  } \
2812  MPI_Type_create_struct(61, blockcounts, displs, types, new_type); \
2813  MPI_Type_commit(new_type); \
2814 }
2815 
2816 // Macro for 62 struct elements
2817 #define hit_comTypeStruct62(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ) \
2818 { \
2819  NATIVE_STRUCT cmdline; \
2820  int blockcounts[62] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ)}; \
2821  MPI_Datatype types[62] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ)}; \
2822  MPI_Aint displs[62]; \
2823  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2824  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2825  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2826  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2827  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2828  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2829  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2830  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2831  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2832  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2833  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2834  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2835  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2836  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2837  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2838  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2839  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2840  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2841  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2842  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2843  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2844  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2845  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2846  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2847  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2848  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2849  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2850  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2851  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2852  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2853  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2854  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2855  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2856  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2857  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2858  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2859  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2860  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2861  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2862  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2863  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2864  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2865  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2866  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2867  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2868  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2869  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2870  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2871  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2872  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2873  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2874  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2875  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2876  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2877  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2878  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2879  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2880  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2881  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
2882  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
2883  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
2884  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
2885  int ivarloop; \
2886  for(ivarloop=61; ivarloop>=0; ivarloop--){ \
2887  displs[ivarloop] -= displs[0]; \
2888  } \
2889  MPI_Type_create_struct(62, blockcounts, displs, types, new_type); \
2890  MPI_Type_commit(new_type); \
2891 }
2892 
2893 // Macro for 63 struct elements
2894 #define hit_comTypeStruct63(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK) \
2895 { \
2896  NATIVE_STRUCT cmdline; \
2897  int blockcounts[63] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK)}; \
2898  MPI_Datatype types[63] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK)}; \
2899  MPI_Aint displs[63]; \
2900  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2901  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2902  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2903  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2904  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2905  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2906  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2907  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2908  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2909  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2910  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2911  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2912  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2913  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2914  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2915  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2916  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2917  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2918  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2919  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2920  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2921  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
2922  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
2923  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
2924  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
2925  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
2926  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
2927  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
2928  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
2929  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
2930  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
2931  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
2932  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
2933  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
2934  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
2935  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
2936  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
2937  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
2938  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
2939  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
2940  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
2941  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
2942  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
2943  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
2944  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
2945  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
2946  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
2947  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
2948  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
2949  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
2950  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
2951  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
2952  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
2953  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
2954  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
2955  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
2956  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
2957  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
2958  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
2959  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
2960  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
2961  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
2962  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
2963  int ivarloop; \
2964  for(ivarloop=62; ivarloop>=0; ivarloop--){ \
2965  displs[ivarloop] -= displs[0]; \
2966  } \
2967  MPI_Type_create_struct(63, blockcounts, displs, types, new_type); \
2968  MPI_Type_commit(new_type); \
2969 }
2970 
2971 // Macro for 64 struct elements
2972 #define hit_comTypeStruct64(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL) \
2973 { \
2974  NATIVE_STRUCT cmdline; \
2975  int blockcounts[64] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL)}; \
2976  MPI_Datatype types[64] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL)}; \
2977  MPI_Aint displs[64]; \
2978  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
2979  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
2980  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
2981  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
2982  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
2983  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
2984  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
2985  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
2986  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
2987  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
2988  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
2989  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
2990  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
2991  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
2992  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
2993  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
2994  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
2995  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
2996  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
2997  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
2998  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
2999  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3000  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3001  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3002  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3003  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3004  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3005  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3006  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3007  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3008  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3009  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3010  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3011  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3012  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3013  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3014  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3015  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3016  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3017  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3018  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3019  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3020  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3021  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3022  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3023  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3024  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3025  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3026  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3027  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3028  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3029  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3030  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3031  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3032  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3033  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3034  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3035  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3036  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3037  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3038  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3039  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3040  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3041  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3042  int ivarloop; \
3043  for(ivarloop=63; ivarloop>=0; ivarloop--){ \
3044  displs[ivarloop] -= displs[0]; \
3045  } \
3046  MPI_Type_create_struct(64, blockcounts, displs, types, new_type); \
3047  MPI_Type_commit(new_type); \
3048 }
3049 
3050 // Macro for 65 struct elements
3051 #define hit_comTypeStruct65(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM) \
3052 { \
3053  NATIVE_STRUCT cmdline; \
3054  int blockcounts[65] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM)}; \
3055  MPI_Datatype types[65] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM)}; \
3056  MPI_Aint displs[65]; \
3057  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3058  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3059  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3060  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3061  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3062  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3063  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3064  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3065  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3066  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3067  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3068  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3069  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3070  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3071  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3072  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3073  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3074  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3075  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3076  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3077  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3078  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3079  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3080  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3081  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3082  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3083  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3084  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3085  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3086  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3087  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3088  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3089  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3090  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3091  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3092  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3093  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3094  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3095  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3096  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3097  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3098  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3099  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3100  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3101  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3102  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3103  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3104  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3105  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3106  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3107  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3108  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3109  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3110  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3111  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3112  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3113  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3114  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3115  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3116  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3117  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3118  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3119  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3120  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3121  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3122  int ivarloop; \
3123  for(ivarloop=64; ivarloop>=0; ivarloop--){ \
3124  displs[ivarloop] -= displs[0]; \
3125  } \
3126  MPI_Type_create_struct(65, blockcounts, displs, types, new_type); \
3127  MPI_Type_commit(new_type); \
3128 }
3129 
3130 // Macro for 66 struct elements
3131 #define hit_comTypeStruct66(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN) \
3132 { \
3133  NATIVE_STRUCT cmdline; \
3134  int blockcounts[66] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN)}; \
3135  MPI_Datatype types[66] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN)}; \
3136  MPI_Aint displs[66]; \
3137  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3138  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3139  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3140  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3141  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3142  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3143  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3144  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3145  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3146  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3147  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3148  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3149  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3150  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3151  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3152  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3153  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3154  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3155  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3156  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3157  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3158  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3159  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3160  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3161  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3162  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3163  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3164  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3165  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3166  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3167  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3168  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3169  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3170  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3171  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3172  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3173  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3174  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3175  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3176  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3177  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3178  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3179  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3180  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3181  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3182  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3183  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3184  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3185  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3186  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3187  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3188  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3189  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3190  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3191  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3192  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3193  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3194  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3195  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3196  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3197  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3198  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3199  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3200  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3201  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3202  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3203  int ivarloop; \
3204  for(ivarloop=65; ivarloop>=0; ivarloop--){ \
3205  displs[ivarloop] -= displs[0]; \
3206  } \
3207  MPI_Type_create_struct(66, blockcounts, displs, types, new_type); \
3208  MPI_Type_commit(new_type); \
3209 }
3210 
3211 // Macro for 67 struct elements
3212 #define hit_comTypeStruct67(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO) \
3213 { \
3214  NATIVE_STRUCT cmdline; \
3215  int blockcounts[67] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO)}; \
3216  MPI_Datatype types[67] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO)}; \
3217  MPI_Aint displs[67]; \
3218  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3219  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3220  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3221  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3222  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3223  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3224  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3225  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3226  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3227  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3228  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3229  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3230  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3231  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3232  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3233  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3234  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3235  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3236  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3237  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3238  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3239  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3240  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3241  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3242  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3243  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3244  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3245  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3246  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3247  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3248  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3249  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3250  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3251  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3252  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3253  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3254  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3255  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3256  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3257  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3258  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3259  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3260  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3261  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3262  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3263  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3264  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3265  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3266  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3267  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3268  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3269  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3270  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3271  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3272  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3273  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3274  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3275  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3276  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3277  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3278  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3279  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3280  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3281  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3282  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3283  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3284  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3285  int ivarloop; \
3286  for(ivarloop=66; ivarloop>=0; ivarloop--){ \
3287  displs[ivarloop] -= displs[0]; \
3288  } \
3289  MPI_Type_create_struct(67, blockcounts, displs, types, new_type); \
3290  MPI_Type_commit(new_type); \
3291 }
3292 
3293 // Macro for 68 struct elements
3294 #define hit_comTypeStruct68(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP) \
3295 { \
3296  NATIVE_STRUCT cmdline; \
3297  int blockcounts[68] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP)}; \
3298  MPI_Datatype types[68] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP)}; \
3299  MPI_Aint displs[68]; \
3300  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3301  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3302  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3303  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3304  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3305  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3306  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3307  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3308  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3309  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3310  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3311  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3312  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3313  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3314  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3315  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3316  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3317  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3318  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3319  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3320  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3321  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3322  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3323  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3324  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3325  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3326  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3327  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3328  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3329  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3330  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3331  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3332  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3333  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3334  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3335  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3336  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3337  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3338  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3339  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3340  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3341  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3342  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3343  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3344  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3345  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3346  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3347  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3348  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3349  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3350  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3351  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3352  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3353  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3354  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3355  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3356  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3357  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3358  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3359  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3360  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3361  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3362  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3363  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3364  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3365  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3366  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3367  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3368  int ivarloop; \
3369  for(ivarloop=67; ivarloop>=0; ivarloop--){ \
3370  displs[ivarloop] -= displs[0]; \
3371  } \
3372  MPI_Type_create_struct(68, blockcounts, displs, types, new_type); \
3373  MPI_Type_commit(new_type); \
3374 }
3375 
3376 // Macro for 69 struct elements
3377 #define hit_comTypeStruct69(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ) \
3378 { \
3379  NATIVE_STRUCT cmdline; \
3380  int blockcounts[69] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ)}; \
3381  MPI_Datatype types[69] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ)}; \
3382  MPI_Aint displs[69]; \
3383  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3384  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3385  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3386  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3387  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3388  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3389  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3390  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3391  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3392  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3393  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3394  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3395  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3396  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3397  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3398  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3399  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3400  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3401  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3402  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3403  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3404  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3405  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3406  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3407  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3408  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3409  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3410  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3411  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3412  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3413  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3414  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3415  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3416  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3417  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3418  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3419  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3420  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3421  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3422  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3423  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3424  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3425  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3426  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3427  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3428  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3429  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3430  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3431  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3432  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3433  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3434  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3435  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3436  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3437  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3438  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3439  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3440  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3441  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3442  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3443  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3444  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3445  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3446  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3447  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3448  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3449  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3450  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3451  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3452  int ivarloop; \
3453  for(ivarloop=68; ivarloop>=0; ivarloop--){ \
3454  displs[ivarloop] -= displs[0]; \
3455  } \
3456  MPI_Type_create_struct(69, blockcounts, displs, types, new_type); \
3457  MPI_Type_commit(new_type); \
3458 }
3459 
3460 // Macro for 70 struct elements
3461 #define hit_comTypeStruct70(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR) \
3462 { \
3463  NATIVE_STRUCT cmdline; \
3464  int blockcounts[70] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR)}; \
3465  MPI_Datatype types[70] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR)}; \
3466  MPI_Aint displs[70]; \
3467  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3468  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3469  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3470  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3471  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3472  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3473  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3474  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3475  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3476  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3477  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3478  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3479  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3480  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3481  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3482  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3483  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3484  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3485  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3486  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3487  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3488  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3489  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3490  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3491  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3492  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3493  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3494  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3495  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3496  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3497  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3498  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3499  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3500  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3501  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3502  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3503  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3504  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3505  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3506  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3507  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3508  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3509  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3510  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3511  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3512  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3513  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3514  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3515  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3516  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3517  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3518  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3519  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3520  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3521  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3522  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3523  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3524  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3525  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3526  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3527  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3528  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3529  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3530  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3531  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3532  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3533  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3534  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3535  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3536  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3537  int ivarloop; \
3538  for(ivarloop=69; ivarloop>=0; ivarloop--){ \
3539  displs[ivarloop] -= displs[0]; \
3540  } \
3541  MPI_Type_create_struct(70, blockcounts, displs, types, new_type); \
3542  MPI_Type_commit(new_type); \
3543 }
3544 
3545 // Macro for 71 struct elements
3546 #define hit_comTypeStruct71(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS) \
3547 { \
3548  NATIVE_STRUCT cmdline; \
3549  int blockcounts[71] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS)}; \
3550  MPI_Datatype types[71] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS)}; \
3551  MPI_Aint displs[71]; \
3552  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3553  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3554  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3555  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3556  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3557  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3558  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3559  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3560  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3561  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3562  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3563  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3564  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3565  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3566  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3567  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3568  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3569  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3570  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3571  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3572  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3573  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3574  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3575  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3576  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3577  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3578  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3579  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3580  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3581  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3582  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3583  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3584  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3585  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3586  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3587  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3588  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3589  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3590  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3591  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3592  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3593  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3594  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3595  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3596  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3597  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3598  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3599  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3600  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3601  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3602  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3603  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3604  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3605  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3606  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3607  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3608  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3609  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3610  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3611  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3612  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3613  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3614  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3615  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3616  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3617  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3618  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3619  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3620  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3621  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3622  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
3623  int ivarloop; \
3624  for(ivarloop=70; ivarloop>=0; ivarloop--){ \
3625  displs[ivarloop] -= displs[0]; \
3626  } \
3627  MPI_Type_create_struct(71, blockcounts, displs, types, new_type); \
3628  MPI_Type_commit(new_type); \
3629 }
3630 
3631 // Macro for 72 struct elements
3632 #define hit_comTypeStruct72(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT) \
3633 { \
3634  NATIVE_STRUCT cmdline; \
3635  int blockcounts[72] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT)}; \
3636  MPI_Datatype types[72] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT)}; \
3637  MPI_Aint displs[72]; \
3638  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3639  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3640  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3641  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3642  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3643  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3644  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3645  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3646  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3647  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3648  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3649  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3650  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3651  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3652  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3653  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3654  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3655  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3656  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3657  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3658  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3659  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3660  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3661  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3662  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3663  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3664  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3665  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3666  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3667  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3668  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3669  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3670  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3671  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3672  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3673  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3674  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3675  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3676  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3677  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3678  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3679  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3680  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3681  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3682  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3683  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3684  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3685  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3686  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3687  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3688  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3689  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3690  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3691  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3692  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3693  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3694  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3695  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3696  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3697  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3698  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3699  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3700  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3701  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3702  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3703  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3704  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3705  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3706  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3707  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3708  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
3709  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
3710  int ivarloop; \
3711  for(ivarloop=71; ivarloop>=0; ivarloop--){ \
3712  displs[ivarloop] -= displs[0]; \
3713  } \
3714  MPI_Type_create_struct(72, blockcounts, displs, types, new_type); \
3715  MPI_Type_commit(new_type); \
3716 }
3717 
3718 // Macro for 73 struct elements
3719 #define hit_comTypeStruct73(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU) \
3720 { \
3721  NATIVE_STRUCT cmdline; \
3722  int blockcounts[73] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU)}; \
3723  MPI_Datatype types[73] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU)}; \
3724  MPI_Aint displs[73]; \
3725  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3726  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3727  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3728  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3729  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3730  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3731  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3732  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3733  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3734  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3735  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3736  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3737  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3738  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3739  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3740  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3741  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3742  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3743  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3744  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3745  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3746  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3747  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3748  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3749  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3750  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3751  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3752  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3753  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3754  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3755  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3756  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3757  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3758  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3759  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3760  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3761  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3762  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3763  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3764  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3765  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3766  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3767  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3768  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3769  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3770  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3771  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3772  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3773  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3774  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3775  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3776  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3777  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3778  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3779  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3780  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3781  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3782  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3783  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3784  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3785  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3786  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3787  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3788  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3789  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3790  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3791  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3792  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3793  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3794  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3795  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
3796  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
3797  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
3798  int ivarloop; \
3799  for(ivarloop=72; ivarloop>=0; ivarloop--){ \
3800  displs[ivarloop] -= displs[0]; \
3801  } \
3802  MPI_Type_create_struct(73, blockcounts, displs, types, new_type); \
3803  MPI_Type_commit(new_type); \
3804 }
3805 
3806 // Macro for 74 struct elements
3807 #define hit_comTypeStruct74(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV) \
3808 { \
3809  NATIVE_STRUCT cmdline; \
3810  int blockcounts[74] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV)}; \
3811  MPI_Datatype types[74] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV)}; \
3812  MPI_Aint displs[74]; \
3813  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3814  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3815  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3816  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3817  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3818  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3819  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3820  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3821  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3822  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3823  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3824  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3825  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3826  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3827  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3828  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3829  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3830  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3831  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3832  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3833  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3834  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3835  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3836  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3837  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3838  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3839  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3840  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3841  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3842  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3843  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3844  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3845  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3846  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3847  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3848  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3849  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3850  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3851  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3852  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3853  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3854  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3855  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3856  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3857  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3858  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3859  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3860  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3861  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3862  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3863  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3864  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3865  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3866  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3867  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3868  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3869  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3870  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3871  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3872  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3873  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3874  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3875  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3876  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3877  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3878  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3879  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3880  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3881  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3882  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3883  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
3884  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
3885  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
3886  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
3887  int ivarloop; \
3888  for(ivarloop=73; ivarloop>=0; ivarloop--){ \
3889  displs[ivarloop] -= displs[0]; \
3890  } \
3891  MPI_Type_create_struct(74, blockcounts, displs, types, new_type); \
3892  MPI_Type_commit(new_type); \
3893 }
3894 
3895 // Macro for 75 struct elements
3896 #define hit_comTypeStruct75(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW) \
3897 { \
3898  NATIVE_STRUCT cmdline; \
3899  int blockcounts[75] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW)}; \
3900  MPI_Datatype types[75] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW)}; \
3901  MPI_Aint displs[75]; \
3902  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3903  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3904  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3905  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3906  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3907  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3908  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3909  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
3910  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
3911  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
3912  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
3913  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
3914  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
3915  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
3916  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
3917  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
3918  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
3919  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
3920  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
3921  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
3922  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
3923  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
3924  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
3925  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
3926  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
3927  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
3928  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
3929  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
3930  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
3931  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
3932  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
3933  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
3934  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
3935  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
3936  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
3937  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
3938  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
3939  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
3940  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
3941  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
3942  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
3943  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
3944  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
3945  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
3946  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
3947  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
3948  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
3949  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
3950  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
3951  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
3952  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
3953  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
3954  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
3955  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
3956  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
3957  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
3958  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
3959  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
3960  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
3961  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
3962  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
3963  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
3964  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
3965  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
3966  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
3967  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
3968  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
3969  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
3970  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
3971  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
3972  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
3973  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
3974  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
3975  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
3976  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
3977  int ivarloop; \
3978  for(ivarloop=74; ivarloop>=0; ivarloop--){ \
3979  displs[ivarloop] -= displs[0]; \
3980  } \
3981  MPI_Type_create_struct(75, blockcounts, displs, types, new_type); \
3982  MPI_Type_commit(new_type); \
3983 }
3984 
3985 // Macro for 76 struct elements
3986 #define hit_comTypeStruct76(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX) \
3987 { \
3988  NATIVE_STRUCT cmdline; \
3989  int blockcounts[76] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX)}; \
3990  MPI_Datatype types[76] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX)}; \
3991  MPI_Aint displs[76]; \
3992  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
3993  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
3994  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
3995  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
3996  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
3997  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
3998  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
3999  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4000  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4001  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4002  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4003  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4004  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4005  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4006  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4007  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4008  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4009  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4010  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4011  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4012  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4013  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4014  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4015  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4016  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4017  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4018  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4019  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4020  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4021  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4022  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4023  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4024  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4025  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4026  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4027  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4028  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4029  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4030  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4031  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4032  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4033  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4034  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4035  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4036  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4037  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4038  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4039  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4040  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4041  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4042  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4043  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4044  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4045  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4046  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4047  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4048  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4049  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4050  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4051  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4052  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4053  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4054  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4055  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4056  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4057  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4058  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4059  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4060  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4061  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4062  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4063  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4064  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4065  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4066  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4067  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4068  int ivarloop; \
4069  for(ivarloop=75; ivarloop>=0; ivarloop--){ \
4070  displs[ivarloop] -= displs[0]; \
4071  } \
4072  MPI_Type_create_struct(76, blockcounts, displs, types, new_type); \
4073  MPI_Type_commit(new_type); \
4074 }
4075 
4076 // Macro for 77 struct elements
4077 #define hit_comTypeStruct77(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY) \
4078 { \
4079  NATIVE_STRUCT cmdline; \
4080  int blockcounts[77] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY)}; \
4081  MPI_Datatype types[77] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY)}; \
4082  MPI_Aint displs[77]; \
4083  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4084  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4085  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4086  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4087  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4088  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4089  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4090  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4091  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4092  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4093  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4094  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4095  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4096  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4097  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4098  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4099  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4100  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4101  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4102  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4103  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4104  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4105  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4106  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4107  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4108  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4109  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4110  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4111  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4112  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4113  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4114  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4115  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4116  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4117  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4118  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4119  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4120  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4121  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4122  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4123  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4124  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4125  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4126  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4127  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4128  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4129  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4130  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4131  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4132  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4133  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4134  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4135  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4136  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4137  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4138  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4139  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4140  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4141  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4142  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4143  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4144  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4145  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4146  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4147  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4148  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4149  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4150  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4151  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4152  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4153  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4154  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4155  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4156  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4157  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4158  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4159  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4160  int ivarloop; \
4161  for(ivarloop=76; ivarloop>=0; ivarloop--){ \
4162  displs[ivarloop] -= displs[0]; \
4163  } \
4164  MPI_Type_create_struct(77, blockcounts, displs, types, new_type); \
4165  MPI_Type_commit(new_type); \
4166 }
4167 
4168 // Macro for 78 struct elements
4169 #define hit_comTypeStruct78(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ) \
4170 { \
4171  NATIVE_STRUCT cmdline; \
4172  int blockcounts[78] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ)}; \
4173  MPI_Datatype types[78] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ)}; \
4174  MPI_Aint displs[78]; \
4175  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4176  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4177  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4178  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4179  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4180  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4181  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4182  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4183  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4184  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4185  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4186  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4187  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4188  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4189  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4190  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4191  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4192  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4193  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4194  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4195  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4196  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4197  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4198  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4199  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4200  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4201  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4202  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4203  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4204  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4205  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4206  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4207  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4208  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4209  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4210  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4211  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4212  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4213  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4214  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4215  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4216  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4217  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4218  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4219  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4220  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4221  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4222  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4223  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4224  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4225  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4226  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4227  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4228  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4229  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4230  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4231  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4232  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4233  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4234  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4235  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4236  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4237  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4238  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4239  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4240  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4241  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4242  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4243  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4244  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4245  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4246  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4247  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4248  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4249  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4250  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4251  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4252  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4253  int ivarloop; \
4254  for(ivarloop=77; ivarloop>=0; ivarloop--){ \
4255  displs[ivarloop] -= displs[0]; \
4256  } \
4257  MPI_Type_create_struct(78, blockcounts, displs, types, new_type); \
4258  MPI_Type_commit(new_type); \
4259 }
4260 
4261 // Macro for 79 struct elements
4262 #define hit_comTypeStruct79(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA) \
4263 { \
4264  NATIVE_STRUCT cmdline; \
4265  int blockcounts[79] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA)}; \
4266  MPI_Datatype types[79] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA)}; \
4267  MPI_Aint displs[79]; \
4268  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4269  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4270  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4271  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4272  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4273  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4274  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4275  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4276  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4277  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4278  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4279  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4280  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4281  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4282  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4283  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4284  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4285  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4286  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4287  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4288  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4289  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4290  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4291  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4292  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4293  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4294  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4295  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4296  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4297  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4298  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4299  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4300  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4301  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4302  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4303  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4304  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4305  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4306  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4307  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4308  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4309  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4310  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4311  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4312  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4313  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4314  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4315  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4316  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4317  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4318  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4319  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4320  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4321  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4322  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4323  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4324  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4325  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4326  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4327  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4328  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4329  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4330  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4331  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4332  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4333  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4334  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4335  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4336  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4337  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4338  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4339  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4340  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4341  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4342  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4343  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4344  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4345  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4346  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4347  int ivarloop; \
4348  for(ivarloop=78; ivarloop>=0; ivarloop--){ \
4349  displs[ivarloop] -= displs[0]; \
4350  } \
4351  MPI_Type_create_struct(79, blockcounts, displs, types, new_type); \
4352  MPI_Type_commit(new_type); \
4353 }
4354 
4355 // Macro for 80 struct elements
4356 #define hit_comTypeStruct80(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB) \
4357 { \
4358  NATIVE_STRUCT cmdline; \
4359  int blockcounts[80] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB)}; \
4360  MPI_Datatype types[80] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB)}; \
4361  MPI_Aint displs[80]; \
4362  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4363  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4364  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4365  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4366  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4367  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4368  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4369  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4370  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4371  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4372  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4373  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4374  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4375  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4376  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4377  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4378  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4379  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4380  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4381  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4382  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4383  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4384  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4385  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4386  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4387  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4388  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4389  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4390  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4391  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4392  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4393  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4394  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4395  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4396  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4397  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4398  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4399  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4400  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4401  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4402  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4403  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4404  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4405  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4406  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4407  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4408  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4409  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4410  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4411  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4412  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4413  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4414  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4415  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4416  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4417  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4418  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4419  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4420  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4421  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4422  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4423  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4424  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4425  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4426  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4427  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4428  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4429  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4430  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4431  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4432  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4433  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4434  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4435  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4436  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4437  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4438  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4439  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4440  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4441  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4442  int ivarloop; \
4443  for(ivarloop=79; ivarloop>=0; ivarloop--){ \
4444  displs[ivarloop] -= displs[0]; \
4445  } \
4446  MPI_Type_create_struct(80, blockcounts, displs, types, new_type); \
4447  MPI_Type_commit(new_type); \
4448 }
4449 
4450 // Macro for 81 struct elements
4451 #define hit_comTypeStruct81(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC) \
4452 { \
4453  NATIVE_STRUCT cmdline; \
4454  int blockcounts[81] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC)}; \
4455  MPI_Datatype types[81] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC)}; \
4456  MPI_Aint displs[81]; \
4457  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4458  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4459  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4460  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4461  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4462  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4463  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4464  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4465  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4466  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4467  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4468  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4469  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4470  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4471  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4472  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4473  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4474  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4475  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4476  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4477  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4478  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4479  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4480  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4481  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4482  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4483  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4484  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4485  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4486  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4487  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4488  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4489  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4490  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4491  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4492  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4493  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4494  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4495  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4496  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4497  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4498  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4499  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4500  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4501  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4502  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4503  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4504  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4505  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4506  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4507  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4508  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4509  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4510  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4511  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4512  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4513  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4514  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4515  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4516  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4517  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4518  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4519  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4520  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4521  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4522  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4523  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4524  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4525  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4526  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4527  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4528  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4529  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4530  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4531  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4532  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4533  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4534  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4535  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4536  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4537  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
4538  int ivarloop; \
4539  for(ivarloop=80; ivarloop>=0; ivarloop--){ \
4540  displs[ivarloop] -= displs[0]; \
4541  } \
4542  MPI_Type_create_struct(81, blockcounts, displs, types, new_type); \
4543  MPI_Type_commit(new_type); \
4544 }
4545 
4546 // Macro for 82 struct elements
4547 #define hit_comTypeStruct82(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD) \
4548 { \
4549  NATIVE_STRUCT cmdline; \
4550  int blockcounts[82] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD)}; \
4551  MPI_Datatype types[82] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD)}; \
4552  MPI_Aint displs[82]; \
4553  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4554  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4555  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4556  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4557  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4558  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4559  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4560  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4561  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4562  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4563  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4564  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4565  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4566  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4567  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4568  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4569  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4570  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4571  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4572  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4573  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4574  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4575  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4576  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4577  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4578  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4579  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4580  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4581  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4582  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4583  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4584  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4585  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4586  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4587  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4588  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4589  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4590  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4591  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4592  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4593  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4594  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4595  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4596  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4597  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4598  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4599  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4600  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4601  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4602  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4603  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4604  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4605  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4606  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4607  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4608  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4609  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4610  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4611  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4612  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4613  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4614  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4615  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4616  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4617  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4618  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4619  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4620  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4621  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4622  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4623  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4624  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4625  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4626  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4627  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4628  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4629  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4630  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4631  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4632  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4633  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
4634  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
4635  int ivarloop; \
4636  for(ivarloop=81; ivarloop>=0; ivarloop--){ \
4637  displs[ivarloop] -= displs[0]; \
4638  } \
4639  MPI_Type_create_struct(82, blockcounts, displs, types, new_type); \
4640  MPI_Type_commit(new_type); \
4641 }
4642 
4643 // Macro for 83 struct elements
4644 #define hit_comTypeStruct83(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE) \
4645 { \
4646  NATIVE_STRUCT cmdline; \
4647  int blockcounts[83] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE)}; \
4648  MPI_Datatype types[83] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE)}; \
4649  MPI_Aint displs[83]; \
4650  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4651  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4652  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4653  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4654  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4655  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4656  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4657  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4658  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4659  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4660  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4661  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4662  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4663  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4664  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4665  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4666  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4667  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4668  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4669  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4670  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4671  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4672  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4673  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4674  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4675  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4676  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4677  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4678  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4679  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4680  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4681  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4682  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4683  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4684  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4685  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4686  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4687  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4688  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4689  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4690  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4691  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4692  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4693  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4694  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4695  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4696  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4697  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4698  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4699  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4700  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4701  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4702  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4703  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4704  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4705  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4706  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4707  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4708  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4709  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4710  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4711  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4712  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4713  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4714  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4715  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4716  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4717  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4718  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4719  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4720  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4721  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4722  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4723  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4724  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4725  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4726  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4727  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4728  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4729  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4730  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
4731  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
4732  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
4733  int ivarloop; \
4734  for(ivarloop=82; ivarloop>=0; ivarloop--){ \
4735  displs[ivarloop] -= displs[0]; \
4736  } \
4737  MPI_Type_create_struct(83, blockcounts, displs, types, new_type); \
4738  MPI_Type_commit(new_type); \
4739 }
4740 
4741 // Macro for 84 struct elements
4742 #define hit_comTypeStruct84(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF) \
4743 { \
4744  NATIVE_STRUCT cmdline; \
4745  int blockcounts[84] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF)}; \
4746  MPI_Datatype types[84] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF)}; \
4747  MPI_Aint displs[84]; \
4748  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4749  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4750  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4751  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4752  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4753  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4754  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4755  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4756  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4757  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4758  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4759  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4760  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4761  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4762  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4763  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4764  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4765  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4766  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4767  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4768  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4769  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4770  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4771  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4772  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4773  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4774  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4775  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4776  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4777  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4778  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4779  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4780  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4781  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4782  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4783  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4784  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4785  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4786  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4787  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4788  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4789  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4790  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4791  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4792  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4793  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4794  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4795  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4796  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4797  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4798  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4799  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4800  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4801  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4802  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4803  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4804  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4805  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4806  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4807  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4808  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4809  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4810  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4811  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4812  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4813  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4814  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4815  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4816  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4817  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4818  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4819  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4820  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4821  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4822  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4823  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4824  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4825  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4826  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4827  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4828  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
4829  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
4830  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
4831  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
4832  int ivarloop; \
4833  for(ivarloop=83; ivarloop>=0; ivarloop--){ \
4834  displs[ivarloop] -= displs[0]; \
4835  } \
4836  MPI_Type_create_struct(84, blockcounts, displs, types, new_type); \
4837  MPI_Type_commit(new_type); \
4838 }
4839 
4840 // Macro for 85 struct elements
4841 #define hit_comTypeStruct85(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG) \
4842 { \
4843  NATIVE_STRUCT cmdline; \
4844  int blockcounts[85] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG)}; \
4845  MPI_Datatype types[85] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG)}; \
4846  MPI_Aint displs[85]; \
4847  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4848  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4849  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4850  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4851  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4852  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4853  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4854  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4855  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4856  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4857  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4858  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4859  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4860  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4861  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4862  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4863  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4864  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4865  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4866  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4867  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4868  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4869  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4870  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4871  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4872  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4873  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4874  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4875  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4876  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4877  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4878  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4879  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4880  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4881  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4882  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4883  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4884  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4885  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4886  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4887  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4888  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4889  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4890  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4891  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4892  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4893  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4894  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4895  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4896  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4897  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4898  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4899  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
4900  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
4901  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
4902  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
4903  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
4904  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
4905  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
4906  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
4907  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
4908  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
4909  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
4910  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
4911  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
4912  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
4913  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
4914  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
4915  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
4916  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
4917  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
4918  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
4919  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
4920  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
4921  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
4922  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
4923  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
4924  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
4925  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
4926  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
4927  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
4928  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
4929  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
4930  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
4931  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
4932  int ivarloop; \
4933  for(ivarloop=84; ivarloop>=0; ivarloop--){ \
4934  displs[ivarloop] -= displs[0]; \
4935  } \
4936  MPI_Type_create_struct(85, blockcounts, displs, types, new_type); \
4937  MPI_Type_commit(new_type); \
4938 }
4939 
4940 // Macro for 86 struct elements
4941 #define hit_comTypeStruct86(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH) \
4942 { \
4943  NATIVE_STRUCT cmdline; \
4944  int blockcounts[86] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH)}; \
4945  MPI_Datatype types[86] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH)}; \
4946  MPI_Aint displs[86]; \
4947  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
4948  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
4949  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
4950  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
4951  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
4952  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
4953  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
4954  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
4955  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
4956  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
4957  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
4958  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
4959  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
4960  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
4961  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
4962  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
4963  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
4964  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
4965  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
4966  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
4967  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
4968  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
4969  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
4970  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
4971  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
4972  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
4973  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
4974  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
4975  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
4976  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
4977  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
4978  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
4979  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
4980  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
4981  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
4982  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
4983  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
4984  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
4985  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
4986  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
4987  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
4988  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
4989  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
4990  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
4991  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
4992  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
4993  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
4994  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
4995  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
4996  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
4997  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
4998  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
4999  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5000  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5001  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5002  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5003  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5004  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5005  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5006  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5007  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5008  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5009  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5010  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5011  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5012  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5013  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5014  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5015  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5016  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5017  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5018  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5019  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5020  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5021  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5022  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5023  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5024  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5025  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5026  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5027  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5028  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5029  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5030  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5031  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5032  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5033  int ivarloop; \
5034  for(ivarloop=85; ivarloop>=0; ivarloop--){ \
5035  displs[ivarloop] -= displs[0]; \
5036  } \
5037  MPI_Type_create_struct(86, blockcounts, displs, types, new_type); \
5038  MPI_Type_commit(new_type); \
5039 }
5040 
5041 // Macro for 87 struct elements
5042 #define hit_comTypeStruct87(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI) \
5043 { \
5044  NATIVE_STRUCT cmdline; \
5045  int blockcounts[87] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI)}; \
5046  MPI_Datatype types[87] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI)}; \
5047  MPI_Aint displs[87]; \
5048  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5049  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5050  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5051  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5052  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5053  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5054  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5055  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5056  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5057  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5058  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5059  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5060  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5061  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5062  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5063  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5064  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5065  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5066  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5067  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5068  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5069  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5070  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5071  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5072  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5073  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5074  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5075  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5076  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5077  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5078  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5079  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5080  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5081  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5082  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5083  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5084  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5085  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5086  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5087  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5088  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5089  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5090  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5091  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5092  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5093  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5094  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5095  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5096  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5097  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5098  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5099  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5100  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5101  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5102  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5103  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5104  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5105  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5106  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5107  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5108  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5109  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5110  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5111  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5112  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5113  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5114  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5115  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5116  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5117  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5118  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5119  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5120  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5121  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5122  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5123  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5124  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5125  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5126  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5127  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5128  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5129  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5130  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5131  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5132  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5133  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5134  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5135  int ivarloop; \
5136  for(ivarloop=86; ivarloop>=0; ivarloop--){ \
5137  displs[ivarloop] -= displs[0]; \
5138  } \
5139  MPI_Type_create_struct(87, blockcounts, displs, types, new_type); \
5140  MPI_Type_commit(new_type); \
5141 }
5142 
5143 // Macro for 88 struct elements
5144 #define hit_comTypeStruct88(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ) \
5145 { \
5146  NATIVE_STRUCT cmdline; \
5147  int blockcounts[88] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ)}; \
5148  MPI_Datatype types[88] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ)}; \
5149  MPI_Aint displs[88]; \
5150  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5151  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5152  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5153  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5154  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5155  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5156  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5157  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5158  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5159  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5160  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5161  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5162  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5163  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5164  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5165  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5166  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5167  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5168  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5169  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5170  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5171  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5172  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5173  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5174  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5175  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5176  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5177  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5178  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5179  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5180  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5181  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5182  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5183  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5184  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5185  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5186  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5187  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5188  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5189  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5190  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5191  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5192  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5193  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5194  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5195  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5196  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5197  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5198  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5199  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5200  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5201  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5202  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5203  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5204  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5205  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5206  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5207  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5208  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5209  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5210  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5211  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5212  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5213  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5214  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5215  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5216  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5217  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5218  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5219  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5220  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5221  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5222  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5223  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5224  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5225  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5226  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5227  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5228  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5229  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5230  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5231  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5232  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5233  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5234  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5235  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5236  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5237  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5238  int ivarloop; \
5239  for(ivarloop=87; ivarloop>=0; ivarloop--){ \
5240  displs[ivarloop] -= displs[0]; \
5241  } \
5242  MPI_Type_create_struct(88, blockcounts, displs, types, new_type); \
5243  MPI_Type_commit(new_type); \
5244 }
5245 
5246 // Macro for 89 struct elements
5247 #define hit_comTypeStruct89(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK) \
5248 { \
5249  NATIVE_STRUCT cmdline; \
5250  int blockcounts[89] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK)}; \
5251  MPI_Datatype types[89] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK)}; \
5252  MPI_Aint displs[89]; \
5253  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5254  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5255  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5256  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5257  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5258  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5259  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5260  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5261  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5262  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5263  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5264  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5265  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5266  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5267  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5268  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5269  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5270  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5271  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5272  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5273  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5274  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5275  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5276  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5277  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5278  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5279  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5280  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5281  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5282  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5283  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5284  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5285  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5286  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5287  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5288  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5289  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5290  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5291  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5292  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5293  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5294  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5295  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5296  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5297  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5298  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5299  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5300  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5301  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5302  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5303  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5304  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5305  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5306  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5307  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5308  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5309  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5310  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5311  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5312  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5313  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5314  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5315  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5316  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5317  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5318  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5319  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5320  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5321  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5322  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5323  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5324  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5325  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5326  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5327  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5328  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5329  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5330  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5331  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5332  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5333  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5334  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5335  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5336  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5337  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5338  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5339  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5340  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5341  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5342  int ivarloop; \
5343  for(ivarloop=88; ivarloop>=0; ivarloop--){ \
5344  displs[ivarloop] -= displs[0]; \
5345  } \
5346  MPI_Type_create_struct(89, blockcounts, displs, types, new_type); \
5347  MPI_Type_commit(new_type); \
5348 }
5349 
5350 // Macro for 90 struct elements
5351 #define hit_comTypeStruct90(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL) \
5352 { \
5353  NATIVE_STRUCT cmdline; \
5354  int blockcounts[90] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL)}; \
5355  MPI_Datatype types[90] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL)}; \
5356  MPI_Aint displs[90]; \
5357  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5358  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5359  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5360  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5361  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5362  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5363  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5364  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5365  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5366  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5367  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5368  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5369  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5370  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5371  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5372  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5373  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5374  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5375  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5376  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5377  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5378  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5379  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5380  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5381  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5382  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5383  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5384  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5385  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5386  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5387  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5388  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5389  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5390  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5391  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5392  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5393  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5394  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5395  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5396  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5397  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5398  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5399  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5400  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5401  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5402  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5403  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5404  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5405  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5406  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5407  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5408  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5409  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5410  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5411  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5412  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5413  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5414  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5415  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5416  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5417  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5418  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5419  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5420  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5421  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5422  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5423  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5424  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5425  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5426  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5427  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5428  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5429  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5430  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5431  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5432  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5433  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5434  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5435  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5436  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5437  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5438  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5439  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5440  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5441  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5442  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5443  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5444  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5445  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5446  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5447  int ivarloop; \
5448  for(ivarloop=89; ivarloop>=0; ivarloop--){ \
5449  displs[ivarloop] -= displs[0]; \
5450  } \
5451  MPI_Type_create_struct(90, blockcounts, displs, types, new_type); \
5452  MPI_Type_commit(new_type); \
5453 }
5454 
5455 // Macro for 91 struct elements
5456 #define hit_comTypeStruct91(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM) \
5457 { \
5458  NATIVE_STRUCT cmdline; \
5459  int blockcounts[91] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM)}; \
5460  MPI_Datatype types[91] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM)}; \
5461  MPI_Aint displs[91]; \
5462  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5463  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5464  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5465  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5466  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5467  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5468  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5469  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5470  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5471  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5472  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5473  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5474  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5475  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5476  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5477  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5478  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5479  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5480  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5481  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5482  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5483  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5484  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5485  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5486  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5487  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5488  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5489  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5490  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5491  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5492  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5493  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5494  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5495  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5496  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5497  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5498  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5499  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5500  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5501  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5502  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5503  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5504  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5505  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5506  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5507  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5508  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5509  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5510  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5511  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5512  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5513  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5514  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5515  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5516  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5517  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5518  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5519  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5520  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5521  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5522  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5523  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5524  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5525  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5526  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5527  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5528  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5529  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5530  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5531  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5532  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5533  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5534  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5535  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5536  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5537  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5538  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5539  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5540  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5541  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5542  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5543  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5544  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5545  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5546  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5547  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5548  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5549  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5550  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5551  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5552  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
5553  int ivarloop; \
5554  for(ivarloop=90; ivarloop>=0; ivarloop--){ \
5555  displs[ivarloop] -= displs[0]; \
5556  } \
5557  MPI_Type_create_struct(91, blockcounts, displs, types, new_type); \
5558  MPI_Type_commit(new_type); \
5559 }
5560 
5561 // Macro for 92 struct elements
5562 #define hit_comTypeStruct92(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN) \
5563 { \
5564  NATIVE_STRUCT cmdline; \
5565  int blockcounts[92] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN)}; \
5566  MPI_Datatype types[92] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN)}; \
5567  MPI_Aint displs[92]; \
5568  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5569  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5570  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5571  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5572  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5573  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5574  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5575  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5576  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5577  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5578  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5579  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5580  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5581  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5582  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5583  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5584  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5585  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5586  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5587  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5588  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5589  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5590  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5591  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5592  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5593  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5594  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5595  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5596  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5597  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5598  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5599  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5600  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5601  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5602  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5603  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5604  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5605  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5606  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5607  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5608  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5609  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5610  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5611  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5612  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5613  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5614  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5615  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5616  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5617  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5618  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5619  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5620  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5621  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5622  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5623  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5624  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5625  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5626  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5627  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5628  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5629  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5630  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5631  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5632  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5633  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5634  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5635  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5636  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5637  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5638  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5639  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5640  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5641  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5642  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5643  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5644  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5645  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5646  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5647  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5648  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5649  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5650  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5651  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5652  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5653  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5654  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5655  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5656  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5657  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5658  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
5659  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
5660  int ivarloop; \
5661  for(ivarloop=91; ivarloop>=0; ivarloop--){ \
5662  displs[ivarloop] -= displs[0]; \
5663  } \
5664  MPI_Type_create_struct(92, blockcounts, displs, types, new_type); \
5665  MPI_Type_commit(new_type); \
5666 }
5667 
5668 // Macro for 93 struct elements
5669 #define hit_comTypeStruct93(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO) \
5670 { \
5671  NATIVE_STRUCT cmdline; \
5672  int blockcounts[93] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO)}; \
5673  MPI_Datatype types[93] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO)}; \
5674  MPI_Aint displs[93]; \
5675  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5676  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5677  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5678  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5679  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5680  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5681  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5682  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5683  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5684  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5685  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5686  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5687  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5688  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5689  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5690  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5691  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5692  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5693  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5694  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5695  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5696  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5697  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5698  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5699  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5700  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5701  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5702  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5703  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5704  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5705  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5706  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5707  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5708  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5709  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5710  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5711  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5712  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5713  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5714  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5715  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5716  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5717  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5718  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5719  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5720  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5721  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5722  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5723  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5724  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5725  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5726  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5727  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5728  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5729  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5730  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5731  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5732  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5733  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5734  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5735  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5736  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5737  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5738  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5739  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5740  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5741  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5742  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5743  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5744  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5745  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5746  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5747  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5748  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5749  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5750  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5751  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5752  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5753  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5754  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5755  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5756  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5757  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5758  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5759  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5760  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5761  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5762  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5763  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5764  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5765  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
5766  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
5767  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
5768  int ivarloop; \
5769  for(ivarloop=92; ivarloop>=0; ivarloop--){ \
5770  displs[ivarloop] -= displs[0]; \
5771  } \
5772  MPI_Type_create_struct(93, blockcounts, displs, types, new_type); \
5773  MPI_Type_commit(new_type); \
5774 }
5775 
5776 // Macro for 94 struct elements
5777 #define hit_comTypeStruct94(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP) \
5778 { \
5779  NATIVE_STRUCT cmdline; \
5780  int blockcounts[94] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP)}; \
5781  MPI_Datatype types[94] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP)}; \
5782  MPI_Aint displs[94]; \
5783  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5784  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5785  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5786  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5787  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5788  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5789  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5790  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5791  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5792  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5793  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5794  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5795  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5796  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5797  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5798  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5799  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5800  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5801  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5802  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5803  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5804  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5805  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5806  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5807  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5808  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5809  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5810  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5811  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5812  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5813  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5814  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5815  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5816  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5817  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5818  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5819  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5820  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5821  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5822  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5823  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5824  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5825  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5826  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5827  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5828  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5829  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5830  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5831  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5832  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5833  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5834  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5835  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5836  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5837  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5838  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5839  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5840  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5841  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5842  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5843  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5844  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5845  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5846  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5847  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5848  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5849  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5850  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5851  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5852  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5853  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5854  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5855  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5856  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5857  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5858  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5859  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5860  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5861  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5862  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5863  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5864  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5865  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5866  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5867  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5868  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5869  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5870  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5871  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5872  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5873  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
5874  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
5875  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
5876  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
5877  int ivarloop; \
5878  for(ivarloop=93; ivarloop>=0; ivarloop--){ \
5879  displs[ivarloop] -= displs[0]; \
5880  } \
5881  MPI_Type_create_struct(94, blockcounts, displs, types, new_type); \
5882  MPI_Type_commit(new_type); \
5883 }
5884 
5885 // Macro for 95 struct elements
5886 #define hit_comTypeStruct95(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ) \
5887 { \
5888  NATIVE_STRUCT cmdline; \
5889  int blockcounts[95] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ)}; \
5890  MPI_Datatype types[95] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ)}; \
5891  MPI_Aint displs[95]; \
5892  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
5893  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
5894  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
5895  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
5896  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
5897  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
5898  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
5899  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
5900  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
5901  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
5902  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
5903  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
5904  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
5905  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
5906  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
5907  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
5908  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
5909  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
5910  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
5911  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
5912  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
5913  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
5914  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
5915  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
5916  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
5917  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
5918  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
5919  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
5920  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
5921  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
5922  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
5923  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
5924  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
5925  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
5926  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
5927  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
5928  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
5929  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
5930  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
5931  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
5932  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
5933  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
5934  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
5935  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
5936  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
5937  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
5938  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
5939  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
5940  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
5941  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
5942  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
5943  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
5944  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
5945  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
5946  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
5947  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
5948  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
5949  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
5950  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
5951  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
5952  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
5953  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
5954  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
5955  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
5956  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
5957  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
5958  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
5959  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
5960  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
5961  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
5962  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
5963  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
5964  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
5965  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
5966  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
5967  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
5968  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
5969  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
5970  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
5971  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
5972  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
5973  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
5974  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
5975  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
5976  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
5977  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
5978  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
5979  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
5980  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
5981  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
5982  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
5983  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
5984  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
5985  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
5986  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
5987  int ivarloop; \
5988  for(ivarloop=94; ivarloop>=0; ivarloop--){ \
5989  displs[ivarloop] -= displs[0]; \
5990  } \
5991  MPI_Type_create_struct(95, blockcounts, displs, types, new_type); \
5992  MPI_Type_commit(new_type); \
5993 }
5994 
5995 // Macro for 96 struct elements
5996 #define hit_comTypeStruct96(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ, NAME_CR, COUNT_CR, TYPE_CR) \
5997 { \
5998  NATIVE_STRUCT cmdline; \
5999  int blockcounts[96] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ), (COUNT_CR)}; \
6000  MPI_Datatype types[96] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ), (TYPE_CR)}; \
6001  MPI_Aint displs[96]; \
6002  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
6003  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
6004  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
6005  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
6006  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
6007  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
6008  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
6009  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
6010  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
6011  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
6012  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
6013  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
6014  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
6015  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
6016  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
6017  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
6018  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
6019  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
6020  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
6021  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
6022  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
6023  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
6024  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
6025  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
6026  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
6027  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
6028  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
6029  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
6030  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
6031  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
6032  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
6033  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
6034  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
6035  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
6036  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
6037  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
6038  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
6039  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
6040  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
6041  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
6042  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
6043  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
6044  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
6045  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
6046  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
6047  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
6048  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
6049  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
6050  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
6051  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
6052  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
6053  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
6054  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
6055  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
6056  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
6057  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
6058  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
6059  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
6060  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
6061  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
6062  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
6063  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
6064  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
6065  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
6066  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
6067  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
6068  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
6069  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
6070  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
6071  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
6072  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
6073  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
6074  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
6075  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
6076  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
6077  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
6078  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
6079  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
6080  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
6081  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
6082  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
6083  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
6084  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
6085  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
6086  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
6087  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
6088  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
6089  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
6090  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
6091  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
6092  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
6093  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
6094  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
6095  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
6096  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
6097  MPI_Get_address(&cmdline.NAME_CR, &displs[95]); \
6098  int ivarloop; \
6099  for(ivarloop=95; ivarloop>=0; ivarloop--){ \
6100  displs[ivarloop] -= displs[0]; \
6101  } \
6102  MPI_Type_create_struct(96, blockcounts, displs, types, new_type); \
6103  MPI_Type_commit(new_type); \
6104 }
6105 
6106 // Macro for 97 struct elements
6107 #define hit_comTypeStruct97(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ, NAME_CR, COUNT_CR, TYPE_CR, NAME_CS, COUNT_CS, TYPE_CS) \
6108 { \
6109  NATIVE_STRUCT cmdline; \
6110  int blockcounts[97] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ), (COUNT_CR), (COUNT_CS)}; \
6111  MPI_Datatype types[97] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ), (TYPE_CR), (TYPE_CS)}; \
6112  MPI_Aint displs[97]; \
6113  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
6114  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
6115  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
6116  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
6117  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
6118  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
6119  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
6120  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
6121  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
6122  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
6123  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
6124  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
6125  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
6126  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
6127  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
6128  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
6129  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
6130  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
6131  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
6132  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
6133  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
6134  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
6135  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
6136  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
6137  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
6138  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
6139  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
6140  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
6141  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
6142  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
6143  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
6144  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
6145  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
6146  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
6147  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
6148  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
6149  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
6150  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
6151  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
6152  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
6153  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
6154  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
6155  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
6156  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
6157  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
6158  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
6159  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
6160  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
6161  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
6162  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
6163  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
6164  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
6165  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
6166  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
6167  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
6168  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
6169  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
6170  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
6171  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
6172  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
6173  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
6174  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
6175  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
6176  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
6177  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
6178  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
6179  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
6180  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
6181  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
6182  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
6183  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
6184  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
6185  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
6186  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
6187  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
6188  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
6189  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
6190  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
6191  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
6192  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
6193  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
6194  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
6195  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
6196  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
6197  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
6198  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
6199  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
6200  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
6201  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
6202  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
6203  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
6204  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
6205  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
6206  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
6207  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
6208  MPI_Get_address(&cmdline.NAME_CR, &displs[95]); \
6209  MPI_Get_address(&cmdline.NAME_CS, &displs[96]); \
6210  int ivarloop; \
6211  for(ivarloop=96; ivarloop>=0; ivarloop--){ \
6212  displs[ivarloop] -= displs[0]; \
6213  } \
6214  MPI_Type_create_struct(97, blockcounts, displs, types, new_type); \
6215  MPI_Type_commit(new_type); \
6216 }
6217 
6218 // Macro for 98 struct elements
6219 #define hit_comTypeStruct98(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ, NAME_CR, COUNT_CR, TYPE_CR, NAME_CS, COUNT_CS, TYPE_CS, NAME_CT, COUNT_CT, TYPE_CT) \
6220 { \
6221  NATIVE_STRUCT cmdline; \
6222  int blockcounts[98] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ), (COUNT_CR), (COUNT_CS), (COUNT_CT)}; \
6223  MPI_Datatype types[98] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ), (TYPE_CR), (TYPE_CS), (TYPE_CT)}; \
6224  MPI_Aint displs[98]; \
6225  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
6226  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
6227  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
6228  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
6229  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
6230  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
6231  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
6232  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
6233  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
6234  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
6235  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
6236  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
6237  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
6238  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
6239  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
6240  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
6241  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
6242  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
6243  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
6244  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
6245  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
6246  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
6247  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
6248  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
6249  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
6250  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
6251  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
6252  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
6253  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
6254  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
6255  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
6256  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
6257  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
6258  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
6259  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
6260  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
6261  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
6262  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
6263  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
6264  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
6265  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
6266  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
6267  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
6268  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
6269  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
6270  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
6271  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
6272  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
6273  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
6274  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
6275  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
6276  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
6277  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
6278  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
6279  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
6280  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
6281  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
6282  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
6283  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
6284  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
6285  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
6286  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
6287  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
6288  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
6289  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
6290  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
6291  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
6292  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
6293  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
6294  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
6295  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
6296  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
6297  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
6298  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
6299  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
6300  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
6301  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
6302  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
6303  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
6304  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
6305  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
6306  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
6307  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
6308  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
6309  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
6310  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
6311  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
6312  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
6313  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
6314  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
6315  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
6316  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
6317  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
6318  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
6319  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
6320  MPI_Get_address(&cmdline.NAME_CR, &displs[95]); \
6321  MPI_Get_address(&cmdline.NAME_CS, &displs[96]); \
6322  MPI_Get_address(&cmdline.NAME_CT, &displs[97]); \
6323  int ivarloop; \
6324  for(ivarloop=97; ivarloop>=0; ivarloop--){ \
6325  displs[ivarloop] -= displs[0]; \
6326  } \
6327  MPI_Type_create_struct(98, blockcounts, displs, types, new_type); \
6328  MPI_Type_commit(new_type); \
6329 }
6330 
6331 // Macro for 99 struct elements
6332 #define hit_comTypeStruct99(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ, NAME_CR, COUNT_CR, TYPE_CR, NAME_CS, COUNT_CS, TYPE_CS, NAME_CT, COUNT_CT, TYPE_CT, NAME_CU, COUNT_CU, TYPE_CU) \
6333 { \
6334  NATIVE_STRUCT cmdline; \
6335  int blockcounts[99] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ), (COUNT_CR), (COUNT_CS), (COUNT_CT), (COUNT_CU)}; \
6336  MPI_Datatype types[99] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ), (TYPE_CR), (TYPE_CS), (TYPE_CT), (TYPE_CU)}; \
6337  MPI_Aint displs[99]; \
6338  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
6339  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
6340  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
6341  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
6342  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
6343  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
6344  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
6345  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
6346  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
6347  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
6348  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
6349  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
6350  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
6351  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
6352  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
6353  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
6354  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
6355  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
6356  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
6357  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
6358  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
6359  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
6360  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
6361  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
6362  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
6363  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
6364  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
6365  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
6366  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
6367  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
6368  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
6369  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
6370  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
6371  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
6372  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
6373  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
6374  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
6375  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
6376  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
6377  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
6378  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
6379  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
6380  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
6381  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
6382  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
6383  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
6384  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
6385  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
6386  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
6387  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
6388  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
6389  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
6390  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
6391  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
6392  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
6393  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
6394  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
6395  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
6396  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
6397  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
6398  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
6399  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
6400  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
6401  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
6402  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
6403  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
6404  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
6405  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
6406  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
6407  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
6408  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
6409  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
6410  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
6411  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
6412  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
6413  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
6414  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
6415  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
6416  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
6417  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
6418  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
6419  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
6420  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
6421  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
6422  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
6423  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
6424  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
6425  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
6426  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
6427  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
6428  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
6429  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
6430  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
6431  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
6432  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
6433  MPI_Get_address(&cmdline.NAME_CR, &displs[95]); \
6434  MPI_Get_address(&cmdline.NAME_CS, &displs[96]); \
6435  MPI_Get_address(&cmdline.NAME_CT, &displs[97]); \
6436  MPI_Get_address(&cmdline.NAME_CU, &displs[98]); \
6437  int ivarloop; \
6438  for(ivarloop=98; ivarloop>=0; ivarloop--){ \
6439  displs[ivarloop] -= displs[0]; \
6440  } \
6441  MPI_Type_create_struct(99, blockcounts, displs, types, new_type); \
6442  MPI_Type_commit(new_type); \
6443 }
6444 
6445 // Macro for 100 struct elements
6446 #define hit_comTypeStruct100(new_type, NATIVE_STRUCT, NAME_A, COUNT_A, TYPE_A, NAME_B, COUNT_B, TYPE_B, NAME_C, COUNT_C, TYPE_C, NAME_D, COUNT_D, TYPE_D, NAME_E, COUNT_E, TYPE_E, NAME_F, COUNT_F, TYPE_F, NAME_G, COUNT_G, TYPE_G, NAME_H, COUNT_H, TYPE_H, NAME_I, COUNT_I, TYPE_I, NAME_J, COUNT_J, TYPE_J, NAME_K, COUNT_K, TYPE_K, NAME_L, COUNT_L, TYPE_L, NAME_M, COUNT_M, TYPE_M, NAME_N, COUNT_N, TYPE_N, NAME_O, COUNT_O, TYPE_O, NAME_P, COUNT_P, TYPE_P, NAME_Q, COUNT_Q, TYPE_Q, NAME_R, COUNT_R, TYPE_R, NAME_S, COUNT_S, TYPE_S, NAME_T, COUNT_T, TYPE_T, NAME_U, COUNT_U, TYPE_U, NAME_V, COUNT_V, TYPE_V, NAME_W, COUNT_W, TYPE_W, NAME_X, COUNT_X, TYPE_X, NAME_Y, COUNT_Y, TYPE_Y, NAME_Z, COUNT_Z, TYPE_Z, NAME_AA, COUNT_AA, TYPE_AA, NAME_AB, COUNT_AB, TYPE_AB, NAME_AC, COUNT_AC, TYPE_AC, NAME_AD, COUNT_AD, TYPE_AD, NAME_AE, COUNT_AE, TYPE_AE, NAME_AF, COUNT_AF, TYPE_AF, NAME_AG, COUNT_AG, TYPE_AG, NAME_AH, COUNT_AH, TYPE_AH, NAME_AI, COUNT_AI, TYPE_AI, NAME_AJ, COUNT_AJ, TYPE_AJ, NAME_AK, COUNT_AK, TYPE_AK, NAME_AL, COUNT_AL, TYPE_AL, NAME_AM, COUNT_AM, TYPE_AM, NAME_AN, COUNT_AN, TYPE_AN, NAME_AO, COUNT_AO, TYPE_AO, NAME_AP, COUNT_AP, TYPE_AP, NAME_AQ, COUNT_AQ, TYPE_AQ, NAME_AR, COUNT_AR, TYPE_AR, NAME_AS, COUNT_AS, TYPE_AS, NAME_AT, COUNT_AT, TYPE_AT, NAME_AU, COUNT_AU, TYPE_AU, NAME_AV, COUNT_AV, TYPE_AV, NAME_AW, COUNT_AW, TYPE_AW, NAME_AX, COUNT_AX, TYPE_AX, NAME_AY, COUNT_AY, TYPE_AY, NAME_AZ, COUNT_AZ, TYPE_AZ, NAME_BA, COUNT_BA, TYPE_BA, NAME_BB, COUNT_BB, TYPE_BB, NAME_BC, COUNT_BC, TYPE_BC, NAME_BD, COUNT_BD, TYPE_BD, NAME_BE, COUNT_BE, TYPE_BE, NAME_BF, COUNT_BF, TYPE_BF, NAME_BG, COUNT_BG, TYPE_BG, NAME_BH, COUNT_BH, TYPE_BH, NAME_BI, COUNT_BI, TYPE_BI, NAME_BJ, COUNT_BJ, TYPE_BJ, NAME_BK, COUNT_BK, TYPE_BK, NAME_BL, COUNT_BL, TYPE_BL, NAME_BM, COUNT_BM, TYPE_BM, NAME_BN, COUNT_BN, TYPE_BN, NAME_BO, COUNT_BO, TYPE_BO, NAME_BP, COUNT_BP, TYPE_BP, NAME_BQ, COUNT_BQ, TYPE_BQ, NAME_BR, COUNT_BR, TYPE_BR, NAME_BS, COUNT_BS, TYPE_BS, NAME_BT, COUNT_BT, TYPE_BT, NAME_BU, COUNT_BU, TYPE_BU, NAME_BV, COUNT_BV, TYPE_BV, NAME_BW, COUNT_BW, TYPE_BW, NAME_BX, COUNT_BX, TYPE_BX, NAME_BY, COUNT_BY, TYPE_BY, NAME_BZ, COUNT_BZ, TYPE_BZ, NAME_CA, COUNT_CA, TYPE_CA, NAME_CB, COUNT_CB, TYPE_CB, NAME_CC, COUNT_CC, TYPE_CC, NAME_CD, COUNT_CD, TYPE_CD, NAME_CE, COUNT_CE, TYPE_CE, NAME_CF, COUNT_CF, TYPE_CF, NAME_CG, COUNT_CG, TYPE_CG, NAME_CH, COUNT_CH, TYPE_CH, NAME_CI, COUNT_CI, TYPE_CI, NAME_CJ, COUNT_CJ, TYPE_CJ, NAME_CK, COUNT_CK, TYPE_CK, NAME_CL, COUNT_CL, TYPE_CL, NAME_CM, COUNT_CM, TYPE_CM, NAME_CN, COUNT_CN, TYPE_CN, NAME_CO, COUNT_CO, TYPE_CO, NAME_CP, COUNT_CP, TYPE_CP, NAME_CQ, COUNT_CQ, TYPE_CQ, NAME_CR, COUNT_CR, TYPE_CR, NAME_CS, COUNT_CS, TYPE_CS, NAME_CT, COUNT_CT, TYPE_CT, NAME_CU, COUNT_CU, TYPE_CU, NAME_CV, COUNT_CV, TYPE_CV) \
6447 { \
6448  NATIVE_STRUCT cmdline; \
6449  int blockcounts[100] = {(COUNT_A), (COUNT_B), (COUNT_C), (COUNT_D), (COUNT_E), (COUNT_F), (COUNT_G), (COUNT_H), (COUNT_I), (COUNT_J), (COUNT_K), (COUNT_L), (COUNT_M), (COUNT_N), (COUNT_O), (COUNT_P), (COUNT_Q), (COUNT_R), (COUNT_S), (COUNT_T), (COUNT_U), (COUNT_V), (COUNT_W), (COUNT_X), (COUNT_Y), (COUNT_Z), (COUNT_AA), (COUNT_AB), (COUNT_AC), (COUNT_AD), (COUNT_AE), (COUNT_AF), (COUNT_AG), (COUNT_AH), (COUNT_AI), (COUNT_AJ), (COUNT_AK), (COUNT_AL), (COUNT_AM), (COUNT_AN), (COUNT_AO), (COUNT_AP), (COUNT_AQ), (COUNT_AR), (COUNT_AS), (COUNT_AT), (COUNT_AU), (COUNT_AV), (COUNT_AW), (COUNT_AX), (COUNT_AY), (COUNT_AZ), (COUNT_BA), (COUNT_BB), (COUNT_BC), (COUNT_BD), (COUNT_BE), (COUNT_BF), (COUNT_BG), (COUNT_BH), (COUNT_BI), (COUNT_BJ), (COUNT_BK), (COUNT_BL), (COUNT_BM), (COUNT_BN), (COUNT_BO), (COUNT_BP), (COUNT_BQ), (COUNT_BR), (COUNT_BS), (COUNT_BT), (COUNT_BU), (COUNT_BV), (COUNT_BW), (COUNT_BX), (COUNT_BY), (COUNT_BZ), (COUNT_CA), (COUNT_CB), (COUNT_CC), (COUNT_CD), (COUNT_CE), (COUNT_CF), (COUNT_CG), (COUNT_CH), (COUNT_CI), (COUNT_CJ), (COUNT_CK), (COUNT_CL), (COUNT_CM), (COUNT_CN), (COUNT_CO), (COUNT_CP), (COUNT_CQ), (COUNT_CR), (COUNT_CS), (COUNT_CT), (COUNT_CU), (COUNT_CV)}; \
6450  MPI_Datatype types[100] = {(TYPE_A), (TYPE_B), (TYPE_C), (TYPE_D), (TYPE_E), (TYPE_F), (TYPE_G), (TYPE_H), (TYPE_I), (TYPE_J), (TYPE_K), (TYPE_L), (TYPE_M), (TYPE_N), (TYPE_O), (TYPE_P), (TYPE_Q), (TYPE_R), (TYPE_S), (TYPE_T), (TYPE_U), (TYPE_V), (TYPE_W), (TYPE_X), (TYPE_Y), (TYPE_Z), (TYPE_AA), (TYPE_AB), (TYPE_AC), (TYPE_AD), (TYPE_AE), (TYPE_AF), (TYPE_AG), (TYPE_AH), (TYPE_AI), (TYPE_AJ), (TYPE_AK), (TYPE_AL), (TYPE_AM), (TYPE_AN), (TYPE_AO), (TYPE_AP), (TYPE_AQ), (TYPE_AR), (TYPE_AS), (TYPE_AT), (TYPE_AU), (TYPE_AV), (TYPE_AW), (TYPE_AX), (TYPE_AY), (TYPE_AZ), (TYPE_BA), (TYPE_BB), (TYPE_BC), (TYPE_BD), (TYPE_BE), (TYPE_BF), (TYPE_BG), (TYPE_BH), (TYPE_BI), (TYPE_BJ), (TYPE_BK), (TYPE_BL), (TYPE_BM), (TYPE_BN), (TYPE_BO), (TYPE_BP), (TYPE_BQ), (TYPE_BR), (TYPE_BS), (TYPE_BT), (TYPE_BU), (TYPE_BV), (TYPE_BW), (TYPE_BX), (TYPE_BY), (TYPE_BZ), (TYPE_CA), (TYPE_CB), (TYPE_CC), (TYPE_CD), (TYPE_CE), (TYPE_CF), (TYPE_CG), (TYPE_CH), (TYPE_CI), (TYPE_CJ), (TYPE_CK), (TYPE_CL), (TYPE_CM), (TYPE_CN), (TYPE_CO), (TYPE_CP), (TYPE_CQ), (TYPE_CR), (TYPE_CS), (TYPE_CT), (TYPE_CU), (TYPE_CV)}; \
6451  MPI_Aint displs[100]; \
6452  MPI_Get_address(&cmdline.NAME_A, &displs[0]); \
6453  MPI_Get_address(&cmdline.NAME_B, &displs[1]); \
6454  MPI_Get_address(&cmdline.NAME_C, &displs[2]); \
6455  MPI_Get_address(&cmdline.NAME_D, &displs[3]); \
6456  MPI_Get_address(&cmdline.NAME_E, &displs[4]); \
6457  MPI_Get_address(&cmdline.NAME_F, &displs[5]); \
6458  MPI_Get_address(&cmdline.NAME_G, &displs[6]); \
6459  MPI_Get_address(&cmdline.NAME_H, &displs[7]); \
6460  MPI_Get_address(&cmdline.NAME_I, &displs[8]); \
6461  MPI_Get_address(&cmdline.NAME_J, &displs[9]); \
6462  MPI_Get_address(&cmdline.NAME_K, &displs[10]); \
6463  MPI_Get_address(&cmdline.NAME_L, &displs[11]); \
6464  MPI_Get_address(&cmdline.NAME_M, &displs[12]); \
6465  MPI_Get_address(&cmdline.NAME_N, &displs[13]); \
6466  MPI_Get_address(&cmdline.NAME_O, &displs[14]); \
6467  MPI_Get_address(&cmdline.NAME_P, &displs[15]); \
6468  MPI_Get_address(&cmdline.NAME_Q, &displs[16]); \
6469  MPI_Get_address(&cmdline.NAME_R, &displs[17]); \
6470  MPI_Get_address(&cmdline.NAME_S, &displs[18]); \
6471  MPI_Get_address(&cmdline.NAME_T, &displs[19]); \
6472  MPI_Get_address(&cmdline.NAME_U, &displs[20]); \
6473  MPI_Get_address(&cmdline.NAME_V, &displs[21]); \
6474  MPI_Get_address(&cmdline.NAME_W, &displs[22]); \
6475  MPI_Get_address(&cmdline.NAME_X, &displs[23]); \
6476  MPI_Get_address(&cmdline.NAME_Y, &displs[24]); \
6477  MPI_Get_address(&cmdline.NAME_Z, &displs[25]); \
6478  MPI_Get_address(&cmdline.NAME_AA, &displs[26]); \
6479  MPI_Get_address(&cmdline.NAME_AB, &displs[27]); \
6480  MPI_Get_address(&cmdline.NAME_AC, &displs[28]); \
6481  MPI_Get_address(&cmdline.NAME_AD, &displs[29]); \
6482  MPI_Get_address(&cmdline.NAME_AE, &displs[30]); \
6483  MPI_Get_address(&cmdline.NAME_AF, &displs[31]); \
6484  MPI_Get_address(&cmdline.NAME_AG, &displs[32]); \
6485  MPI_Get_address(&cmdline.NAME_AH, &displs[33]); \
6486  MPI_Get_address(&cmdline.NAME_AI, &displs[34]); \
6487  MPI_Get_address(&cmdline.NAME_AJ, &displs[35]); \
6488  MPI_Get_address(&cmdline.NAME_AK, &displs[36]); \
6489  MPI_Get_address(&cmdline.NAME_AL, &displs[37]); \
6490  MPI_Get_address(&cmdline.NAME_AM, &displs[38]); \
6491  MPI_Get_address(&cmdline.NAME_AN, &displs[39]); \
6492  MPI_Get_address(&cmdline.NAME_AO, &displs[40]); \
6493  MPI_Get_address(&cmdline.NAME_AP, &displs[41]); \
6494  MPI_Get_address(&cmdline.NAME_AQ, &displs[42]); \
6495  MPI_Get_address(&cmdline.NAME_AR, &displs[43]); \
6496  MPI_Get_address(&cmdline.NAME_AS, &displs[44]); \
6497  MPI_Get_address(&cmdline.NAME_AT, &displs[45]); \
6498  MPI_Get_address(&cmdline.NAME_AU, &displs[46]); \
6499  MPI_Get_address(&cmdline.NAME_AV, &displs[47]); \
6500  MPI_Get_address(&cmdline.NAME_AW, &displs[48]); \
6501  MPI_Get_address(&cmdline.NAME_AX, &displs[49]); \
6502  MPI_Get_address(&cmdline.NAME_AY, &displs[50]); \
6503  MPI_Get_address(&cmdline.NAME_AZ, &displs[51]); \
6504  MPI_Get_address(&cmdline.NAME_BA, &displs[52]); \
6505  MPI_Get_address(&cmdline.NAME_BB, &displs[53]); \
6506  MPI_Get_address(&cmdline.NAME_BC, &displs[54]); \
6507  MPI_Get_address(&cmdline.NAME_BD, &displs[55]); \
6508  MPI_Get_address(&cmdline.NAME_BE, &displs[56]); \
6509  MPI_Get_address(&cmdline.NAME_BF, &displs[57]); \
6510  MPI_Get_address(&cmdline.NAME_BG, &displs[58]); \
6511  MPI_Get_address(&cmdline.NAME_BH, &displs[59]); \
6512  MPI_Get_address(&cmdline.NAME_BI, &displs[60]); \
6513  MPI_Get_address(&cmdline.NAME_BJ, &displs[61]); \
6514  MPI_Get_address(&cmdline.NAME_BK, &displs[62]); \
6515  MPI_Get_address(&cmdline.NAME_BL, &displs[63]); \
6516  MPI_Get_address(&cmdline.NAME_BM, &displs[64]); \
6517  MPI_Get_address(&cmdline.NAME_BN, &displs[65]); \
6518  MPI_Get_address(&cmdline.NAME_BO, &displs[66]); \
6519  MPI_Get_address(&cmdline.NAME_BP, &displs[67]); \
6520  MPI_Get_address(&cmdline.NAME_BQ, &displs[68]); \
6521  MPI_Get_address(&cmdline.NAME_BR, &displs[69]); \
6522  MPI_Get_address(&cmdline.NAME_BS, &displs[70]); \
6523  MPI_Get_address(&cmdline.NAME_BT, &displs[71]); \
6524  MPI_Get_address(&cmdline.NAME_BU, &displs[72]); \
6525  MPI_Get_address(&cmdline.NAME_BV, &displs[73]); \
6526  MPI_Get_address(&cmdline.NAME_BW, &displs[74]); \
6527  MPI_Get_address(&cmdline.NAME_BX, &displs[75]); \
6528  MPI_Get_address(&cmdline.NAME_BY, &displs[76]); \
6529  MPI_Get_address(&cmdline.NAME_BZ, &displs[77]); \
6530  MPI_Get_address(&cmdline.NAME_CA, &displs[78]); \
6531  MPI_Get_address(&cmdline.NAME_CB, &displs[79]); \
6532  MPI_Get_address(&cmdline.NAME_CC, &displs[80]); \
6533  MPI_Get_address(&cmdline.NAME_CD, &displs[81]); \
6534  MPI_Get_address(&cmdline.NAME_CE, &displs[82]); \
6535  MPI_Get_address(&cmdline.NAME_CF, &displs[83]); \
6536  MPI_Get_address(&cmdline.NAME_CG, &displs[84]); \
6537  MPI_Get_address(&cmdline.NAME_CH, &displs[85]); \
6538  MPI_Get_address(&cmdline.NAME_CI, &displs[86]); \
6539  MPI_Get_address(&cmdline.NAME_CJ, &displs[87]); \
6540  MPI_Get_address(&cmdline.NAME_CK, &displs[88]); \
6541  MPI_Get_address(&cmdline.NAME_CL, &displs[89]); \
6542  MPI_Get_address(&cmdline.NAME_CM, &displs[90]); \
6543  MPI_Get_address(&cmdline.NAME_CN, &displs[91]); \
6544  MPI_Get_address(&cmdline.NAME_CO, &displs[92]); \
6545  MPI_Get_address(&cmdline.NAME_CP, &displs[93]); \
6546  MPI_Get_address(&cmdline.NAME_CQ, &displs[94]); \
6547  MPI_Get_address(&cmdline.NAME_CR, &displs[95]); \
6548  MPI_Get_address(&cmdline.NAME_CS, &displs[96]); \
6549  MPI_Get_address(&cmdline.NAME_CT, &displs[97]); \
6550  MPI_Get_address(&cmdline.NAME_CU, &displs[98]); \
6551  MPI_Get_address(&cmdline.NAME_CV, &displs[99]); \
6552  int ivarloop; \
6553  for(ivarloop=99; ivarloop>=0; ivarloop--){ \
6554  displs[ivarloop] -= displs[0]; \
6555  } \
6556  MPI_Type_create_struct(100, blockcounts, displs, types, new_type); \
6557  MPI_Type_commit(new_type); \
6558 }
6559 
6563 #ifdef NOT_INCLUDE_THIS_BEACUSE_IS_THE_PYTHON_SCRIPT
6564 #!/usr/bin/python
6565 
6566 #
6567 # Script to automatically generate macros to define new Hitmap communication
6568 # derived data types for structs, with as many fields as needed.
6569 #
6570 # The result of this script is stored in: hit_comTypeStruct.h
6571 #
6572 # @version 1.0
6573 # @author Javier Fresno Bausela
6574 # @author Arturo Gonzalez-Escribano
6575 # @date Mar 2013
6576 # @date Jun 2013 Changed loop variables for something longer to avoid warnings.
6577 # @date Ago 2015 Add the generation of the license tags
6578 #
6579 #
6580 # This software is provided to enhance knowledge and encourage progress
6581 # in the scientific community and are to be used only for research and
6582 # educational purposes. Any reproduction or use for commercial purpose
6583 # is prohibited without the prior express written permission.
6584 #
6585 # This software is provided "as is" and without any express or implied
6586 # warranties, including, without limitation, the implied warranties of
6587 # merchantability and fitness for a particular purpose.
6588 #
6589 # Copyright (c) 2013, Javier Fresno Bausela
6590 # All Rights Reserved.
6591 #
6592 
6593 
6594 # Imports
6595 import sys
6596 import string
6597 import itertools
6598 
6599 # Config
6600 
6601 # Number of generated macros, we are using the A,B,...,Z,AA,..ZY,ZZ
6602 # names for the variables so the current limit is 26 + 26 * 26 = 702 macros.
6603 NUM_MACROS = 100
6604 
6605 
6606 ##############################################################
6607 
6608 # Generate the letters
6609 one_letter_items = list(string.uppercase)
6610 two_letter_items = [''.join(x) for x in
6611  itertools.product(string.uppercase, repeat=2)]
6613 
6614 # Print a comment
6615 def comment(text):
6616  sys.stdout.write("// ")
6617  sys.stdout.write(text)
6618  sys.stdout.write("\n")
6619 
6620 # Print a multiline comment
6621 def big_comment(text):
6622  sys.stdout.write("/**\n * ")
6623  text = text.replace("\n","\n * ")
6624  sys.stdout.write(text)
6625  sys.stdout.write(" \n */\n")
6626 
6627 # Print a line with a tab and the continue sysmbol
6628 def macro_line(text):
6629  sys.stdout.write("\t" + text + " \\\n")
6630 
6631 # Prints a struct macro for the given number of variables
6632 def print_struct_macro(nvars):
6633 
6634  comment("Macro for " + str(nvars) + " struct elements" )
6635 
6636  # Macro header
6637  sys.stdout.write("#define hit_comTypeStruct"+str(nvars))
6638  sys.stdout.write("(new_type, NATIVE_STRUCT")
6639  for i in range(nvars):
6640  sys.stdout.write(", NAME_"+letters[i]+", COUNT_"+letters[i]+", TYPE_"+letters[i])
6641  sys.stdout.write(") \\\n")
6642  sys.stdout.write("{ \\\n")
6643 
6644  # Native struct
6645  macro_line("NATIVE_STRUCT cmdline;")
6646 
6647  # Block counts
6648  sys.stdout.write("\tint blockcounts[" + str(nvars) + "] = {(COUNT_A)")
6649  for i in range(1,nvars):
6650  sys.stdout.write(", (COUNT_"+letters[i]+")")
6651  sys.stdout.write("}; \\\n")
6652 
6653  # Datatypes
6654  sys.stdout.write("\tMPI_Datatype types[" + str(nvars) + "] = {(TYPE_A)")
6655  for i in range(1,nvars):
6656  sys.stdout.write(", (TYPE_"+letters[i]+")")
6657  sys.stdout.write("}; \\\n")
6658 
6659  # Displacements
6660  macro_line("MPI_Aint displs[" + str(nvars) + "];")
6661  for i in range(nvars):
6662  macro_line("MPI_Get_address(&cmdline.NAME_" +letters[i] + ", &displs["+ str(i) +"]);")
6663 
6664  # Loop for fix displacements
6665  macro_line("int ivarloop;")
6666  macro_line("for(ivarloop=" + str(nvars-1) + "; ivarloop>=0; ivarloop--){")
6667  macro_line("\tdispls[ivarloop] -= displs[0];")
6668  macro_line("}")
6669 
6670  # MPI functions
6671  macro_line("MPI_Type_create_struct(" + str(nvars) + ", blockcounts, displs, types, new_type);")
6672  macro_line("MPI_Type_commit(new_type);")
6673 
6674  sys.stdout.write("} \n")
6675  print
6676 
6677 ##############################################################
6678 
6679 # Change the output
6680 sys.stdout = open('hit_comTypeStruct.h', 'w')
6681 
6682 # Comments
6683 big_comment("Macros to create the MPI Struct Datatypes.\n"
6684 "The script to generate this file is included at the end.\n\n"
6685 "<license>\n"
6686 "</license>\n")
6687 print
6688 
6689 for i in range(1,NUM_MACROS+1):
6691 
6692 # Inlude the file in the .h
6693 big_comment("Python script to generate this file")
6694 print "#ifdef NOT_INCLUDE_THIS_BEACUSE_IS_THE_PYTHON_SCRIPT"
6695 f = open(sys.argv[0])
6696 lines = f.readlines()
6697 for l in lines:
6698  sys.stdout.write(l)
6699 f.close()
6700 print "#endif"
6701 print
6702 
6703 
6704 
6705 
6706 #endif
def print_struct_macro
void print(HitBlockTile selection, const char *fileName)
Definition: luBack.c:241
#define x
list two_letter_items
tuple one_letter_items
#define h(i, j)
Definition: SWpar.c:244