Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 12431)
@@ -28,5 +28,5 @@
 
 	/*Gather all range values into allranges, for all nodes*/
-	allranges=(int*)xmalloc(num_procs*sizeof(int));
+	allranges=xNew<int>(num_procs);
 	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,MPI_COMM_WORLD);
 
@@ -42,7 +42,4 @@
 	*plower_row=lower_row;
 	*pupper_row=upper_row;
-
-	/*Free ressources:*/
-	xfree((void**)&allranges);
-
+	xDelete<int>(allranges);
 }
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 12431)
@@ -64,5 +64,5 @@
 	}
 	else{
-		result=1;\
+		result=1;
 	}
 	return result;
@@ -89,6 +89,6 @@
 	range=upper_row-lower_row+1;
 	if (range){
-		index=(int*)xmalloc(range*sizeof(int));
-		values=(double*)xmalloc(range*sizeof(double));
+		index=xNew<int>(range);
+		values=xNew<double>(range);
 		for (int i=0;i<range;i++){
 			*(index+i)=lower_row+i;
@@ -103,6 +103,6 @@
 
 	/*Free ressources:*/
-	xfree((void**)&index);
-	xfree((void**)&values);	
+	xDelete<int>(index);
+	xDelete<double>(values);	
 
 	/*Assign output pointers:*/
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp	(revision 12431)
@@ -77,5 +77,5 @@
 		count=0;
 		if (range){
-			node_rows=(int*)xmalloc(range*sizeof(int)); //this is the maximum number of rows one node can extract.
+			node_rows=xNew<int>(range); //this is the maximum number of rows one node can extract.
 		
 			for (i=0;i<row_partition_vector_size;i++){
@@ -98,5 +98,5 @@
 		
 		/*Same deal for columns*/
-		node_cols=(int*)xmalloc(col_partition_vector_size*sizeof(int));
+		node_cols=xNew<int>(col_partition_vector_size);
 		for (i=0;i<col_partition_vector_size;i++){
 			*(node_cols+i)=(int)*(col_partition_vector+i)-1;
@@ -128,6 +128,6 @@
 
 	/*Free ressources:*/
-	xfree((void**)&node_rows);
-	xfree((void**)&node_cols);
+	xDelete<int>(node_rows);
+	xDelete<int>(node_cols);
 	ISFree(&col_index);
 	ISFree(&row_index);
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 12431)
@@ -32,5 +32,4 @@
 	double* outmatrix=NULL;
 	
-	
 	/*get matrix size: */
 	MatGetSize(matrix,&M,&N);
@@ -42,10 +41,10 @@
 	
 	/*Local and global allocation*/
-	if (my_rank==0)outmatrix=(double*)xmalloc(M*N*sizeof(double));
+	if (my_rank==0)outmatrix=xNew<double>(M*N);
 	
 	if (range){
-		local_matrix=(double*)xmalloc(N*range*sizeof(double));
-		idxm=(int*)xmalloc(range*sizeof(int));  
-		idxn=(int*)xmalloc(N*sizeof(int));  
+		local_matrix=xNew<double>(N*range);
+		idxm=xNew<int>(range);  
+		idxn=xNew<int>(N);  
 	 
 		for (i=0;i<N;i++){
@@ -78,13 +77,10 @@
 		//Still have the local_matrix on node 0 to take care of.
 		memcpy(outmatrix,local_matrix,N*range*sizeof(double));
-
 	} 
 	
 	/*Assign output pointer: */
 	*poutmatrix=outmatrix;
-	
-	xfree((void**)&idxm);
-	xfree((void**)&idxn);
-	xfree((void**)&local_matrix);
-
+	xDelete<int>(idxm);
+	xDelete<int>(idxn);
+	xDelete<double>(local_matrix);
 }
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 12431)
@@ -36,12 +36,15 @@
 	MatGetSize(petsc_matrix,&rows,&cols);
 
-	idxm=(int*)xmalloc(rows*sizeof(int));
-	idxn=(int*)xmalloc(cols*sizeof(int));
+	idxm=xNew<int>(rows);
+	idxn=xNew<int>(cols);
 
 	for(i=0;i<rows;i++)idxm[i]=i;
 	for(i=0;i<cols;i++)idxn[i]=i;
 
-	matrix=(double*)xmalloc(rows*cols*sizeof(double));
+	matrix=xNew<double>(rows*cols);
 	MatGetValues(petsc_matrix,rows,idxm,cols,idxn,matrix);
+
+	xDelete<int>(idxm);
+	xDelete<int>(idxn);
 
 	/*Assign output pointers: */
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 12431)
@@ -28,9 +28,9 @@
 		VecGetSize(petsc_vector,&rows);
 		if(rows){
-			idxm=(int*)xmalloc(rows*sizeof(int));
-			vector=(double*)xmalloc(rows*sizeof(double));
+			idxm=xNew<int>(rows);
+			vector=xNew<double>(rows);
 			for(i=0;i<rows;i++)idxm[i]=i;
-
 			VecGetValues(petsc_vector,rows,idxm,vector);
+			xDelete<int>(idxm);
 		}
 	}
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 12431)
@@ -38,6 +38,6 @@
 
 	if (range){
-		idxn=(int*)xmalloc(range*sizeof(int)); 
-		values=(double*)xmalloc(range*sizeof(double));
+		idxn=xNew<int>(range); 
+		values=xNew<double>(range);
 		for (i=0;i<range;i++){
 			idxn[i]=lower_row+i;
@@ -54,6 +54,6 @@
 
 	/*Free ressources:*/
-	xfree((void**)&idxn);
-	xfree((void**)&values);
+	xDelete<int>(idxn);
+	xDelete<double>(values);
 
 	return outvector;
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 12431)
@@ -45,6 +45,6 @@
 	if (range){
 		/*This node owns rows of vector B, get them*/
-		idxm=(int*)xmalloc(range*sizeof(int));
-		values=(double*)xmalloc(range*sizeof(double));
+		idxm=xNew<int>(range);
+		values=xNew<double>(range);
 		for (i=0;i<range;i++){
 			*(idxm+i)=lower_row+i;
@@ -63,6 +63,5 @@
 
 	/*Free ressources:*/
-	xfree((void**)&idxm);
-	xfree((void**)&values);
-
+	xDelete<int>(idxm);
+	xDelete<double>(values);
 }
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 12431)
@@ -56,5 +56,5 @@
 
 		if (range){
-			node_rows=(int*)xmalloc(range*sizeof(int)); //this is the maximum number of rows one node can extract.
+			node_rows=xNew<int>(range); //this is the maximum number of rows one node can extract.
 		
 			count=0;
@@ -71,8 +71,8 @@
 					
      	if (count){
-			values=(double*)xmalloc(count*sizeof(double)); //holder for the values to be extracted from vectorA
+			values=xNew<double>(count); //holder for the values to be extracted from vectorA
 		}
 		else{
-			xfree((void**)&node_rows); //count=0 means no values was condensed out for this node. null node_rows for use in VecGetValues.
+			xDelete<int>(node_rows); //count=0 means no values was condensed out for this node. null node_rows for use in VecGetValues.
 			values=NULL;
 		}
@@ -110,13 +110,9 @@
 		VecAssemblyBegin(outvector);
 		VecAssemblyEnd(outvector);
-		
 	}
 	
 	/*Assign output pointers:*/
 	*poutvector=outvector;
-
-	/*Free ressources:*/
-	xfree((void**)&node_rows);
-	xfree((void**)&values);
-
+	xDelete<int>(node_rows);
+	xDelete<double>(values);
 }
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 12431)
@@ -42,5 +42,5 @@
 
 	/*Allocate gathered vector on all nodes .*/
