Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsBalancedthickness.c:
+ * CreateNodesBalancedthickness.c:
  */
 
@@ -13,117 +13,22 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsBalancedthickness(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBalancedthickness(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*2d mesh: */
-	if (iomodel->dim==2){
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,"dhdt");
-		
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-		}//for (i=0;i<numberofelements;i++)
-
-		/*Free data : */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->dhdt);
-
-	}
-	else{ //	if (dim==2)
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-		IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,"dhdt");
-		IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-		IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-		for (i=0;i<iomodel->numberofelements;i++){
-			if(iomodel->my_elements[i]){
-				/*Create and add penta element to elements dataset: */
-				elements->AddObject(new Penta(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,6));
-			}
-		}//for (i=0;i<numberofelements;i++)
-
-		/*Free data: */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonbed);
-		xfree((void**)&iomodel->elementonsurface);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->dhdt);
-		xfree((void**)&iomodel->upperelements);
-		xfree((void**)&iomodel->lowerelements);
-
-
-	} //if (dim==2)
-
-	/*Add new constrant material property to materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
 	/*First fetch data: */
@@ -132,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -144,9 +44,5 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
 
 			/*Add node to nodes dataset: */
@@ -158,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -171,16 +62,8 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
-	vertices->Presort();
 	nodes->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsBalancedthickness2.c:
+ * CreateNodesBalancedthickness2.c:
  */
 
@@ -13,81 +13,24 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsBalancedthickness2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBalancedthickness2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j;
-	int vertex_index;
-	int node_index;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=false;
 
 	/*DataSets: */
-	DataSet* elements  = NULL;
 	DataSet* nodes = NULL;
-	DataSet* vertices = NULL;
-	DataSet* materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*elements created vary if we are dealing with a 2d mesh, or a 3d mesh: */
-	/*2d mesh: */
-	if (iomodel->dim==2){
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,"dhdt");
-		
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-		}//for (i=0;i<numberofelements;i++)
-	
-		/*Free data : */
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->dhdt);
-
-	}
-	else{ //	if (dim==2)
-		ISSMERROR("not implemented yet");
-	} //if (dim==2)
-
-	/*Add new constrant material property tgo materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));
-
-	/*Create nodes and vertices: */
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
+	/*Create nodes: */
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -95,19 +38,9 @@
 	IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet");
 	IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
+	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
 	if (iomodel->dim==3){
 		IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
-	}
-
-	/*Build Vertices dataset*/
-	for (i=0;i<iomodel->numberofvertices;i++){
-
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
-		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
-		}
+		ISSMERROR("Not implemented yet");
 	}
 
@@ -134,9 +67,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -149,15 +77,7 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsBalancedvelocities.c:
+ * CreateNodesBalancedvelocities.c:
  */
 
@@ -13,118 +13,23 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsBalancedvelocities(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBalancedvelocities(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*2d mesh: */
-	if (iomodel->dim==2){
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"accumulation_rate");
-		
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-
-		}//for (i=0;i<numberofelements;i++)
-
-	
-		/*Free data : */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-
-	}
-	else{ //	if (dim==2)
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-		IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-		IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-
-		for (i=0;i<iomodel->numberofelements;i++){
-			if(iomodel->my_elements[i]){
-				/*Create and add penta element to elements dataset: */
-				elements->AddObject(new Penta(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,6));
-
-			}//if(my_elements[i])
-
-		}//for (i=0;i<numberofelements;i++)
-
-		/*Free data: */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonbed);
-		xfree((void**)&iomodel->elementonsurface);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->upperelements);
-		xfree((void**)&iomodel->lowerelements);
-
-
-	} //if (dim==2)
-
-	/*Add new constrant material property to materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel)); //put it at the end of the materials
-		
 	/*First fetch data: */
 	if (iomodel->dim==3){
@@ -132,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -144,10 +44,6 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
 			
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(i+1,i,iomodel));
@@ -158,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -171,16 +62,8 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 3999)
@@ -17,4 +17,5 @@
 	/*Intermediary*/
 	int i;
+	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -22,6 +23,6 @@
 	DataSet*    nodes = NULL;
 
-	/*First create the elements, vertices, nodes and material properties, if they don't already exist */
-	nodes     = new DataSet(NodesEnum);
+	/*First create nodes*/
+	nodes = new DataSet(NodesEnum);
 	
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsDiagnosticHutter.c:
+ * CreateNodesDiagnosticHutter.c:
  */
 
