Index: /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 23351)
+++ /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 23352)
@@ -18,7 +18,22 @@
 #ifdef _HAVE_MPI_
 	/*Include header files: {{{*/
-	#ifdef _HAVE_AMPI_
-		#ifdef _HAVE_ADJOINTMPI_
+	#if defined(_HAVE_AMPI_)
+		#if defined(_HAVE_ADJOINTMPI_)
 			#include <ampi_tape.hpp>
+
+		#elif defined(_HAVE_MEDIPACK_)
+			#include "medi/medi.hpp"
+			using namespace medi;
+			#include "medi/codiMediPackTypes.hpp"
+			#if defined(_HAVE_CODIPACK_)
+			#define TOOL CoDiPackTool<IssmDouble>
+			#define AMPI_ADOUBLE TOOL::MPI_TYPE
+			#elif defined(_HAVE_ADOLC_)
+			#include "adolc/medipacksupport.h"
+			#define TOOL AdolcTool
+			#else
+			#error "don't know about AD tool"
+			#endif
+
 		#else
 			#include <ampi/ampi.h>
@@ -31,31 +46,58 @@
 	/*}}}*/
 	/*MPI defines: *{{{*/
+
 	// types
+	#if defined(_HAVE_MEDIPACK_)
+	typedef AMPI_Comm             ISSM_MPI_Comm;
+	typedef AMPI_Datatype         ISSM_MPI_Datatype;
+	typedef AMPI_Op               ISSM_MPI_Op;
+	typedef AMPI_Status           ISSM_MPI_Status;
+	#else
 	typedef MPI_Comm             ISSM_MPI_Comm;
 	typedef MPI_Datatype         ISSM_MPI_Datatype;
 	typedef MPI_Op               ISSM_MPI_Op;
 	typedef MPI_Status           ISSM_MPI_Status;
+	#endif
 
-	// data types
-	#define ISSM_MPI_CHAR       MPI_CHAR
-	#if defined(_HAVE_AMPI_)
-		#define ISSM_MPI_DOUBLE    AMPI_ADOUBLE // corresponds to IssmDouble
-	#else 
-		#define ISSM_MPI_DOUBLE    MPI_DOUBLE  // corresponds to IssmDouble 
+	#if defined(_HAVE_MEDIPACK_)
+	#define ISSM_MPI_CHAR       AMPI_CHAR
+	#define ISSM_MPI_DOUBLE     AMPI_ADOUBLE // corresponds to IssmDouble
+	#define ISSM_MPI_PDOUBLE    AMPI_DOUBLE  // corresponds to IssmPDouble
+	#define ISSM_MPI_INT        AMPI_INT
+	
+	// operations
+	#define ISSM_MPI_MAX        AMPI_MAX
+	#define ISSM_MPI_MIN        AMPI_MIN
+	#define ISSM_MPI_PROD       AMPI_PROD
+	#define ISSM_MPI_SUM        AMPI_SUM
+	
+	// others
+	#define ISSM_MPI_COMM_WORLD    AMPI_COMM_WORLD
+	#define ISSM_MPI_STATUS_IGNORE AMPI_STATUS_IGNORE
+	#define ISSM_MPI_ANY_TAG       AMPI_ANY_TAG
+	#define ISSM_MPI_ANY_SOURCE    AMPI_ANY_SOURCE
+
+	#else
+		#if defined(_HAVE_AMPI_)
+			#define ISSM_MPI_DOUBLE    AMPI_ADOUBLE // corresponds to IssmDouble
+		#else 
+			#define ISSM_MPI_DOUBLE    MPI_DOUBLE  // corresponds to IssmDouble 
+		#endif
+		#define ISSM_MPI_PDOUBLE    MPI_DOUBLE  // corresponds to IssmPDouble
+		#define ISSM_MPI_INT        MPI_INT
+		#define ISSM_MPI_CHAR       MPI_CHAR
+
+		// operations
+		#define ISSM_MPI_MAX        MPI_MAX
+		#define ISSM_MPI_MIN        MPI_MIN
+		#define ISSM_MPI_PROD       MPI_PROD
+		#define ISSM_MPI_SUM        MPI_SUM
+
+		// others
+		#define ISSM_MPI_COMM_WORLD    MPI_COMM_WORLD
+		#define ISSM_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
+		#define ISSM_MPI_ANY_TAG       MPI_ANY_TAG
+		#define ISSM_MPI_ANY_SOURCE    MPI_ANY_SOURCE
 	#endif
-	#define ISSM_MPI_PDOUBLE    MPI_DOUBLE  // corresponds to IssmPDouble
-	#define ISSM_MPI_INT        MPI_INT
-
-	// operations
-	#define ISSM_MPI_MAX        MPI_MAX
-	#define ISSM_MPI_MIN        MPI_MIN
-	#define ISSM_MPI_PROD       MPI_PROD
-	#define ISSM_MPI_SUM        MPI_SUM
-
-	// others
-	#define ISSM_MPI_COMM_WORLD    MPI_COMM_WORLD
-	#define ISSM_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
-	#define ISSM_MPI_ANY_TAG       MPI_ANY_TAG
-	#define ISSM_MPI_ANY_SOURCE    MPI_ANY_SOURCE
 
     /*other include files: */
