Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3820)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3821)
@@ -1419,4 +1419,21 @@
 }
 /*}}}*/
+/*FUNCTION DataSet::GetSolutionFromInputs{{{1*/
+void  DataSet::GetSolutionFromInputs(Vec solution, int analysis_type, int sub_analysis_type){
+
+	vector<Object*>::iterator object;
+	Element* element=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		if(EnumIsElement((*object)->Enum())){
+
+			element=(Element*)(*object);
+			element->GetSolutionFromInputs(solution,analysis_type,sub_analysis_type);
+		}
+		else ISSMERROR("%s%i%s"," object with id: ",(*object)->Id()," is not an element, in a function that deals only with elements!");
+	}
+}
+/*}}}*/
 /*FUNCTION DataSet::UpdateInputsFromConstant{{{1*/
 void  DataSet::UpdateInputsFromConstant(double constant, int name){
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3820)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3821)
@@ -79,4 +79,5 @@
 		void  UpdateInputsFromVector(bool* vector,int name, int type);
 		void  UpdateInputsFromSolution(double* solution,int analysis_type,int sub_analysis_type);
+		void  GetSolutionFromInputs(Vec solution, int analysis_type, int sub_analysis_type);
 		void  PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type);
 		void  PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
===================================================================
--- /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 3821)
+++ /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 3821)
@@ -0,0 +1,44 @@
+/*!\file GetSolutionFromInputsx
+ * \brief: update datasets using  parameter inputs
+ */
+
+#include "./GetSolutionFromInputsx.h"
+#include "../shared/shared.h"
+#include "../include/include.h"
+#include "../toolkits/toolkits.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+
+void	GetSolutionFromInputsx( Vec* psolution, DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials,  Parameters* parameters, int analysis_type, int sub_analysis_type){
+
+	/*intermediary: */
+	int gsize;
+
+	/*output: */
+	Vec solution=NULL;
+
+	/*First, get elements and loads configured: */
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	nodes->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
+
+	/*Get size of vector: */
+	gsize=nodes->NumberOfDofs();
+	
+	/*Initialize solution: */
+	solution=NewVec(gsize);
+	
+	/*Go through elements and plug solution: */
+	elements->GetSolutionFromInputs(solution,analysis_type,sub_analysis_type);
+
+	/*Elements drive the update: */
+	elements->GetSolutionFromInputs(solution,analysis_type,sub_analysis_type);
+
+	/*Assemble vector: */
+	VecAssemblyBegin(solution);
+	VecAssemblyEnd(solution);
+
+	/*Assign output pointers:*/
+	*psolution=solution;
+
+}
Index: /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.h
===================================================================
--- /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 3821)
+++ /issm/trunk/src/c/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 3821)
@@ -0,0 +1,15 @@
+/*!\file:  GetSolutionFromInputsx.h
+ * \brief header file for updating datasets from inputs
+ */ 
+
+#ifndef _GETSOLUTIONFROMINPUTSXX_H
+#define _GETSOLUTIONFROMINPUTSXX_H
+
+#include "../objects/objects.h"
+#include "../DataSet/DataSet.h"
+
+/* local prototypes: */
+void	GetSolutionFromInputsx( Vec* psolution, DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials,  Parameters* parameters, int analysis_type, int sub_analysis_type);
+
+#endif  /* _GETSOLUTIONFROMINPUTSXX_H */
+
Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 3820)
+++ /issm/trunk/src/c/Makefile.am	(revision 3821)
@@ -299,4 +299,6 @@
 					./UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.h\
 					./UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.cpp\
+					./GetSolutionFromInputsx/GetSolutionFromInputsx.h\
+					./GetSolutionFromInputsx/GetSolutionFromInputsx.cpp\
 					./UpdateInputsFromVectorx/UpdateInputsFromVectorx.h\
 					./UpdateInputsFromVectorx/UpdateInputsFromVectorx.cpp\
@@ -739,4 +741,6 @@
 					./UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.h\
 					./UpdateInputsFromSolutionx/UpdateInputsFromSolutionx.cpp\
+					./GetSolutionFromInputsx/GetSolutionFromInputsx.h\
+					./GetSolutionFromInputsx/GetSolutionFromInputsx.cpp\
 					./UpdateInputsFromVectorx/UpdateInputsFromVectorx.h\
 					./UpdateInputsFromVectorx/UpdateInputsFromVectorx.cpp\
Index: /issm/trunk/src/c/modules.h
===================================================================
--- /issm/trunk/src/c/modules.h	(revision 3820)
+++ /issm/trunk/src/c/modules.h	(revision 3821)
@@ -62,3 +62,4 @@
 #include "./ExtrudeInputx/ExtrudeInputx.h"
 #include "./InputToResultx/InputToResultx.h"
+#include "./GetSolutionFromInputsx/GetSolutionFromInputsx.h"
 #endif
Index: /issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3821)
@@ -302,4 +302,9 @@
 }
 /*}}}*/
+/*FUNCTION Beam::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);{{{1*/
+void  Beam::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type){
+	ISSMERROR(" not supported yet!");
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk/src/c/objects/Elements/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3821)
@@ -66,4 +66,5 @@
 		void  CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg,  int analysis_type,int sub_analysis_type);
+		void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
 		void  GetDofList(int* doflist,int* pnumberofdofs);
 		void  GetDofList1(int* doflist);
