Index: /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 14316)
+++ /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 14317)
@@ -103,8 +103,6 @@
 	long* lmatrix=NULL;
 	bool* bmatrix=NULL;
-	int i,j,k,ipt=0;
-	int mstride,nstride;
-	npy_intp*  strides=NULL;
-//	PyObject* py_matrix2;
+	int i;
+	PyObject* py_matrix2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_matrix)) {
@@ -114,28 +112,18 @@
 			dims=PyArray_DIMS((PyArrayObject*)py_matrix);
 			M=dims[0]; N=dims[1];
-			strides=PyArray_STRIDES((PyArrayObject*)py_matrix);
-			mstride=strides[0]; nstride=strides[1];
 		}
 		else if (ndim==1) {
 			dims=PyArray_DIMS((PyArrayObject*)py_matrix);
 			M=dims[0]; N=1;
-			strides=PyArray_STRIDES((PyArrayObject*)py_matrix);
-			mstride=strides[0]; nstride=1;
 		}
 		else
 			_error_("expecting an MxN matrix or M vector in input!");
 
-//		_printf_(1,"M=%d, N=%d\n",M,N);
-//		_printf_(1,"mstride=%d, nstride=%d\n",mstride,nstride);
-//		_printf_(1,"py_matrix: FLAGS=%d, NPY_ARRAY_C_CONTIGUOUS=%d, FLAGS & NPY_ARRAY_C_CONTIGUOUS=%d\n",PyArray_FLAGS((PyArrayObject*)py_matrix),NPY_ARRAY_C_CONTIGUOUS,PyArray_FLAGS((PyArrayObject*)py_matrix) & NPY_ARRAY_C_CONTIGUOUS);
-//		_printf_(1,"NPY_SIZEOF_DOUBLE=%d\n",NPY_SIZEOF_DOUBLE);
-//		_printf_(1,"NPY_SIZEOF_INT64=%d\n",NPY_SIZEOF_INT64);
-//		_printf_(1,"NPY_SIZEOF_BOOL=%d\n",NPY_SIZEOF_BOOL);
-//		_printf_(1,"NPY_LONG=%d\n",NPY_LONG);
-//		_printf_(1,"NPY_INT64=%d\n",NPY_INT64);
-//		_printf_(1,"NPY_BOOL=%d\n",NPY_BOOL);
-//		_printf_(1,"NPY_CHAR=%d\n",NPY_CHAR);
-
 		if (M && N) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
+				py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_DOUBLE,ndim,ndim);
+				py_matrix=py_matrix2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -144,22 +132,24 @@
 				/*copy matrix: */
 				matrix=xNew<double>(M*N);
-				if (PyArray_FLAGS((PyArrayObject*)py_matrix) & NPY_ARRAY_C_CONTIGUOUS) {
+//				if (PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
 					memcpy(matrix,dmatrix,(M*N)*sizeof(double));
-				}
-				else {
-					mstride/=PyArray_ITEMSIZE((PyArrayObject*)py_matrix);
-					nstride/=PyArray_ITEMSIZE((PyArrayObject*)py_matrix);
-					for (i=0; i<M; i++) {
-						k=i*mstride;
-						for (j=0; j<N; j++) {
-							matrix[ipt++]=dmatrix[k];
-							k+=nstride;
-						}
-					}
-//				 py_matrix2=PyArray_FromObject(py_matrix,NPY_DOUBLE,PyArray_NDIM((const PyArrayObject*)py_matrix),PyArray_NDIM((const PyArrayObject*)py_matrix));
-//				_printf_(1,"py_matrix2: FLAGS=%d, NPY_ARRAY_C_CONTIGUOUS=%d, FLAGS & NPY_ARRAY_C_CONTIGUOUS=%d\n",PyArray_FLAGS((PyArrayObject*)py_matrix2),NPY_ARRAY_C_CONTIGUOUS,PyArray_FLAGS((PyArrayObject*)py_matrix2) & NPY_ARRAY_C_CONTIGUOUS);
-//				dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix2);
-//				memcpy(matrix,dmatrix,(M*N)*sizeof(double));
-				}
+//				}
+
+//				else {
+//					int j,k,ipt=0;
+//					int mstride,nstride;
+//					mstride=(int)PyArray_STRIDE((PyArrayObject*)py_matrix,0)/PyArray_ITEMSIZE((PyArrayObject*)py_matrix);
+//					if (ndim > 1)
+//						nstride=(int)PyArray_STRIDE((PyArrayObject*)py_matrix,1)/PyArray_ITEMSIZE((PyArrayObject*)py_matrix);
+//					else
+//						nstride=1;
+//					for (i=0; i<M; i++) {
+//						k=i*mstride;
+//						for (j=0; j<N; j++) {
+//							matrix[ipt++]=dmatrix[k];
+//							k+=nstride;
+//						}
+//					}
+//				}
 			}
 
@@ -184,4 +174,7 @@
 			else
 				_error_("unrecognized double pyarray type in input!");
+
+			if (py_matrix2)
+				delete(py_matrix2);
 		}
 		else
@@ -216,4 +209,5 @@
 	bool* bmatrix=NULL;
 	int i;
+	PyObject* py_matrix2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_matrix)) {
@@ -232,4 +226,9 @@
 
 		if (M && N) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
+				py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_LONG,ndim,ndim);
+				py_matrix=py_matrix2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -261,4 +260,7 @@
 			else
 				_error_("unrecognized int pyarray type in input!");
+
+			if (py_matrix2)
+				delete(py_matrix2);
 		}
 		else
@@ -293,4 +295,5 @@
 	long* lmatrix=NULL;
 	int i;
+	PyObject* py_matrix2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_matrix)) {
@@ -309,4 +312,9 @@
 
 		if (M && N) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
+				py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_BOOL,ndim,ndim);
+				py_matrix=py_matrix2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -338,4 +346,7 @@
 			else
 				_error_("unrecognized bool pyarray type in input!");
+
+			if (py_matrix2)
+				delete(py_matrix2);
 		}
 		else
@@ -370,4 +381,5 @@
 	bool* bvector=NULL;
 	int i;
+	PyObject* py_vector2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_vector)) {
@@ -389,4 +401,9 @@
 
 		if (M) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
+				py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_DOUBLE,ndim,ndim);
+				py_vector=py_vector2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -418,4 +435,7 @@
 			else
 				_error_("unrecognized double pyarray type in input!");
+
+			if (py_vector2)
+				delete(py_vector2);
 		}
 		else
@@ -448,4 +468,5 @@
 	double* dvector=NULL;
 	int i;
+	PyObject* py_vector2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_vector)) {
@@ -467,4 +488,9 @@
 
 		if (M) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
+				py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_LONG,ndim,ndim);
+				py_vector=py_vector2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -496,4 +522,7 @@
 			else
 			 _error_("unrecognized int pyarray type in input!");
+
+			if (py_vector2)
+				delete(py_vector2);
 		}
 		else
@@ -526,4 +555,5 @@
 	long* lvector=NULL;
 	int i;
+	PyObject* py_vector2=NULL;
 
 	if     (PyArray_Check((PyArrayObject*)py_vector)) {
@@ -545,4 +575,9 @@
 
 		if (M) {
+			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
+				py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_BOOL,ndim,ndim);
+				py_vector=py_vector2;
+			}
+
 			if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
 				/*retrieve internal value: */
@@ -574,4 +609,7 @@
 			else
 				_error_("unrecognized bool pyarray type in input!");
+
+			if (py_vector2)
+				delete(py_vector2);
 		}
 		else
