Skip to content

Commit 051e094

Browse files
committed
datatype: Add support for MPI_TYPECLASS_LOGICAL
Signed-off-by: Lisandro Dalcin <[email protected]>
1 parent 1faf0f3 commit 051e094

File tree

6 files changed

+17
-9
lines changed

6 files changed

+17
-9
lines changed

docs/man-openmpi/man3/MPI_Type_match_size.3.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ The function returns an MPI datatype matching a local variable of type
2929
(*typeclass*, *size*). The returned type is a reference (handle) to a
3030
predefined named datatype, not a duplicate. This type cannot be freed.
3131

32-
The value of *typeclass* may be set to one of MPI_TYPECLASS_REAL,
33-
MPI_TYPECLASS_INTEGER, or MPI_TYPECLASS_COMPLEX, corresponding to the
34-
desired datatype.
32+
The value of *typeclass* may be set to one of MPI_TYPECLASS_LOGICAL,
33+
MPI_TYPECLASS_INTEGER, MPI_TYPECLASS_REAL, or MPI_TYPECLASS_COMPLEX,
34+
corresponding to the desired datatype.
3535

3636
MPI_type_match_size can be used to obtain a size-specific type that
3737
matches a Fortran numeric intrinsic type: first call :ref:`MPI_Sizeof` to

ompi/datatype/ompi_datatype.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ BEGIN_C_DECLS
5050
#define OMPI_DATATYPE_FLAG_ANALYZED 0x0400
5151
#define OMPI_DATATYPE_FLAG_MONOTONIC 0x0800
5252
/* Keep trace of the type of the predefined datatypes */
53+
#define OMPI_DATATYPE_FLAG_DATA_BOOL 0x0000 /* TODO: what to do here? */
5354
#define OMPI_DATATYPE_FLAG_DATA_INT 0x1000
5455
#define OMPI_DATATYPE_FLAG_DATA_FLOAT 0x2000
5556
#define OMPI_DATATYPE_FLAG_DATA_COMPLEX 0x3000

