Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3807)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3808)
@@ -9,4 +9,5 @@
 #include "../objects/Object.h"
 #include "../toolkits/toolkits.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
 
 /*forward declarations */
@@ -140,6 +141,6 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type);
-		void GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum);
-		void GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int yenum);
+		void GetStrainRate2d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum,int formulation_enum=MacAyealFormulationEnum);
+		void GetStrainRate3d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum,int vzenum,int formulation_enum=StokesFormulationEnum);
 
 		void ChangeEnum(int enumtype,int new_enumtype);
Index: /issm/trunk/src/c/DataSet/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3807)
+++ /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3808)
@@ -282,65 +282,68 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum){{{1*/
-void Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum){
-
-	vector<Object*>::iterator object;
-	Input* xinput=NULL;
-	Input* yinput=NULL;
-
-	/*Go through inputs and find data for xenum: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-		xinput=(Input*)(*object); 
-		if (xinput->EnumType()==xenum)break;
-	}
-	/*Go through inputs and find data for yenum: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-		yinput=(Input*)(*object); 
-		if (yinput->EnumType()==yenum)break;
-	}
-
-	if (!xinput || !yinput){
+/*FUNCTION Inputs::GetStrainRate2d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum, int formulation_enum){{{1*/
+void Inputs::GetStrainRate2d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum,int formulation_enum){
+
+	vector<Object*>::iterator object;
+	int i;
+	Input* vxinput=NULL;
+	Input* vyinput=NULL;
+	double epsilonvx[3];
+	double epsilonvy[3];
+
+	/*Go through inputs and find data for vxenum: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		vxinput=(Input*)(*object); 
+		if (vxinput->EnumType()==vxenum)break;
+	}
+	/*Go through inputs and find data for vyenum: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		vyinput=(Input*)(*object); 
+		if (vyinput->EnumType()==vyenum)break;
+	}
+
+	/*Check that both inputs have been found*/
+	if (!vxinput || !vyinput){
+		ISSMERROR("Could not find input with enum %i or enum %i",vxenum,vyenum);
+	}
+
+	/*Get strain rate assuming that epsilon has been allocated*/
+	vxinput->GetVxStrainRate2d(epsilonvx,xyz_list,gauss,formulation_enum);
+	vyinput->GetVyStrainRate2d(epsilonvy,xyz_list,gauss,formulation_enum);
+	for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
+
+}
+/*}}}*/
+/*FUNCTION Inputs::GetStrainRate3d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum, int formulation_enum){{{1*/
+void Inputs::GetStrainRate3d(double* epsilon,double* xyz_list, double* gauss, int vxenum, int vyenum,int vzenum,int formulation_enum){
+
+	vector<Object*>::iterator object;
+	Input* vxinput=NULL;
+	Input* vyinput=NULL;
+	Input* vzinput=NULL;
+
+	/*Go through inputs and find data for vxenum: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		vxinput=(Input*)(*object); 
+		if (vxinput->EnumType()==vxenum)break;
+	}
+	/*Go through inputs and find data for vyenum: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		vyinput=(Input*)(*object); 
+		if (vyinput->EnumType()==vyenum)break;
+	}
+	/*Go through inputs and find data for vzenum: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		vzinput=(Input*)(*object); 
+		if (vzinput->EnumType()==vzenum)break;
+	}
+
+	if (!vxinput || !vyinput || !vzinput){
 		/*we could not find one input with the correct enum type. No defaults values were provided, 
 		 * error out: */
-		ISSMERROR("%s%i%s%i\n"," could not find input with enum type ",xenum," or enum type ",yenum);
-	}
-
-	/*Ok, we have the inputs, call bilinear operator: */
-	xinput->GetStrainRate(epsilon,yinput,xyz_list,gauss);
-
-}
-/*}}}*/
-/*FUNCTION Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){{{1*/
-void Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){
-
-	vector<Object*>::iterator object;
-	Input* xinput=NULL;
-	Input* yinput=NULL;
-	Input* zinput=NULL;
-
-	/*Go through inputs and find data for xenum: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-		xinput=(Input*)(*object); 
-		if (xinput->EnumType()==xenum)break;
-	}
-	/*Go through inputs and find data for yenum: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-		yinput=(Input*)(*object); 
-		if (yinput->EnumType()==yenum)break;
-	}
-	/*Go through inputs and find data for zenum: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-		zinput=(Input*)(*object); 
-		if (zinput->EnumType()==zenum)break;
-	}
-
-	if (!xinput | !yinput | !zinput){
-		/*we could not find one input with the correct enum type. No defaults values were provided, 
-		 * error out: */
-		ISSMERROR("%s%i%s%i%s%i\n"," could not find input with enum type ",xenum," or enum type ",yenum, " or enum type ",zenum);
-	}
-
-	/*Ok, we have the inputs, call bilinear operator: */
-	xinput->GetStrainRateStokes(epsilon,yinput,zinput,xyz_list,gauss);
+		ISSMERROR("Could not find input with enum %i or enum %i or enum %i",vxenum,vyenum,vzenum);
+	}
+
+	ISSMERROR("STOP");
 
 }
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3808)
@@ -610,5 +610,5 @@
 
 			/*Compute strain rate viscosity and pressure: */
