Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 16674)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 16675)
@@ -25,4 +25,5 @@
 					./datastructures/datastructures.h\
 					./classes/classes.h\
+					./classes/gauss/Gauss.h\
 					./classes/gauss/GaussSeg.h\
 					./classes/gauss/GaussSeg.cpp\
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16675)
@@ -24,2 +24,7 @@
 	_error_("not implemented yet");
 }/*}}}*/
+
+/*Numerics*/
+void AdjointBalancethicknessAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16675)
@@ -24,2 +24,7 @@
 	   _error_("not implemented yet");
 }/*}}}*/
+
+/*Numerics*/
+void AdjointHorizAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 16675)
@@ -6,4 +6,5 @@
 #define _ANALYSIS_H_
 
+#include "../toolkits/objects/toolkitobjects.h"
 class Parameters;
 class IoModel;
@@ -12,4 +13,5 @@
 class Constraints;
 class Loads;
+class Element;
 
 class Analysis{
@@ -24,4 +26,6 @@
 		virtual void CreateConstraints(Constraints* constraints,IoModel* iomodel)=0;
 		virtual void CreateLoads(Loads* loads, IoModel* iomodel)=0;
+
+		virtual void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element)=0;
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16675)
@@ -112,2 +112,7 @@
 	}
 }/*}}}*/
+
+/*Numerics*/
+void BalancethicknessAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16675)
@@ -24,2 +24,7 @@
 	   _error_("not implemented yet");
 }/*}}}*/
+
+/*Numerics*/
+void BalancethicknessSoftAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16675)
@@ -57,2 +57,7 @@
 	/*No loads*/
 }/*}}}*/
+
+/*Numerics*/
+void BalancevelocityAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16675)
@@ -93,2 +93,7 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void DamageEvolutionAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16675)
@@ -182,2 +182,7 @@
 	/*No loads */
 }/*}}}*/
+
+/*Numerics*/
+void EnthalpyAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	element->GetSolutionFromInputsOneDof(solution,EnthalpyEnum);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16675)
@@ -13,2 +13,3 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16675)
@@ -35,2 +35,7 @@
 void ExtrudeFromBaseAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
 }/*}}}*/
+
+/*Numerics*/
+void ExtrudeFromBaseAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16675)
@@ -35,2 +35,7 @@
 void ExtrudeFromTopAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
 }/*}}}*/
+
+/*Numerics*/
+void ExtrudeFromTopAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16675)
@@ -88,2 +88,7 @@
 	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
 }/*}}}*/
+
+/*Numerics*/
+void FreeSurfaceBaseAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16675)
@@ -86,2 +86,7 @@
 	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
 }/*}}}*/
+
+/*Numerics*/
+void FreeSurfaceTopAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16675)
@@ -36,2 +36,7 @@
 	/*No loads*/
 }/*}}}*/
+
+/*Numerics*/
+void GiaAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16675)
@@ -105,2 +105,7 @@
 	/*Nothing for now*/
 }/*}}}*/
+
+/*Numerics*/
+void HydrologyDCEfficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	element->GetSolutionFromInputsOneDof(solution,EplHeadEnum);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16675)
@@ -135,2 +135,7 @@
 	iomodel->DeleteData(1,MeshVertexonbedEnum);
 }/*}}}*/
+
+/*Numerics*/
+void HydrologyDCInefficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	element->GetSolutionFromInputsOneDof(solution,SedimentHeadEnum);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16675)
@@ -80,2 +80,7 @@
 	/*No loads*/
 }/*}}}*/
+
+/*Numerics*/
+void HydrologyShreveAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	element->GetSolutionFromInputsOneDof(solution,WatercolumnEnum);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16675)
@@ -53,2 +53,7 @@
 	/*No loads*/
 }/*}}}*/
+
+/*Numerics*/
+void L2ProjectionBaseAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16675)
@@ -210,2 +210,7 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void MasstransportAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16675)
@@ -70,2 +70,7 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void MeltingAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16675)
@@ -24,2 +24,7 @@
 	   _error_("not implemented yet");
 }/*}}}*/
+
+/*Numerics*/
+void MeshdeformationAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16675)
@@ -43,2 +43,7 @@
 void SmoothedSurfaceSlopeXAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
 }/*}}}*/
+
+/*Numerics*/
+void SmoothedSurfaceSlopeXAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16675)
@@ -43,2 +43,7 @@
 void SmoothedSurfaceSlopeYAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
 }/*}}}*/
+
+/*Numerics*/
+void SmoothedSurfaceSlopeYAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16675)
@@ -800,2 +800,126 @@
 #endif
 }/*}}}*/
