Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 17513)
@@ -36,5 +36,5 @@
 void L2ProjectionBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->meshtype==Mesh3DEnum){
+	if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh3DtetrasEnum){
 		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
 	}
@@ -82,4 +82,8 @@
 			break;
 		case Mesh3DEnum:
+			if(!element->IsOnBed()) return NULL;
+			basalelement = element->SpawnBasalElement();
+			break;
+		case Mesh3DtetrasEnum:
 			if(!element->IsOnBed()) return NULL;
 			basalelement = element->SpawnBasalElement();
@@ -141,4 +145,8 @@
 			break;
 		case Mesh3DEnum:
+			if(!element->IsOnBed()) return NULL;
+			basalelement = element->SpawnBasalElement();
+			break;
+		case Mesh3DtetrasEnum:
 			if(!element->IsOnBed()) return NULL;
 			basalelement = element->SpawnBasalElement();
@@ -213,4 +221,5 @@
 			break;
 		case Mesh2DverticalEnum:
+		case Mesh3DtetrasEnum:
 			element->InputUpdateFromSolutionOneDof(solution,inputenum);
 			break;
Index: /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 17513)
@@ -128,4 +128,33 @@
 }
 /*}}}*/
+/*FUNCTION ElementHook::SpawnTriaHook{{{*/
+void ElementHook::SpawnTriaHook(ElementHook* triahook,int index1,int index2,int index3){
+
+	/*Create arrow of indices depending on location (0=base 1=surface)*/
+	int indices[3];
+	indices[0] = index1;
+	indices[1] = index2;
+	indices[2] = index3;
+
+	triahook->numanalyses=this->numanalyses;
+
+	/*Spawn nodes hook*/
+	triahook->hnodes=new Hook*[this->numanalyses];
+	for(int i=0;i<this->numanalyses;i++){
+		/*Do not do anything if Hook is empty*/
+		if (!this->hnodes[i] || this->hnodes[i]->GetNum()==0){
+			triahook->hnodes[i]=NULL;
+		}
+		else{
+			triahook->hnodes[i]=this->hnodes[i]->Spawn(indices,3);
+		}
+	}
+
+	/*do not spawn hmaterial. material will be taken care of by Penta*/
+	triahook->hmaterial=NULL;
+	triahook->hvertices=(Hook*)this->hvertices->Spawn(indices,3);
+	triahook->hmatpar=(Hook*)this->hmatpar->copy();
+}
+/*}}}*/
 /*FUNCTION ElementHook::SpawnSegHook{{{*/
 void ElementHook::SpawnSegHook(ElementHook* triahook,int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Elements/ElementHook.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/ElementHook.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Elements/ElementHook.h	(revision 17513)
@@ -25,5 +25,6 @@
 
 		void SetHookNodes(int* node_ids,int numnodes,int analysis_counter);
-		void SpawnTriaHook(ElementHook* triahook,int location); //3d only
+		void SpawnTriaHook(ElementHook* triahook,int location); //3d only TO BE REMOVED (replaced by the one below)
+		void SpawnTriaHook(ElementHook* triahook,int index1,int index2,int index3); //3d only
 		void SpawnSegHook(ElementHook* triahook,int ndex1,int index2); //2d only
 		void InitHookNeighbors(int* element_ids);               //3d only
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 17513)
@@ -763,4 +763,50 @@
 }
 /*}}}*/
