Index: issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3686)
+++ issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3687)
@@ -104,4 +104,40 @@
 		nodeinputs[1]=iomodel->drag_coefficient[(int)(iomodel->uppernodes[index]-1)];
 		this->inputs->AddInput(new BeamVertexInput(DragCoefficientEnum,nodeinputs));
+	}
+	
+	if (iomodel->vx) {
+		nodeinputs[0]=iomodel->vx[index];
+		nodeinputs[1]=iomodel->vx[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
+	}
+	if (iomodel->vy) {
+		nodeinputs[0]=iomodel->vy[index];
+		nodeinputs[1]=iomodel->vy[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
+	}
+	if (iomodel->vz) {
+		nodeinputs[0]=iomodel->vz[index];
+		nodeinputs[1]=iomodel->vz[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
+	}
+	if (iomodel->vx_obs) {
+		nodeinputs[0]=iomodel->vx_obs[index];
+		nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
+	}
+	if (iomodel->vy_obs) {
+		nodeinputs[0]=iomodel->vy_obs[index];
+		nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
+	}
+	if (iomodel->vz_obs) {
+		nodeinputs[0]=iomodel->vz_obs[index];
+		nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
+	}
+	if (iomodel->weights) {
+		nodeinputs[0]=iomodel->weights[index];
+		nodeinputs[1]=iomodel->weights[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(WeightszEnum,nodeinputs));
 	}	
 	if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->gridonbed[index]));
Index: issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3686)
+++ issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3687)
@@ -118,4 +118,34 @@
 		this->inputs->AddInput(new PentaVertexInput(GeothermalFluxEnum,nodeinputs));
 	}	
+
+	/*vx,vy and vz: */
+	if (iomodel->vx) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
+	}
+	if (iomodel->vy) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
+	}
+	if (iomodel->vz) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
+	}
+	if (iomodel->vx_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VxObsEnum,nodeinputs));
+	}
+	if (iomodel->vy_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VyObsEnum,nodeinputs));
+	}
+	if (iomodel->vz_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VzObsEnum,nodeinputs));
+	}
+	if (iomodel->weights) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(WeightsEnum,nodeinputs));
+	}
 
 	if (iomodel->elementoniceshelf) this->inputs->AddInput(new BoolInput(ElementOnIceShelfEnum,(IssmBool)iomodel->elementoniceshelf[index]));
Index: issm/trunk/src/c/objects/Elements/Sing.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3686)
+++ issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3687)
@@ -87,4 +87,11 @@
 	if (iomodel->thickness) this->inputs->AddInput(new SingVertexInput(ThicknessEnum,iomodel->thickness[i]));
 	if (iomodel->drag_coefficient) this->inputs->AddInput(new SingVertexInput(DragCoefficientEnum,iomodel->drag_coefficient[i]));
+	if (iomodel->vx) this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx[i]));
+	if (iomodel->vy) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy[i]));
+	if (iomodel->vz) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz[i]));
+	if (iomodel->vx_obs) this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx_obs[i]));
+	if (iomodel->vy_obs) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy_obs[i]));
+	if (iomodel->vz_obs) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz_obs[i]));
+	if (iomodel->weights) this->inputs->AddInput(new SingVertexInput(WeightsEnum,iomodel->weights[i]));
 
 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
Index: issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3686)
+++ issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3687)
@@ -130,5 +130,35 @@
 		for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_node_ids[i]-1];
 		this->inputs->AddInput(new TriaVertexInput(GeothermalFluxEnum,nodeinputs));
-	}	
+	}
+	/*vx,vy and vz: */
+	if (iomodel->vx) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
+	}
+	if (iomodel->vy) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
+	}
+	if (iomodel->vz) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
+	}
+	if (iomodel->vx_obs) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VxObsEnum,nodeinputs));
+	}
+	if (iomodel->vy_obs) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VyObsEnum,nodeinputs));
+	}
+	if (iomodel->vz_obs) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VzObsEnum,nodeinputs));
+	}
+	if (iomodel->weights) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->weights[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(WeightsEnum,nodeinputs));
+	}
+
 
 	if (iomodel->elementoniceshelf) this->inputs->AddInput(new BoolInput(ElementOnIceShelfEnum,(IssmBool)iomodel->elementoniceshelf[index]));