+
+/*Numerics*/
+void StressbalanceAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+
+	int approximation;
+	element->GetInputValue(&approximation,ApproximationEnum);
+	switch(approximation){
+		case FSApproximationEnum: case NoneApproximationEnum:
+			GetSolutionFromInputsFS(solution,element);
+			return;
+		case SSAApproximationEnum: case HOApproximationEnum: case SIAApproximationEnum:
+			GetSolutionFromInputsHoriz(solution,element);
+			return;
+		case SSAHOApproximationEnum: case HOFSApproximationEnum: case SSAFSApproximationEnum:
+			/*the elements around will create the solution*/
+			return;
+		default:
+			_error_("Approximation "<<EnumToStringx(approximation)<<" not supported");
+	}
+}/*}}}*/
+void StressbalanceAnalysis::GetSolutionFromInputsFS(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+
+	int*         vdoflist=NULL;
+	int*         pdoflist=NULL;
+	Input*       vz_input=NULL;
+	int          meshtype,dim;
+	IssmDouble   vx,vy,vz,p;
+	IssmDouble   FSreconditioning;
+
+	/*Get some parameters*/
+	element->FindParam(&meshtype,MeshTypeEnum);
+	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+	switch(meshtype){
+		case Mesh2DverticalEnum: dim = 2; break;
+		case Mesh3DEnum:         dim = 3; break;
+		default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet");
+	}
+
+	/*Fetch number of nodes and dof for this finite element*/
+	int vnumnodes = element->NumberofNodesVelocity();
+	int pnumnodes = element->NumberofNodesPressure();
+	int vnumdof   = vnumnodes*dim;
+	int pnumdof   = pnumnodes*1;
+
+	/*Initialize values*/
+	IssmDouble* vvalues = xNew<IssmDouble>(vnumdof);
+	IssmDouble* pvalues = xNew<IssmDouble>(pnumdof);
+
+	/*Get dof list: */
+	element->GetDofListVelocity(&vdoflist,GsetEnum);
+	element->GetDofListPressure(&pdoflist,GsetEnum);
+	Input*     vx_input=element->GetInput(VxEnum);       _assert_(vx_input);
+	Input*     vy_input=element->GetInput(VyEnum);       _assert_(vy_input);
+	if(dim==3) vz_input=element->GetInput(VzEnum);       _assert_(vz_input);
+	Input*     p_input =element->GetInput(PressureEnum); _assert_(p_input);
+
+	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+
+	/*Ok, we have the velocities in inputs, fill in solution */
+	Gauss* gauss = element->NewGauss();
+	for(int i=0;i<vnumnodes;i++){
+		gauss->GaussNode(element->VelocityInterpolation(),i);
+		vx_input->GetInputValue(&vx,gauss);
+		vy_input->GetInputValue(&vy,gauss);
+		vvalues[i*dim+0]=vx;
+		vvalues[i*dim+1]=vy;
+		if(dim==3){
+			vz_input->GetInputValue(&vz,gauss);
+			vvalues[i*dim+2]=vz;
+		}
+	}
+	for(int i=0;i<pnumnodes;i++){
+		gauss->GaussNode(element->PressureInterpolation(),i);
+		p_input->GetInputValue(&p ,gauss);
+		pvalues[i]=p/FSreconditioning;
+	}
+
+	/*Add value to global vector*/
+	solution->SetValues(vnumdof,vdoflist,vvalues,INS_VAL);
+	solution->SetValues(pnumdof,pdoflist,pvalues,INS_VAL);
+
+	/*Free ressources:*/
+	delete gauss;
+	xDelete<int>(pdoflist);
+	xDelete<int>(vdoflist);
+	xDelete<IssmDouble>(pvalues);
+	xDelete<IssmDouble>(vvalues);
+}/*}}}*/
+void StressbalanceAnalysis::GetSolutionFromInputsHoriz(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+
+	IssmDouble   vx,vy;
+	int*         doflist = NULL;
+
+	/*Fetch number of nodes and dof for this finite element*/
+	int numnodes = element->GetNumberOfNodes();
+	int numdof   = numnodes*2;
+
+	/*Fetch dof list and allocate solution vector*/
+	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+	IssmDouble* values = xNew<IssmDouble>(numdof);
+
+	/*Get inputs*/
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+
+	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+	Gauss* gauss=element->NewGauss();
+	for(int i=0;i<numnodes;i++){
+		gauss->GaussNode(element->FiniteElement(),i);
+
+		/*Recover vx and vy*/
+		vx_input->GetInputValue(&vx,gauss);
+		vy_input->GetInputValue(&vy,gauss);
+		values[i*NDOF2+0]=vx;
+		values[i*NDOF2+1]=vy;
+	}
+
+	solution->SetValues(numdof,doflist,values,INS_VAL);
+
+	/*Free ressources:*/
+	delete gauss;
+	xDelete<IssmDouble>(values);
+	xDelete<int>(doflist);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16675)
@@ -18,4 +18,7 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+		void GetSolutionFromInputsFS(Vector<IssmDouble>* solution,Element* element);
+		void GetSolutionFromInputsHoriz(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16675)
@@ -132,2 +132,37 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void StressbalanceSIAAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+
+	IssmDouble vx,vy;
+	int       *doflist = NULL;
+
+	/*Fetch number of nodes and initialize values*/
+	int         numnodes = element->GetNumberOfNodes();
+	int         numdof   = numnodes*2;
+	IssmDouble* values   = xNew<IssmDouble>(numdof);
+
+	/*Get dof list and inputs */
+	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+
+	/*Ok, we have the velocities in inputs, fill in solution */
+	Gauss* gauss=element->NewGauss();
+	for(int i=0;i<numnodes;i++){
+		gauss->GaussVertex(i);
+		vx_input->GetInputValue(&vx,gauss);
+		vy_input->GetInputValue(&vy,gauss);
+		values[i*2+0]=vx;
+		values[i*2+1]=vy;
+	}
+
+	/*Add value to global vector*/
+	solution->SetValues(numdof,doflist,values,INS_VAL);
+
+	/*Free ressources:*/
+	delete gauss;
+	xDelete<int>(doflist);
+	xDelete<IssmDouble>(values);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16675)
@@ -94,2 +94,7 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void StressbalanceVerticalAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	   _error_("not implemented yet");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16675)
@@ -110,2 +110,7 @@
 
 }/*}}}*/