@@ -13,115 +13,26 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsDiagnosticHutter(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticHutter(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
+	/*First create nodes*/ 
 	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
 	if (!iomodel->ishutter)goto cleanup_and_return;
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*Hutter elements can be partitioned using epart, even if
-	 * each hutter elements either lies on a node (in 2d), or a pair of vertically juxtaposed nodes (in 3d): */
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-	/*Fetch data temporarily needed: */
-	IoModelFetchData(&iomodel->gridonhutter,NULL,NULL,iomodel_handle,"gridonhutter");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
-	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
-	IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
-	IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,"drag_coefficient");
-	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,"rheology_B");
-	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,"rheology_n");
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
-	IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-	IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-
-	/*2d mesh: */
-	if (iomodel->dim==2){
-
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				if (*(iomodel->elements_type+2*i+0)==HutterFormulationEnum){ //create only Hutter elements
-
-					/*Create and add penta element to elements dataset: */
-					elements->AddObject(new Tria(i+1,i,iomodel));
-
-					/*Create and add material property to materials dataset: */
-					materials->AddObject(new Matice(i+1,i,iomodel,3));
-				}
-			}
-		} //for (i=0;i<iomodel->numberofvertices;i++)
-	} //if (iomodel->dim==2)
-	else{
-
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				if (*(iomodel->elements_type+2*i+0)==HutterFormulationEnum){ //create only Hutter elements
-
-					/*Create and add penta element to elements dataset: */
-					elements->AddObject(new Penta(i+1,i,iomodel));
-
-
-					/*Create and add material property to materials dataset: */
-					materials->AddObject(new Matice(i+1,i,iomodel,6));
-
-				}
-			}
-
-		} //for (i=0;i<iomodel->numberofelements;i++)
-
-	} //if (iomodel->dim==2)
-	
-	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->elementonbed);
-	xfree((void**)&iomodel->elementonsurface);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->gridonhutter);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->gridonbed);
-	xfree((void**)&iomodel->elementonwater);
-	xfree((void**)&iomodel->uppernodes);
-	xfree((void**)&iomodel->drag_coefficient);
-	xfree((void**)&iomodel->rheology_B);
-	xfree((void**)&iomodel->rheology_n);
-	xfree((void**)&iomodel->upperelements);
-	xfree((void**)&iomodel->lowerelements);
-
-	/*Add new constrant material property to materials, at the end: */
-	if (iomodel->dim==2){
-		materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));                          //put it at the end of the materials
-	}
-	else{
-		materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel)); //put it at the end of the materials
-	}
-		
 	/*First fetch data: */
 	if (iomodel->dim==3){
@@ -129,9 +40,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -144,9 +50,5 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
 
 			/*Add node to nodes dataset: */
@@ -158,9 +60,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -175,14 +72,8 @@
 	 * datasets, it will not be redone: */
 	elements->Presort();
-	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
 
 	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsDiagnosticStokes.c:
+ * CreateNodesDiagnosticStokes.c:
  */
 
@@ -13,20 +13,16 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsDiagnosticStokes(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticStokes(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
 	/*Now, do we have Stokes elements?*/
@@ -34,92 +30,13 @@
 	if (!iomodel->isstokes)                goto cleanup_and_return;
 
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,"drag_coefficient");
-	IoModelFetchData(&iomodel->drag_p,NULL,NULL,iomodel_handle,"drag_p");
-	IoModelFetchData(&iomodel->drag_q,NULL,NULL,iomodel_handle,"drag_q");
-	IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-	IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-	IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
-	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,"rheology_B");
-	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,"rheology_n");
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-	if (iomodel->control_analysis){
-		IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
-		IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
-		IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights");
-	}
-
-	for (i=0;i<iomodel->numberofelements;i++){
-
-		if(iomodel->my_elements[i]){
-			 if (*(iomodel->elements_type+2*i+1)==StokesFormulationEnum){
-
-				 /*Create and add penta element to elements dataset: */
-				 elements->AddObject(new Penta(i+1,i,iomodel));
-
-				 /*Create and add material property to materials dataset: */
-				 materials->AddObject(new Matice(i+1,i,iomodel,6));
-			 }
-
-		}
-
-	}//for (i=0;i<numberofelements;i++)
-
-	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->drag_coefficient);
-	xfree((void**)&iomodel->drag_p);
-	xfree((void**)&iomodel->drag_q);
-	xfree((void**)&iomodel->elementoniceshelf);
-	xfree((void**)&iomodel->elementonbed);
-	xfree((void**)&iomodel->elementonsurface);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->rheology_n);
-	xfree((void**)&iomodel->rheology_B);
-	xfree((void**)&iomodel->accumulation_rate);
-	xfree((void**)&iomodel->melting_rate);
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	if (iomodel->control_analysis){
-		xfree((void**)&iomodel->vx_obs);
-		xfree((void**)&iomodel->vy_obs);
-		xfree((void**)&iomodel->weights);
-	}
-	xfree((void**)&iomodel->upperelements);
-	xfree((void**)&iomodel->lowerelements);
-
-
-	/*Add new constrant material property to materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));
-	
 	/*First fetch data: */
 	IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
 	IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -131,9 +48,5 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
 
 			/*Add node to nodes dataset: */