-			inputs->GetStrainRateStokes(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
+			inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
 			matice->GetViscosity3dStokes(&viscosity,&epsilon[0]);
 			inputs->GetParameterValue(&pressure, &gauss_coord[0],PressureEnum);
@@ -1011,6 +1011,6 @@
 
 				/*Get strain rate from velocity: */
-				inputs->GetStrainRate(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum);
-				inputs->GetStrainRate(&oldepsilon[0],&xyz_list[0][0],gauss_coord,VxOldEnum,VyOldEnum);
+				inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum,PattynFormulationEnum);
+				inputs->GetStrainRate3d(&oldepsilon[0],&xyz_list[0][0],gauss_coord,VxOldEnum,VyOldEnum,VzObsEnum,PattynFormulationEnum);
 
 				/*Get viscosity: */
@@ -1214,5 +1214,5 @@
 
 			/*Compute strain rate: */
-			inputs->GetStrainRateStokes(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
+			inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
 
 			/*Get viscosity: */
@@ -1314,5 +1314,5 @@
 
 			/*Compute strain rate: */
-			inputs->GetStrainRateStokes(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
+			inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
 
 			/*Get viscosity at last iteration: */
@@ -2211,5 +2211,5 @@
 
 			/*Compute strain rate and viscosity: */
-			inputs->GetStrainRateStokes(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
+			inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
 			matice->GetViscosity3dStokes(&viscosity,&epsilon[0]);
 
@@ -2646,5 +2646,5 @@
 
 			/*Compute strain rate and viscosity: */
-			inputs->GetStrainRateStokes(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
+			inputs->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss_coord,VxEnum,VyEnum,VzEnum);
 			matice->GetViscosity3dStokes(&viscosity,&epsilon[0]);
 
@@ -3990,61 +3990,4 @@
 }
 /*}}}*/
-/*FUNCTION GetStrainRate {{{1*/
-void Penta::GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_coord){
-
-	int i;
-	const int numgrids=6;
-	const int NDOF2=2;
-
-	double B[5][NDOF2*numgrids];
-
-	/*Get B matrix: */
-	GetB(&B[0][0], xyz_list, gauss_coord);
-
-	/*Multiply B by velocity, to get strain rate: */
-	MatrixMultiply( &B[0][0],5,NDOF2*numgrids,0,
-				velocity,NDOF2*numgrids,1,0,
-				epsilon,0);
-
-}
-/*}}}*/
-/*FUNCTION GetStrainRateStokes {{{1*/
-void Penta::GetStrainRateStokes(double* epsilon, double* velocity, double* xyz_list, double* gauss_coord){
-
-	int i,j;
-
-	const int numgrids=6;
-	const int DOFVELOCITY=3;
-	double B[8][27];
-	double B_reduced[numgrids][DOFVELOCITY*numgrids];
-
-	/*Get B matrix: */
-	GetBStokes(&B[0][0], xyz_list, gauss_coord);
-
-	/*Create a reduced matrix of B to get rid of pressure */
-	for (i=0;i<6;i++){
-		for (j=0;j<3;j++){
-			B_reduced[i][j]=B[i][j];
-		}
-		for (j=4;j<7;j++){
-			B_reduced[i][j-1]=B[i][j];
-		}
-		for (j=8;j<11;j++){
-			B_reduced[i][j-2]=B[i][j];
-		}
-		for (j=12;j<15;j++){
-			B_reduced[i][j-3]=B[i][j];
-		}
-		for (j=16;j<19;j++){
-			B_reduced[i][j-4]=B[i][j];
-		}
-		for (j=20;j<23;j++){
-			B_reduced[i][j-5]=B[i][j];
-		}
-	}
-	/*Multiply B by velocity, to get strain rate: */
-	MatrixMultiply( &B_reduced[0][0],6,DOFVELOCITY*numgrids, 0, velocity,DOFVELOCITY*numgrids,1,0,epsilon, 0);
-}
-/*}}}*/
 /*FUNCTION GetThicknessList {{{1*/
 void Penta::GetThicknessList(double* thickness_list){
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3808)
@@ -1209,9 +1209,8 @@
 		/*Compute thickness at gaussian point: */
 		inputs->GetParameterValue(&thickness, gauss_l1l2l3,ThicknessEnum);
-		printf("thickness = %g\n",thickness);
 
 		/*Get strain rate from velocity: */
-		inputs->GetStrainRate(&epsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxEnum,VyEnum);
-		inputs->GetStrainRate(&oldepsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxOldEnum,VyOldEnum);
+		inputs->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxEnum,VyEnum);
+		inputs->GetStrainRate2d(&oldepsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxOldEnum,VyOldEnum);
 
 		/*Get viscosity: */
@@ -3843,23 +3842,4 @@
 }
 /*}}}*/
