This source file includes following definitions.
- MPI_Group_range_excl
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 #include "ompi_config.h"
  23 #include <stdio.h>
  24 
  25 #include "ompi/mpi/c/bindings.h"
  26 #include "ompi/runtime/params.h"
  27 #include "ompi/group/group.h"
  28 #include "ompi/errhandler/errhandler.h"
  29 #include "ompi/communicator/communicator.h"
  30 
  31 #if OMPI_BUILD_MPI_PROFILING
  32 #if OPAL_HAVE_WEAK_SYMBOLS
  33 #pragma weak MPI_Group_range_excl = PMPI_Group_range_excl
  34 #endif
  35 #define MPI_Group_range_excl PMPI_Group_range_excl
  36 #endif
  37 
  38 static const char FUNC_NAME[] = "MPI_Group_range_excl";
  39 
  40 
  41 int MPI_Group_range_excl(MPI_Group group, int n_triplets, int ranges[][3],
  42                          MPI_Group *new_group)
  43 {
  44     int err, i, group_size, indx;
  45     int * elements_int_list;
  46 
  47     
  48     if( MPI_PARAM_CHECK ) {
  49         OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
  50         if ( (MPI_GROUP_NULL == group) || (NULL == group) ||
  51              (NULL == new_group) ) {
  52             return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_GROUP,
  53                                           FUNC_NAME);
  54         }
  55 
  56         group_size = ompi_group_size ( group );
  57         elements_int_list = (int *) malloc(sizeof(int) * (group_size+1));
  58         if (NULL == elements_int_list) {
  59             return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_OTHER,
  60                                           FUNC_NAME);
  61         }
  62         for (i = 0; i < group_size; i++) {
  63             elements_int_list[i] = -1;
  64         }
  65 
  66         for (i = 0; i < n_triplets; i++) {
  67             if ((0 > ranges[i][0]) || (ranges[i][0] > group_size)) {
  68                 goto error_rank;
  69             }
  70             if ((0 > ranges[i][1]) || (ranges[i][1] > group_size)) {
  71                 goto error_rank;
  72             }
  73             if (ranges[i][2] == 0) {
  74                 goto error_rank;
  75             }
  76 
  77             if (ranges[i][0] < ranges[i][1]) {
  78                 if (ranges[i][2] < 0) {
  79                     goto error_rank;
  80                 }
  81                 
  82                 for (indx = ranges[i][0]; indx <= ranges[i][1]; indx += ranges[i][2]) {
  83                     
  84                     if (elements_int_list[indx] != -1) {
  85                         goto error_rank;
  86                     }
  87                     elements_int_list[indx] = i;
  88                 }
  89             } else if (ranges[i][0] > ranges[i][1]) {
  90                 if (ranges[i][2] > 0) {
  91                     goto error_rank;
  92                 }
  93                 
  94                 for (indx = ranges[i][0]; indx >= ranges[i][1]; indx += ranges[i][2]) {
  95                     
  96                     if (elements_int_list[indx] != -1) {
  97                         goto error_rank;
  98                     }
  99                     elements_int_list[indx] = i;
 100                 }
 101             } else {
 102                 
 103                 indx = ranges[i][0];
 104                 if (elements_int_list[indx] != -1) {
 105                     goto error_rank;
 106                 }
 107                 elements_int_list[indx] = i;
 108             }
 109         }
 110 
 111         free (elements_int_list);
 112     }
 113 
 114     OPAL_CR_ENTER_LIBRARY();
 115 
 116     err = ompi_group_range_excl(group,n_triplets,ranges,new_group);
 117     OMPI_ERRHANDLER_RETURN(err, MPI_COMM_WORLD,err,FUNC_NAME);
 118 
 119 error_rank:
 120     free(elements_int_list);
 121     return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_RANK, FUNC_NAME);
 122 }