@@ -145,9 +58,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -160,16 +68,10 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
 
 	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsDiagnosticVert.c:
+ * CreateNodesDiagnosticVert.c:
  */
 
@@ -13,87 +13,29 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsDiagnosticVert(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticVert(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 
 	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
 	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
 	if (iomodel->dim==2)goto cleanup_and_return;
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*Create 3d elements: */
-	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-	IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-	IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-	for (i=0;i<iomodel->numberofelements;i++){
-
-		if(iomodel->my_elements[i]){
-
-			/*Create and add penta element to elements dataset: */
-			elements->AddObject(new Penta(i+1,i,iomodel));
-
-			/*Create and add material property to materials dataset: */
-			materials->AddObject(new Matice(i+1,i,iomodel,6));
-
-		}
-
-	}//for (i=0;i<numberofelements;i++)
-
-	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->elementoniceshelf);
-	xfree((void**)&iomodel->elementonbed);
-	xfree((void**)&iomodel->elementonsurface);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->melting_rate);
-	xfree((void**)&iomodel->accumulation_rate);
-	xfree((void**)&iomodel->elementonwater);
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->upperelements);
-	xfree((void**)&iomodel->lowerelements);
-
-	/*Add new constrant material property to materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 	
 	/*First fetch data: */
 	IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
 	IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -103,9 +45,5 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
 
 			/*Add node to nodes dataset: */
@@ -117,9 +55,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -130,16 +63,10 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
 
 	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsMelting.c:
+ * CreateNodesMelting.c:
  */
 
@@ -13,81 +13,22 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsMelting(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesMelting(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 	
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,"drag_coefficient");
-	IoModelFetchData(&iomodel->drag_p,NULL,NULL,iomodel_handle,"drag_p");
-	IoModelFetchData(&iomodel->drag_q,NULL,NULL,iomodel_handle,"drag_q");
-	IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-	IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-	IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
-	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,"rheology_B");
-	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,"rheology_n");
-	IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-	IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-	IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-	for (i=0;i<iomodel->numberofelements;i++){
-		
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Penta(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,6));
-			}
-
-	}//for (i=0;i<numberofelements;i++)
-
-	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->drag_coefficient);
-	xfree((void**)&iomodel->drag_p);
-	xfree((void**)&iomodel->drag_q);
-	xfree((void**)&iomodel->elementoniceshelf);
-	xfree((void**)&iomodel->elementonbed);
-	xfree((void**)&iomodel->elementonsurface);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->rheology_n);
-	xfree((void**)&iomodel->rheology_B);
-	xfree((void**)&iomodel->accumulation_rate);
-	xfree((void**)&iomodel->melting_rate);
-	xfree((void**)&iomodel->elementonwater);
-	xfree((void**)&iomodel->pressure);
-	xfree((void**)&iomodel->upperelements);
-	xfree((void**)&iomodel->lowerelements);
-
-	/*Add new constrant material property tgo materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
 	/*First fetch data: */
@@ -96,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -108,10 +44,6 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
 			
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(i+1,i,iomodel));
@@ -122,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -135,15 +62,7 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsPrognostic.c:
+ * CreateNodesPrognostic.c:
  */
 
@@ -13,118 +13,22 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsPrognostic(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesPrognostic(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 	
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
+	/*First create nodes*/ 
 	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*2d mesh: */
-	if (iomodel->dim==2){
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-		}//for (i=0;i<numberofelements;i++)
-
-
-		/*Free data : */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-
-	}
-	else{ //	if (dim==2)
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-		IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
-		IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-		IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-
-		for (i=0;i<iomodel->numberofelements;i++){
-			if(iomodel->my_elements[i]){
-				/*Create and add penta element to elements dataset: */
-				elements->AddObject(new Penta(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,6));
-			}
-		}//for (i=0;i<numberofelements;i++)
-
-		/*Free data: */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonbed);
-		xfree((void**)&iomodel->elementonsurface);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->pressure);
-		xfree((void**)&iomodel->temperature);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-		xfree((void**)&iomodel->upperelements);
-		xfree((void**)&iomodel->lowerelements);
-
-
-	} //if (dim==2)
-
-	/*Add new constrant material property to materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
 	/*First fetch data: */
