This source file includes following definitions.
- Java_mpi_CartComm_init
- Java_mpi_CartComm_getTopo
- Java_mpi_CartComm_shift
- Java_mpi_CartComm_getCoords
- Java_mpi_CartComm_map
- Java_mpi_CartComm_getRank
- Java_mpi_CartComm_sub
- Java_mpi_CartComm_createDims_1jni
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 #include "ompi_config.h"
  47 
  48 #include <stdlib.h>
  49 #ifdef HAVE_TARGETCONDITIONALS_H
  50 #include <TargetConditionals.h>
  51 #endif
  52 
  53 #include "mpi.h"
  54 #include "mpi_CartComm.h"
  55 #include "mpiJava.h"
  56 
  57 JNIEXPORT void JNICALL Java_mpi_CartComm_init(JNIEnv *env, jclass clazz)
  58 {
  59     ompi_java.CartParmsInit = (*env)->GetMethodID(env,
  60             ompi_java.CartParmsClass, "<init>", "([I[Z[I)V");
  61 
  62     ompi_java.ShiftParmsInit = (*env)->GetMethodID(env,
  63             ompi_java.ShiftParmsClass, "<init>", "(II)V");
  64 }
  65 
  66 JNIEXPORT jobject JNICALL Java_mpi_CartComm_getTopo(
  67         JNIEnv *env, jobject jthis, jlong comm)
  68 {
  69     int maxdims;
  70     int rc = MPI_Cartdim_get((MPI_Comm)comm, &maxdims);
  71 
  72     if(ompi_java_exceptionCheck(env, rc))
  73         return NULL;
  74 
  75     jintArray     dims    = (*env)->NewIntArray(env, maxdims);
  76     jbooleanArray periods = (*env)->NewBooleanArray(env, maxdims);
  77     jintArray     coords  = (*env)->NewIntArray(env, maxdims);
  78 
  79     if(maxdims != 0)
  80     {
  81         jint *jDims, *jCoords;
  82         jboolean *jPeriods;
  83         int  *cDims, *cCoords, *cPeriods;
  84 
  85         ompi_java_getIntArray(env, dims, &jDims, &cDims);
  86         ompi_java_getIntArray(env, coords, &jCoords, &cCoords);
  87         ompi_java_getBooleanArray(env, periods, &jPeriods, &cPeriods);
  88 
  89         rc = MPI_Cart_get((MPI_Comm)comm, maxdims, cDims, cPeriods, cCoords);
  90         ompi_java_exceptionCheck(env, rc);
  91 
  92         ompi_java_releaseIntArray(env, dims, jDims, cDims);
  93         ompi_java_releaseIntArray(env, coords, jCoords, cCoords);
  94         ompi_java_releaseBooleanArray(env, periods, jPeriods, cPeriods);
  95     }
  96 
  97     return (*env)->NewObject(env, ompi_java.CartParmsClass,
  98                              ompi_java.CartParmsInit, dims, periods, coords);
  99 }
 100 
 101 JNIEXPORT jobject JNICALL Java_mpi_CartComm_shift(
 102         JNIEnv *env, jobject jthis, jlong comm, jint direction, jint disp)
 103 {
 104     int sr, dr;
 105     int rc = MPI_Cart_shift((MPI_Comm)comm, direction, disp, &sr, &dr);
 106     ompi_java_exceptionCheck(env, rc);
 107 
 108     return (*env)->NewObject(env, ompi_java.ShiftParmsClass,
 109                              ompi_java.ShiftParmsInit, sr, dr);
 110 }
 111 
 112 JNIEXPORT jintArray JNICALL Java_mpi_CartComm_getCoords(
 113         JNIEnv *env, jobject jthis, jlong comm, jint rank)
 114 {
 115     int maxdims;
 116     int rc = MPI_Cartdim_get((MPI_Comm)comm, &maxdims);
 117 
 118     if(ompi_java_exceptionCheck(env, rc))
 119         return NULL;
 120 
 121     jintArray coords = (*env)->NewIntArray(env, maxdims);
 122     jint *jCoords;
 123     int  *cCoords;
 124     ompi_java_getIntArray(env, coords, &jCoords, &cCoords);
 125 
 126     rc = MPI_Cart_coords((MPI_Comm)comm, rank, maxdims, cCoords);
 127     ompi_java_exceptionCheck(env, rc);
 128 
 129     ompi_java_releaseIntArray(env, coords, jCoords, cCoords);
 130     return coords;
 131 }
 132 
 133 JNIEXPORT jint JNICALL Java_mpi_CartComm_map(
 134         JNIEnv *env, jobject jthis, jlong comm,
 135         jintArray dims, jbooleanArray periods)
 136 {
 137     int nDims = (*env)->GetArrayLength(env, dims);
 138     jint *jDims;
 139     jboolean *jPeriods;
 140     int *cDims, *cPeriods;
 141     ompi_java_getIntArray(env, dims, &jDims, &cDims);
 142     ompi_java_getBooleanArray(env, periods, &jPeriods, &cPeriods);
 143 
 144     int newrank;
 145     int rc = MPI_Cart_map((MPI_Comm)comm, nDims, cDims, cPeriods, &newrank);
 146     ompi_java_exceptionCheck(env, rc);
 147 
 148     ompi_java_forgetIntArray(env, dims, jDims, cDims);
 149     ompi_java_forgetBooleanArray(env, periods, jPeriods, cPeriods);
 150     return newrank;
 151 }
 152 
 153 JNIEXPORT jint JNICALL Java_mpi_CartComm_getRank(
 154         JNIEnv *env, jobject jthis, jlong comm, jintArray coords)
 155 {
 156     jint *jCoords;
 157     int  *cCoords;
 158     ompi_java_getIntArray(env, coords, &jCoords, &cCoords);
 159 
 160     int rank;
 161     int rc = MPI_Cart_rank((MPI_Comm)comm, cCoords, &rank);
 162     ompi_java_exceptionCheck(env, rc);
 163 
 164     ompi_java_forgetIntArray(env, coords, jCoords, cCoords);
 165     return rank;
 166 }
 167 
 168 JNIEXPORT jlong JNICALL Java_mpi_CartComm_sub(
 169         JNIEnv *env, jobject jthis, jlong comm, jbooleanArray remainDims)
 170 {
 171     jboolean *jRemainDims;
 172     int      *cRemainDims;
 173     ompi_java_getBooleanArray(env, remainDims, &jRemainDims, &cRemainDims);
 174 
 175     MPI_Comm newcomm;
 176     int rc = MPI_Cart_sub((MPI_Comm)comm, cRemainDims, &newcomm);
 177     ompi_java_exceptionCheck(env, rc);
 178 
 179     ompi_java_forgetBooleanArray(env, remainDims, jRemainDims, cRemainDims);
 180     return (jlong)newcomm;
 181 }
 182 
 183 JNIEXPORT void JNICALL Java_mpi_CartComm_createDims_1jni(
 184         JNIEnv *env, jclass jthis, jint nNodes, jintArray dims)
 185 {
 186     int   nDims = (*env)->GetArrayLength(env, dims);
 187     jint *jDims;
 188     int  *cDims;
 189     ompi_java_getIntArray(env, dims, &jDims, &cDims);
 190 
 191     int rc = MPI_Dims_create(nNodes, nDims, cDims);
 192     ompi_java_exceptionCheck(env, rc);
 193     ompi_java_releaseIntArray(env, dims, jDims, cDims);
 194 }