+
+/*Numerics*/
+void ThermalAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+	element->GetSolutionFromInputsOneDof(solution,TemperatureEnum);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16675)
@@ -18,4 +18,5 @@
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
 		void CreateLoads(Loads* loads, IoModel* iomodel);
+		void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16675)
@@ -21,4 +21,6 @@
 class Vertices;
 class Materials;
+class Input;
+class Gauss;
 template <class doublematrix> class Matrix;
 template <class doubletype> class Vector;
@@ -40,5 +42,12 @@
 		virtual void   CreatePVector(Vector<IssmDouble>* pf)=0;
 		virtual void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0;
+		virtual void   FindParam(int* pvalue,int paramenum)=0;
+		virtual void   FindParam(IssmDouble* pvalue,int paramenum)=0;
+		virtual int    FiniteElement(void)=0;
+		virtual void	GetDofList(int** pdoflist,int approximation_enum,int setenum)=0;
+		virtual void	GetDofListVelocity(int** pdoflist,int setenum)=0;
+		virtual void	GetDofListPressure(int** pdoflist,int setenum)=0;
 		virtual void   GetSolutionFromInputs(Vector<IssmDouble>* solution)=0;
+		virtual void   GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum)=0;
 		virtual int    GetNodeIndex(Node* node)=0;
 		virtual int    GetNumberOfNodes(void)=0;
@@ -52,5 +61,9 @@
 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype)=0;
 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue)=0;
+		virtual Input* GetInput(int inputenum)=0;
 		virtual void   GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
+		virtual void   GetInputValue(bool* pvalue,int enum_type)=0;
+		virtual void   GetInputValue(int* pvalue,int enum_type)=0;
+		virtual void   GetInputValue(IssmDouble* pvalue,int enum_type)=0;
 		virtual void   GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
 
@@ -66,4 +79,7 @@
 
 		virtual int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
+		virtual int    NumberofNodesVelocity(void)=0;
+		virtual int    NumberofNodesPressure(void)=0;
+		virtual Gauss* NewGauss(void)=0;
 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
@@ -73,4 +89,6 @@
 		virtual void   SmbGradients()=0;
 		virtual void   ResetCoordinateSystem()=0;
+		virtual int    VelocityInterpolation()=0;
+		virtual int    PressureInterpolation()=0;
 
 		#ifdef _HAVE_RESPONSES_
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16675)
@@ -918,4 +918,19 @@
 }
 /*}}}*/
