Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3945)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3946)
@@ -132,4 +132,5 @@
 		Inputs* SpawnTriaInputs(int* indices);
 		Inputs* SpawnBeamInputs(int* indices);
+		Inputs* SpawnSingInputs(int  index  );
 		
 		void GetParameterValue(bool* pvalue,int enum_type);
Index: /issm/trunk/src/c/DataSet/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3945)
+++ /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3946)
@@ -602,4 +602,30 @@
 }
 /*}}}*/
+/*FUNCTION Inputs::SpawnSingInputs{{{1*/
+Inputs* Inputs::SpawnSingInputs(int index){
+
+	/*Intermediary*/
+	vector<Object*>::iterator object;
+	Input* inputin=NULL;
+	Input* inputout=NULL;
+
+	/*Output*/
+	Inputs* newinputs=new Inputs();
+
+	/*Go through inputs and call Spawn function*/
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Create new input*/
+		inputin=(Input*)(*object); 
+		inputout=inputin->SpawnSingInput(index);
+
+		/*Add input to new inputs*/
+		newinputs->AddObject(inputout);
+	}
+
+	/*Assign output pointer*/
+	return newinputs;
+}
+/*}}}*/
 /*FUNCTION Inputs::SpawnTriaInputs{{{1*/
 Inputs* Inputs::SpawnTriaInputs(int* indices){
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3946)
@@ -503,4 +503,43 @@
 
 	return beam;
+}
+/*}}}*/
+/*FUNCTION Penta::SpawnSing {{{1*/
+void* Penta::SpawnSing(int index){
+
+	Sing* sing=NULL;
+	int zero=0;
+	Hook       *sing_hnodes     = NULL;
+	Hook       *sing_hmatice    = NULL;
+	Hook       *sing_hmatpar    = NULL;
+	Parameters *sing_parameters = NULL;
+	Inputs     *sing_inputs     = NULL;
+
+	sing_hnodes =this->hnodes.Spawn(&index,1);
+	sing_hmatice=this->hmatice.Spawn(&zero,1);
+	sing_hmatpar=this->hmatpar.Spawn(&zero,1);
+	sing_parameters=this->parameters;
+	sing_inputs=(Inputs*)this->inputs->SpawnSingInputs(index);
+
+	sing=new Sing();
+	sing->id=this->id;
+	sing->inputs=sing_inputs;
+	sing->parameters=sing_parameters;
+
+	/*now deal with hooks and objects: */
+	sing->hnodes.copy(sing_hnodes);
+	sing->hmatice.copy(sing_hmatice);
+	sing->hmatpar.copy(sing_hmatpar);
+
+	/*recover objects: */
+	//sing->nodes=(Node**)sing->hnodes.deliverp();
+	//sing->matice=(Matice*)sing->hmatice.delivers();
+	//sing->matpar=(Matpar*)sing->hmatpar.delivers();
+
+	delete sing_hnodes;
+	delete sing_hmatice;
+	delete sing_hmatpar;
+
+	return sing;
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3946)
@@ -56,4 +56,5 @@
 		int   MarshallSize();
 		int   MyRank();
+		void*  SpawnSing(int g0);
 		void*  SpawnBeam(int g0, int g1);
 		void*  SpawnTria(int g0, int g1, int g2);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3946)
@@ -368,4 +368,87 @@
 }
 /*}}}*/