+/*FUNCTION Tetra::SpawnBasalElement{{{*/
+Element*  Tetra::SpawnBasalElement(void){
+
+	_assert_(HasFaceOnBed());
+
+	int index1,index2,index3;
+	this->FaceOnBedIndices(&index1,&index2,&index3);
+	return SpawnTria(index1,index2,index3);
+}/*}}}*/
+/*FUNCTION Tetra::SpawnTopElement{{{*/
+Element*  Tetra::SpawnTopElement(void){
+
+	_assert_(HasFaceOnSurface());
+
+	int index1,index2,index3;
+	this->FaceOnSurfaceIndices(&index1,&index2,&index3);
+	return SpawnTria(index1,index2,index3);
+}/*}}}*/
+/*FUNCTION Tetra::SpawnTria{{{*/
+Tria*  Tetra::SpawnTria(int index1,int index2,int index3){
+
+	int analysis_counter;
+
+	/*go into parameters and get the analysis_counter: */
+	this->parameters->FindParam(&analysis_counter,AnalysisCounterEnum);
+
+	/*Create Tria*/
+	Tria* tria=new Tria();
+	tria->id=this->id;
+	tria->inputs=(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3);
+	tria->parameters=this->parameters;
+	tria->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
+	this->SpawnTriaHook(dynamic_cast<ElementHook*>(tria),index1,index2,index3);
+
+	/*Spawn material*/
+	tria->material=(Material*)this->material->copy2(tria);
+
+	/*recover nodes, material and matpar: */
+	tria->nodes    = (Node**)tria->hnodes[analysis_counter]->deliverp();
+	tria->vertices = (Vertex**)tria->hvertices->deliverp();
+	tria->matpar   = (Matpar*)tria->hmatpar->delivers();
+
+	/*Return new Tria*/
+	return tria;
+}
+/*}}}*/
 /*FUNCTION Tetra::Update {{{*/
 void Tetra::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 17513)
@@ -112,6 +112,7 @@
 		int         NumberofNodesVelocity(void);
 		int         NumberofNodesPressure(void);
-	   Element*    SpawnBasalElement(void){_error_("not implemented yet");};
-		Element*    SpawnTopElement(void){_error_("not implemented yet");};
+	   Element*    SpawnBasalElement(void);
+		Element*    SpawnTopElement(void);
+		Tria*       SpawnTria(int index1,int index2,int index3);
 		IssmDouble  StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
 		IssmDouble  PureIceEnthalpy(IssmDouble pressure){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 17513)
@@ -71,4 +71,19 @@
 /*FUNCTION BoolInput::SpawnTriaInput{{{*/
 Input* BoolInput::SpawnTriaInput(int location){
+
+		/*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::SpawnTriaInput{{{*/
+Input* BoolInput::SpawnTriaInput(int index1,int index2,int index3){
 
 		/*output*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 17513)
@@ -31,4 +31,5 @@
 		int   InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 17513)
@@ -196,4 +196,8 @@
 	return values->SpawnTriaInput(location);
 }/*}}}*/
+/*FUNCTION ControlInput::SpawnTriaInput{{{*/
+Input* ControlInput::SpawnTriaInput(int index1,int index2,int index3){
+	return values->SpawnTriaInput(index1,index2,index3);
+}/*}}}*/
 /*FUNCTION ControlInput::SpawnSegInput{{{*/
 Input* ControlInput::SpawnSegInput(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 17513)
@@ -39,4 +39,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 17513)
@@ -96,4 +96,22 @@
 }
 /*}}}*/
+/*FUNCTION DatasetInput::SpawnTriaInput{{{*/
+Input* DatasetInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	DatasetInput* outinput=NULL;
+
+	/*Create new Datasetinput (copy of current input)*/
+	outinput=new DatasetInput();
+	outinput->enum_type=this->enum_type;
+	outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(index1,index2,index3));
+	outinput->numids=this->numids;
+	outinput->ids=xNew<int>(this->numids);
+	xMemCpy(outinput->ids,this->ids,this->numids);
+
+	/*Assign output*/
+	return outinput;
+}
+/*}}}*/
 /*FUNCTION DatasetInput::SpawnSegInput{{{*/
 Input* DatasetInput::SpawnSegInput(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 17513)
@@ -37,4 +37,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 17513)
@@ -84,4 +84,19 @@
 }
 /*}}}*/
