Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 14903)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 14904)
@@ -181,6 +181,5 @@
 					./Container/Vertices.cpp\
 					./shared/shared.h\
-					./shared/Alloc/alloc.h\
-					./shared/MemOps/xMemCpy.h\
+					./shared/MemOps/MemOps.h\
 					./shared/Matrix/matrix.h\
 					./shared/Matrix/MatrixUtils.cpp\
Index: /issm/trunk-jpl/src/c/classes/ToolkitOptions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ToolkitOptions.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/classes/ToolkitOptions.cpp	(revision 14904)
@@ -14,5 +14,5 @@
 #include "../include/macros.h"
 #include "../shared/Exceptions/exceptions.h"
-#include "../shared/Alloc/alloc.h"
+#include "../shared/MemOps/MemOps.h"
 
 void ToolkitOptions::Init(char* options){ /*{{{*/
Index: /issm/trunk-jpl/src/c/classes/objects/Bucket.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Bucket.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/classes/objects/Bucket.h	(revision 14904)
@@ -9,5 +9,5 @@
 /*{{{*/
 #include "./Object.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "../../Container/DataSet.h"
Index: /issm/trunk-jpl/src/c/classes/objects/Contour.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Contour.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/classes/objects/Contour.h	(revision 14904)
@@ -10,6 +10,5 @@
 #include "../../include/include.h"
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Alloc/alloc.h"
-#include "../../shared/MemOps/xMemCpy.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../io/io.h"
 #include "../../EnumDefinitions/EnumDefinitions.h"
Index: /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 14904)
@@ -17,6 +17,5 @@
 #include "../../../include/include.h"
 #include "../../../shared/Exceptions/exceptions.h"
-#include "../../../shared/Alloc/alloc.h"
-#include "../../../shared/MemOps/xMemCpy.h"
+#include "../../../shared/MemOps/MemOps.h"
 #include "../../../io/io.h"
 #include "../../../EnumDefinitions/EnumDefinitions.h"
Index: /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 14904)
@@ -8,5 +8,5 @@
 #include <stdarg.h>
 #include <stdio.h>
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 
 char* exprintf(const char* format,...){
Index: /issm/trunk-jpl/src/c/shared/Exp/ExpWrite.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exp/ExpWrite.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Exp/ExpWrite.cpp	(revision 14904)
@@ -5,5 +5,5 @@
  */
 #include <stdio.h>
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include "../../include/include.h"
 #include "../Exceptions/exceptions.h"
Index: /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 14904)
@@ -7,5 +7,5 @@
 #include "./matrix.h"
 #include "../Exceptions/exceptions.h"
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include <stdio.h>
 #include <sys/types.h>
