Added an option to quickly regenerate shared nodes for linearly partitioned meshes...
authorIsaac Dooley <idooley2@illinois.edu>
Thu, 19 Mar 2009 21:35:31 +0000 (21:35 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Thu, 19 Mar 2009 21:35:31 +0000 (21:35 +0000)
src/libs/ck-libs/ParFUM/import.C

index 7555c24da3072ead09b0910924359952c9ca987a..b57f48f845e32d7ba02668f52ba6bf0d30b24a23 100644 (file)
@@ -61,12 +61,19 @@ void ParFUM_recreateSharedNodes(int meshid, int dim, MPI_Comm newComm) {
 
   /// The lowest partition # to which I send my coordinates(wraps around)
   int sendLowerBound;
-    if(nParts %2==0){
+  if(nParts %2==0){
     sendLowerBound = rank - (nParts/2) + ((rank+1)%2);
   } else {
     sendLowerBound = rank - (nParts/2);
   }
-
+  
+  // Special case optimization for when the mesh is generated in such a way that only neighboring partitions share nodes
+  // look for command line argument
+#ifdef SHARED_NODES_ONLY_NEIGHBOR
+#warning "ParFUM_recreateSharedNodes only allows adjacent partitions(rank +/- 1) to have shared nodes"
+  sendUpperBound = rank + 1;
+  sendLowerBound = rank - 1;
+#endif
 
   for (int i=rank+1; i<=sendUpperBound; i++) { //send nodeCoords to rank i
     MPI_Send(nodeCoords, dim*numNodes, MPI_DOUBLE, i%nParts, coord_msg_tag, comm);
@@ -164,8 +171,11 @@ void ParFUM_recreateSharedNodes(int meshid, int dim, MPI_Comm newComm) {
 
   //printf("After recreating shared nodes %d \n",rank);
   //shared.print();
-       
+#ifdef SHARED_NODES_ONLY_NEIGHBOR
+  CkAssert(send_count + recv_count == 2);
+#else
   CkAssert(send_count + recv_count == nParts-1);
+#endif
 
   // Clean up
   free(nodeCoords);