-	gathered_vector=(double*)xmalloc(vector_size*sizeof(double));
+	gathered_vector=xNew<double>(vector_size);
 	
 	/*Allocate local vectors*/
@@ -50,9 +50,9 @@
 
 	if (range){
-		idxn=(int*)xmalloc(range*sizeof(int)); 
+		idxn=xNew<int>(range); 
 		for (i=0;i<range;i++){
 			*(idxn+i)=lower_row+i;
 		} 
-		local_vector=(double*)xmalloc(range*sizeof(double));
+		local_vector=xNew<double>(range);
 		/*Extract values from MPI vector to serial local_vector on each node*/
 		VecGetValues(vector,range,idxn,local_vector); 
@@ -87,6 +87,6 @@
 	
 	/*free ressources: */
-	xfree((void**)&idxn);
-	xfree((void**)&local_vector);
+	xDelete<int>(idxn);
+	xDelete<double>(local_vector);
 	
 	return 1;
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 12431)
@@ -33,11 +33,11 @@
 
 	if (range){
-		idxm=(int*)xmalloc(range*sizeof(int)); 
-		tidxm=(int*)xmalloc(range*sizeof(int)); 
+		idxm=xNew<int>(range); 
+		tidxm=xNew<int>(range); 
 		for (i=0;i<range;i++){
 			*(idxm+i)=lower_row+i;
 		} 
-		values=(double*)xmalloc(range*sizeof(double));
-		tvalues=(double*)xmalloc(range*sizeof(double));
+		values=xNew<double>(range);
+		tvalues=xNew<double>(range);
 		
 		VecGetValues(vector,range,idxm,values);
@@ -56,8 +56,8 @@
 
 	/*Free ressources: */
-	xfree((void**)&idxm);
-	xfree((void**)&values);
-	xfree((void**)&tidxm);
-	xfree((void**)&tvalues);
+	xDelete<int>(idxm);
+	xDelete<double>(values);
+	xDelete<int>(tidxm);
+	xDelete<double>(tvalues);
 
 	/*Assign output pointers: */
Index: /issm/trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 12431)
@@ -44,5 +44,5 @@
 	int i;
 