+/*FUNCTION Penta::FindParam(int* pvalue,int paramenum){{{*/
+void Penta::FindParam(int* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Penta::FindParam(IssmDouble* pvalue,int paramenum){{{*/
+void Penta::FindParam(IssmDouble* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Penta::FiniteElement{{{*/
+int Penta::FiniteElement(void){
+	return this->element_type;
+}
+/*}}}*/
 /*FUNCTION Penta::ObjectEnum{{{*/
 int Penta::ObjectEnum(void){
@@ -1316,4 +1331,9 @@
 }
 /*}}}*/
+/*FUNCTION Penta::GetInput(int inputenum) {{{*/
+Input* Penta::GetInput(int inputenum){
+	return inputs->GetInput(inputenum);
+}
+/*}}}*/
 /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
 void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
@@ -1413,4 +1433,28 @@
 }
 /*}}}*/
+/*FUNCTION Penta::GetInputValue(bool* pvalue,int inputenum) {{{*/
+void Penta::GetInputValue(bool* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
+/*FUNCTION Penta::GetInputValue(int* pvalue,int inputenum) {{{*/
+void Penta::GetInputValue(int* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
+/*FUNCTION Penta::GetInputValue(IssmDouble* pvalue,int inputenum) {{{*/
+void Penta::GetInputValue(IssmDouble* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
 /*FUNCTION Penta::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
 void Penta::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){
@@ -2765,4 +2809,19 @@
 	if(found)*pvalue=value;
 	return found;
+}
+/*}}}*/
+/*FUNCTION Penta::NewGauss{{{*/
+Gauss* Penta::NewGauss(void){
+	return new GaussPenta();
+}
+/*}}}*/
+/*FUNCTION Penta::NumberofNodesPressure{{{*/
+int Penta::NumberofNodesPressure(void){
+	return PentaRef::NumberofNodesPressure();
+}
+/*}}}*/
+/*FUNCTION Penta::NumberofNodesVelocity{{{*/
+int Penta::NumberofNodesVelocity(void){
+	return PentaRef::NumberofNodesVelocity();
 }
 /*}}}*/
@@ -3457,4 +3516,14 @@
 	/*Clean up and return*/
 	delete gauss;
+}
+/*}}}*/
+/*FUNCTION Penta::VelocityInterpolation{{{*/
+int Penta::VelocityInterpolation(void){
+	return PentaRef::VelocityInterpolation();
+}
+/*}}}*/
+/*FUNCTION Penta::PressureInterpolation{{{*/
+int Penta::PressureInterpolation(void){
+	return PentaRef::PressureInterpolation();
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16675)
@@ -74,4 +74,7 @@
 		void   ComputeStressTensor();
 		void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+		void   FindParam(int* pvalue,int paramenum);
+		void   FindParam(IssmDouble* pvalue,int paramenum);
+		int    FiniteElement(void);
 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
 		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
@@ -81,4 +84,7 @@
 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
 		void   Delta18oParameterization(void);
+		void	 GetDofList(int** pdoflist,int approximation_enum,int setenum);
+		void	 GetDofListVelocity(int** pdoflist,int setenum);
+		void	 GetDofListPressure(int** pdoflist,int setenum);
 		int    GetNodeIndex(Node* node);
 		void   GetNodesSidList(int* sidlist);
@@ -86,4 +92,5 @@
 		int    GetNumberOfNodes(void);
 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+		void   GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
 		IssmDouble GetZcoord(GaussPenta* gauss);
 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
@@ -94,4 +101,8 @@
 		void   InputDuplicate(int original_enum,int new_enum);
 		void   InputScale(int enum_type,IssmDouble scale_factor);
+		int    NumberofNodesVelocity(void);
+		int    NumberofNodesPressure(void);
+		int    VelocityInterpolation();
+		int    PressureInterpolation();
 
 		void   ResultInterpolation(int* pinterpolation,int output_enum);
@@ -181,7 +192,5 @@
 		ElementVector* CreatePVectorL2ProjectionBase(void);
 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
-		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
-		void	         GetDofListVelocity(int** pdoflist,int setenum);
-		void	         GetDofListPressure(int** pdoflist,int setenum);
+
 		void	         GetVertexPidList(int* doflist);
 		void           GetVertexSidList(int* sidlist);
@@ -191,4 +200,5 @@
 		int            GetElementType(void);
 		void           GetElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
+		Input*         GetInput(int inputenum);
 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
@@ -196,4 +206,7 @@
 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+		void           GetInputValue(bool* pvalue,int enum_type);
+		void           GetInputValue(int* pvalue,int enum_type);
+		void           GetInputValue(IssmDouble* pvalue,int enum_type);
 		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
 		void	         GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
@@ -218,4 +231,5 @@
 		bool           IsNodeOnShelfFromFlags(IssmDouble* flags);
 		bool           NoIceInElement(void); 
+		Gauss*         NewGauss(void);
 		IssmDouble     MinEdgeLength(IssmDouble xyz_list[6][3]);
 		void	         SetClone(int* minranks);
@@ -319,5 +333,4 @@
 		void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode);
 		void    GetHydrologyTransfer(Vector<IssmDouble>* transfer);
-		void    GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type);
 		void    HydrologyEPLGetActive(Vector<IssmDouble>* active_vec);
 		void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16675)
@@ -88,4 +88,19 @@
 }
 /*}}}*/
+/*FUNCTION Seg::FindParam(int* pvalue,int paramenum){{{*/
+void Seg::FindParam(int* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Seg::FindParam(IssmDouble* pvalue,int paramenum){{{*/
+void Seg::FindParam(IssmDouble* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Seg::FiniteElement{{{*/
+int Seg::FiniteElement(void){
+	return this->element_type;
+}
+/*}}}*/
 /*FUNCTION Seg::DeepEcho{{{*/
 void Seg::DeepEcho(void){
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16675)
@@ -78,4 +78,10 @@
 		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("not implemented yet");};
 		void        Delta18oParameterization(void){_error_("not implemented yet");};
+		void        FindParam(int* pvalue,int paramenum);
+		void        FindParam(IssmDouble* pvalue,int paramenum);
+		int         FiniteElement(void);
+		void        GetDofList(int** pdoflist,int approximation_enum,int setenum){_error_("not implemented yet");};
+		void        GetDofListVelocity(int** pdoflist,int setenum){_error_("not implemented yet");};
+		void        GetDofListPressure(int** pdoflist,int setenum){_error_("not implemented yet");};
 		int         GetNodeIndex(Node* node){_error_("not implemented yet");};
 		void        GetNodesSidList(int* sidlist){_error_("not implemented yet");};
@@ -86,9 +92,18 @@
 		bool        IsFloating(){_error_("not implemented yet");};
 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");};
+		int         NumberofNodesVelocity(void){_error_("not implemented yet");};
+		int         NumberofNodesPressure(void){_error_("not implemented yet");};
+		int         VelocityInterpolation(void){_error_("not implemented yet");};
+		int         PressureInterpolation(void){_error_("not implemented yet");};
 		bool        NoIceInElement(){_error_("not implemented yet");};
-		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype){_error_("not implemented yet");};
-		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){_error_("not implemented yet");};
-		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
-		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
+		Input*      GetInput(int inputenum){_error_("not implemented yet");};
+		void        GetInputListOnVertices(IssmDouble* pvalue,int enumtype){_error_("not implemented yet");};
+		void        GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){_error_("not implemented yet");};
+		void        GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
+		void        GetInputValue(bool* pvalue,int enum_type){_error_("not implemented yet");};
+		void        GetInputValue(int* pvalue,int enum_type){_error_("not implemented yet");};
+		void        GetInputValue(IssmDouble* pvalue,int enum_type){_error_("not implemented yet");};
+		void        GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
+		Gauss*      NewGauss(void){_error_("not implemented yet");};
 		#ifdef _HAVE_THERMAL_
 		void UpdateBasalConstraintsEnthalpy(void){_error_("not implemented yet");};
@@ -104,4 +119,5 @@
 		#endif
 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution){_error_("not implemented yet");};
+		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
 		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16675)
@@ -867,4 +867,19 @@
 }
 /*}}}*/
+/*FUNCTION Tria::FindParam(int* pvalue,int paramenum){{{*/
+void Tria::FindParam(int* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Tria::FindParam(IssmDouble* pvalue,int paramenum){{{*/
+void Tria::FindParam(IssmDouble* pvalue,int paramenum){
+	this->parameters->FindParam(pvalue,paramenum);
+}
+/*}}}*/
+/*FUNCTION Tria::FiniteElement{{{*/
+int Tria::FiniteElement(void){
+	return this->element_type;
+}
+/*}}}*/
 /*FUNCTION Tria::ObjectEnum{{{*/
 int Tria::ObjectEnum(void){
@@ -1311,4 +1326,9 @@
 }
 /*}}}*/
+/*FUNCTION Tria::GetInput(int inputenum) {{{*/
+Input* Tria::GetInput(int inputenum){
+	return inputs->GetInput(inputenum);
+}
+/*}}}*/
 /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
 void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
@@ -1429,4 +1449,28 @@
 }
 /*}}}*/
+/*FUNCTION Tria::GetInputValue(bool* pvalue,int inputenum) {{{*/
+void Tria::GetInputValue(bool* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
+/*FUNCTION Tria::GetInputValue(int* pvalue,int inputenum) {{{*/
+void Tria::GetInputValue(int* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
+/*FUNCTION Tria::GetInputValue(IssmDouble* pvalue,int inputenum) {{{*/
+void Tria::GetInputValue(IssmDouble* pvalue,int inputenum){
+
+	Input* input=inputs->GetInput(inputenum);
+	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
+	input->GetInputValue(pvalue);
+
+}/*}}}*/
 /*FUNCTION Tria::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
 void Tria::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){
@@ -2327,4 +2371,9 @@
 }
 /*}}}*/
+/*FUNCTION Tria::NewGauss{{{*/
+Gauss* Tria::NewGauss(void){
+	return new GaussTria();
+}
+/*}}}*/
 /*FUNCTION Tria::NoIceInElement {{{*/
 bool   Tria::NoIceInElement(){
@@ -2372,4 +2421,24 @@
 	if(found)*pvalue=value;
 	return found;
+}
+/*}}}*/
+/*FUNCTION Tria::VelocityInterpolation{{{*/
+int Tria::VelocityInterpolation(void){
+	return TriaRef::VelocityInterpolation();
+}
+/*}}}*/
+/*FUNCTION Tria::PressureInterpolation{{{*/
+int Tria::PressureInterpolation(void){
+	return TriaRef::PressureInterpolation();
+}
+/*}}}*/
+/*FUNCTION Tria::NumberofNodesPressure{{{*/
+int Tria::NumberofNodesPressure(void){
+	return TriaRef::NumberofNodesPressure();
+}
+/*}}}*/
+/*FUNCTION Tria::NumberofNodesVelocity{{{*/
+int Tria::NumberofNodesVelocity(void){
+	return TriaRef::NumberofNodesVelocity();
 }
 /*}}}*/
@@ -7338,6 +7407,4 @@
 }
 /*}}}*/
-
-
 #endif
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16675)
@@ -79,4 +79,10 @@
 		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
 		void        Delta18oParameterization(void);
+		void        FindParam(int* pvalue,int paramenum);
+		void        FindParam(IssmDouble* pvalue,int paramenum);
+		int         FiniteElement(void);
+		void	      GetDofList(int** pdoflist,int approximation_enum,int setenum);
+		void	      GetDofListVelocity(int** pdoflist,int setenum);
+		void	      GetDofListPressure(int** pdoflist,int setenum);
 		int         GetNodeIndex(Node* node);
 		void        GetNodesSidList(int* sidlist);
@@ -95,6 +101,9 @@
 		bool        IsFloating();
 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+		int         NumberofNodesVelocity(void);
+		int         NumberofNodesPressure(void);
 		bool        NoIceInElement();
 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution);
+		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
 		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
@@ -109,4 +118,6 @@
 		void        ResetCoordinateSystem(void);
 		void	      SmbGradients();
+		int         VelocityInterpolation();
+		int         PressureInterpolation();
 		IssmDouble  SurfaceArea(void);
 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
@@ -220,7 +231,5 @@
 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
 		int            GetElementType(void);
-		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
-		void	         GetDofListVelocity(int** pdoflist,int setenum);
-		void	         GetDofListPressure(int** pdoflist,int setenum);
+
 		void	         GetVertexPidList(int* doflist);
 		void           GetVertexSidList(int* sidlist);
@@ -230,4 +239,5 @@
 		void           GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[2][3]);
 		void           GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum);
+		Input*         GetInput(int inputenum);
 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
@@ -236,4 +246,7 @@
 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+		void           GetInputValue(bool* pvalue,int enum_type);
+		void           GetInputValue(int* pvalue,int enum_type);
+		void           GetInputValue(IssmDouble* pvalue,int enum_type);
 		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
 		void           GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussTria* gauss, Input* vx_input, Input* vy_input);
@@ -241,4 +254,5 @@
 		void	         InputUpdateFromSolutionMasstransport(IssmDouble* solution);
 		bool	         IsInput(int name);
+		Gauss*         NewGauss(void);
 		void	         SetClone(int* minranks);
 		Seg*	         SpawnSeg(int index1,int index2);
@@ -294,5 +308,4 @@
 		ElementVector* CreatePVectorHydrologyDCInefficient(void);
 		ElementVector* CreatePVectorHydrologyDCEfficient(void);
-		void    GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
 		void    CreateHydrologyWaterVelocityInput(void);
 		void	  InputUpdateFromSolutionHydrology(IssmDouble* solution);
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16675)
@@ -112,9 +112,6 @@
 void BoolInput::GetInputValue(IssmDouble* pvalue){_error_("not supported yet!");}
 /*}}}*/
-/*FUNCTION BoolInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
-void BoolInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
-void BoolInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not supported yet!");}
+/*FUNCTION BoolInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void BoolInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){_error_("not supported yet!");}
 /*}}}*/
 /*FUNCTION BoolInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){{{*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16675)
@@ -47,11 +47,7 @@
 		void GetInputValue(int* pvalue);
 		void GetInputValue(IssmDouble* pvalue);
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16675)
@@ -235,10 +235,6 @@
 	values->GetInputValue(pvalue);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputValue(IssmDouble* pvalue){{{*/
-void ControlInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){
-	values->GetInputValue(pvalue,gauss);
-}/*}}}*/
-/*FUNCTION ControlInput::GetInputValue(IssmDouble* pvalue){{{*/
-void ControlInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
+/*FUNCTION ControlInput::GetInputValue(Issm* pvalue,Gauss* gauss){{{*/
+void ControlInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){
 	values->GetInputValue(pvalue,gauss);
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16675)
@@ -53,11 +53,7 @@
 		void GetInputValue(int* pvalue);
 		void GetInputValue(IssmDouble* pvalue);
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16675)
@@ -158,6 +158,6 @@
 }
 /*}}}*/
