Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp	(revision 1379)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp	(revision 1460)
@@ -24,4 +24,5 @@
 ::MPI_Datatype MPI_UNSIGNED_LONG_STD = MPI_UNSIGNED_LONG;
 ::MPI_Datatype MPI_UNSIGNED_CHAR_STD = MPI_UNSIGNED_CHAR;
+::MPI_Datatype MPI_UINT64_T_STD = MPI_UINT64_T;
 
 #undef MPI_INT
@@ -32,4 +33,5 @@
 #undef MPI_UNSIGNED_LONG
 #undef MPI_UNSIGNED_CHAR
+#undef MPI_UINT64_T
 
 
@@ -37,29 +39,10 @@
 ::MPI_Op MPI_MAX_STD = MPI_MAX;
 ::MPI_Op MPI_MIN_STD = MPI_MIN;
+::MPI_Op MPI_LOR_STD = MPI_LOR;
 
 #undef MPI_SUM
 #undef MPI_MAX
 #undef MPI_MIN
-
-
-/*#undef MPI_INT
-#undef MPI_FLOAT
-#undef MPI_DOUBLE
-#undef MPI_CHAR
-#undef MPI_LONG
-#undef MPI_UNSIGNED_LONG
-#undef MPI_UNSIGNED_CHAR
-
-#undef MPI_SUM
-#undef MPI_MAX
-#undef MPI_MIN
-
-#undef MPI_COMM_WORLD
-#undef MPI_COMM_NULL
-
-#undef MPI_STATUS_IGNORE
-#undef MPI_REQUEST_NULL
-#undef MPI_INFO_NULL
-*/
+#undef MPI_LOR
 
 
@@ -73,8 +56,11 @@
 extern ::MPI_Datatype MPI_UNSIGNED_LONG_STD;
 extern ::MPI_Datatype MPI_UNSIGNED_CHAR_STD;
+extern ::MPI_Datatype MPI_UINT64_T_STD;
+
 
 extern ::MPI_Op MPI_SUM_STD;
 extern ::MPI_Op MPI_MAX_STD;
 extern ::MPI_Op MPI_MIN_STD;
+extern ::MPI_Op MPI_LOR_STD;
 
 extern ::MPI_Comm MPI_COMM_WORLD_STD;
@@ -92,8 +78,11 @@
 ep_lib::MPI_Datatype MPI_UNSIGNED_LONG = &MPI_UNSIGNED_LONG_STD;
 ep_lib::MPI_Datatype MPI_UNSIGNED_CHAR = &MPI_UNSIGNED_CHAR_STD;
+ep_lib::MPI_Datatype MPI_UINT64_T = &MPI_UINT64_T_STD;
+
 
 ep_lib::MPI_Op MPI_SUM = &MPI_SUM_STD;
 ep_lib::MPI_Op MPI_MAX = &MPI_MAX_STD;
 ep_lib::MPI_Op MPI_MIN = &MPI_MIN_STD;
+ep_lib::MPI_Op MPI_LOR = &MPI_LOR_STD;
 
 ep_lib::MPI_Comm MPI_COMM_WORLD(&MPI_COMM_WORLD_STD);
Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp	(revision 1379)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp	(revision 1460)
@@ -9,8 +9,10 @@
 #undef MPI_UNSIGNED_LONG
 #undef MPI_UNSIGNED_CHAR
+#undef MPI_UINT64_T
 
 #undef MPI_SUM
 #undef MPI_MAX
 #undef MPI_MIN
+#undef MPI_LOR
 
 #undef MPI_COMM_WORLD
@@ -28,8 +30,10 @@
 extern ep_lib::MPI_Datatype MPI_UNSIGNED_LONG;
 extern ep_lib::MPI_Datatype MPI_UNSIGNED_CHAR;
+extern ep_lib::MPI_Datatype MPI_UINT64_T;
 
 extern ep_lib::MPI_Op MPI_SUM;
 extern ep_lib::MPI_Op MPI_MAX;
 extern ep_lib::MPI_Op MPI_MIN;
+extern ep_lib::MPI_Op MPI_LOR;
 
 extern ep_lib::MPI_Comm MPI_COMM_WORLD;
Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp	(revision 1379)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp	(revision 1460)
@@ -29,4 +29,10 @@
 
   template<typename T>
+  T lor_op(T a, T b)
+  {
+    return a||b;
+  }
+
+  template<typename T>
   void reduce_max(const T * buffer, T* recvbuf, int count)
   {
@@ -44,4 +50,10 @@
   {
     transform(buffer, buffer+count, recvbuf, recvbuf, std::plus<T>());
+  }
+
+  template<typename T>
+  void reduce_lor(const T * buffer, T* recvbuf, int count)
+  {
+    transform(buffer, buffer+count, recvbuf, recvbuf, lor_op<T>);
   }
 
@@ -112,4 +124,11 @@
         }
 
+        else if(datatype == MPI_UINT64_T)
+        {
+          assert(datasize == sizeof(uint64_t));
+          for(int i=1; i<num_ep; i++)
+            reduce_max<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
+        }
+
         else printf("datatype Error\n");
 
@@ -160,4 +179,11 @@
         }
 
+        else if(datatype == MPI_UINT64_T)
+        {
+          assert(datasize == sizeof(uint64_t));
+          for(int i=1; i<num_ep; i++)
+            reduce_min<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
+        }
+
         else printf("datatype Error\n");
 
@@ -209,6 +235,25 @@
         }
 
+        else if(datatype ==MPI_UINT64_T)
+        {
+          assert(datasize == sizeof(uint64_t));
+          for(int i=1; i<num_ep; i++)
+            reduce_sum<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
+        }
+
         else printf("datatype Error\n");
 
+      }
+
+      if(op == MPI_SUM)
+      {
+        if(datatype != MPI_INT)
+          printf("datatype Error, must be MPI_INT\n");
+        else
+        {
+          assert(datasize == sizeof(int));
+          for(int i=1; i<num_ep; i++)
+            reduce_lor<int>(static_cast<int*>(comm.my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);
+        }
       }
     }
