This source file includes following definitions.
- ompi_type_match_size_f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include "ompi_config.h"
24
25 #include "ompi/mpi/fortran/mpif-h/bindings.h"
26 #include "ompi/mpi/fortran/base/constants.h"
27 #include "ompi/datatype/ompi_datatype.h"
28 #include "ompi/datatype/ompi_datatype_internal.h"
29 #include "ompi/errhandler/errhandler.h"
30 #include "ompi/communicator/communicator.h"
31 #include "ompi/runtime/params.h"
32
33 #if OMPI_BUILD_MPI_PROFILING
34 #if OPAL_HAVE_WEAK_SYMBOLS
35 #pragma weak PMPI_TYPE_MATCH_SIZE = ompi_type_match_size_f
36 #pragma weak pmpi_type_match_size = ompi_type_match_size_f
37 #pragma weak pmpi_type_match_size_ = ompi_type_match_size_f
38 #pragma weak pmpi_type_match_size__ = ompi_type_match_size_f
39
40 #pragma weak PMPI_Type_match_size_f = ompi_type_match_size_f
41 #pragma weak PMPI_Type_match_size_f08 = ompi_type_match_size_f
42 #else
43 OMPI_GENERATE_F77_BINDINGS (PMPI_TYPE_MATCH_SIZE,
44 pmpi_type_match_size,
45 pmpi_type_match_size_,
46 pmpi_type_match_size__,
47 pompi_type_match_size_f,
48 (MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr),
49 (typeclass, size, type, ierr) )
50 #endif
51 #endif
52
53 #if OPAL_HAVE_WEAK_SYMBOLS
54 #pragma weak MPI_TYPE_MATCH_SIZE = ompi_type_match_size_f
55 #pragma weak mpi_type_match_size = ompi_type_match_size_f
56 #pragma weak mpi_type_match_size_ = ompi_type_match_size_f
57 #pragma weak mpi_type_match_size__ = ompi_type_match_size_f
58
59 #pragma weak MPI_Type_match_size_f = ompi_type_match_size_f
60 #pragma weak MPI_Type_match_size_f08 = ompi_type_match_size_f
61 #else
62 #if ! OMPI_BUILD_MPI_PROFILING
63 OMPI_GENERATE_F77_BINDINGS (MPI_TYPE_MATCH_SIZE,
64 mpi_type_match_size,
65 mpi_type_match_size_,
66 mpi_type_match_size__,
67 ompi_type_match_size_f,
68 (MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr),
69 (typeclass, size, type, ierr) )
70 #else
71 #define ompi_type_match_size_f pompi_type_match_size_f
72 #endif
73 #endif
74
75 static const char FUNC_NAME[] = "MPI_Type_match_size_f";
76
77
78
79
80 void ompi_type_match_size_f(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr)
81 {
82 int c_ierr;
83 MPI_Datatype c_type;
84 int c_size = OMPI_FINT_2_INT( *size );
85
86 if (MPI_PARAM_CHECK) {
87 OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
88 }
89
90 switch( OMPI_FINT_2_INT(*typeclass) ) {
91 case MPI_TYPECLASS_REAL:
92 c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_FLOAT, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
93 break;
94 case MPI_TYPECLASS_INTEGER:
95 c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_INT, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
96 break;
97 case MPI_TYPECLASS_COMPLEX:
98 c_type = (MPI_Datatype)ompi_datatype_match_size( c_size, OMPI_DATATYPE_FLAG_DATA_COMPLEX, OMPI_DATATYPE_FLAG_DATA_FORTRAN );
99 break;
100 default:
101 c_type = &ompi_mpi_datatype_null.dt;
102 }
103 *type = PMPI_Type_c2f( c_type );
104 if ( c_type != &ompi_mpi_datatype_null.dt ) {
105 c_ierr = MPI_SUCCESS;
106 } else {
107 c_ierr = MPI_ERR_ARG;
108 (void)OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
109 }
110 if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
111 }