Index: /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 14904)
+++ /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 14904)
@@ -0,0 +1,146 @@
+/* \file alloc.h
+ * \brief: header file for memory allocations as well as templated new/delete checking for non-null pointers
+ */
+
+#ifndef _ALLOC_H_
+#define _ALLOC_H_
+
+#include <cassert>
+
+/* memory management of types T with non-trivial constructors require C++ style memory management*/
+#define USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+/* but for speed one may alternatively use C memory management but can do so safely only for T that are at most 
+ * plain old data structures (POD)*/
+#ifndef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+#include <cstdlib>
+#endif 
+
+template <class T> T* xNew(unsigned int size) { /*{{{*/
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+  T* aT_p=new T[size];
+  assert(aT_p);
+  return aT_p;
+#else
+  T* aT_p=(T*)malloc(size*sizeof(T));
+  assert(aT_p);
+  return aT_p;
+#endif  
+}/*}}}*/
+template <class T> T** xNew(unsigned int dim1, unsigned int dim2) { /*{{{*/
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+  T* buf=new T[dim1*dim2];
+  assert(buf );
+  T** aT_pp =new T*[dim1];
+  assert(aT_pp );
+  for (unsigned int i=0;i<dim1;++i) {
+    aT_pp [i]=buf;
+    buf+=dim2;
+  }
+  return aT_pp ;
+#else
+  T* buf=(T*)malloc(dim1*dim2*sizeof(T));
+  assert(buf );
+  T** aT_pp =(T**)malloc(dim1*sizeof(T*));
+  assert(aT_pp );
+  for (unsigned int i=0;i<dim1;++i) {
+    aT_pp [i]=buf;
+    buf+=dim2;
+  }
+  return aT_pp ;
+#endif
+}/*}}}*/
+template <class T> T* xNewZeroInit(unsigned int size) {/*{{{*/
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+  T* aT_p=xNew<T>(size);
+  for (unsigned int i=0; i<size;++i) 
+    aT_p[i]=(T)0;
+  return aT_p;
+#else
+  T* aT_p=(T*)calloc(size,sizeof(T));
+  assert(aT_p);
+  return aT_p;
+#endif
+}/*}}}*/
+template <class T> T** xNewZeroInit(unsigned int dim1, unsigned int dim2) {/*{{{*/
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+  T** aT_pp=xNew<T>(dim1,dim2);
+  for (unsigned int i=0; i<dim1*dim2;++i)
+    (*aT_pp)[i]=(T)0;
+  return aT_pp;
+#else
+  T* buf=(T*)calloc(dim1*dim2*sizeof(T));
+  assert(buf );
+  T** aT_pp =(T**)malloc(dim1*sizeof(T*));
+  assert(aT_pp );
+  for (unsigned int i=0;i<dim1;++i) {
+    aT_pp [i]=buf;
+    buf+=dim2;
+  }
+  return aT_pp ;
+#endif
+}/*}}}*/
+template <class T> void xDelete(T**& aT_pp) {/*{{{*/
+  if (aT_pp) {
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+    delete [](*aT_pp);
+    delete [](aT_pp);
+#else
+    free((void*)*aT_pp)
+    free((void**)aT_pp);
+#endif
+  }
+  aT_pp=0;
+}/*}}}*/
+template <class T> void xDelete(T*& aT_p) {/*{{{*/
+  if (aT_p) 
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+    delete []aT_p;
+#else
+    free((void*)aT_p);
+#endif
+  aT_p=0;
+}/*}}}*/
+template <class T> T* xReNew(T* old, unsigned int old_size, unsigned int size) {/*{{{*/
+#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+	T* aT_p=0;
+	if (!old) { // no old memory
+		if (size)  
+		 aT_p=xNew<T>(size); // according to realloc behavior in manual page 
+	}
+	else { // have old memory
+		if (!size)  // but 0 size
+		 xDelete<T>(old); // according to realloc behavior in manual page
+		else { // non-zero size
+			assert(old_size); // have old memory - need to have old_size set or this call is bad
+			// allocate new, delete old; ; even for the case when size is 
+			// less than old_size we can't just keep the memory unchanged 
+			// because otherwise classes that have ctors/dtors with side-effects 
+			// may misbehave, for example classes with static instance/operations counters. 
+			aT_p=xNew<T>(size);
+			unsigned int iMax=(old_size<size)?old_size:size;
+			for (unsigned int i=0; i<iMax;++i) { 
+				// we need to copy the items by explicit assignments
+				aT_p[i]=old[i];
+			}
+			xDelete<T>(old);
+		}
+	}
+	return aT_p;
+#else
+	T* aT_p=0;
+	aT_p=(T*)realloc((void*)old,size*sizeof(T));
+	if (size) 
+	 assert(aT_p); // according to realloc behavior in manual page
+	return aT_p;
+#endif 
+}/*}}}*/
+template <class T>  T* xMemCpy(T* dest, const T* src, unsigned int size) {/*{{{*/
+  assert(dest); assert(src);
+  for (int i=0; i<size;++i) 
+    dest[i]=src[i];
+  return dest;
+};
+/*}}}*/
+
+
+#endif
Index: sm/trunk-jpl/src/c/shared/MemOps/xMemCpy.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/MemOps/xMemCpy.h	(revision 14903)
+++ 	(revision )
@@ -1,18 +1,0 @@
-/* \file xMemCpy.h
- * \brief: header file for templated memory operations
- */
-
-#ifndef _XMEMCPY_H_
-#define _XMEMCPY_H_
-
-#include <cassert>
-
-template <class T> 
-T* xMemCpy(T* dest, const T* src, unsigned int size) {
-  assert(dest); assert(src);
-  for (int i=0; i<size;++i) 
-    dest[i]=src[i];
-  return dest;
-};
-
-#endif
Index: /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 14904)
@@ -3,5 +3,5 @@
 #include "../../include/include.h"
 #include "./GaussPoints.h"
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include "../Exceptions/exceptions.h"
 #include <math.h>