@@ -133,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -145,9 +44,5 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
 
 			/*Add node to nodes dataset: */
@@ -159,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -172,16 +62,8 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsPrognostic2.c:
+ * CreateNodesPrognostic2.c:
  */
 
@@ -13,79 +13,26 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j;
+	int i;
 	int vertex_index;
 	int node_index;
+	int totalnodes;
+	bool continuous_galerkin=false;
 
 	/*DataSets: */
-	DataSet* elements  = NULL;
 	DataSet* nodes = NULL;
-	DataSet* vertices = NULL;
-	DataSet* materials = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
+	/*First create nodes*/ 
 	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*elements created vary if we are dealing with a 2d mesh, or a 3d mesh: */
-	/*2d mesh: */
-	if (iomodel->dim==2){
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
-		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
-		IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-		IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-		
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-		}//for (i=0;i<numberofelements;i++)
-	
-		/*Free data : */
-		xfree((void**)&iomodel->thickness);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementoniceshelf);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->melting_rate);
-		xfree((void**)&iomodel->accumulation_rate);
-		xfree((void**)&iomodel->vx);
-		xfree((void**)&iomodel->vy);
-
-	}
-	else{ //	if (dim==2)
-		ISSMERROR("not implemented yet");
-	} //if (dim==2)
-
-	/*Add new constrant material property tgo materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));
-
-	/*Create nodes and vertices: */
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
+	/*Create nodes: */
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -93,19 +40,8 @@
 	IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet");
 	IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
+	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
 	if (iomodel->dim==3){
 		IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
-	}
-
-	/*Build Vertices dataset*/
-	for (i=0;i<iomodel->numberofvertices;i++){
-
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
-		if(iomodel->my_vertices[i]){
-
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
-		}
 	}
 
@@ -132,9 +68,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -146,15 +77,7 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsSlopeCompute.c:
+ * CreateNodesSlopeCompute.c:
  */
 
@@ -13,89 +13,22 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
-		/*output: int* epart, int* my_grids, double* my_bordergrids*/
+	/*Intermediary*/
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
-	int i,j,k,n;
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 	
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*2d mesh: */
-	if (iomodel->dim==2){
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		
-		for (i=0;i<iomodel->numberofelements;i++){
-
-			if(iomodel->my_elements[i]){
-				
-				/*Create and add tria element to elements dataset: */
-				elements->AddObject(new Tria(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,3));
-			}
-
-		}//for (i=0;i<numberofelements;i++)
-
-	
-		/*Free data : */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementonwater);
-
-	}
-	else{ //	if (dim==2)
-
-		/*Fetch data needed: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-		IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-		IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-		IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-		IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-		IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-		IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-		for (i=0;i<iomodel->numberofelements;i++){
-			if(iomodel->my_elements[i]){
-				/*Create and add penta element to elements dataset: */
-				elements->AddObject(new Penta(i+1,i,iomodel));
-
-				/*Create and add material property to materials dataset: */
-				materials->AddObject(new Matice(i+1,i,iomodel,6));
-
-			}//if(my_elements[i])
-		}//for (i=0;i<numberofelements;i++)
-
-		/*Free data: */
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->surface);
-		xfree((void**)&iomodel->bed);
-		xfree((void**)&iomodel->elementonbed);
-		xfree((void**)&iomodel->elementonwater);
-		xfree((void**)&iomodel->upperelements);
-		xfree((void**)&iomodel->lowerelements);
-
-	} //if (dim==2)
-
-	/*Add new constrant material property tgo materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel)); //put it at the end of the materials
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 	
 	/*First fetch data: */
@@ -104,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -116,10 +44,6 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
 			
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(i+1,i,iomodel));
@@ -130,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -143,16 +62,8 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 3998)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 3999)
@@ -1,4 +1,4 @@
 /*
- * CreateElementsNodesAndMaterialsThermal.c:
+ * CreateNodesThermal.c:
  */
 
@@ -13,86 +13,23 @@
 #include "../ModelProcessorx.h"
 
