@@ -42,6 +42,9 @@ PROTOTYPE ERROR_CLASS type_create_subarray(INT ndims,
4242 DATATYPE_OUT newtype )
4343{
4444 int32_t i , rc ;
45+ int * isize_array = NULL ;
46+ int * isubsize_array = NULL ;
47+ int * istart_array = NULL ;
4548
4649 MEMCHECKER (
4750 memchecker_datatype (oldtype );
@@ -67,14 +70,47 @@ PROTOTYPE ERROR_CLASS type_create_subarray(INT ndims,
6770 }
6871 }
6972
70- rc = ompi_datatype_create_subarray ( ndims , size_array , subsize_array , start_array ,
73+ /* TODO:BIGCOUNT: Need to embiggen ompi_datatype_create_subarray */
74+
75+ #if OMPI_BIGCOUNT_SRC
76+ isize_array = (int * )malloc (ndims * sizeof (int ));
77+ if (NULL == isize_array ) {
78+ return OMPI_ERRHANDLER_NOHANDLE_INVOKE (MPI_ERR_NO_MEM , FUNC_NAME );
79+ }
80+ isubsize_array = (int * )malloc (ndims * sizeof (int ));
81+ if (NULL == isubsize_array ) {
82+ free (isize_array );
83+ return OMPI_ERRHANDLER_NOHANDLE_INVOKE (MPI_ERR_NO_MEM , FUNC_NAME );
84+ }
85+ istart_array = (int * )malloc (ndims * sizeof (int ));
86+ if (NULL == istart_array ) {
87+ free (isize_array );
88+ free (isubsize_array );
89+ return OMPI_ERRHANDLER_NOHANDLE_INVOKE (MPI_ERR_NO_MEM , FUNC_NAME );
90+ }
91+ for (int ii = 0 ; ii < ndims ; ii ++ ) {
92+ isize_array [ii ] = (int )size_array [ii ];
93+ isubsize_array [ii ] = (int )subsize_array [ii ];
94+ istart_array [ii ] = (int )start_array [ii ];
95+ }
96+ #else
97+ isize_array = (int * )size_array ;
98+ isubsize_array = (int * )subsize_array ;
99+ istart_array = (int * )start_array ;
100+ #endif
101+ rc = ompi_datatype_create_subarray ( ndims , isize_array , isubsize_array , istart_array ,
71102 order , oldtype , newtype );
72103 if ( OMPI_SUCCESS == rc ) {
73- const int * a_i [5 ] = {& ndims , size_array , subsize_array , start_array , & order };
104+ const int * a_i [5 ] = {& ndims , isize_array , isubsize_array , istart_array , & order };
74105
75106 ompi_datatype_set_args ( * newtype , 3 * ndims + 2 , a_i , 0 , NULL , 1 , & oldtype ,
76107 MPI_COMBINER_SUBARRAY );
77108 }
78109
110+ #if OMPI_BIGCOUNT_SRC
111+ free (isize_array );
112+ free (isubsize_array );
113+ free (istart_array );
114+ #endif
79115 OMPI_ERRHANDLER_NOHANDLE_RETURN (rc , rc , FUNC_NAME );
80116}
0 commit comments