Index: /issm/trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp	(revision 14904)
@@ -1,3 +1,3 @@
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include "../../include/include.h"
 #include "../Exceptions/exceptions.h"
Index: /issm/trunk-jpl/src/c/shared/Threads/LaunchThread.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Threads/LaunchThread.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/Threads/LaunchThread.cpp	(revision 14904)
@@ -20,5 +20,5 @@
 
 #include "./issm_threads.h"
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include "../Exceptions/exceptions.h"
 #include "../../include/include.h"
Index: /issm/trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(revision 14904)
@@ -3,5 +3,5 @@
  */
 #include "./trimesh.h"
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 
 int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist){
Index: /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 14904)
@@ -7,5 +7,5 @@
 #include "./trimesh.h"
 #include "../Exceptions/exceptions.h"
-#include "../Alloc/alloc.h"
+#include "../MemOps/MemOps.h"
 #include "../../include/include.h"
 
Index: /issm/trunk-jpl/src/c/shared/shared.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/shared.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/shared/shared.h	(revision 14904)
@@ -6,5 +6,5 @@
 #define _SHARED_H_
 
-#include "./Alloc/alloc.h"
+#include "./MemOps/MemOps.h"
 #include "./Bamg/shared.h"
 #include "./Elements/elements.h"
@@ -12,5 +12,4 @@
 #include "./Exp/exp.h"
 #include "./Matrix/matrix.h"
-#include "./MemOps/xMemCpy.h"
 #include "./Numerics/numerics.h"
 #include "./Sorting/sorting.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h	(revision 14904)
@@ -20,6 +20,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "./IssmAbsVec.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h	(revision 14904)
@@ -20,6 +20,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include <math.h>
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 14904)
@@ -19,6 +19,5 @@
 #include "./IssmSeqVec.h"
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "../../toolkits/gsl/gslincludes.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 14904)
@@ -15,6 +15,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "../../classes/ToolkitOptions.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14904)
@@ -19,6 +19,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "../../Container/DataSet.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 14904)
@@ -19,6 +19,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "../../io/io.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 14904)
@@ -18,6 +18,5 @@
 
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include <math.h>
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 14904)
@@ -11,6 +11,5 @@
 #endif
 
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../io/Comm/Comm.h"
 #include "../../include/macros.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmVec.h	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmVec.h	(revision 14904)
@@ -16,6 +16,5 @@
 #include "../../EnumDefinitions/EnumDefinitions.h"
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/MemOps/xMemCpy.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../include/macros.h"
 #include "./IssmToolkitUtils.h"
Index: /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 14904)
@@ -11,5 +11,5 @@
 
 #include <stdio.h>
-#include "../../../shared/Alloc/alloc.h"
+#include "../../../shared/MemOps/MemOps.h"
 #include "../../../io/Comm/Comm.h"
 
Index: /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 14904)
@@ -13,5 +13,5 @@
 #include "../../include/types.h"
 #include "../../include/macros.h"
-#include "../../shared/Alloc/alloc.h"
+#include "../../shared/MemOps/MemOps.h"
 #include "../../shared/Exceptions/exceptions.h"
 #include "../../io/Comm/Comm.h"
Index: /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 14903)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 14904)
@@ -11,5 +11,5 @@
 #include "./PetscSolver.h"
 #include "../../../shared/Numerics/Verbosity.h"
-#include "../../../shared/Alloc/alloc.h"
+#include "../../../shared/MemOps/MemOps.h"
 #include "../../../shared/Exceptions/exceptions.h"
 #include "../../../io/Comm/Comm.h"
