Index: /issm/trunk/src/c/objects/Numerics/ElementMatrix.cpp
===================================================================
--- /issm/trunk/src/c/objects/Numerics/ElementMatrix.cpp	(revision 6026)
+++ /issm/trunk/src/c/objects/Numerics/ElementMatrix.cpp	(revision 6027)
@@ -250,16 +250,4 @@
 
 /*ElementMatrix specific routines: */
-/*FUNCTION ElementMatrix::AddValues{{{1*/
-void ElementMatrix::AddValues(double* Ke_gg){
-
-	if(Ke_gg){
-		for (int i=0;i<this->nrows;i++){
-			for(int j=0;j<this->ncols;j++){
-				*(this->values+this->ncols*i+j)+=*(Ke_gg+this->ncols*i+j);
-			}
-		}
-	}
-}
-/*}}}*/
 /*FUNCTION ElementMatrix::AddToGlobal{{{1*/
 void ElementMatrix::AddToGlobal(Mat Kgg, Mat Kff, Mat Kfs){
@@ -327,4 +315,30 @@
 }
 /*}}}*/
+/*FUNCTION ElementMatrix::Transpose{{{1*/
+void ElementMatrix::Transpose(void){
+
+	/*Intermediaries*/
+	double *values_copy=NULL;
+	int     temp;
+
+	/*Transpose indices*/
+	if(!dofsymmetrical){
+		ISSMERROR("not supported yet");
+	}
+
+	/*Transpose values*/
+	values_copy=(double*)xmalloc(this->nrows*this->ncols*sizeof(double));
+	memcpy(values_copy,this->values,this->nrows*this->ncols*sizeof(double));
+	for (int i=0;i<this->nrows;i++) for(int j=0;j<this->ncols;j++) this->values[j*this->nrows+i]=values_copy[i*this->ncols+j];
+
+	/*Update sizes*/
+	temp=this->nrows;
+	this->nrows=this->ncols;
+	this->ncols=temp;
+
+	/*Clean up and return*/
+	xfree((void**)&values_copy);
+}
+/*}}}*/
 /*FUNCTION ElementMatrix::Echo{{{1*/
 void ElementMatrix::Echo(void){
Index: /issm/trunk/src/c/objects/Numerics/ElementMatrix.h
===================================================================
--- /issm/trunk/src/c/objects/Numerics/ElementMatrix.h	(revision 6026)
+++ /issm/trunk/src/c/objects/Numerics/ElementMatrix.h	(revision 6027)
@@ -58,8 +58,8 @@
 		/*}}}*/
 		/*ElementMatrix specific routines {{{1*/
-		void AddValues(double* Ke_gg);
 		void AddToGlobal(Mat Kgg, Mat Kff, Mat Kfs);
 		void Echo(void);
 		void CheckConsistency(void);
+		void Transpose(void);
 		void Init(ElementMatrix* Ke);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Numerics/ElementVector.cpp
===================================================================
--- /issm/trunk/src/c/objects/Numerics/ElementVector.cpp	(revision 6026)
+++ /issm/trunk/src/c/objects/Numerics/ElementVector.cpp	(revision 6027)
@@ -170,16 +170,4 @@
 
 /*ElementVector specific routines: */
-/*FUNCTION ElementVector::AddValues(double* Ke_gg){{{1*/
-void ElementVector::AddValues(double* pe_gg){
-
-	int i,j;
-
-	if(pe_gg){
-		for (i=0;i<this->nrows;i++){
-			this->values[i]+=pe_gg[i];
-		}
-	}
-}
-/*}}}*/
 /*FUNCTION ElementVector::AddToGlobal(Vec pg, Vec pf){{{1*/
 void ElementVector::AddToGlobal(Vec pg, Vec pf){
Index: /issm/trunk/src/c/objects/Numerics/ElementVector.h
===================================================================
--- /issm/trunk/src/c/objects/Numerics/ElementVector.h	(revision 6026)
+++ /issm/trunk/src/c/objects/Numerics/ElementVector.h	(revision 6027)
@@ -41,5 +41,4 @@
 		/*}}}*/
 		/*ElementVector specific routines {{{1*/
-		void AddValues(double* pe_gg);
 		void AddToGlobal(Vec pg, Vec pf);
 		void Echo(void);
