Index: /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 14315)
+++ /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 14316)
@@ -103,5 +103,8 @@
 	long* lmatrix=NULL;
 	bool* bmatrix=NULL;
-	int i;
+	int i,j,k,ipt=0;
+	int mstride,nstride;
+	npy_intp*  strides=NULL;
+//	PyObject* py_matrix2;
 
 	if     (PyArray_Check((PyArrayObject*)py_matrix)) {
@@ -111,11 +114,26 @@
 			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) {
@@ -126,8 +144,25 @@
 				/*copy matrix: */
 				matrix=xNew<double>(M*N);
-				memcpy(matrix,dmatrix,(M*N)*sizeof(double));
-			}
-
-			else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
+				if (PyArray_FLAGS((PyArrayObject*)py_matrix) & NPY_ARRAY_C_CONTIGUOUS) {
+					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 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
 				/*retrieve internal value: */
 				lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
@@ -206,5 +241,5 @@
 			}
 
-			else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
+			else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
 				/*retrieve internal value: */
 				lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
@@ -283,5 +318,5 @@
 			}
 
-			else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
+			else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
 				/*retrieve internal value: */
 				lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
@@ -363,5 +398,5 @@
 			}
 
-			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_INT64) {
+			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
 				/*retrieve internal value: */
 				lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
@@ -441,5 +476,5 @@
 			}
 
-			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_INT64) {
+			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
 				/*retrieve internal value: */
 				lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
@@ -519,5 +554,5 @@
 			}
 
-			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_INT64) {
+			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
 				/*retrieve internal value: */
 				lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
