Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 5577)
+++ /issm/trunk/src/c/Makefile.am	(revision 5578)
@@ -469,4 +469,6 @@
 					./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h\
 					./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\
+					./modules/InputArtificialNoisex/InputArtificialNoisex.h\
+					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
 					./modules/UpdateGeometryx/UpdateGeometryx.h\
 					./modules/UpdateGeometryx/UpdateGeometryx.cpp\
@@ -1020,4 +1022,6 @@
 					./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h\
 					./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\
+					./modules/InputArtificialNoisex/InputArtificialNoisex.h\
+					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
 					./modules/UpdateGeometryx/UpdateGeometryx.h\
 					./modules/UpdateGeometryx/UpdateGeometryx.cpp\
Index: /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp
===================================================================
--- /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 5578)
+++ /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 5578)
@@ -0,0 +1,20 @@
+/*!\file InputArtificialNoisex
+ * \brief: update datasets using  parameter inputs
+ */
+
+#include "./InputArtificialNoisex.h"
+#include "../../shared/shared.h"
+#include "../../include/include.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+void InputArtificialNoisex( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int enum_name,double min,double max){
+
+	int i;
+
+	/*Update elements, nodes, loads and materials from inputs: */
+	for(i=0;i<elements->Size();i++){
+		Element* element=(Element*)elements->GetObjectByOffset(i);
+		element->InputArtificialNoise(enum_name,min,max);
+	}
+}
Index: /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h
===================================================================
--- /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 5578)
+++ /issm/trunk/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 5578)
@@ -0,0 +1,14 @@
+/*!\file:  InputArtificialNoisex.h
+ * \brief header file for updating datasets from inputs
+ */ 
+
+#ifndef _INPUTARTIFICIALNOISEX_H
+#define _INPUTARTIFICIALNOISEX_H
+
+#include "../../objects/objects.h"
+#include "../../Container/Container.h"
+
+/* local prototypes: */
+void	InputArtificialNoisex( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int enum_name,double min,double max);
+
+#endif  /* _UPDATEINPUTSFROMVECTORXX_H */
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 5577)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 5578)
@@ -43,5 +43,5 @@
 	parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
 	parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
-	parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
+	parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,(IssmInt)iomodel->max_nonlinear_iterations));
 	parameters->AddObject(new DoubleParam(EpsVelEnum,iomodel->epsvel));
 	parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
Index: /issm/trunk/src/c/modules/modules.h
===================================================================
--- /issm/trunk/src/c/modules/modules.h	(revision 5577)
+++ /issm/trunk/src/c/modules/modules.h	(revision 5578)
@@ -42,4 +42,5 @@
 #include "./InputUpdateFromVectorx/InputUpdateFromVectorx.h"
 #include "./InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
+#include "./InputArtificialNoisex/InputArtificialNoisex.h"
 #include "./MassFluxx/MassFluxx.h"
 #include "./MaxAbsVxx/MaxAbsVxx.h"
Index: /issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Element.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Elements/Element.h	(revision 5578)
@@ -77,4 +77,5 @@
 		virtual void   GetVectorFromInputs(Vec vector,int NameEnum)=0;
 		virtual void   InputControlUpdate(double scalar,bool save_parameter)=0;
+		virtual void   InputArtificialNoise(int enum_type,double min,double max)=0;
 		virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
 		virtual void   AverageOntoPartition(Vec partition_contributions,Vec partition_areas,double* vertex_response,double* qmu_part)=0;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5577)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5578)
@@ -1255,4 +1255,17 @@
 	if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
 
+}
+/*}}}*/
+/*FUNCTION Penta::InputArtificialNoise{{{1*/
+void  Penta::InputArtificialNoise(int enum_type,double min,double max){
+
+	Input* input=NULL;
+
+	/*Make a copy of the original input: */
+	input=(Input*)this->inputs->GetInput(enum_type);
+	if(!input)ISSMERROR(" could not find old input with enum: %s",EnumToString(enum_type));
+
+	/*ArtificialNoise: */
+	input->ArtificialNoise(min,max);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 5578)
@@ -91,4 +91,5 @@
 		void   GradjDrag(Vec gradient);
 		void   InputControlUpdate(double scalar,bool save_parameter);
+		void   InputArtificialNoise(int enum_type,double min, double max);
 		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5577)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5578)
@@ -1526,4 +1526,17 @@
 	/*Scale: */
 	input->Scale(scale_factor);
+}
+/*}}}*/
+/*FUNCTION Tria::InputArtificialNoise{{{1*/
+void  Tria::InputArtificialNoise(int enum_type,double min,double max){
+
+	Input* input=NULL;
+
+	/*Make a copy of the original input: */
+	input=(Input*)this->inputs->GetInput(enum_type);
+	if(!input)ISSMERROR(" could not find old input with enum: %s",EnumToString(enum_type));
+
+	/*ArtificialNoise: */
+	input->ArtificialNoise(min,max);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 5578)
@@ -88,4 +88,5 @@
 		void   GradjDhDt(Vec gradient);
 		void   InputControlUpdate(double scalar,bool save_parameter);
+		void   InputArtificialNoise(int enum_type,double min, double max);
 		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 5578)