-/*FUNCTION Tria::GetStrainRate {{{1*/
-void Tria::GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_l1l2l3){
-
-	int i;
-	const int NDOF2=2;
-	const int numgrids=3;
-
-	double B[3][NDOF2*numgrids];
-
-	/*Get B matrix: */
-	GetB(&B[0][0], xyz_list, gauss_l1l2l3);
-
-	/*Multiply B by velocity, to get strain rate: */
-	MatrixMultiply( &B[0][0],3,NDOF2*numgrids,0,
-			              velocity,NDOF2*numgrids,1,0,
-						  epsilon,0);
-
-}
-/*}}}*/
 /*FUNCTION Tria::GetThicknessList {{{1*/
 void Tria::GetThicknessList(double* thickness_list){
@@ -3980,5 +3960,5 @@
 
 		/*Get strain rate, if velocity has been supplied: */
-		inputs->GetStrainRate(&epsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxEnum,VyEnum);
+		inputs->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss_l1l2l3,VxEnum,VyEnum);
 
 		/*Get viscosity complement: */
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3808)
@@ -72,5 +72,4 @@
 		void  GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3);
 		void  GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss_l1l2l3);
-		void  GetStrainRate(double* epsilon, double* velocity, double* xyz_list, double* gauss_l1l2l3);
 		void  GetJacobianDeterminant2d(double*  Jdet, double* xyz_list,double* gauss_l1l2l3);
 		void  GetJacobianDeterminant3d(double*  Jdet, double* xyz_list,double* gauss_l1l2l3);
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3808)
@@ -159,10 +159,4 @@
 void BeamVertexInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION BeamVertexInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void BeamVertexInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BeamVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void BeamVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION BeamVertexInput::ChangeEnum(int newenumtype){{{1*/
 void BeamVertexInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3808)
@@ -61,6 +61,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3808)
@@ -160,10 +160,4 @@
 void BoolInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION BoolInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void BoolInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void BoolInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION BoolInput::ChangeEnum(int newenumtype){{{1*/
 void BoolInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3808)
@@ -61,6 +61,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3808)
@@ -158,10 +158,4 @@
 void DoubleInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION DoubleInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void DoubleInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION DoubleInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void DoubleInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION DoubleInput::ChangeEnum(int newenumtype){{{1*/
 void DoubleInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3808)
@@ -61,6 +61,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3808)
@@ -34,8 +34,10 @@
 	
 		virtual void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss)=0;
-		virtual void GetStrainRate(double* epsilon, Input* yinput, double* xyz_list, double* gauss)=0;
-		virtual void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss)=0;
+		virtual void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum)=0;
+		virtual void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum)=0;
+		virtual void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum)=0;
+		virtual void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum)=0;
+		virtual void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum)=0;
 		virtual void ChangeEnum(int newenumtype)=0;
-
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3808)
@@ -160,10 +160,4 @@
 void IntInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION IntInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void IntInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION IntInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void IntInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION IntInput::ChangeEnum(int newenumtype){{{1*/
 void IntInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3808)
@@ -61,6 +61,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3808)
@@ -163,10 +163,4 @@
 void PentaVertexInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION PentaVertexInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void PentaVertexInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION PentaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void PentaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION PentaVertexInput::ChangeEnum(int newenumtype){{{1*/
 void PentaVertexInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3808)
@@ -60,6 +60,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3808)
@@ -158,10 +158,4 @@
 void SingVertexInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
-/*FUNCTION SingVertexInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void SingVertexInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION SingVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void SingVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
 /*FUNCTION SingVertexInput::ChangeEnum(int newenumtype){{{1*/
 void SingVertexInput::ChangeEnum(int newenumtype){
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3808)
@@ -60,6 +60,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3808)
@@ -171,12 +171,4 @@
 /*FUNCTION TriaVertexInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){{{1*/
 void TriaVertexInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
-/*}}}*/
-/*FUNCTION TriaVertexInput::GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss){{{1*/
-void TriaVertexInput::GetStrainRate(double* epsilon,Input* yinput,double* xyz_list, double* gauss){
-	ISSMERROR("not implemented yet");
-}
-/*}}}*/
-/*FUNCTION TriaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss){{{1*/
-void TriaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
 /*FUNCTION TriaVertexInput::ChangeEnum(int newenumtype){{{1*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3807)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3808)
@@ -60,6 +60,9 @@
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
-		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
-		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=MacAyealFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
+		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, double* gauss,int formulation_enum=StokesFormulationEnum){ISSMERROR("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 3807)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 3808)
@@ -161,6 +161,6 @@
 	//intialize inputs, and add as many inputs per element as requested: 
 	this->inputs=new Inputs();
-	if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->gridonbed[i]));
-	if (iomodel->gridonsurface) this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->gridonsurface[i]));
+	if (iomodel->gridonbed)      this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->gridonbed[i]));
+	if (iomodel->gridonsurface)  this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->gridonsurface[i]));
 	if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[i]));
 	if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[i]));