-void	CreateElementsNodesAndMaterialsThermal(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesThermal(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
 	/*Intermediary*/
-	int i,j,k,n;
+	int i;
+	int totalnodes;
+	bool continuous_galerkin=true;
 
 	/*DataSets: */
-	DataSet*    elements  = NULL;
 	DataSet*    nodes = NULL;
-	DataSet*    vertices = NULL;
-	DataSet*    materials = NULL;
 	
-	/*First create the elements, nodes and material properties: */
-	elements  = new DataSet(ElementsEnum);
-	nodes     = new DataSet(NodesEnum);
-	vertices  = new DataSet(VerticesEnum);
-	materials = new DataSet(MaterialsEnum);
+	/*First create nodes*/ 
+	nodes = new DataSet(NodesEnum);
 
-	/*Partition elements and vertices and nodes: */
-	Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
-	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
-	IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,"drag_coefficient");
-	IoModelFetchData(&iomodel->drag_p,NULL,NULL,iomodel_handle,"drag_p");
-	IoModelFetchData(&iomodel->drag_q,NULL,NULL,iomodel_handle,"drag_q");
-	IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
-	IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
-	IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
-	IoModelFetchData(&iomodel->geothermalflux,NULL,NULL,iomodel_handle,"geothermalflux");
-	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,"rheology_B");
-	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,"rheology_n");
-	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
-	IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
-	IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
-	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
-	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
-	IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
-	
-	for (i=0;i<iomodel->numberofelements;i++){
-		if(iomodel->my_elements[i]){
+	/*Continuous Galerkin partition of nodes: */
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
 
-			/*Create and add tria element to elements dataset: */
-			elements->AddObject(new Penta(i+1,i,iomodel));
-
-			/*Create and add material property to materials dataset: */
-			materials->AddObject(new Matice(i+1,i,iomodel,6));
-		}
-	}//for (i=0;i<numberofelements;i++)
-
-	/*Free data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->surface);
-	xfree((void**)&iomodel->bed);
-	xfree((void**)&iomodel->drag_coefficient);
-	xfree((void**)&iomodel->drag_p);
-	xfree((void**)&iomodel->drag_q);
-	xfree((void**)&iomodel->elementoniceshelf);
-	xfree((void**)&iomodel->elementonbed);
-	xfree((void**)&iomodel->elementonsurface);
-	xfree((void**)&iomodel->elements_type);
-	xfree((void**)&iomodel->geothermalflux);
-	xfree((void**)&iomodel->rheology_n);
-	xfree((void**)&iomodel->rheology_B);
-	xfree((void**)&iomodel->elementonwater);
-	xfree((void**)&iomodel->pressure);
-	xfree((void**)&iomodel->temperature);
-	xfree((void**)&iomodel->vx);
-	xfree((void**)&iomodel->vy);
-	xfree((void**)&iomodel->vz);
-	xfree((void**)&iomodel->upperelements);
-	xfree((void**)&iomodel->lowerelements);
-
-	/*Add new constrant material property tgo materials, at the end: */
-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
-	
 	/*Create nodes and vertices: */
 	if (iomodel->dim==3){
@@ -100,9 +37,4 @@
 		IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
 	}
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
 	IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
 	IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
@@ -112,10 +44,6 @@
 	for (i=0;i<iomodel->numberofvertices;i++){
 
-		/*vertices and nodes (same number, as we are running continuous galerkin formulation: */
 		if(iomodel->my_vertices[i]){
 			
-			/*Add vertex to vertices dataset: */
-			vertices->AddObject(new Vertex(i+1,i,iomodel));
-
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(i+1,i,iomodel));
@@ -126,9 +54,4 @@
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->deadgrids);
-	xfree((void**)&iomodel->x);
-	xfree((void**)&iomodel->y);
-	xfree((void**)&iomodel->z);
-	xfree((void**)&iomodel->thickness);
-	xfree((void**)&iomodel->bed);
 	xfree((void**)&iomodel->gridonbed);
 	xfree((void**)&iomodel->gridonsurface);
@@ -139,16 +62,8 @@
 	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
 	 * datasets, it will not be redone: */
-	elements->Presort();
 	nodes->Presort();
-	vertices->Presort();
-	materials->Presort();
-
-	cleanup_and_return:
 
 	/*Assign output pointer: */
-	*pelements=elements;
 	*pnodes=nodes;
-	*pvertices=vertices;
-	*pmaterials=materials;
 
 }