-/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){{{*/
-void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){
+/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss,int id){{{*/
+void DatasetInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss,int id){
 
 	int  offset = -1;
@@ -172,16 +172,2 @@
 }
 /*}}}*/
-/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int id){{{*/
-void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int id){
-
-	int  offset = -1;
-	_assert_(this->numids == this->inputs->Size());
-
-	/*Get requested input within dataset*/
-	for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
-	if(offset<0) _error_("Could not find input of id "<<id);
-
-	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(offset));
-	input->GetInputValue(pvalue,gauss);
-}
-/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16675)
@@ -48,11 +48,7 @@
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index);
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16675)
@@ -120,9 +120,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
-void DoubleInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){*pvalue=this->value;}
-/*}}}*/
-/*FUNCTION DoubleInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
-void DoubleInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){*pvalue=this->value;}
+/*FUNCTION DoubleInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void DoubleInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){*pvalue=this->value;}
 /*}}}*/
 /*FUNCTION DoubleInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){{{*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16675)
@@ -46,11 +46,7 @@
 		void GetInputValue(int* pvalue);
 		void GetInputValue(IssmDouble* pvalue);
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16675)
@@ -11,4 +11,5 @@
 #include "../../shared/shared.h"
 class Node;
+class Gauss;
 class GaussTria;
 class GaussSeg;
@@ -28,11 +29,7 @@
 		virtual void GetInputValue(int* pvalue)=0;
 		virtual void GetInputValue(IssmDouble* pvalue)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index)=0;
-		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index)=0;
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss)=0;
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time)=0;
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index)=0;
 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss)=0;
 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss)=0;
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16675)
@@ -112,9 +112,6 @@
 }
 /*}}}*/
