Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3870)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3871)
@@ -159,17 +159,20 @@
 	}
 
-	/*default vx,vy and vz: */
-	if (!iomodel->vx && iomodel->vx_obs) {
-		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
+	/*default vx,vy and vz: either observation or 0 */
+	if (!iomodel->vx){
+		if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
+		else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 		this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
 		this->inputs->AddInput(new PentaVertexInput(VxOldEnum,nodeinputs));
 	}
-	if (!iomodel->vy && iomodel->vy_obs) {
-		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
+	if (!iomodel->vy){
+		if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
+		else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 		this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
 		this->inputs->AddInput(new PentaVertexInput(VyOldEnum,nodeinputs));
 	}
-	if (!iomodel->vz && iomodel->vz_obs) {
-		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
+	if (!iomodel->vz){
+		if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
+		else                 for(i=0;i<6;i++)nodeinputs[i]=0;
 		this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
 		this->inputs->AddInput(new PentaVertexInput(VzOldEnum,nodeinputs));
@@ -330,4 +333,5 @@
 				name==AccumulationRateEnum ||
 				name==GeothermalFluxEnum ||
+				name==PressureEnum ||
 				name==TemperatureEnum ||
 				name==TemperatureAverageEnum ||
@@ -589,8 +593,14 @@
 			GetSolutionFromInputsDiagnosticHoriz(solution,analysis_type,sub_analysis_type);
 		}
-		else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet");
+		else if(sub_analysis_type==VertAnalysisEnum){
+			GetSolutionFromInputsDiagnosticVert(solution,analysis_type,sub_analysis_type);
+		}
+		else if(sub_analysis_type==StokesAnalysisEnum){
+			GetSolutionFromInputsDiagnosticStokes(solution,analysis_type,sub_analysis_type);
+		}
+		else ISSMERROR("sub_analysis: %i (%s) not supported yet",sub_analysis_type,EnumAsString(sub_analysis_type));
 	}
 	else{
-		ISSMERROR("%s%i%s\n","analysis: ",analysis_type," not supported yet");
+		ISSMERROR("analysis: %i (%s) not supported yet",analysis_type,EnumAsString(analysis_type));
 	}
 }
@@ -625,4 +635,75 @@
 		values[i*numdofpervertex+0]=vx;
 		values[i*numdofpervertex+1]=vy;
+	}
+
+	/*Add value to global vector*/
+	VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES);
+
+}
+/*}}}*/
+/*FUNCTION Penta::GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type){{{1*/
+void  Penta::GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type){
+
+	int i;
+
+	const int    numvertices=6;
+	const int    numdofpervertex=1;
+	const int    numdof=numdofpervertex*numvertices;
+	double       gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};
+
+	int          doflist[numdof];
+	double       values[numdof];
+	double       vz;
+
+	int          dummy;
+
+	/*Get dof list: */
+	GetDofList(&doflist[0],&dummy);
+
+	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+	/*P1 element only for now*/
+	for(i=0;i<numvertices;i++){
+
+		/*Recover vz */
+		inputs->GetParameterValue(&vz,&gauss[i][0],VxEnum);
+		values[i]=vz;
+	}
+
+	/*Add value to global vector*/
+	VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES);
+}
+/*}}}*/
+/*FUNCTION Penta::GetSolutionFromInputsDiagnosticStokes(Vec solution,int analysis_type,int sub_analysis_type){{{1*/
+void  Penta::GetSolutionFromInputsDiagnosticStokes(Vec solution,int analysis_type,int sub_analysis_type){
+
+	int i;
+
+	const int    numvertices=6;
+	const int    numdofpervertex=4;
+	const int    numdof=numdofpervertex*numvertices;
+	double       gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};
+
+	int          doflist[numdof];
+	double       values[numdof];
+	double       vx,vy,vz,p;
+
+	int          dummy;
+
+	/*Get dof list: */
+	GetDofList(&doflist[0],&dummy);
+
+	/*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */
+	/*P1 element only for now*/
+	for(i=0;i<numvertices;i++){
+
+		/*Recover vx and vy*/
+		inputs->GetParameterValue(&vx,&gauss[i][0],VxEnum);
+		inputs->GetParameterValue(&vy,&gauss[i][0],VyEnum);
+		inputs->GetParameterValue(&vz,&gauss[i][0],VzEnum);
+		inputs->GetParameterValue(&p ,&gauss[i][0],PressureEnum);
+		values[i*numdofpervertex+0]=vx;
+		values[i*numdofpervertex+1]=vy;
+		values[i*numdofpervertex+2]=vz;
+		values[i*numdofpervertex+3]=p;
 	}
 
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3870)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3871)
@@ -67,4 +67,6 @@
 		void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
 		void  GetSolutionFromInputsDiagnosticHoriz(Vec solution,int analysis_type,int sub_analysis_type);
+		void  GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type);
+		void  GetSolutionFromInputsDiagnosticStokes(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/Loads/Pengrid.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 3870)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 3871)
@@ -710,2 +710,37 @@
 }
 /*}}}1*/
+/*FUNCTION Pengrid::UpdateInputsFromVector(double* vector, int name, int type) {{{1*/
+void  Pengrid::UpdateInputsFromVector(double* vector, int name, int type){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromVector(int* vector, int name, int type) {{{1*/
+void  Pengrid::UpdateInputsFromVector(int* vector, int name, int type){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromVector(bool* vector, int name, int type) {{{1*/
+void  Pengrid::UpdateInputsFromVector(bool* vector, int name, int type){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromConstant(double constant, int name) {{{1*/
+void  Pengrid::UpdateInputsFromConstant(double constant, int name){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromConstant(int constant, int name) {{{1*/
+void  Pengrid::UpdateInputsFromConstant(int constant, int name){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromConstant(bool constant, int name) {{{1*/
+void  Pengrid::UpdateInputsFromConstant(bool constant, int name){
+	/*Nothing updated yet*/
+}
+/*}}}*/
+/*FUNCTION Pengrid::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type) {{{1*/
+void  Pengrid::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){
+	/*Nothing updated yet*/
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Loads/Pengrid.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 3870)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 3871)
@@ -51,12 +51,12 @@
 		int   MarshallSize();
 		int   MyRank();
-		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromVector(int* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromVector(bool* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		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  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);
+		void  UpdateInputsFromConstant(int constant, int name);
+		void  UpdateInputsFromConstant(bool constant, int name);
 
-		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
 		/*}}}*/