+/*FUNCTION Tria::SpawnBeam {{{1*/
+void* Tria::SpawnBeam(int g0, int g1){
+
+	/*out of grids g0,g1 and g2 from Tria, build a beam element: */
+	Beam* beam=NULL;
+	int indices[2];
+	int zero=0;
+	Hook       *beam_hnodes     = NULL;
+	Hook       *beam_hmatice    = NULL;
+	Hook       *beam_hmatpar    = NULL;
+	Parameters *beam_parameters = NULL;
+	Inputs     *beam_inputs     = NULL;
+
+	indices[0]=g0;
+	indices[1]=g1;
+
+	beam_hnodes =this->hnodes.Spawn(indices,2);
+	beam_hmatice=this->hmatice.Spawn(&zero,1);
+	beam_hmatpar=this->hmatpar.Spawn(&zero,1);
+	beam_parameters=this->parameters;
+	beam_inputs=(Inputs*)this->inputs->SpawnBeamInputs(indices);
+
+	beam=new Beam();
+	beam->id=this->id;
+	beam->inputs=beam_inputs;
+	beam->parameters=beam_parameters;
+
+	/*now deal with hooks and objects: */
+	beam->hnodes.copy(beam_hnodes);
+	beam->hmatice.copy(beam_hmatice);
+	beam->hmatpar.copy(beam_hmatpar);
+
+	/*recover objects: */
+	//beam->nodes=(Node**)beam->hnodes.deliverp();
+	//beam->matice=(Matice*)beam->hmatice.delivers();
+	//beam->matpar=(Matpar*)beam->hmatpar.delivers();
+
+	delete beam_hnodes;
+	delete beam_hmatice;
+	delete beam_hmatpar;
+
+	return beam;
+}
+/*}}}*/
+/*FUNCTION Tria::SpawnSing {{{1*/
+void* Tria::SpawnSing(int index){
+
+	Sing* sing=NULL;
+	int zero=0;
+	Hook       *sing_hnodes     = NULL;
+	Hook       *sing_hmatice    = NULL;
+	Hook       *sing_hmatpar    = NULL;
+	Parameters *sing_parameters = NULL;
+	Inputs     *sing_inputs     = NULL;
+
+	sing_hnodes =this->hnodes.Spawn(&index,1);
+	sing_hmatice=this->hmatice.Spawn(&zero,1);
+	sing_hmatpar=this->hmatpar.Spawn(&zero,1);
+	sing_parameters=this->parameters;
+	sing_inputs=(Inputs*)this->inputs->SpawnSingInputs(index);
+
+	sing=new Sing();
+	sing->id=this->id;
+	sing->inputs=sing_inputs;
+	sing->parameters=sing_parameters;
+
+	/*now deal with hooks and objects: */
+	sing->hnodes.copy(sing_hnodes);
+	sing->hmatice.copy(sing_hmatice);
+	sing->hmatpar.copy(sing_hmatpar);
+
+	/*recover objects: */
+	//sing->nodes=(Node**)sing->hnodes.deliverp();
+	//sing->matice=(Matice*)sing->hmatice.delivers();
+	//sing->matpar=(Matpar*)sing->hmatpar.delivers();
+
+	delete sing_hnodes;
+	delete sing_hmatice;
+	delete sing_hmatpar;
+
+	return sing;
+}
+/*}}}*/
 
 /*Updates: */