Index: /issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Element.h	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Element.h	(revision 3821)
@@ -28,4 +28,5 @@
 		virtual void   CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type)=0;
 		virtual void   CreatePVector(Vec pg,  int analysis_type,int sub_analysis_type)=0;
+		virtual void   GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type)=0;
 		virtual void   GetNodes(void** nodes)=0;
 		virtual void*  GetMatPar()=0;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3821)
@@ -531,4 +531,9 @@
 /*FUNCTION Penta::UpdateInputsFromSolutionBalancedvelocities {{{1*/
 void  Penta::UpdateInputsFromSolutionBalancedvelocities(double* solution, int analysis_type, int sub_analysis_type){
+	ISSMERROR(" not supported yet!");
+}
+/*}}}*/
+/*FUNCTION Penta::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);{{{1*/
+void  Penta::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type){
 	ISSMERROR(" not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3821)
@@ -62,4 +62,5 @@
 		void  CreateKMatrixDiagnosticVert( Mat Kgg,  int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg,  int analysis_type,int sub_analysis_type);
+		void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
 		void  GetDofList(int* doflist,int* pnumberofdofs);
 		void  GetDofList1(int* doflist);
Index: /issm/trunk/src/c/objects/Elements/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3821)
@@ -240,4 +240,9 @@
 /*FUNCTION Sing::UpdateInputsFromSolution {{{1*/
 void  Sing::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){
+	ISSMERROR(" not supported yet!");
+}
+/*}}}*/
+/*FUNCTION Sing::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);{{{1*/
+void  Sing::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type){
 	ISSMERROR(" not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Elements/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3821)
@@ -65,5 +65,6 @@
 		void  CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg,  int analysis_type,int sub_analysis_type);
-				void  GetDofList(int* doflist,int* pnumberofdofs);
+		void  GetDofList(int* doflist,int* pnumberofdofs);
+		void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
 		void  GetDofList1(int* doflist);
 		void  CreateKMatrixDiagnosticHutter(Mat Kgg,int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3821)
@@ -485,4 +485,9 @@
 /*FUNCTION Tria::UpdateInputsFromSolutionBalancedvelocities {{{1*/
 void  Tria::UpdateInputsFromSolutionBalancedvelocities(double* solution, int analysis_type, int sub_analysis_type){
+	ISSMERROR(" not supported yet!");
+}
+/*}}}*/
+/*FUNCTION Tria::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);{{{1*/
+void  Tria::GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type){
 	ISSMERROR(" not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3820)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3821)
@@ -51,18 +51,11 @@
 		int   MyRank();
 		void  SetClone(int* minranks);
-		void    UpdateInputsFromVector(double* vector, int name, int type);
-		void    UpdateInputsFromVector(int* vector, int name, int type);
-		void    UpdateInputsFromVector(bool* vector, int name, int type);
-		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
-
-		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
-
+		
 		/*}}}*/
 		/*FUNCTION element numerical routines {{{1*/
 		void  CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg,  int analysis_type,int sub_analysis_type);
-				void  GetDofList(int* doflist,int* pnumberofdofs);
+		void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
+		void  GetDofList(int* doflist,int* pnumberofdofs);
 		void  GetDofList1(int* doflist);
 		void  CreateKMatrixDiagnosticHoriz(Mat Kgg,int analysis_type,int sub_analysis_type);
@@ -93,5 +86,4 @@
 		double SurfaceArea(int analysis_type,int sub_analysis_type);
 		double CostFunction(int analysis_type,int sub_analysis_type);
-
 		void  CreatePVectorDiagnosticHoriz(Vec pg,int analysis_type,int sub_analysis_type);
 		void  CreatePVectorDiagnosticBaseVert(Vec pg,int analysis_type,int sub_analysis_type);
@@ -123,7 +115,9 @@
 		double GetArea(void);
 		double GetAreaCoordinate(double x, double y, int which_one);
+		/*}}}*/
 
 		/*updates:*/
 		void  UpdateFromDakota(void* inputs);
+		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 		void  UpdateInputsFromSolutionDiagnosticHoriz( double* solution,int analysis_type,int sub_analysis_type);
 		void  UpdateInputsFromSolutionSlopeCompute( double* solution,int analysis_type,int sub_analysis_type);
@@ -133,6 +127,12 @@
 		void  UpdateInputsFromSolutionBalancedthickness2( double* solution,int analysis_type,int sub_analysis_type);
 		void  UpdateInputsFromSolutionBalancedvelocities( double* solution,int analysis_type,int sub_analysis_type);
+		void  UpdateInputsFromVector(double* vector, int name, int type);
+		void  UpdateInputsFromVector(int* vector, int name, int type);
+		void  UpdateInputsFromVector(bool* vector, int name, int type);
+		void  UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+		void  pdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
-		/*}}}*/
 
 };
Index: /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3820)
+++ /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3821)
@@ -58,4 +58,9 @@
 	count=1;
 	converged=0;
+
+	/*Start non-linear iteration using input velocity: */
+	GetSolutionFromInputsx(&ug, elements, nodes, vertices, loads, materials, parameters, analysis_type, sub_analysis_type);
+	Reducevectorgtofx(&uf, ug, fem->nodesets);
+
 	for(;;){
 
