Index: /issm/trunk-jpl/src/c/Container/Vertices.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/Vertices.cpp	(revision 14089)
+++ /issm/trunk-jpl/src/c/Container/Vertices.cpp	(revision 14090)
@@ -199,2 +199,45 @@
 }
 /*}}}*/
+/*FUNCTION Vertices::ToXYZ{{{*/
+double* Vertices::ToXYZ(void){
+
+	/*intermediary: */
+	int i;
+	int my_rank;
+	int num_vertices;
+	
+	/*output: */
+	Matrix<IssmDouble>* xyz = NULL;
+	double* xyz_serial=NULL;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	/*First, figure out number of vertices: */
+	num_vertices=this->NumberOfVertices();
+
+	/*Now, allocate matrix to hold all the vertices x,y and z values: */
+	xyz= new Matrix<IssmDouble>(num_vertices,3);
+
+	/*Go through vertices, and for each vertex, object, report it cpu: */
+	for(i=0;i<this->Size();i++){
+
+		/*let vertex fill matrix: */
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->ToXYZ(xyz);
+	}
+
+	/*Assemble:*/
+	xyz->Assemble();
+
+	/*gather on cpu 0: */
+	xyz_serial=xyz->ToSerial();
+
+	/*free ressources: */
+	delete xyz;
+	if(my_rank!=0)delete xyz_serial;
+
+	/*return matrix: */
+	return xyz_serial;
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/Container/Vertices.h
===================================================================
--- /issm/trunk-jpl/src/c/Container/Vertices.h	(revision 14089)
+++ /issm/trunk-jpl/src/c/Container/Vertices.h	(revision 14090)
@@ -28,4 +28,5 @@
 		int   NumberOfVertices(void);
 		void  Ranks(int* ranks);
+		double* ToXYZ(void);
 };
 
Index: /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 14089)
+++ /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 14090)
@@ -194,2 +194,19 @@
 }
 /*}}}*/
+/*FUNCTION Vertex::ToXYZ {{{*/
+void  Vertex::ToXYZ(Matrix<IssmDouble>* matrix){
+
+	int i;
+	double xyz[3];
+	int    indices[3];
+	
+	if (this->clone==true)return;
+	else{
+
+		xyz[0]=x; xyz[1]=y; xyz[2]=z;
+		indices[0]=0;indices[1]=1; indices[2]=2;
+
+		matrix->SetValues(1,&sid,3,&indices[0],&xyz[0],INS_VAL);
+	}
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/objects/Vertex.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Vertex.h	(revision 14089)
+++ /issm/trunk-jpl/src/c/classes/objects/Vertex.h	(revision 14090)
@@ -13,4 +13,5 @@
 #include "../../include/include.h"
 template <class doubletype> class Vector;
+template <class doubletype> class Matrix;
 class Parameters;
 class IoModel;
@@ -53,4 +54,5 @@
 		void  UpdateClonePids(int* allborderpids);
 		void  SetClone(int* minranks);
+		void  ToXYZ(Matrix<IssmDouble>* matrix);
 };
 #endif  /* _VERTEX_H */