-	decomp=xmalloc(input*sizeof(int));
+	decomp=xNew<int>(input);
 	*decomp=input;
 	for (i=0;i<input;i++){
@@ -57,5 +57,4 @@
 		}
 	}
-
 	*pdecomp=decomp;
 }
Index: /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 12431)
@@ -13,13 +13,11 @@
 #include "../../scalapack/FortranMapping.h"
 
-void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,
-		int** pidxnA,MPI_Comm* pcomm_2d);
+void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,int** pidxnA,MPI_Comm* pcomm_2d);
 	
 int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con){ 
-	/*inv_A does not yet exist, inv_A was just xmalloced, that's all*/
+	/*inv_A does not yet exist, inv_A was just allocated, that's all*/
 
 	/*Error management*/
 	int i,j;
-	
 
 	/*input*/
@@ -94,5 +92,4 @@
 	/* Set the datatype */
 	datatype = MPI_DOUBLE;
-
 	
 	/* Copy A into a*/
@@ -104,6 +101,6 @@
 	upper_row--; 
 	range=upper_row-lower_row+1;
-	arrayA=xmalloc(nA*sizeof(double));
-	idxnA=xmalloc(nA*sizeof(int));
+	arrayA = xNew<double>(nA);
+	idxnA  = xNew<int>(nA);
 	for (i=0;i<nA;i++){
 		*(idxnA+i)=i;
@@ -128,10 +125,9 @@
 	PLA_Obj_free(&a);
 	PLA_Temp_free(&templ);
-	xfree((void**)&arrayA);
-	xfree((void**)&idxnA);
+	xDelete<double>(arrayA);
+	xDelete<int>(idxnA);
 	
 	/*Finalize PLAPACK*/
 	PLA_Finalize();
 	MPI_Comm_free(&comm_2d);
-
 }
Index: /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 12430)
+++ /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 12431)
@@ -45,6 +45,6 @@
 	
 	/*Vector physically based block cyclic distribution: */
-	row_nodes=xmalloc(mA*sizeof(int));
-	col_nodes=xmalloc(nA*sizeof(int));
+	row_nodes=xNew<int>(mA);
+	col_nodes=xNew<int>(nA);
 	for (i=0;i<mA;i++){
 		i0=i/nb;
@@ -60,5 +60,5 @@
 	PLA_Temp_comm_col_rank(templ,&myrow);
 
-	idxm=xmalloc(mA*sizeof(int));
+	idxm=xNew<int>(mA);
 	count=0;
 	for (i=0;i<mA;i++){
@@ -70,5 +70,5 @@
 	idxm_count=count;
 
-	idxn=xmalloc(nA*sizeof(int));
+	idxn=xNew<int>(nA);
 	count=0;
 	for (i=0;i<nA;i++){
@@ -92,7 +92,7 @@
 
 	/*Free ressources:*/
-	xfree((void**)&row_nodes);
-	xfree((void**)&col_nodes);
-	xfree((void**)&idxm);
-	xfree((void**)&idxn);
+	xDelete<int>(row_nodes);
+	xDelete<int>(col_nodes);
+	xDelete<int>(idxm);
+	xDelete<int>(idxn);
 }