@@ -748,42 +831,34 @@
 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
 	if (analysis_type==ControlAnalysisEnum){
-		
 		CreateKMatrixDiagnosticHoriz( Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==DiagnosticAnalysisEnum){
-	
 		if (sub_analysis_type==HorizAnalysisEnum){
-
 			CreateKMatrixDiagnosticHoriz( Kgg,analysis_type,sub_analysis_type);
 		}
+		else if (sub_analysis_type==HutterAnalysisEnum){
+			CreateKMatrixDiagnosticHutter( Kgg,analysis_type,sub_analysis_type);
+		}
 		else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet");
-
 	}
 	else if (analysis_type==SlopecomputeAnalysisEnum){
-
 		CreateKMatrixSlopeCompute( Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==PrognosticAnalysisEnum){
-
 		CreateKMatrixPrognostic( Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==Prognostic2AnalysisEnum){
-
 		CreateKMatrixPrognostic2(Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==BalancedthicknessAnalysisEnum){
-
 		CreateKMatrixBalancedthickness( Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==Balancedthickness2AnalysisEnum){
-
 		CreateKMatrixBalancedthickness2( Kgg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==BalancedvelocitiesAnalysisEnum){
-
 		CreateKMatrixBalancedvelocities( Kgg,analysis_type,sub_analysis_type);
 	}
 	else{
-
 		ISSMERROR("%s%i%s\n","analysis: ",analysis_type," not supported yet");
 	}
@@ -1462,4 +1537,31 @@
 
 }	
+/*}}}*/
+/*FUNCTION Tria::CreateKMatrixDiagnosticHutter{{{1*/
+void  Tria::CreateKMatrixDiagnosticHutter(Mat Kgg,int analysis_type,int sub_analysis_type){
+
+	/*Collapsed formulation: */
+	Sing*  sing=NULL;
+	int    i;
+
+	/*flags: */
+	bool onwater;
+
+	/*recover some inputs: */
+	inputs->GetParameterValue(&onwater,ElementOnWaterEnum);
+
+	/*If on water, skip: */
+	if(onwater)return;
+
+	/*Spawn 3 sing elements: */
+	for(i=0;i<3;i++){
+		sing=(Sing*)SpawnSing(i);
+		sing->CreateKMatrix(Kgg,analysis_type,sub_analysis_type);
+	}
+
+	/*clean up*/
+	delete sing;
+
+}
 /*}}}*/
 /*FUNCTION Tria::CreateKMatrixDiagnosticSurfaceVert {{{1*/
@@ -2132,37 +2234,31 @@
 	/*Just branch to the correct load generator, according to the type of analysis we are carrying out: */
 	if (analysis_type==ControlAnalysisEnum){
-		
 		CreatePVectorDiagnosticHoriz( pg,analysis_type,sub_analysis_type);
-	
 	}
 	else if (analysis_type==DiagnosticAnalysisEnum){
 		if (sub_analysis_type==HorizAnalysisEnum){
-		
 			CreatePVectorDiagnosticHoriz( pg,analysis_type,sub_analysis_type);
 		}
+		else if (sub_analysis_type==HutterAnalysisEnum){
+			CreatePVectorDiagnosticHutter( pg,analysis_type,sub_analysis_type);
+		}
 		else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet");
 	}
 	else if (analysis_type==SlopecomputeAnalysisEnum){
-		
 		CreatePVectorSlopeCompute( pg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==PrognosticAnalysisEnum){
-
 		CreatePVectorPrognostic( pg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==Prognostic2AnalysisEnum){
-
 		CreatePVectorPrognostic2( pg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==BalancedthicknessAnalysisEnum){
-
 		CreatePVectorBalancedthickness( pg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==Balancedthickness2AnalysisEnum){
-
 		CreatePVectorBalancedthickness2( pg,analysis_type,sub_analysis_type);
 	}
 	else if (analysis_type==BalancedvelocitiesAnalysisEnum){
-
 		CreatePVectorBalancedvelocities( pg,analysis_type,sub_analysis_type);
 	}
@@ -2610,4 +2706,31 @@
 	xfree((void**)&third_gauss_area_coord);
 	xfree((void**)&gauss_weights);
+
+}
+/*}}}*/
+/*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{1*/
+void  Tria::CreatePVectorDiagnosticHutter(Vec pg,int analysis_type,int sub_analysis_type){
+
+	/*Collapsed formulation: */
+	Sing*  sing=NULL;
+	int    i;
+
+	/*flags: */
+	bool onwater;
+
+	/*recover some inputs: */
+	inputs->GetParameterValue(&onwater,ElementOnWaterEnum);
+
+	/*If on water, skip: */
+	if(onwater)return;
+
+	/*Spawn 3 sing elements: */
+	for(i=0;i<3;i++){
+		sing=(Sing*)SpawnSing(i);
+		sing->CreatePVector(pg,analysis_type,sub_analysis_type);
+	}
+
+	/*clean up*/
+	delete sing;
 
 }
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3946)
@@ -54,4 +54,6 @@
 		void  SetClone(int* minranks);
 		void  DepthAverageInputAtBase(int enum_type);
+		void*  SpawnSing(int g0);
+		void*  SpawnBeam(int g0, int g1);
 		/*}}}*/
 		/*FUNCTION element numerical routines {{{1*/
@@ -62,4 +64,5 @@
 		void  GetDofList(int* doflist,int* pnumberofdofs);
 		void  GetDofList1(int* doflist);
+		void  CreateKMatrixDiagnosticHutter(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreateKMatrixDiagnosticHoriz(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreateKMatrixDiagnosticHorizFriction(Mat Kgg,int analysis_type,int sub_analysis_type);
@@ -89,4 +92,5 @@
 		double SurfaceArea(int analysis_type,int sub_analysis_type);
 		double CostFunction(int analysis_type,int sub_analysis_type);
+		void  CreatePVectorDiagnosticHutter(Vec pg,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);
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3946)
@@ -131,4 +131,19 @@
 }
 /*}}}*/
+/*FUNCTION BeamVertexInput::SpawnSingInput{{{1*/
+Input* BeamVertexInput::SpawnSingInput(int index){
+
+	/*output*/
+	SingVertexInput* outinput=NULL;
+
+	/*Create new Sing input (copy of current input)*/
+	ISSMASSERT(index<2 && index>=0);
+	outinput=new SingVertexInput(this->enum_type,this->values[index]);
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 /*FUNCTION BeamVertexInput::SpawnBeamInput{{{1*/
 Input* BeamVertexInput::SpawnBeamInput(int* indices){
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3946)
@@ -47,4 +47,5 @@
 		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3946)
@@ -130,4 +130,19 @@
 }
 /*}}}*/
+/*FUNCTION BoolInput::SpawnSingInput{{{1*/
+Input* BoolInput::SpawnSingInput(int index){
+
+	/*output*/
+	BoolInput* outinput=new BoolInput();
+
+	/*only copy current value*/
+	outinput->enum_type=this->enum_type;
+	outinput->value=this->value;
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 /*FUNCTION BoolInput::SpawnBeamInput{{{1*/
 Input* BoolInput::SpawnBeamInput(int* indices){
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3946)
@@ -47,4 +47,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3946)
@@ -130,6 +130,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::SpawnBeamInput{{{1*/
-Input* DoubleInput::SpawnBeamInput(int* indices){
+/*FUNCTION DoubleInput::SpawnSingInput{{{1*/
+Input* DoubleInput::SpawnSingInput(int index){
 
 	/*output*/
@@ -145,6 +145,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::SpawnTriaInput{{{1*/
-Input* DoubleInput::SpawnTriaInput(int* indices){
+/*FUNCTION DoubleInput::SpawnBeamInput{{{1*/
+Input* DoubleInput::SpawnBeamInput(int* indices){
 
 	/*output*/
@@ -160,4 +160,19 @@
 }
 /*}}}*/
+/*FUNCTION DoubleInput::SpawnTriaInput{{{1*/
+Input* DoubleInput::SpawnTriaInput(int* indices){
+
+	/*output*/
+	DoubleInput* outinput=new DoubleInput();
+
+	/*only copy current value*/
+	outinput->enum_type=this->enum_type;
+	outinput->value=this->value;
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3946)
@@ -47,4 +47,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3946)
@@ -44,4 +44,5 @@
 		virtual void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, double* gauss)=0;
 		virtual void ChangeEnum(int newenumtype)=0;
+		virtual Input* SpawnSingInput(int  index)=0;
 		virtual Input* SpawnBeamInput(int* indices)=0;
 		virtual Input* SpawnTriaInput(int* indices)=0;
Index: /issm/trunk/src/c/objects/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3946)
@@ -130,6 +130,6 @@
 }
 /*}}}*/
-/*FUNCTION IntInput::SpawnBeamInput{{{1*/
-Input* IntInput::SpawnBeamInput(int* indices){
+/*FUNCTION IntInput::SpawnSingInput{{{1*/
+Input* IntInput::SpawnSingInput(int index){
 
 	/*output*/
@@ -144,6 +144,6 @@
 }
 /*}}}*/
-/*FUNCTION IntInput::SpawnTriaInput{{{1*/
-Input* IntInput::SpawnTriaInput(int* indices){
+/*FUNCTION IntInput::SpawnBeamInput{{{1*/
+Input* IntInput::SpawnBeamInput(int* indices){
 
 	/*output*/
@@ -158,4 +158,18 @@
 }
 /*}}}*/
+/*FUNCTION IntInput::SpawnTriaInput{{{1*/
+Input* IntInput::SpawnTriaInput(int* indices){
+
+	/*output*/
+	IntInput* outinput=new IntInput();
+
+	/*only copy current value*/
+	outinput->enum_type=this->enum_type;
+	outinput->value=this->value;
+
+	/*Assign output*/
+	return outinput;
+}
+/*}}}*/
 
 /*Object functions*/
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3946)
@@ -47,4 +47,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3946)
@@ -133,4 +133,19 @@
 	extern int my_rank;
 	return my_rank; 
+}
+/*}}}*/
+/*FUNCTION PentaVertexInput::SpawnSingInput{{{1*/
+Input* PentaVertexInput::SpawnSingInput(int index){
+
+	/*output*/
+	SingVertexInput* outinput=NULL;
+
+	/*Create new Sing input (copy of current input)*/
+	ISSMASSERT(index<6 && index>=0);
+	outinput=new SingVertexInput(this->enum_type,this->values[index]);
+
+	/*Assign output*/
+	return outinput;
+
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3946)
@@ -46,4 +46,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3946)
@@ -24,5 +24,5 @@
 }
 /*}}}*/
-/*FUNCTION SingVertexInput::SingVertexInput(double* values){{{1*/
+/*FUNCTION SingVertexInput::SingVertexInput(int in_enum_type,double in_value){{{1*/
 SingVertexInput::SingVertexInput(int in_enum_type,double in_value){
 
@@ -130,4 +130,18 @@
 }
 /*}}}*/
+/*FUNCTION SingVertexInput::SpawnSingInput{{{1*/
+Input* SingVertexInput::SpawnSingInput(int index){
+
+	/*output*/
+	SingVertexInput* outinput=NULL;
+
+	/*Create new Sing input (copy of current input)*/
+	outinput=new SingVertexInput(this->enum_type,this->value);
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 /*FUNCTION SingVertexInput::SpawnBeamInput{{{1*/
 Input* SingVertexInput::SpawnBeamInput(int* indices){
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3946)
@@ -46,4 +46,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3946)
@@ -130,4 +130,19 @@
 	extern int my_rank;
 	return my_rank; 
+}
+/*}}}*/
+/*FUNCTION TriaVertexInput::SpawnSingInput{{{1*/
+Input* TriaVertexInput::SpawnSingInput(int index){
+
+	/*output*/
+	SingVertexInput* outinput=NULL;
+
+	/*Create new Sing input (copy of current input)*/
+	ISSMASSERT(index<3 && index>=0);
+	outinput=new SingVertexInput(this->enum_type,this->values[index]);
+
+	/*Assign output*/
+	return outinput;
+
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3945)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3946)
@@ -47,4 +47,5 @@
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
+		Input* SpawnSingInput(int  index);
 		Input* SpawnBeamInput(int* indices);
 		Input* SpawnTriaInput(int* indices);
