void ompi_win_get_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr) { int c_ierr; MPI_Errhandler c_err; MPI_Win c_win = PMPI_Win_f2c(*win); c_ierr = PMPI_Win_get_errhandler(c_win, &c_err); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { *errhandler = PMPI_Errhandler_c2f(c_err); } }
void mpi_group_size_f(MPI_Fint *group, MPI_Fint *size, MPI_Fint *ierr) { ompi_group_t *c_group; OMPI_SINGLE_NAME_DECL(size); /* Make the fortran to c representation conversion */ c_group = MPI_Group_f2c(*group); *ierr = OMPI_INT_2_FINT(MPI_Group_size(c_group, OMPI_SINGLE_NAME_CONVERT(size))); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { OMPI_SINGLE_INT_2_FINT(size); } }
void ompi_error_class_f(MPI_Fint *errorcode, MPI_Fint *errorclass, MPI_Fint *ierr) { int c_ierr; OMPI_SINGLE_NAME_DECL(errorclass); c_ierr = PMPI_Error_class(OMPI_FINT_2_INT(*errorcode), OMPI_SINGLE_NAME_CONVERT(errorclass)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(errorclass); } }
void ompi_file_read_all_end_f(MPI_Fint *fh, char *buf, MPI_Fint *status, MPI_Fint *ierr) { int c_ierr; OMPI_FORTRAN_STATUS_DECLARATION(c_status,c_status2) MPI_File c_fh = MPI_File_f2c(*fh); OMPI_FORTRAN_STATUS_SET_POINTER(c_status,c_status2,status) c_ierr = MPI_File_read_all_end(c_fh, buf, c_status); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); OMPI_FORTRAN_STATUS_RETURN(c_status,c_status2,status,c_ierr) }
void ompi_file_get_amode_f(MPI_Fint *fh, MPI_Fint *amode, MPI_Fint *ierr) { int c_ierr; MPI_File c_fh; OMPI_SINGLE_NAME_DECL(amode); c_fh = MPI_File_f2c(*fh); c_ierr = MPI_File_get_amode(c_fh, OMPI_SINGLE_NAME_CONVERT(amode)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(amode); } }
void ompi_topo_test_f(MPI_Fint *comm, MPI_Fint *topo_type, MPI_Fint *ierr) { int c_ierr; MPI_Comm c_comm; OMPI_SINGLE_NAME_DECL(topo_type); c_comm = PMPI_Comm_f2c(*comm); c_ierr = PMPI_Topo_test(c_comm, OMPI_SINGLE_NAME_CONVERT(topo_type)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(topo_type); } }
void mpi_group_union_f(MPI_Fint *group1, MPI_Fint *group2, MPI_Fint *newgroup, MPI_Fint *ierr) { ompi_group_t *c_group1, *c_group2, *c_newgroup; /* Make the fortran to c representation conversion */ c_group1 = MPI_Group_f2c(*group1); c_group2 = MPI_Group_f2c(*group2); *ierr = OMPI_INT_2_FINT(MPI_Group_union(c_group1, c_group2, &c_newgroup)); /* translate the results from c to fortran */ if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *newgroup = c_newgroup->grp_f_to_c_index; } }
void mpi_comm_set_errhandler_f(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr) { MPI_Comm c_comm; MPI_Errhandler c_errhandler; c_comm = MPI_Comm_f2c(*comm); c_errhandler = MPI_Errhandler_f2c(*errhandler); *ierr = OMPI_INT_2_FINT(MPI_Comm_set_errhandler(c_comm, c_errhandler)); if ( MPI_SUCCESS == OMPI_FINT_2_INT(*ierr) && OMPI_ERRHANDLER_TYPE_PREDEFINED != c_errhandler->eh_mpi_object_type ) { c_errhandler->eh_fortran_function = true ; } }
void mpi_comm_create_errhandler_f(ompi_errhandler_fortran_handler_fn_t *function, MPI_Fint *errhandler, MPI_Fint *ierr) { MPI_Errhandler c_errhandler; /* See the note in src/mpi/f77/prototypes_mpi.h about the use of (void*) for function pointers in this function */ *ierr = OMPI_INT_2_FINT( MPI_Comm_create_errhandler((MPI_Comm_errhandler_fn*)function, &c_errhandler)); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *errhandler = MPI_Errhandler_c2f(c_errhandler); } }
void mpi_status_set_elements_f(MPI_Fint *status, MPI_Fint *datatype, MPI_Fint *count, MPI_Fint *ierr) { MPI_Datatype c_type = MPI_Type_f2c(*datatype); MPI_Status c_status; /* This seems silly, but someone will do it */ if (OMPI_IS_FORTRAN_STATUS_IGNORE(status)) { *ierr = OMPI_INT_2_FINT(MPI_SUCCESS); } else { MPI_Status_f2c( status, &c_status ); *ierr = OMPI_INT_2_FINT(MPI_Status_set_elements(&c_status, c_type, OMPI_FINT_2_INT(*count))); /* If datatype is really being set, then that needs to be converted.... */ if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { MPI_Status_c2f(&c_status, status); } } }
void ompi_op_commutative_f(MPI_Fint *op, MPI_Fint *commute, MPI_Fint *ierr) { int c_ierr; MPI_Op c_op; OMPI_SINGLE_NAME_DECL(commute); c_op = PMPI_Op_f2c(*op); c_ierr = PMPI_Op_commutative(c_op, OMPI_SINGLE_NAME_CONVERT(commute)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(commute); } }
void ompi_get_version_f(MPI_Fint *version, MPI_Fint *subversion, MPI_Fint *ierr) { int c_ierr; OMPI_SINGLE_NAME_DECL(version); OMPI_SINGLE_NAME_DECL(subversion); c_ierr = PMPI_Get_version(OMPI_SINGLE_NAME_CONVERT(version), OMPI_SINGLE_NAME_CONVERT(subversion)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(version); OMPI_SINGLE_INT_2_FINT(subversion); } }
MPI_Fint MPI_Win_c2f(MPI_Win win) { OPAL_CR_NOOP_PROGRESS(); if ( MPI_PARAM_CHECK) { OMPI_ERR_INIT_FINALIZE(FUNC_NAME); /* Note that ompi_win_invalid() explicitly checks for MPI_WIN_NULL, but MPI_WIN_C2F is supposed to treat MPI_WIN_NULL as a valid window (and therefore return a valid Fortran handle for it). Hence, this function should not return an error if MPI_WIN_NULL is passed in. See a big comment in ompi/communicator/communicator.h about this (I know that's not win.h, but the issues are related, and that's where the explanation is). */ if (ompi_win_invalid(win) && MPI_WIN_NULL != win) { return OMPI_INT_2_FINT(-1); } } return OMPI_INT_2_FINT(win->w_f_to_c_index); }
void ompi_type_create_resized_f(MPI_Fint *oldtype, MPI_Aint *lb, MPI_Aint *extent, MPI_Fint *newtype, MPI_Fint *ierr) { int c_ierr; MPI_Datatype c_old = PMPI_Type_f2c(*oldtype); MPI_Datatype c_new; c_ierr = PMPI_Type_create_resized(c_old, *lb, *extent, &c_new); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { *newtype = PMPI_Type_c2f(c_new); } }
void ompi_type_create_f90_real_f(MPI_Fint *p, MPI_Fint *r, MPI_Fint *newtype, MPI_Fint *ierr) { int c_ierr; MPI_Datatype c_new = MPI_Type_f2c(*newtype); c_ierr = MPI_Type_create_f90_real(OMPI_FINT_2_INT(*p), OMPI_FINT_2_INT(*r), &c_new); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { *newtype = MPI_Type_c2f(c_new); } }
void ompi_file_write_at_all_begin_f(MPI_Fint *fh, MPI_Offset *offset, char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *ierr) { int c_ierr; MPI_File c_fh = MPI_File_f2c(*fh); MPI_Datatype c_type = MPI_Type_f2c(*datatype); c_ierr = MPI_File_write_at_all_begin(c_fh, (MPI_Offset) *offset, OMPI_F2C_BOTTOM(buf), OMPI_FINT_2_INT(*count), c_type); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); }
void mpi_bcast_f(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr) { MPI_Comm c_comm; MPI_Datatype c_type; c_comm = MPI_Comm_f2c(*comm); c_type = MPI_Type_f2c(*datatype); *ierr = OMPI_INT_2_FINT(MPI_Bcast(OMPI_F2C_BOTTOM(buffer), OMPI_FINT_2_INT(*count), c_type, OMPI_FINT_2_INT(*root), c_comm)); }
void ompi_errhandler_get_f(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr) { int c_ierr; MPI_Comm c_comm; MPI_Errhandler c_errhandler; c_comm = MPI_Comm_f2c(*comm); c_ierr = MPI_Errhandler_get(c_comm, &c_errhandler); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { *errhandler = MPI_Errhandler_c2f(c_errhandler); } }
void ompi_file_get_atomicity_f(MPI_Fint *fh, ompi_fortran_logical_t *flag, MPI_Fint *ierr) { int c_ierr; MPI_File c_fh; OMPI_LOGICAL_NAME_DECL(flag); c_fh = PMPI_File_f2c(*fh); c_ierr = PMPI_File_get_atomicity(c_fh, OMPI_LOGICAL_SINGLE_NAME_CONVERT(flag)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_LOGICAL(flag); } }
void mpi_info_get_f(MPI_Fint *info, char *key, MPI_Fint *valuelen, char *value, ompi_fortran_logical_t *flag, MPI_Fint *ierr, int key_len, int value_len) { int c_err, ret; MPI_Info c_info; char *c_key = NULL, c_value[MPI_MAX_INFO_VAL + 1]; OMPI_LOGICAL_NAME_DECL(flag); if (OMPI_SUCCESS != (ret = ompi_fortran_string_f2c(key, key_len, &c_key))) { c_err = OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret, FUNC_NAME); *ierr = OMPI_INT_2_FINT(c_err); return; } c_info = MPI_Info_f2c(*info); *ierr = OMPI_INT_2_FINT(MPI_Info_get(c_info, c_key, OMPI_FINT_2_INT(*valuelen), c_value, OMPI_LOGICAL_SINGLE_NAME_CONVERT(flag))); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { OMPI_SINGLE_INT_2_LOGICAL(flag); /* Use the full length of the Fortran string, not *valuelen. See comment in ompi/mpi/f77/strings.c. */ if (OMPI_SUCCESS != (ret = ompi_fortran_string_c2f(c_value, value, value_len))) { c_err = OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret, FUNC_NAME); *ierr = OMPI_INT_2_FINT(c_err); free(c_key); return; } } free(c_key); }
void ompi_dist_graph_neighbors_f(MPI_Fint* comm, MPI_Fint* maxindegree, MPI_Fint* sources, MPI_Fint* sourceweights, MPI_Fint* maxoutdegree, MPI_Fint* destinations, MPI_Fint* destweights, MPI_Fint *ierr) { MPI_Comm c_comm; OMPI_ARRAY_NAME_DECL(sources); OMPI_ARRAY_NAME_DECL(sourceweights); OMPI_ARRAY_NAME_DECL(destinations); OMPI_ARRAY_NAME_DECL(destweights); c_comm = PMPI_Comm_f2c(*comm); OMPI_ARRAY_FINT_2_INT_ALLOC(sources, *maxindegree); if( !OMPI_IS_FORTRAN_UNWEIGHTED(sourceweights) ) { OMPI_ARRAY_FINT_2_INT_ALLOC(sourceweights, *maxindegree); } OMPI_ARRAY_FINT_2_INT_ALLOC(destinations, *maxoutdegree); if( !OMPI_IS_FORTRAN_UNWEIGHTED(destweights) ) { OMPI_ARRAY_FINT_2_INT_ALLOC(destweights, *maxoutdegree); } *ierr = OMPI_INT_2_FINT(PMPI_Dist_graph_neighbors(c_comm, OMPI_FINT_2_INT(*maxindegree), OMPI_ARRAY_NAME_CONVERT(sources), OMPI_IS_FORTRAN_UNWEIGHTED(sourceweights) ? MPI_UNWEIGHTED : OMPI_ARRAY_NAME_CONVERT(sourceweights), OMPI_FINT_2_INT(*maxoutdegree), OMPI_ARRAY_NAME_CONVERT(destinations), OMPI_IS_FORTRAN_UNWEIGHTED(destweights) ? MPI_UNWEIGHTED : OMPI_ARRAY_NAME_CONVERT(destweights))); if (OMPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { OMPI_ARRAY_INT_2_FINT(sources, *maxindegree); if( !OMPI_IS_FORTRAN_UNWEIGHTED(sourceweights) ) { OMPI_ARRAY_INT_2_FINT(sourceweights, *maxindegree); } OMPI_ARRAY_INT_2_FINT(destinations, *maxoutdegree); if( !OMPI_IS_FORTRAN_UNWEIGHTED(destweights) ) { OMPI_ARRAY_INT_2_FINT(destweights, *maxoutdegree); } } else { OMPI_ARRAY_FINT_2_INT_CLEANUP(sources); if( !OMPI_IS_FORTRAN_UNWEIGHTED(sourceweights) ) { OMPI_ARRAY_FINT_2_INT_CLEANUP(sourceweights); } OMPI_ARRAY_FINT_2_INT_CLEANUP(destinations); if( !OMPI_IS_FORTRAN_UNWEIGHTED(destweights) ) { OMPI_ARRAY_FINT_2_INT_CLEANUP(destweights); } } }
void mpi_dims_create_f(MPI_Fint *nnodes, MPI_Fint *ndims, MPI_Fint *dims, MPI_Fint *ierr) { OMPI_ARRAY_NAME_DECL(dims); OMPI_ARRAY_FINT_2_INT(dims, *ndims); *ierr = OMPI_INT_2_FINT(MPI_Dims_create(OMPI_FINT_2_INT(*nnodes), OMPI_FINT_2_INT(*ndims), OMPI_ARRAY_NAME_CONVERT(dims))); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { OMPI_ARRAY_INT_2_FINT(dims, *ndims); } else { OMPI_ARRAY_FINT_2_INT_CLEANUP(dims); } }
void mpi_issend_f(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) { MPI_Datatype c_type = MPI_Type_f2c(*datatype); MPI_Request c_req; MPI_Comm c_comm; c_comm = MPI_Comm_f2c (*comm); *ierr = OMPI_INT_2_FINT(MPI_Issend(OMPI_F2C_BOTTOM(buf), OMPI_FINT_2_INT(*count), c_type, OMPI_FINT_2_INT(*dest), OMPI_FINT_2_INT(*tag), c_comm, &c_req)); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *request = MPI_Request_c2f(c_req); } }
void ompi_file_iwrite_all_f(MPI_Fint *fh, char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *request, MPI_Fint *ierr) { int c_ierr; MPI_File c_fh = PMPI_File_f2c(*fh); MPI_Datatype c_type = PMPI_Type_f2c(*datatype); MPI_Request c_request; c_ierr = PMPI_File_iwrite_all(c_fh, OMPI_F2C_BOTTOM(buf), OMPI_FINT_2_INT(*count), c_type, &c_request); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { *request = PMPI_Request_c2f(c_request); } }
void ompi_group_rank_f(MPI_Fint *group, MPI_Fint *rank, MPI_Fint *ierr) { int c_ierr; ompi_group_t *c_group; OMPI_SINGLE_NAME_DECL(rank); /* Make the fortran to c representation conversion */ c_group = PMPI_Group_f2c(*group); c_ierr = PMPI_Group_rank(c_group, OMPI_SINGLE_NAME_CONVERT(rank)); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); if (MPI_SUCCESS == c_ierr) { OMPI_SINGLE_INT_2_FINT(rank); } }
void mpi_type_set_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr) { int c_err; MPI_Datatype c_type = MPI_Type_f2c(*type); /* This stuff is very confusing. Be sure to see the comment at the top of src/attributes/attributes.c. */ c_err = ompi_attr_set_fortran_mpi2(TYPE_ATTR, c_type, &c_type->d_keyhash, OMPI_FINT_2_INT(*type_keyval), *attribute_val, false, true); *ierr = OMPI_INT_2_FINT(c_err); }
void mpi_publish_name_f(char *service_name, MPI_Fint *info, char *port_name, MPI_Fint *ierr, int service_name_len, int port_name_len) { MPI_Info c_info; char *c_service_name; char *c_port_name; c_info = MPI_Info_f2c(*info); ompi_fortran_string_f2c(service_name, service_name_len, &c_service_name); ompi_fortran_string_f2c(port_name, port_name_len, &c_port_name); *ierr = OMPI_INT_2_FINT(MPI_Publish_name(c_service_name, c_info, c_port_name)); free ( c_service_name); free ( c_port_name); }
void mpi_file_iwrite_at_f(MPI_Fint *fh, MPI_Offset *offset, char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *request, MPI_Fint *ierr) { MPI_File c_fh = MPI_File_f2c(*fh); MPI_Datatype c_type = MPI_Type_f2c(*datatype); MPI_Request c_request; *ierr = OMPI_INT_2_FINT(MPI_File_iwrite_at(c_fh, (MPI_Offset) *offset, OMPI_F2C_BOTTOM(buf), OMPI_FINT_2_INT(*count), c_type, &c_request)); if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *request = MPI_Request_c2f(c_request); } }
void mpi_type_hvector_f(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr) { MPI_Datatype c_oldtype, c_newtype; c_oldtype = MPI_Type_f2c(*oldtype); *ierr = OMPI_INT_2_FINT(MPI_Type_hvector(OMPI_FINT_2_INT(*count), OMPI_FINT_2_INT(*blocklength), (MPI_Aint)*stride, c_oldtype, &c_newtype)); if( MPI_SUCCESS == OMPI_FINT_2_INT(*ierr) ) { *newtype = MPI_Type_c2f(c_newtype); } }
void ompi_compare_and_swap_f(char *origin_addr, char *compare_addr, char *result_addr, MPI_Fint *datatype, MPI_Fint *target_rank, MPI_Aint *target_disp, MPI_Fint *win, MPI_Fint *ierr) { int c_ierr; MPI_Datatype c_datatype = PMPI_Type_f2c(*datatype); MPI_Win c_win = PMPI_Win_f2c(*win); c_ierr = PMPI_Compare_and_swap(OMPI_F2C_BOTTOM(origin_addr), OMPI_F2C_BOTTOM(compare_addr), OMPI_F2C_BOTTOM(result_addr), c_datatype, OMPI_FINT_2_INT(*target_rank), *target_disp, c_win); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); }