-/*FUNCTION IntInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
-void IntInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not supported yet!");}
-/*}}}*/
-/*FUNCTION IntInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
-void IntInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not supported yet!");}
+/*FUNCTION IntInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void IntInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){_error_("not supported yet!");}
 /*}}}*/
 /*FUNCTION IntInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){{{*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16675)
@@ -47,11 +47,7 @@
 		void GetInputValue(int* pvalue);
 		void GetInputValue(IssmDouble* pvalue);
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16675)
@@ -137,9 +137,10 @@
 
 /*Object functions*/
-/*FUNCTION PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
-void PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
+/*FUNCTION PentaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void PentaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){
 
 	/*Call PentaRef function*/
-	PentaRef::GetInputValue(pvalue,&values[0],gauss);
+	_assert_(gauss->Enum()==GaussPentaEnum);
+	PentaRef::GetInputValue(pvalue,&values[0],(GaussPenta*)gauss);
 
 }
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16675)
@@ -46,11 +46,7 @@
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 16675)
@@ -96,9 +96,10 @@
 }
 /*}}}*/
-/*FUNCTION SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){{{*/
-void SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){
+/*FUNCTION SegInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void SegInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){
 
 	/*Call SegRef function*/
-	SegRef::GetInputValue(pvalue,&values[0],gauss);
+	_assert_(gauss->Enum()==GaussSegEnum);
+	SegRef::GetInputValue(pvalue,&values[0],(GaussSeg*)gauss);
 
 }
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16675)
@@ -47,11 +47,8 @@
 		void GetInputValue(int* pvalue){_error_("not implemented yet");}
 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");}
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss);
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16675)
@@ -149,6 +149,6 @@
 
 /*Object functions*/
