Index: /issm/trunk/src/c/toolkits/petsc/patches/NewMat.cpp
===================================================================
--- /issm/trunk/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 5889)
+++ /issm/trunk/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 5890)
@@ -19,19 +19,36 @@
 #include "../../../include/include.h"
 
-Mat NewMat(int M,int N,double* psparsity,int* pconnectivity,int* pnumberofdofspernode){
+/*NewMat(int M,int N){{{1*/
+Mat NewMat(int M,int N){
 
 	/*output:*/
 	Mat outmatrix=NULL;
 
-	/*Recover parameters: */
+	/*parameters: */
 	double sparsity=.001; //default
+	int    m,n;
+	int    d_nz,o_nz,nnz;
 
-	int    connectivity=10; //default
-	int    numberofdofspernode=2; //default
+	/*Determine local sizes: */
+	m=PetscDetermineLocalSize(M);
+	n=PetscDetermineLocalSize(N);
+	
+	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+	o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
 
-	/*local sizes: */
+	MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+
+	return outmatrix;
+}
+/*}}}*/
+/*NewMat(int M,int N,double sparsity){{{1*/
+Mat NewMat(int M,int N,double sparsity){
+
+	/*output:*/
+	Mat outmatrix=NULL;
+
+	/*parameters: */
 	int    m,n;
-
-	/*row and col distribution: */
 	int    d_nz,o_nz;
 	int    nnz;
@@ -41,53 +58,35 @@
 	n=PetscDetermineLocalSize(N);
 	
-	/*Branch on what was provided: */
+	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+	o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
 
-	if(!psparsity && !pconnectivity && !pnumberofdofspernode){
-
-		/*Ok, we have our default sparsity, create matrix using this info: */
-
-		nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
-		d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
-		o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
-
-		MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
-
-	}
-	else if(psparsity){
-		
-		/*Same as above, except we bypass the default sparsity: */
-		if(pconnectivity || pnumberofdofspernode)
-			ISSMERROR("%s%p%s%p%s%p","cannot determine logic with following set of pointers-> sparsity: ", psparsity," connectivity: ",pconnectivity," numberofdofspernode: ",pnumberofdofspernode);
-
-		sparsity=*psparsity;
-
-		nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
-		d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
-		o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
-
-		MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
-
-	}
-	else if(pconnectivity &&  pnumberofdofspernode){
-
-		/*entirely different logic. We use the connectivity and numberofdofspernode to figure out how many non-zeros are 
-		 *present per row: */
-
-		if(psparsity) ISSMERROR("%s%p%s%p%s%p","cannot determine logic with following set of pointers-> sparsity: ", psparsity," connectivity: ",pconnectivity," numberofdofspernode: ",pnumberofdofspernode);
-
-		connectivity=*pconnectivity;
-		numberofdofspernode=*pnumberofdofspernode;
-	
-		/*Figure out number of non zeros per row: */
-		d_nz=(int)connectivity*numberofdofspernode/2;
-		o_nz=(int)connectivity*numberofdofspernode/2;
-		
-		MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
-
-	}
-	else{
-		ISSMERROR("%s%p%s%p%s%p","cannot determine logic with following set of pointers-> sparsity: ", psparsity," connectivity: ",pconnectivity," numberofdofspernode: ",pnumberofdofspernode);
-	}
+	MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
 
 	return outmatrix;
 }
+/*}}}*/
+/*NewMat(int M,int N,int connectivity,int numberofdofspernode){{{1*/
+Mat NewMat(int M,int N,int connectivity,int numberofdofspernode){
+
+	/*output:*/
+	Mat outmatrix=NULL;
+
+	/*parameters: */
+	int    m,n;
+	int    d_nz,o_nz;
+	int    nnz;
+
+	/*Determine local sizes: */
+	m=PetscDetermineLocalSize(M);
+	n=PetscDetermineLocalSize(N);
+	
+	/*Figure out number of non zeros per row: */
+	d_nz=(int)connectivity*numberofdofspernode/2;
+	o_nz=(int)connectivity*numberofdofspernode/2;
+
+	MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+
+	return outmatrix;
+}
+/*}}}*/
Index: /issm/trunk/src/c/toolkits/petsc/patches/NewVec.cpp
===================================================================
--- /issm/trunk/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 5889)
+++ /issm/trunk/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 5890)
@@ -16,5 +16,5 @@
 #include "./petscpatches.h"
 
-Vec NewVec(int size){
+Vec NewVec(int size,bool fromlocalsize){
 
 	int ierr;
@@ -25,5 +25,11 @@
 
 	/*determine local size of vector: */
-	local_size=PetscDetermineLocalSize(size);
+	if(fromlocalsize){
+		local_size=size;
+	}
+	else{
+		local_size=PetscDetermineLocalSize(size);
+	}
+	
 	VecCreate(PETSC_COMM_WORLD,&vector); 
 	
@@ -36,6 +42,2 @@
 	return vector;
 }
-
-
-
-
Index: sm/trunk/src/c/toolkits/petsc/patches/NewVecFromLocalSize.cpp
===================================================================
--- /issm/trunk/src/c/toolkits/petsc/patches/NewVecFromLocalSize.cpp	(revision 5889)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*!\file NewVecFromLocalSize.cpp
- * \brief: create distributed Petsc vector, using an already existing distribution
- */
-
-#ifdef HAVE_CONFIG_H
-	#include "config.h"
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-/*Petsc includes: */
-#include "petscmat.h"
-#include "petscvec.h"
-#include "petscksp.h"
-
-#include "./petscpatches.h"
-
-Vec NewVecFromLocalSize(int local_size){
-
-	int ierr;
-
-	/*output: */
-	Vec vector=NULL;
-
-	/*determine local size of vector: */
-	VecCreate(PETSC_COMM_WORLD,&vector); 
-	
-	VecSetSizes(vector,local_size,PETSC_DECIDE); 
-	VecSetFromOptions(vector); 
-
-	/*fill with 0: */
-	VecSet(vector,0.0);
-
-	return vector;
-}
-
-
-
-
Index: /issm/trunk/src/c/toolkits/petsc/patches/petscpatches.h
===================================================================
--- /issm/trunk/src/c/toolkits/petsc/patches/petscpatches.h	(revision 5889)
+++ /issm/trunk/src/c/toolkits/petsc/patches/petscpatches.h	(revision 5890)
@@ -22,7 +22,9 @@
 
 int PetscDetermineLocalSize(int global_size);
-Vec NewVec(int size);
-Vec NewVecFromLocalSize(int local_size);
-Mat NewMat(int M,int N,double* psparsity,int* pconnectivity,int* pnumberofdofspernode);
+Vec NewVec(int size,bool fromlocalsize);
+Mat NewMat(int M,int N);
+Mat NewMat(int M,int N,double sparsity);
+Mat NewMat(int M,int N,int connectivity,int numberofdofspernode);
+
 int VecTranspose(Vec* tvector,Vec vector);
 int VecToMPISerial(double** pgathered_vector, Vec vector);
