- if(!comm_lookup){
- comm_lookup = xbt_dict_new_homogeneous(NULL);
- smpi_comm_c2f(MPI_COMM_WORLD);
- group_lookup = xbt_dict_new_homogeneous(NULL);
- request_lookup = xbt_dict_new_homogeneous(NULL);
- datatype_lookup = xbt_dict_new_homogeneous(NULL);
- win_lookup = xbt_dict_new_homogeneous(NULL);
- info_lookup = xbt_dict_new_homogeneous(NULL);
- smpi_type_c2f(MPI_BYTE);//MPI_BYTE
- smpi_type_c2f(MPI_CHAR);//MPI_CHARACTER
- #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
- smpi_type_c2f(MPI_INT);//MPI_LOGICAL
- smpi_type_c2f(MPI_INT);//MPI_INTEGER
- #else
- smpi_type_c2f(MPI_LONG);//MPI_LOGICAL
- smpi_type_c2f(MPI_LONG);//MPI_INTEGER
- #endif
- smpi_type_c2f(MPI_INT8_T);//MPI_INTEGER1
- smpi_type_c2f(MPI_INT16_T);//MPI_INTEGER2
- smpi_type_c2f(MPI_INT32_T);//MPI_INTEGER4
- smpi_type_c2f(MPI_INT64_T);//MPI_INTEGER8
- smpi_type_c2f(MPI_FLOAT);//MPI_REAL
- smpi_type_c2f(MPI_FLOAT);//MPI_REAL4
- smpi_type_c2f(MPI_DOUBLE);//MPI_REAL8
- smpi_type_c2f(MPI_DOUBLE);//MPI_DOUBLE_PRECISION
- smpi_type_c2f(MPI_C_FLOAT_COMPLEX);//MPI_COMPLEX
- smpi_type_c2f(MPI_C_DOUBLE_COMPLEX);//MPI_DOUBLE_COMPLEX
- #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
- smpi_type_c2f(MPI_2INT);//MPI_2INTEGER
- #else
- smpi_type_c2f(MPI_2LONG);//MPI_2INTEGER
- #endif
- smpi_type_c2f(MPI_UINT8_T);//MPI_LOGICAL1
- smpi_type_c2f(MPI_UINT16_T);//MPI_LOGICAL2
- smpi_type_c2f(MPI_UINT32_T);//MPI_LOGICAL4
- smpi_type_c2f(MPI_UINT64_T);//MPI_LOGICAL8
- smpi_type_c2f(MPI_2FLOAT);//MPI_2REAL
- smpi_type_c2f(MPI_2DOUBLE);//MPI_2DOUBLE_PRECISION
- smpi_type_c2f(MPI_UINT64_T);//MPI_AINT
- smpi_type_c2f(MPI_UINT64_T);//MPI_OFFSET
- smpi_type_c2f(MPI_UINT64_T);//MPI_COUNT
- smpi_type_c2f(MPI_DATATYPE_NULL);//MPI_REAL16
- smpi_type_c2f(MPI_DATATYPE_NULL);//MPI_COMPLEX8
- smpi_type_c2f(MPI_DATATYPE_NULL);//MPI_COMPLEX16
- smpi_type_c2f(MPI_DATATYPE_NULL);//MPI_COMPLEX32
- smpi_type_c2f(MPI_DATATYPE_NULL);//MPI_PACKED
- op_lookup = xbt_dict_new_homogeneous(NULL);
- smpi_op_c2f(MPI_MAX);
- smpi_op_c2f(MPI_MIN);
- smpi_op_c2f(MPI_MAXLOC);
- smpi_op_c2f(MPI_MINLOC);
- smpi_op_c2f(MPI_SUM);
- smpi_op_c2f(MPI_PROD);
- smpi_op_c2f(MPI_LAND);
- smpi_op_c2f(MPI_LOR);
- smpi_op_c2f(MPI_LXOR);
- smpi_op_c2f(MPI_BAND);
- smpi_op_c2f(MPI_BOR);
- smpi_op_c2f(MPI_BXOR);
+ if(simgrid::smpi::F2C::lookup() == nullptr){
+ MPI_COMM_WORLD->add_f();
+ MPI_BYTE->add_f();//MPI_BYTE
+ MPI_CHAR->add_f();//MPI_CHARACTER
+#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
+ MPI_C_BOOL->add_f();//MPI_LOGICAL
+ MPI_INT->add_f();//MPI_INTEGER
+#else
+ MPI_C_BOOL->add_f();//MPI_LOGICAL
+ MPI_LONG->add_f();//MPI_INTEGER
+#endif
+ MPI_INT8_T->add_f();//MPI_INTEGER1
+ MPI_INT16_T->add_f();//MPI_INTEGER2
+ MPI_INT32_T->add_f();//MPI_INTEGER4
+ MPI_INT64_T->add_f();//MPI_INTEGER8
+ MPI_REAL->add_f();//MPI_REAL
+ MPI_REAL4->add_f();//MPI_REAL4
+ MPI_REAL8->add_f();//MPI_REAL8
+ MPI_DOUBLE->add_f();//MPI_DOUBLE_PRECISION
+ MPI_C_FLOAT_COMPLEX->add_f();//MPI_COMPLEX
+ MPI_C_DOUBLE_COMPLEX->add_f();//MPI_DOUBLE_COMPLEX
+#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
+ MPI_2INT->add_f();//MPI_2INTEGER
+#else
+ MPI_2LONG->add_f();//MPI_2INTEGER
+#endif
+ MPI_UINT8_T->add_f();//MPI_LOGICAL1
+ MPI_UINT16_T->add_f();//MPI_LOGICAL2
+ MPI_UINT32_T->add_f();//MPI_LOGICAL4
+ MPI_UINT64_T->add_f();//MPI_LOGICAL8
+ MPI_2FLOAT->add_f();//MPI_2REAL
+ MPI_2DOUBLE->add_f();//MPI_2DOUBLE_PRECISION
+ MPI_PTR->add_f();//MPI_AINT
+ MPI_OFFSET->add_f();//MPI_OFFSET
+ MPI_AINT->add_f();//MPI_COUNT
+ MPI_REAL16->add_f();//MPI_REAL16
+ MPI_PACKED->add_f();//MPI_PACKED
+
+ MPI_MAX->add_f();
+ MPI_MIN->add_f();
+ MPI_MAXLOC->add_f();
+ MPI_MINLOC->add_f();
+ MPI_SUM->add_f();
+ MPI_PROD->add_f();
+ MPI_LAND->add_f();
+ MPI_LOR->add_f();
+ MPI_LXOR->add_f();
+ MPI_BAND->add_f();
+ MPI_BOR->add_f();
+ MPI_BXOR->add_f();