+/*FUNCTION DoubleInput::SpawnTriaInput{{{*/
+Input* DoubleInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	DoubleInput* outinput=new DoubleInput();
+
+	/*only copy current value*/
+	outinput->enum_type=this->enum_type;
+	outinput->value=this->value;
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 /*FUNCTION DoubleInput::SpawnSegInput{{{*/
 Input* DoubleInput::SpawnSegInput(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 17513)
@@ -34,4 +34,5 @@
 		int   InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB);
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 17513)
@@ -55,4 +55,5 @@
 
 		virtual Input* SpawnTriaInput(int location)=0;
+		virtual Input* SpawnTriaInput(int index1,int index2,int index3)=0;
 		virtual Input* SpawnSegInput(int index1,int index2)=0;
 		virtual Input* PointwiseDivide(Input* inputB)=0;
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 17513)
@@ -395,4 +395,30 @@
 }
 /*}}}*/
+/*FUNCTION Inputs::SpawnTriaInputs{{{*/
+Inputs* Inputs::SpawnTriaInputs(int index1,int index2,int index3){
+
+	/*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=dynamic_cast<Input*>(*object);
+		inputout=inputin->SpawnTriaInput(index1,index2,index3);
+
+		/*Add input to new inputs*/
+		newinputs->AddObject(inputout);
+	}
+
+	/*Assign output pointer*/
+	return newinputs;
+}
+/*}}}*/
 /*FUNCTION Inputs::SpawnSegInputs{{{*/
 Inputs* Inputs::SpawnSegInputs(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 17513)
@@ -28,5 +28,6 @@
 		void        DuplicateInput(int original_enum,int new_enum);
 		Input*      GetInput(int enum_name);
-		Inputs*     SpawnTriaInputs(int position);
+		Inputs*     SpawnTriaInputs(int position);//TO BE REMOVED (replaced by the other one)
+		Inputs*     SpawnTriaInputs(int index1,int index2,int index3);
 		Inputs*     SpawnSegInputs(int index1,int index2);
 		Inputs*     SpawnSegInputs(int position);
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 17513)
@@ -71,4 +71,18 @@
 /*FUNCTION IntInput::SpawnTriaInput{{{*/
 Input* IntInput::SpawnTriaInput(int location){
+
+	/*output*/
+	IntInput* outinput=new IntInput();
+
+	/*only copy current value*/
+	outinput->enum_type=this->enum_type;
+	outinput->value=this->value;
+
+	/*Assign output*/
+	return outinput;
+}
+/*}}}*/
+/*FUNCTION IntInput::SpawnTriaInput{{{*/
+Input* IntInput::SpawnTriaInput(int index1,int index2,int index3){
 
 	/*output*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 17513)
@@ -35,4 +35,5 @@
 		int   InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 17513)
@@ -123,4 +123,35 @@
 }
 /*}}}*/
+/*FUNCTION PentaInput::SpawnTriaInput{{{*/
+Input* PentaInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	TriaInput* outinput=NULL;
+
+	if(this->element_type==P0Enum){ 
+		outinput=new TriaInput(this->enum_type,&this->values[0],P0Enum);
+	}
+	else{
+		/*Assume P1 interpolation only for now*/
+		IssmDouble newvalues[3]; 
+
+		/*Create array of indices depending on location (0=base 1=surface)*/
+		int indices[3];
+		indices[0] = index1;
+		indices[1] = index2;
+		indices[2] = index3;
+
+		/*Create new input*/
+		for(int i=0;i<3;i++){
+			_assert_(indices[i]>=0 && indices[i]<6);
+			newvalues[i]=this->values[indices[i]];
+		}
+		outinput=new TriaInput(this->enum_type,&newvalues[0],P1Enum);
+	}
+
+	/*Assign output*/
+	return outinput;
+}
+/*}}}*/
 /*FUNCTION PentaInput::SpawnSegInput{{{*/
 Input* PentaInput::SpawnSegInput(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 17513)