-/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
-void TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){
+/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void TransientInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){
 	IssmDouble time;
 
@@ -165,34 +165,6 @@
 }
 /*}}}*/
-/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
-void TransientInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
-	IssmDouble time;
-
-	/*First, recover current time from parameters: */
-	this->parameters->FindParam(&time,TimeEnum);
-
-	/*Retrieve interpolated values for this time step: */
-	Input* input=GetTimeInput(time);
-
-	/*Call input function*/
-	input->GetInputValue(pvalue,gauss);
-
-	delete input;
-}
-/*}}}*/
-/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){{{*/
-void TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){
-
-	/*Retrieve interpolated values for this time step: */
-	Input* input=GetTimeInput(time);
-
-	/*Call input function*/
-	input->GetInputValue(pvalue,gauss);
-
-	delete input;
-}
-/*}}}*/
-/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){{{*/
-void TransientInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){
+/*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){{{*/
+void TransientInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){
 
 	/*Retrieve interpolated values for this time step: */
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16675)
@@ -50,11 +50,7 @@
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time);
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16675)
@@ -124,9 +124,10 @@
 
 /*Object functions*/
-/*FUNCTION TriaInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
-void TriaInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){
+/*FUNCTION TriaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){{{*/
+void TriaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){
 
 	/*Call TriaRef function*/
-	TriaRef::GetInputValue(pvalue,&values[0],gauss);
+	_assert_(gauss->Enum()==GaussTriaEnum);
+	TriaRef::GetInputValue(pvalue,&values[0],(GaussTria*)gauss);
 
 }
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16675)
@@ -47,11 +47,7 @@
 		void GetInputValue(int* pvalue){_error_("not implemented yet");}
 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");}
-		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
Index: /issm/trunk-jpl/src/c/classes/gauss/Gauss.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/Gauss.h	(revision 16675)
+++ /issm/trunk-jpl/src/c/classes/gauss/Gauss.h	(revision 16675)
@@ -0,0 +1,22 @@
+/*!\file Gauss.h
+ * \brief: header file for vvirtual Gauss object
+ */
+
+#ifndef _GAUSS_H_
+#define _GAUSS_H_
+
+class Gauss{
+
+	public: 
+		virtual        ~Gauss(){};
+
+		virtual int  begin(void)=0;
+		virtual int  end(void)=0;
+		virtual void Echo(void)=0;
+		virtual int  Enum(void)=0;
+		virtual void GaussPoint(int ig)=0;
+		virtual void GaussVertex(int iv)=0;
+		virtual void GaussNode(int finitelement,int iv)=0;
+
+};
+#endif
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16675)
@@ -495,4 +495,9 @@
 }
 /*}}}*/
+/*FUNCTION GaussPenta::Enum{{{*/
+int GaussPenta::Enum(void){
+	return GaussPentaEnum;
+}
+/*}}}*/
 /*FUNCTION GaussPenta::GaussPoint{{{*/
 void GaussPenta::GaussPoint(int ig){
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16675)
@@ -8,7 +8,8 @@
 /*Headers:*/
 #include "../../shared/Numerics/types.h"
+#include "./Gauss.h"
 class GaussTria;
 
-class GaussPenta{
+class GaussPenta: public Gauss{
 
 	private:
@@ -43,4 +44,5 @@
 		int  end(void);
 		void Echo(void);
+		int  Enum(void);
 		void GaussPoint(int ig);
 		void GaussVertex(int iv);
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16675)
@@ -70,4 +70,9 @@
 }
 /*}}}*/