ompi/datatype/ompi_datatype_module.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ ompi_predefined_datatype_t ompi_mpi_complex32 = OMPI_DATATYPE_INIT_UNAVAILA
187187
/*
188188
* Fortran datatypes
189189
*/
190-
ompi_predefined_datatype_t ompi_mpi_logical = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL, OMPI_SIZEOF_FORTRAN_LOGICAL, OMPI_ALIGNMENT_FORTRAN_LOGICAL, 0 );
190+
ompi_predefined_datatype_t ompi_mpi_logical = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL, OMPI_SIZEOF_FORTRAN_LOGICAL, OMPI_ALIGNMENT_FORTRAN_LOGICAL, OMPI_DATATYPE_FLAG_DATA_BOOL );
191191
ompi_predefined_datatype_t ompi_mpi_character = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, CHARACTER, 1, OPAL_ALIGNMENT_CHAR, 0 );
192192
ompi_predefined_datatype_t ompi_mpi_integer = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, INTEGER, OMPI_SIZEOF_FORTRAN_INTEGER, OMPI_ALIGNMENT_FORTRAN_INTEGER, OMPI_DATATYPE_FLAG_DATA_INT );
193193
ompi_predefined_datatype_t ompi_mpi_real = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (FLOAT, REAL, OMPI_SIZEOF_FORTRAN_REAL, OMPI_ALIGNMENT_FORTRAN_REAL, OMPI_DATATYPE_FLAG_DATA_FLOAT );
@@ -212,27 +212,27 @@ ompi_predefined_datatype_t ompi_mpi_2dblcplex = OMPI_DATATYPE_INIT_DEFER (2
212212

213213
/* For each of these we figure out, whether it is available -- otherwise it's set to unavailable */
214214
#if OMPI_HAVE_FORTRAN_LOGICAL1
215-
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL1, OMPI_SIZEOF_FORTRAN_LOGICAL1, OMPI_ALIGNMENT_FORTRAN_LOGICAL1, 0);
215+
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL1, OMPI_SIZEOF_FORTRAN_LOGICAL1, OMPI_ALIGNMENT_FORTRAN_LOGICAL1, OMPI_DATATYPE_FLAG_DATA_BOOL);
216216
#else
217217
ompi_predefined_datatype_t ompi_mpi_logical1 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL1, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
218218
#endif
219219
#if OMPI_HAVE_FORTRAN_LOGICAL2
220-
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL2, OMPI_SIZEOF_FORTRAN_LOGICAL2, OMPI_ALIGNMENT_FORTRAN_LOGICAL2, 0);
220+
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL2, OMPI_SIZEOF_FORTRAN_LOGICAL2, OMPI_ALIGNMENT_FORTRAN_LOGICAL2, OMPI_DATATYPE_FLAG_DATA_BOOL);
221221
#else
222222
ompi_predefined_datatype_t ompi_mpi_logical2 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL2, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
223223
#endif
224224
#if OMPI_HAVE_FORTRAN_LOGICAL4
225-
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL4, OMPI_SIZEOF_FORTRAN_LOGICAL4, OMPI_ALIGNMENT_FORTRAN_LOGICAL4, 0);
225+
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL4, OMPI_SIZEOF_FORTRAN_LOGICAL4, OMPI_ALIGNMENT_FORTRAN_LOGICAL4, OMPI_DATATYPE_FLAG_DATA_BOOL);
226226
#else
227227
ompi_predefined_datatype_t ompi_mpi_logical4 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL4, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
228228
#endif
229229
#if OMPI_HAVE_FORTRAN_LOGICAL8
230-
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL8, OMPI_SIZEOF_FORTRAN_LOGICAL8, OMPI_ALIGNMENT_FORTRAN_LOGICAL8, 0);
230+
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL8, OMPI_SIZEOF_FORTRAN_LOGICAL8, OMPI_ALIGNMENT_FORTRAN_LOGICAL8, OMPI_DATATYPE_FLAG_DATA_BOOL);
231231
#else
232232
ompi_predefined_datatype_t ompi_mpi_logical8 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL8, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
233233
#endif
234234
#if OMPI_HAVE_FORTRAN_LOGICAL16
235-
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL16, OMPI_SIZEOF_FORTRAN_LOGICAL16, OMPI_ALIGNMENT_FORTRAN_LOGICAL16, 0);
235+
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN (INT, LOGICAL16, OMPI_SIZEOF_FORTRAN_LOGICAL16, OMPI_ALIGNMENT_FORTRAN_LOGICAL16, OMPI_DATATYPE_FLAG_DATA_BOOL);
236236
#else
237237
ompi_predefined_datatype_t ompi_mpi_logical16 = OMPI_DATATYPE_INIT_UNAVAILABLE (LOGICAL16, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
238238
#endif

ompi/include/mpi.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,6 +1435,7 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub;
14351435
#define MPI_TYPECLASS_INTEGER 1
14361436
#define MPI_TYPECLASS_REAL 2
14371437
#define MPI_TYPECLASS_COMPLEX 3
1438+
#define MPI_TYPECLASS_LOGICAL 4
14381439

14391440
/* Aint helper macros (MPI-3.1) */
14401441
#define MPI_Aint_add(base, disp) ((MPI_Aint) ((char *) (base) + (disp)))

ompi/mpi/c/type_match_size.c.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ PROTOTYPE ERROR_CLASS type_match_size(INT typeclass, INT size, DATATYPE_OUT type
4646
case MPI_TYPECLASS_COMPLEX:
4747
*type = (MPI_Datatype)ompi_datatype_match_size( size, OMPI_DATATYPE_FLAG_DATA_COMPLEX, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
4848
break;
49+
case MPI_TYPECLASS_LOGICAL:
50+
*type = (MPI_Datatype)ompi_datatype_match_size( size, OMPI_DATATYPE_FLAG_DATA_BOOL, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
51+
break;
4952
default:
5053
*type = &ompi_mpi_datatype_null.dt;
5154
}

ompi/mpi/fortran/mpif-h/type_match_size_f.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ void ompi_type_match_size_f(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type,
9797
case MPI_TYPECLASS_COMPLEX:
9898
c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_COMPLEX, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
9999
break;
100+
case MPI_TYPECLASS_LOGICAL:
101+
c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_BOOL, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
102+
break;
100103
default:
101104
c_type = &ompi_mpi_datatype_null.dt;
102105
}

0 commit comments

Comments
 (0)