@@ -35,4 +35,5 @@
 		int   InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB);
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 17513)
@@ -35,4 +35,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location){_error_("not supported yet");};
+		Input* SpawnTriaInput(int index1,int index2,int index3){_error_("not supported yet");};
 		Input* SpawnSegInput(int index1,int index2){_error_("not implemented yet");};
 		Input* PointwiseDivide(Input* inputB){_error_("not supported yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 17513)
@@ -185,4 +185,35 @@
 }
 /*}}}*/
+/*FUNCTION TetraInput::SpawnTriaInput{{{*/
+Input* TetraInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	TriaInput* outinput=NULL;
+
+	if(this->element_type==P0Enum){ 
+		outinput=new TriaInput(this->enum_type,&this->values[0],P0Enum);
+	}
+	else{
+		/*Assume P1 interpolation only for now*/
+		IssmDouble newvalues[3]; 
+
+		/*Create array of indices depending on location (0=base 1=surface)*/
+		int indices[3];
+		indices[0] = index1;
+		indices[1] = index2;
+		indices[2] = index3;
+
+		/*Create new input*/
+		for(int i=0;i<3;i++){
+			_assert_(indices[i]>=0 && indices[i]<4);
+			newvalues[i]=this->values[indices[i]];
+		}
+		outinput=new TriaInput(this->enum_type,&newvalues[0],P1Enum);
+	}
+
+	/*Assign output*/
+	return outinput;
+}
+/*}}}*/
 
 /*Intermediary*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 17513)
@@ -35,4 +35,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location){_error_("not supported yet");};
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2){_error_("not supported yet");};
 		Input* PointwiseDivide(Input* inputB);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 17513)
@@ -135,4 +135,24 @@
 	xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
 	outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(location);
+	outinput->parameters=this->parameters;
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
+/*FUNCTION TransientInput::SpawnTriaInput{{{*/
+Input* TransientInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	TransientInput* outinput=NULL;
+
+	/*Create new Transientinput (copy of current input)*/
+	outinput=new TransientInput();
+	outinput->enum_type=this->enum_type;
+	outinput->numtimesteps=this->numtimesteps;
+	outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
+	xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
+	outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3);
 	outinput->parameters=this->parameters;
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 17513)
@@ -41,4 +41,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* forcingB){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 17513)
@@ -95,4 +95,18 @@
 }
 /*}}}*/
+/*FUNCTION TriaInput::SpawnTriaInput{{{*/
+Input* TriaInput::SpawnTriaInput(int index1,int index2,int index3){
+
+	/*output*/
+	TriaInput* outinput=NULL;
+
+	/*Create new Tria input (copy of current input)*/
+	outinput=new TriaInput(this->enum_type,&this->values[0],this->element_type);
+
+	/*Assign output*/
+	return outinput;
+
+}
+/*}}}*/
 /*FUNCTION TriaInput::SpawnSegInput{{{*/
 Input* TriaInput::SpawnSegInput(int index1,int index2){
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 17513)
@@ -35,4 +35,5 @@
 		int    InstanceEnum();
 		Input* SpawnTriaInput(int location);
+		Input* SpawnTriaInput(int index1,int index2,int index3);
 		Input* SpawnSegInput(int index1,int index2);
 		Input* PointwiseDivide(Input* inputB);
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 17512)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 17513)
@@ -101,5 +101,5 @@
 				analysis_enum==ExtrapolationAnalysisEnum
 				){
-		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+		if(iomodel->meshtype!=Mesh2DhorizontalEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
 			_assert_(iomodel->Data(MeshVertexonbedEnum));
@@ -112,5 +112,5 @@
 				analysis_enum==FreeSurfaceTopAnalysisEnum
 				){
-		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+		if(iomodel->meshtype!=Mesh2DhorizontalEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
 			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
Index: /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 17512)
+++ /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 17513)
@@ -63,5 +63,5 @@
 		return 0;\
 	}\
-	catch (exception& e) {\
+	catch(exception& e) {\
 		_printf_("Standard exception: " << e.what() << "\n\n");\
 		return 0;\
