Index: /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13295)
+++ /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13296)
@@ -34,4 +34,27 @@
 
 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];
+  T** aT_pp =new T*[dim1];
+  for (unsigned int i=0;i<dim1;++i) {
+    aT_pp [i]=buf;
+    buf+=dim2;
+  }
+  assert(aT_pp );
+  return aT_pp ;
+#else
+  T* buf=(T*)malloc(dim1*dim2*sizeof(T));
+  T** aT_pp =(T**)malloc(dim1*sizeof(T*));
+  for (unsigned int i=0;i<dim1;++i) {
+    aT_pp [i]=buf;
+    buf+=dim2;
+  }
+  assert(aT_pp );
+  return aT_pp ;
+#endif
+}
+
+template <class T>
 T* xNewZeroInit(unsigned int size) {
 #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
@@ -48,5 +71,19 @@
 
 template <class T>
-void xDelete(T*& aT_p) { 
+void xDelete(T**& aT_pp, unsigned int dim1) {
+  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
