Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16753)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16754)
@@ -99,4 +99,33 @@
 }/*}}}*/
 void DamageEvolutionAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
-	_error_("not implemented yet");
+
+	IssmDouble  max_damage;
+	int			*doflist = NULL;
+
+	/*Fetch number of nodes and dof for this finite element*/
+	int numnodes = element->GetNumberOfNodes();
+
+	/*Fetch dof list and allocate solution vector*/
+	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+	IssmDouble* values    = xNew<IssmDouble>(numnodes);
+
+	/*Get user-supplied max_damage: */
+	element->FindParam(&max_damage,DamageMaxDamageEnum);
+
+	/*Use the dof list to index into the solution vector: */
+	for(int i=0;i<numnodes;i++){
+		values[i]=solution[doflist[i]];
+		/*Check solution*/
+		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+		/*Enforce D < max_damage and D > 0 */
+		if(values[i]>max_damage) values[i]=max_damage;
+		else if(values[i]<0.)    values[i]=0.;
+	}
+
+	/*Get all inputs and parameters*/
+	element->AddMaterialInput(DamageDbarEnum,values,P1Enum);
+
+	/*Free ressources:*/
+	xDelete<IssmDouble>(values);
+	xDelete<int>(doflist);
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16753)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16754)
@@ -41,4 +41,7 @@
 }/*}}}*/
 void ExtrudeFromBaseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
-	_error_("not implemented yet");
+
+	int inputenum;
+	element->FindParam(&inputenum,InputToExtrudeEnum);
+	element->InputUpdateFromSolutionOneDof(solution,inputenum);
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16753)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16754)
@@ -68,4 +68,7 @@
 			element->InputUpdateFromSolutionOneDof(solution,inputenum);
 			break;
+		case Mesh2DverticalEnum:
+			element->InputUpdateFromSolutionOneDof(solution,inputenum);
+			break;
 		case Mesh3DEnum:
 			element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16753)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16754)
@@ -2547,14 +2547,16 @@
 void  Penta::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){
 
-	const int numdof = NDOF1*NUMVERTICES;
-
-	IssmDouble values[numdof];
-	int*   doflist=NULL;
-
-	/*Get dof list: */
+	/*Intermediary*/
+	int* doflist = NULL;
+
+	/*Fetch number of nodes for this finite element*/
+	int numnodes = this->NumberofNodes();
+
+	/*Fetch dof list and allocate solution vector*/
 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+	IssmDouble* values    = xNew<IssmDouble>(numnodes);
 
 	/*Use the dof list to index into the solution vector: */
-	for(int i=0;i<numdof;i++){
+	for(int i=0;i<numnodes;i++){
 		values[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
@@ -2565,4 +2567,5 @@
 
 	/*Free ressources:*/
+	xDelete<IssmDouble>(values);
 	xDelete<int>(doflist);
 }
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16753)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16754)
@@ -1367,4 +1367,14 @@
 int Tria::GetNumberOfNodes(void){
 	return this->NumberofNodes();
+}
+/*}}}*/
+/*FUNCTION Tria::GetNumberOfNodesPressure;{{{*/
+int Tria::GetNumberOfNodesPressure(void){
+	return this->NumberofNodesPressure();
+}
+/*}}}*/
+/*FUNCTION Tria::GetNumberOfNodesVelocity;{{{*/
+int Tria::GetNumberOfNodesVelocity(void){
+	return this->NumberofNodesVelocity();
 }
 /*}}}*/
@@ -6781,5 +6791,4 @@
 }
 /*}}}*/
-
 /*FUNCTION Tria::CreatEPLDomainMassMatrix {{{*/
 ElementMatrix* Tria::CreateEPLDomainMassMatrix(void){
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16753)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16754)
@@ -90,6 +90,6 @@
 		void        GetNodesLidList(int* lidlist);
 		int         GetNumberOfNodes(void);
-		int         GetNumberOfNodesPressure(void){_error_("not implemented yet");};
-		int         GetNumberOfNodesVelocity(void){_error_("not implemented yet");};
+		int         GetNumberOfNodesPressure(void);
+		int         GetNumberOfNodesVelocity(void);
 		int         GetNumberOfVertices(void);
 		int         Sid();