@@ -62,4 +62,5 @@
 		double InfinityNorm(void){ISSMERROR("InfinityNorm not implemented for booleans");};
 		void Scale(double scale_factor);
+		void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
 		void AXPY(Input* xinput,double scalar);
 		void Constrain(double cm_min, double cm_max);
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 5578)
@@ -60,4 +60,5 @@
 		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
+		void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
 		void AXPY(Input* xinput,double scalar);
 		void Constrain(double cm_min, double cm_max);
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 5578)
@@ -41,4 +41,5 @@
 		virtual double InfinityNorm(void)=0;
 		virtual void Scale(double scale_factor)=0;
+		virtual void ArtificialNoise(double min,double max)=0;
 		virtual void AXPY(Input* xinput,double scalar)=0;
 		virtual void Constrain(double cm_min, double cm_max)=0;
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 5578)
@@ -61,4 +61,5 @@
 		void ConstrainMin(double minimum){ISSMERROR("not implemented yet");};
 		void Scale(double scale_factor);
+		void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
 		void AXPY(Input* xinput,double scalar);
 		void Constrain(double cm_min, double cm_max);
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 5578)
@@ -62,4 +62,5 @@
 		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
+		void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
 		void AXPY(Input* xinput,double scalar);
 		void Constrain(double cm_min, double cm_max);
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 5578)
@@ -310,4 +310,20 @@
 }
 /*}}}*/
+/*FUNCTION TriaVertexInput::ArtificialNoise{{{1*/
+void TriaVertexInput::ArtificialNoise(double min,double max){
+
+	int i;
+	const int numgrids=3;
+	double noise;
+
+	/*Compute random number between bounds:
+	 * rand() outputs an integer in [0 RAND_MAX]
+	 * (double)rand()/RAND_MAX is in [0 1]
+	 */
+	 noise=min+(max-min)*(double)rand()/RAND_MAX;
+
+	for(i=0;i<numgrids;i++)values[i]=values[i]+noise;
+}
+/*}}}*/
 /*FUNCTION TriaVertexInput::AXPY{{{1*/
 void TriaVertexInput::AXPY(Input* xinput,double scalar){
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 5577)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 5578)
@@ -62,4 +62,5 @@
 		void ConstrainMin(double minimum);
 		void Scale(double scale_factor);
+		void ArtificialNoise(double min,double max);
 		void AXPY(Input* xinput,double scalar);
 		void Constrain(double cm_min, double cm_max);
Index: /issm/trunk/src/c/objects/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Numericalflux.cpp	(revision 5577)
+++ /issm/trunk/src/c/objects/Loads/Numericalflux.cpp	(revision 5578)
@@ -472,5 +472,5 @@
 		
 		UdotN=vx*normal[0]+vy*normal[1];
-		if (fabs(UdotN)<1.0e-9 && analysis_type==BalancedthicknessAnalysisEnum) printf("Edge number %i has a flux very small (u.n = %g ), which could lead to unaccurate results\n",id,UdotN);
+	//	if (fabs(UdotN)<1.0e-9 && analysis_type==BalancedthicknessAnalysisEnum) printf("Edge number %i has a flux very small (u.n = %g ), which could lead to unaccurate results\n",id,UdotN);
 
 		/*Get L and B: */
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 5577)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 5578)
@@ -83,6 +83,6 @@
 	if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[io_index]));
 	if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[io_index]));
-	if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,iomodel->numbernodetoelementconnectivity[io_index]));
-	if (analysis_type==DiagnosticHorizAnalysisEnum) this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->vertices_type[io_index]));
+	if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,(IssmInt)iomodel->numbernodetoelementconnectivity[io_index]));
+	if (analysis_type==DiagnosticHorizAnalysisEnum) this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->vertices_type[io_index]));
 
 	/*set single point constraints: */
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 5577)
+++ /issm/trunk/src/c/objects/objects.h	(revision 5578)
@@ -102,10 +102,10 @@
 #include "./Bamg/AdjacentTriangle.h"
 #include "./Bamg/Edge.h"
-#include "./Bamg/GeometricalVertex.h"
-#include "./Bamg/GeometricalEdge.h"
+#include "./Bamg/GeomVertex.h"
+#include "./Bamg/GeomEdge.h"
 #include "./Bamg/Curve.h"
 #include "./Bamg/Triangle.h"
 #include "./Bamg/ListofIntersectionTriangles.h"
-#include "./Bamg/GeometricalSubDomain.h"
+#include "./Bamg/GeomSubDomain.h"
 #include "./Bamg/SubDomain.h"
 #include "./Bamg/VertexOnGeom.h"
Index: /issm/trunk/src/c/solutions/gradient_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/gradient_core.cpp	(revision 5577)
+++ /issm/trunk/src/c/solutions/gradient_core.cpp	(revision 5578)
@@ -53,6 +53,7 @@
 
 	/*plug back into inputs: */
-	InputUpdateFromVectorx( femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,gradient,GradientEnum,VertexEnum);
-	InputUpdateFromVectorx( femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,old_gradient,OldGradientEnum,VertexEnum);
+	InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,gradient,GradientEnum,VertexEnum);
+	InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,old_gradient,OldGradientEnum,VertexEnum);
+	//InputArtificialNoisex(  femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,GradientEnum,-0.5,0.5);
 
 	/*Free ressources and return:*/
