[cig-commits] [commit] master: Fix sweep collection MPI datatype (b5f63a4)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Wed Oct 8 17:05:30 PDT 2014


Repository : https://github.com/geodynamics/vc

On branch  : master
Link       : https://github.com/geodynamics/vc/compare/23464fca3efa2b6ad7ee0ce8f60c225b18b49741...e4325192ad1118379f46ba66899cb98143d09e04

>---------------------------------------------------------------

commit b5f63a47147afa2c32f89b17052421b047174313
Author: Eric Heien <emheien at ucdavis.edu>
Date:   Wed Sep 24 16:21:36 2014 -0700

    Fix sweep collection MPI datatype


>---------------------------------------------------------------

b5f63a47147afa2c32f89b17052421b047174313
 src/core/VCBlock.h  |  5 +++--
 src/core/VCComm.cpp | 17 ++++++++++-------
 src/core/VCComm.h   |  2 +-
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/core/VCBlock.h b/src/core/VCBlock.h
index 6522be7..7438f58 100644
--- a/src/core/VCBlock.h
+++ b/src/core/VCBlock.h
@@ -62,8 +62,9 @@ enum BlockValOp {
 };
 
 struct BlockSweepVals {
-    double      slip, init_shear, init_normal, final_shear, final_normal;
-    BlockID     block_id;
+    double          slip, init_shear, init_normal, final_shear, final_normal;
+    unsigned int    sweep_num;
+    BlockID         element_id;
 };
 
 typedef struct BlockSweepVals BlockSweepVals;
diff --git a/src/core/VCComm.cpp b/src/core/VCComm.cpp
index e4c20c0..bc071b0 100644
--- a/src/core/VCComm.cpp
+++ b/src/core/VCComm.cpp
@@ -166,9 +166,9 @@ int VCComm::broadcastValue(const int &bval) {
  */
 VCComm::VCComm(void) {
 #ifdef MPI_C_FOUND
-    int             block_lengths[2];
-    MPI_Aint        displacements[2];
-    MPI_Datatype    datatypes[2];
+    int             block_lengths[3];
+    MPI_Aint        displacements[3];
+    MPI_Datatype    datatypes[3];
 
     updateFieldCounts = updateFieldDisps = NULL;
     updateFieldSendBuf = updateFieldRecvBuf = NULL;
@@ -193,13 +193,16 @@ VCComm::VCComm(void) {
     // Register BlockSweepVals datatype
     block_lengths[0] = 5;
     block_lengths[1] = 1;
+    block_lengths[2] = 1;
     displacements[0] = 0;
     displacements[1] = 5*sizeof(double);
+    displacements[1] = 5*sizeof(double)+sizeof(unsigned int);
     datatypes[0] = MPI_DOUBLE;
-    datatypes[1] = MPI_INT;
+    datatypes[1] = MPI_UNSIGNED;
+    datatypes[2] = MPI_INT;
 
-    MPI_Type_struct(2, block_lengths, displacements, datatypes, &block_sweep_type);
-    MPI_Type_commit(&block_sweep_type);
+    MPI_Type_struct(3, block_lengths, displacements, datatypes, &element_sweep_type);
+    MPI_Type_commit(&element_sweep_type);
 #endif
 }
 
@@ -230,6 +233,6 @@ VCComm::~VCComm(void) {
     MPI_Op_free(&bv_min_op);
     MPI_Op_free(&bv_max_op);
     MPI_Op_free(&bv_sum_op);
-    MPI_Type_free(&block_sweep_type);
+    MPI_Type_free(&element_sweep_type);
 #endif
 }
diff --git a/src/core/VCComm.h b/src/core/VCComm.h
index e4ec7f8..72afd96 100644
--- a/src/core/VCComm.h
+++ b/src/core/VCComm.h
@@ -53,7 +53,7 @@ class VCComm : virtual public SimTimer {
         MPI_Op                      bv_min_op, bv_max_op, bv_sum_op;
 
         //! Registered MPI datatype for the block-sweep data structure
-        MPI_Datatype                block_sweep_type;
+        MPI_Datatype                element_sweep_type;
 #endif
 
     public:



More information about the CIG-COMMITS mailing list