+/*FUNCTION GaussSeg::Enum{{{*/
+int GaussSeg::Enum(void){
+	return GaussSegEnum;
+}
+/*}}}*/
 /*FUNCTION GaussSeg::GaussPoint{{{*/
 void GaussSeg::GaussPoint(int ig){
@@ -79,4 +84,17 @@
 	 weight=weights[ig];
 	 coord1=coords1[ig];
+}
+/*}}}*/
+/*FUNCTION GaussSeg::GaussVertex{{{*/
+void GaussSeg::GaussVertex(int iv){
+
+	_error_("not supported");
+}
+/*}}}*/
+/*FUNCTION GaussSeg::GaussNode{{{*/
+void GaussSeg::GaussNode(int finiteelement,int iv){
+
+	_error_("not supported");
+
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.h	(revision 16675)
@@ -8,6 +8,7 @@
 /*Headers:*/
 #include "../../shared/Numerics/types.h"
+#include "./Gauss.h"
 
-class GaussSeg{
+class GaussSeg: public Gauss{
 
 	private:
@@ -30,5 +31,8 @@
 		int  end(void);
 		void Echo(void);
+		int  Enum(void);
 		void GaussPoint(int ig);
+		void GaussVertex(int iv);
+		void GaussNode(int finitelement,int iv);
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16675)
@@ -339,4 +339,9 @@
 	_printf_("   coord3 = " << coord3 << "\n");
 
+}
+/*}}}*/
+/*FUNCTION GaussTria::Enum{{{*/
+int GaussTria::Enum(void){
+	return GaussTriaEnum;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16675)
@@ -8,6 +8,7 @@
 /*Headers:*/
 #include "../../shared/Numerics/types.h"
+#include "./Gauss.h"
 
-class GaussTria{
+class GaussTria: public Gauss{
 
 	private:
@@ -38,4 +39,5 @@
 		int  end(void);
 		void Echo(void);
+		int  Enum(void);
 		void GaussFromCoords(IssmDouble x1,IssmDouble y1,IssmDouble* xyz_list);
 		void GaussPoint(int ig);
Index: /issm/trunk-jpl/src/c/classes/gauss/gaussobjects.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/gaussobjects.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/classes/gauss/gaussobjects.h	(revision 16675)
@@ -6,4 +6,5 @@
 #define ALL_GAUSS_OBJECTS_H_
 
+#include "./Gauss.h"
 #include "./GaussSeg.h"
 #include "./GaussTria.h"
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 16675)
@@ -11,7 +11,5 @@
 	/*intermediary: */
 	int      gsize;
-	Element* element = NULL;
-
-	int configuration_type;
+	int      configuration,analysisenum;
 
 	/*output: */
@@ -21,9 +19,10 @@
 
 	/*retrive parameters: */
-	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+	femmodel->parameters->FindParam(&configuration,ConfigurationTypeEnum);
+	femmodel->parameters->FindParam(&analysisenum,AnalysisTypeEnum);
 
 	/*Get size of vector: */
-	gsize=femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
-	if(gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
+	gsize=femmodel->nodes->NumberOfDofs(configuration,GsetEnum);
+	if(gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration "<<EnumToStringx(configuration));
 
 	/*Initialize solution: */
@@ -31,8 +30,10 @@
 
 	/*Go through elements and plug solution: */
+	Analysis* analysis = EnumToAnalysis(analysisenum);
 	for(int i=0;i<femmodel->elements->Size();i++){
-		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
-		element->GetSolutionFromInputs(solution);
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+		analysis->GetSolutionFromInputs(solution,element);
 	}
+	delete analysis;
 
 	/*Assemble vector: */
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 16675)
@@ -7,4 +7,5 @@
 
 #include "../../classes/classes.h"
+#include "../../analyses/analyses.h"
 
 /* local prototypes: */
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16675)
@@ -580,4 +580,9 @@
 	QmuMaskGroundediceLevelsetEnum,
 	/*}}}*/
+	/*Gauss{{{*/
+	GaussSegEnum,
+	GaussTriaEnum,
+	GaussPentaEnum,
+	/*}}}*/
 	/*Solver{{{*/
 	FSSolverEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16675)
@@ -561,4 +561,7 @@
 		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
 		case QmuMaskGroundediceLevelsetEnum : return "QmuMaskGroundediceLevelset";
+		case GaussSegEnum : return "GaussSeg";
+		case GaussTriaEnum : return "GaussTria";
+		case GaussPentaEnum : return "GaussPenta";
 		case FSSolverEnum : return "FSSolver";
 		case AdjointEnum : return "Adjoint";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16674)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16675)
@@ -573,4 +573,7 @@
 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
 	      else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;
+	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
+	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
+	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
Index: /issm/trunk-jpl/src/c/toolkits/objects/Matrix.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/objects/Matrix.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/toolkits/objects/Matrix.h	(revision 16675)
@@ -16,4 +16,5 @@
 #include <cstring>
 #include "../../shared/Enum/Enum.h"
+#include "../petsc/petscincludes.h"
 #include "../issm/issmtoolkit.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/toolkits/objects/Solver.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/objects/Solver.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/toolkits/objects/Solver.h	(revision 16675)
@@ -14,4 +14,5 @@
 #include "./Vector.h"
 #include "../issm/issmtoolkit.h"
+#include "../petsc/petscincludes.h"
 class Parameters;
 
Index: /issm/trunk-jpl/src/c/toolkits/objects/Vector.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/objects/Vector.h	(revision 16674)
+++ /issm/trunk-jpl/src/c/toolkits/objects/Vector.h	(revision 16675)
@@ -16,4 +16,5 @@
 #include <cstring>
 #include "../../shared/Enum/Enum.h"
+#include "../petsc/petscincludes.h"
 #include "../issm/issmtoolkit.h"
 /*}}}*/
