void ompi_dist_graph_create_f(MPI_Fint *comm_old, MPI_Fint *n, MPI_Fint *sources, MPI_Fint *degrees, MPI_Fint *destinations, MPI_Fint *weights, MPI_Fint *info, ompi_fortran_logical_t *reorder, MPI_Fint *comm_graph, MPI_Fint *ierr) { MPI_Comm c_comm_old, c_comm_graph; int count = 0, i; MPI_Info c_info; OMPI_ARRAY_NAME_DECL(sources); OMPI_ARRAY_NAME_DECL(degrees); OMPI_ARRAY_NAME_DECL(destinations); OMPI_ARRAY_NAME_DECL(weights); c_comm_old = MPI_Comm_f2c(*comm_old); c_info = MPI_Info_f2c(*info); OMPI_ARRAY_FINT_2_INT(sources, *n); OMPI_ARRAY_FINT_2_INT(degrees, *n); for( i = 0; i < OMPI_FINT_2_INT(*n); i++ ) count += OMPI_ARRAY_NAME_CONVERT(degrees)[i]; OMPI_ARRAY_FINT_2_INT(destinations, count); if( !OMPI_IS_FORTRAN_UNWEIGHTED(weights) ) { OMPI_ARRAY_FINT_2_INT(weights, count); } *ierr = OMPI_INT_2_FINT(MPI_Dist_graph_create(c_comm_old, OMPI_FINT_2_INT(*n), OMPI_ARRAY_NAME_CONVERT(sources), OMPI_ARRAY_NAME_CONVERT(degrees), OMPI_ARRAY_NAME_CONVERT(destinations), OMPI_IS_FORTRAN_UNWEIGHTED(weights) ? MPI_UNWEIGHTED : OMPI_ARRAY_NAME_CONVERT(weights), c_info, OMPI_LOGICAL_2_INT(*reorder), &c_comm_graph)); if (OMPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *comm_graph = MPI_Comm_c2f(c_comm_graph); } OMPI_ARRAY_FINT_2_INT_CLEANUP(sources); OMPI_ARRAY_FINT_2_INT_CLEANUP(degrees); OMPI_ARRAY_FINT_2_INT_CLEANUP(destinations); if( !OMPI_IS_FORTRAN_UNWEIGHTED(weights) ) { OMPI_ARRAY_FINT_2_INT_CLEANUP(weights); } }
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 ompi_dist_graph_create_adjacent_f(MPI_Fint *comm_old, MPI_Fint *indegree, MPI_Fint *sources, MPI_Fint *sourceweights, MPI_Fint *outdegree, MPI_Fint *destinations, MPI_Fint *destweights, MPI_Fint *info, ompi_fortran_logical_t *reorder, MPI_Fint *comm_graph, MPI_Fint *ierr) { MPI_Info c_info; MPI_Comm c_comm_old, c_comm_graph; const int *c_destweights, *c_sourceweights; OMPI_ARRAY_NAME_DECL(sources); OMPI_ARRAY_NAME_DECL(sourceweights); OMPI_ARRAY_NAME_DECL(destinations); OMPI_ARRAY_NAME_DECL(destweights); c_comm_old = MPI_Comm_f2c(*comm_old); c_info = MPI_Info_f2c(*info); OMPI_ARRAY_FINT_2_INT(sources, *indegree); if (OMPI_IS_FORTRAN_UNWEIGHTED(sourceweights)) { c_sourceweights = MPI_UNWEIGHTED; } else if (OMPI_IS_FORTRAN_WEIGHTS_EMPTY(sourceweights)) { c_sourceweights = MPI_WEIGHTS_EMPTY; } else { OMPI_ARRAY_FINT_2_INT(sourceweights, *indegree); c_sourceweights = OMPI_ARRAY_NAME_CONVERT(sourceweights); } OMPI_ARRAY_FINT_2_INT(destinations, *outdegree); if (OMPI_IS_FORTRAN_UNWEIGHTED(destweights)) { c_destweights = MPI_UNWEIGHTED; } else if (OMPI_IS_FORTRAN_WEIGHTS_EMPTY(destweights)) { c_destweights = MPI_WEIGHTS_EMPTY; } else { OMPI_ARRAY_FINT_2_INT(destweights, *indegree); c_destweights = OMPI_ARRAY_NAME_CONVERT(destweights); } *ierr = OMPI_INT_2_FINT(MPI_Dist_graph_create_adjacent(c_comm_old, OMPI_FINT_2_INT(*indegree), OMPI_ARRAY_NAME_CONVERT(sources), c_sourceweights, OMPI_FINT_2_INT(*outdegree), OMPI_ARRAY_NAME_CONVERT(destinations), c_destweights, c_info, OMPI_LOGICAL_2_INT(*reorder), &c_comm_graph)); if (OMPI_SUCCESS == OMPI_FINT_2_INT(*ierr)) { *comm_graph = MPI_Comm_c2f(c_comm_graph); } OMPI_ARRAY_FINT_2_INT_CLEANUP(sources); if( MPI_UNWEIGHTED != c_sourceweights && MPI_WEIGHTS_EMPTY != c_sourceweights ) { OMPI_ARRAY_FINT_2_INT_CLEANUP(sourceweights); } OMPI_ARRAY_FINT_2_INT_CLEANUP(destinations); if( MPI_UNWEIGHTED != c_destweights && MPI_WEIGHTS_EMPTY != c_destweights ) { OMPI_ARRAY_FINT_2_INT_CLEANUP(destweights); } }