Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3453)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3454)
@@ -715,11 +715,10 @@
 }
 /*}}}*/
-/*FUNCTION DataSet::NodeRank{{{1*/
-void   DataSet::NodeRank(int* ranks){
-
-	/*Go through a dataset, and find a Node* object. For this object, 
-	 * ask it to report its cpu rank: */
-
-	int node_rank;
+/*FUNCTION DataSet::Ranks{{{1*/
+void   DataSet::Ranks(int* ranks){
+
+	/*Go through a dataset, and for each object, report it cpu: */
+
+	int rank;
 	int id;
 	vector<Object*>::iterator object;
@@ -731,5 +730,5 @@
 
 			/*Ok, this object is a node, ask which rank it has: */
-			node_rank=(*object)->MyRank();
+			rank=(*object)->MyRank();
 
 			/*Which id does it have: */
@@ -737,5 +736,5 @@
 
 			/*Plug rank into ranks, according to id: */
-			ranks[id-1]=node_rank; //Matlab ids start at 1.
+			ranks[id-1]=rank; //Matlab ids start at 1.
 		}
 	}
@@ -1149,5 +1148,5 @@
 /*}}}*/
 /*FUNCTION DataSet::FlagClones{{{1*/
-void  DataSet::FlagClones(int numberofnodes){
+void  DataSet::FlagClones(int numberofobjects){
 
 	int i;
@@ -1158,43 +1157,40 @@
 
 	vector<Object*>::iterator object;
-	Node* node=NULL;
 
 	/*Allocate ranks: */
-	ranks=(int*)xmalloc(numberofnodes*sizeof(int));
-	minranks=(int*)xmalloc(numberofnodes*sizeof(int));
-
-	for(i=0;i<numberofnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
-
-	/*Now go through all our nodes and ask them to report to who they belong (which rank): */
-	NodeRank(ranks);
-
-#ifdef _ISSM_DEBUG_
-	for(i=0;i<numberofnodes;i++){
+	ranks=(int*)xmalloc(numberofobjects*sizeof(int));
+	minranks=(int*)xmalloc(numberofobjects*sizeof(int));
+
+	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+
+	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+	Ranks(ranks);
+
+	#ifdef _ISSM_DEBUG_
+	for(i=0;i<numberofobjects;i++){
 		_printf_("%i\n",ranks[i]);
 	}
-#endif
-
-	/*We need to take the minimum rank for each node, and every cpu needs to get that result. That way, 
-	 * when we start building the dof list for all nodes, a cpu can check whether its node already has been 
+	#endif
+
+	/*We need to take the minimum rank for each vertex, and every cpu needs to get that result. That way, 
+	 * when we start building the dof list for all vertexs, a cpu can check whether its vertex already has been 
 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
-	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofnodes,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
-
-#ifdef _ISSM_DEBUG_
-	for(i=0;i<numberofnodes;i++){
-		_printf_("%i\n",minranks[i]);
-	}
-#endif
-
-	/*Now go through all nodes, and use minranks to flag which nodes are cloned: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Check this is a node: */
+	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
+
+	#ifdef _ISSM_DEBUG_
+		for(i=0;i<numberofobjects;i++){
+			_printf_("%i\n",minranks[i]);
+		}
+	#endif
+
+	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Check this is a vertex: */
 		if((*object)->Enum()==NodeEnum()){
-
-			node=(Node*)(*object);
-
-			/*Ok, this object is a node, ask it to plug values into partition: */
-			node->SetClone(minranks);
+			
+			/*For this object, decide whether it is a clone: */
+			(*object)->SetClone(minranks);
 
 		}
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3453)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3454)
@@ -57,5 +57,5 @@
 		int   FindResult(Vec* presult,char* name);
 		Object* FindParamObject(char* name);
-		void  NodeRank(int* ranks);
+		void  Ranks(int* ranks);
 		void  DistributeDofs(int numberofnodes,int numdofspernode);
 		void  CreatePartitioningVector(Vec* ppartition,int numnods,int numdofspernode);
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 3453)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 3454)
@@ -15,4 +15,5 @@
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
+	int count;
 
 	/*spc intermediary data: */
Index: /issm/trunk/src/c/objects/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Beam.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Beam.cpp	(revision 3454)
@@ -787,2 +787,9 @@
 }
 /*}}}*/
+//*FUNCTION Beam::SetClone {{{1*/
+void  Beam::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
+
Index: /issm/trunk/src/c/objects/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Beam.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Beam.h	(revision 3454)
@@ -57,6 +57,8 @@
 		void  Configure(void* loads,void* nodes,void* materials,void* parameters);
 		Object* copy();
+		void  SetClone(int* minranks);
+
 		/*}}}*/
-		/*object management: {{{1*/
+		/*numerics: {{{1*/
 		void  CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/objects/DofVec.cpp
===================================================================
--- /issm/trunk/src/c/objects/DofVec.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/DofVec.cpp	(revision 3454)
@@ -418,2 +418,8 @@
 	return vector;
 }
+/*FUNCTION DofVec::SetClone {{{1*/
+void  DofVec::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/DofVec.h
===================================================================
--- /issm/trunk/src/c/objects/DofVec.h	(revision 3453)
+++ /issm/trunk/src/c/objects/DofVec.h	(revision 3454)
@@ -45,4 +45,6 @@
 		int   MyRank();
 		int   Size();
+		void  SetClone(int* minranks);
+	
 
 		Object* copy();
Index: /issm/trunk/src/c/objects/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Element.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Element.h	(revision 3454)
@@ -21,4 +21,5 @@
 		virtual int    MyRank()=0;
 		virtual void   Marshall(char** pmarshalled_dataset)=0;
+		virtual void   SetClone(int* minranks)=0;
 		virtual int    MarshallSize()=0;
 		virtual char*  GetName()=0;
Index: /issm/trunk/src/c/objects/FemModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/FemModel.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/FemModel.cpp	(revision 3454)
@@ -225,2 +225,8 @@
 Mat                 FemModel::get_Gmn(void){return Gmn;}
 /*}}}*/
+/*FUNCTION FemModel::FemModel {{{1*/
+void  FemModel::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/FemModel.h
===================================================================
--- /issm/trunk/src/c/objects/FemModel.h	(revision 3453)
+++ /issm/trunk/src/c/objects/FemModel.h	(revision 3454)
@@ -55,4 +55,5 @@
 		int   Enum();
 		Object* copy();
+		void  SetClone(int* minranks);
 		
 		int FindParam(double* pscalar,char* name);
Index: /issm/trunk/src/c/objects/Icefront.cpp
===================================================================
--- /issm/trunk/src/c/objects/Icefront.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Icefront.cpp	(revision 3454)
@@ -1478,4 +1478,10 @@
 }
 /*}}}*/
+/*FUNCTION Icefront::SetClone {{{1*/
+void  Icefront::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
 /*FUNCTION Icefront UpdateFromInputs {{{1*/
 void  Icefront::UpdateFromInputs(void* vinputs){
Index: /issm/trunk/src/c/objects/Icefront.h
===================================================================
--- /issm/trunk/src/c/objects/Icefront.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Icefront.h	(revision 3454)
@@ -69,4 +69,6 @@
 		int   MarshallSize();
 		int   MyRank();
+		void   SetClone(int* minranks);
+
 		/*}}}*/
 		/*numerics: {{{1*/
Index: /issm/trunk/src/c/objects/Input.cpp
===================================================================
--- /issm/trunk/src/c/objects/Input.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Input.cpp	(revision 3454)
@@ -301,7 +301,8 @@
 }
 /*}}}*/
-
-
-
-		
-
+/*FUNCTION Input::SetClone {{{1*/
+void  Input::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Input.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Input.h	(revision 3454)
@@ -39,4 +39,5 @@
 		
 		Object* copy();
+		void  SetClone(int* minranks);
 
 		/*fill virtual routines: */
Index: /issm/trunk/src/c/objects/Load.h
===================================================================
--- /issm/trunk/src/c/objects/Load.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Load.h	(revision 3454)
@@ -32,4 +32,5 @@
 		virtual void  PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type)=0;
 		virtual void  PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type)=0;
+		virtual void  SetClone(int* minranks)=0;
 
 		int           Enum();
Index: /issm/trunk/src/c/objects/Material.h
===================================================================
--- /issm/trunk/src/c/objects/Material.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Material.h	(revision 3454)
@@ -21,4 +21,5 @@
 		virtual int   MyRank()=0;
 		virtual void  Marshall(char** pmarshalled_dataset)=0;
+		virtual void  SetClone(int* minranks)=0;
 		virtual int   MarshallSize()=0;
 		virtual char* GetName()=0;
Index: /issm/trunk/src/c/objects/Matice.cpp
===================================================================
--- /issm/trunk/src/c/objects/Matice.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Matice.cpp	(revision 3454)
@@ -13,4 +13,5 @@
 #include <string.h>
 #include "../shared/shared.h"
+#include "../include/macros.h"
 #include "../EnumDefinitions/EnumDefinitions.h"
 
@@ -440,2 +441,9 @@
 }
 /*}}}*/
+//*FUNCTION Matice::SetClone {{{1*/
+void  Matice::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
+
Index: /issm/trunk/src/c/objects/Matice.h
===================================================================
--- /issm/trunk/src/c/objects/Matice.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Matice.h	(revision 3454)
@@ -44,4 +44,5 @@
 		double GetB();
 		double GetN();
+		void   SetClone(int* minranks);
 
 };
Index: /issm/trunk/src/c/objects/Matpar.cpp
===================================================================
--- /issm/trunk/src/c/objects/Matpar.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Matpar.cpp	(revision 3454)
@@ -12,4 +12,5 @@
 #include "stdio.h"
 #include "../shared/shared.h"
+#include "../include/macros.h"
 #include "./Matpar.h"
 #include <string.h>
@@ -288,2 +289,8 @@
 }
 /*}}}1*/
+/*FUNCTION Matpar::SetClone {{{1*/
+void  Matpar::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Matpar.h
===================================================================
--- /issm/trunk/src/c/objects/Matpar.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Matpar.h	(revision 3454)
@@ -57,4 +57,5 @@
 		double GetMeltingPoint();
 		Object* copy();
+		void   SetClone(int* minranks);
 
 };
Index: /issm/trunk/src/c/objects/Numericalflux.cpp
===================================================================
--- /issm/trunk/src/c/objects/Numericalflux.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Numericalflux.cpp	(revision 3454)
@@ -751,2 +751,8 @@
 }
 /*}}}*/
+/*FUNCTION Numericalflux::SetClone {{{1*/
+void  Numericalflux::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Numericalflux.h
===================================================================
--- /issm/trunk/src/c/objects/Numericalflux.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Numericalflux.h	(revision 3454)
@@ -48,4 +48,5 @@
 		int   Enum();
 		int   GetId(); 
+		void   SetClone(int* minranks);
 		void  GetJacobianDeterminant(double* pJdet,double xyz_list[4][3], double gauss_coord);
 		void  GetNodalFunctions(double* l1l4, double gauss_coord);
Index: /issm/trunk/src/c/objects/Numpar.cpp
===================================================================
--- /issm/trunk/src/c/objects/Numpar.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Numpar.cpp	(revision 3454)
@@ -245,2 +245,8 @@
 }
 /*}}}*/
+/*FUNCTION Numpar::SetClone {{{1*/
+void  Numpar::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Numpar.h
===================================================================
--- /issm/trunk/src/c/objects/Numpar.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Numpar.h	(revision 3454)
@@ -43,4 +43,5 @@
 		int   Enum();
 		Object* copy();
+		void  SetClone(int* minranks);
 
 		void  Configure(void* pparametersin);
Index: /issm/trunk/src/c/objects/Object.h
===================================================================
--- /issm/trunk/src/c/objects/Object.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Object.h	(revision 3454)
@@ -25,4 +25,5 @@
 		virtual void  Demarshall(char** pmarshalled_dataset)=0;
 		virtual int   Enum()=0;
+		virtual void  SetClone(int* minranks)=0;
 		virtual Object* copy()=0;
 
Index: /issm/trunk/src/c/objects/Param.cpp
===================================================================
--- /issm/trunk/src/c/objects/Param.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Param.cpp	(revision 3454)
@@ -724,2 +724,8 @@
 }
 /*}}}*/
+/*FUNCTION Param::SetClone {{{1*/
+void  Param::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Param.h
===================================================================
--- /issm/trunk/src/c/objects/Param.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Param.h	(revision 3454)
@@ -45,4 +45,5 @@
 		void  Demarshall(char** pmarshalled_dataset);
 		int   Enum();
+		void  SetClone(int* minranks);
 		
 		void  SetDouble(double value);
Index: /issm/trunk/src/c/objects/Pengrid.cpp
===================================================================
--- /issm/trunk/src/c/objects/Pengrid.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Pengrid.cpp	(revision 3454)
@@ -14,4 +14,5 @@
 #include <string.h>
 #include "../EnumDefinitions/EnumDefinitions.h"
+#include "../include/macros.h"
 #include "../shared/shared.h"
 #include "../include/typedefs.h"
@@ -635,4 +636,10 @@
 }
 /*}}}1*/
+/*FUNCTION Pengrid::SetClone {{{1*/
+void  Pengrid::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
 /*FUNCTION Pengrid::UpdateFromInputs {{{1*/
 void  Pengrid::UpdateFromInputs(void* inputs){
Index: /issm/trunk/src/c/objects/Pengrid.h
===================================================================
--- /issm/trunk/src/c/objects/Pengrid.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Pengrid.h	(revision 3454)
@@ -65,4 +65,6 @@
 		void  PenaltyConstrain(int* punstable,void* inputs,int analysis_type,int sub_analysis_type);
 		void  PenaltyConstrainThermal(int* punstable,void* inputs,int analysis_type,int sub_analysis_type);
+		void   SetClone(int* minranks);
+
 };
 
Index: /issm/trunk/src/c/objects/Penpair.cpp
===================================================================
--- /issm/trunk/src/c/objects/Penpair.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Penpair.cpp	(revision 3454)
@@ -14,4 +14,5 @@
 #include <string.h>
 #include "../EnumDefinitions/EnumDefinitions.h"
+#include "../include/macros.h"
 #include "../shared/shared.h"
 #include "../include/typedefs.h"
@@ -233,2 +234,8 @@
 }
 /*}}}1*/
+/*FUNCTION Penpair::SetClone {{{1*/
+void  Penpair::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Penpair.h
===================================================================
--- /issm/trunk/src/c/objects/Penpair.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Penpair.h	(revision 3454)
@@ -48,4 +48,6 @@
 		void  PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type);
 		Object* copy();
+		void   SetClone(int* minranks);
+
 };
 
Index: /issm/trunk/src/c/objects/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Penta.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Penta.cpp	(revision 3454)
@@ -4088,5 +4088,5 @@
 }
 /*}}}*/
-/*FUNCTION ReduceVectorStokes {{{1*/
+/**FUNCTION ReduceVectorStokes {{{1*/
 void Penta::ReduceVectorStokes(double* Pe_reduced, double* Ke_temp, double* Pe_temp){
 
@@ -4130,4 +4130,10 @@
 }
 /*}}}*/
+/*FUNCTION Penta::SetClone {{{1*/
+void  Penta::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
 /*FUNCTION SurfaceArea {{{1*/
 double Penta::SurfaceArea(void* inputs,int analysis_type,int sub_analysis_type){
Index: /issm/trunk/src/c/objects/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Penta.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Penta.h	(revision 3454)
@@ -62,4 +62,6 @@
 		void  UpdateFromDakota(void* inputs);
 		void  UpdateFromInputs(void* inputs);
+		void  SetClone(int* minranks);
+
 		/*}}}*/
 		/*FUNCTION element numerical routines {{{1*/
Index: /issm/trunk/src/c/objects/Result.cpp
===================================================================
--- /issm/trunk/src/c/objects/Result.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Result.cpp	(revision 3454)
@@ -14,4 +14,5 @@
 #include <string.h>
 #include "../EnumDefinitions/EnumDefinitions.h"
+#include "../include/macros.h"
 #include "./ParameterInputs.h"
 #include "../shared/shared.h"
@@ -290,2 +291,8 @@
 }
 /*}}}1*/
+/*FUNCTION Result::SetClone {{{1*/
+void  Result::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Result.h
===================================================================
--- /issm/trunk/src/c/objects/Result.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Result.h	(revision 3454)
@@ -41,4 +41,5 @@
 		int   Enum();
 		Object* copy();
+		void  SetClone(int* minranks);
 
 		double GetTime();
Index: /issm/trunk/src/c/objects/Rgb.cpp
===================================================================
--- /issm/trunk/src/c/objects/Rgb.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Rgb.cpp	(revision 3454)
@@ -14,4 +14,6 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 #include "../DataSet/DataSet.h"
+#include "../shared/shared.h"
+#include "../include/macros.h"
 #include "./objects.h"
 
@@ -163,2 +165,8 @@
 }
 /*}}}1*/
+/*FUNCTION Rgb::SetClone {{{1*/
+void  Rgb::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Rgb.h
===================================================================
--- /issm/trunk/src/c/objects/Rgb.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Rgb.h	(revision 3454)
@@ -32,4 +32,5 @@
 		int    GetId(); 
 		int    MyRank();
+		void  SetClone(int* minranks);
 
 		/*non virtual: */
Index: /issm/trunk/src/c/objects/Riftfront.cpp
===================================================================
--- /issm/trunk/src/c/objects/Riftfront.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Riftfront.cpp	(revision 3454)
@@ -457,4 +457,12 @@
 }
 /*}}}1*/
+/*FUNCTION Riftfront::FreezeConstraints{{{1*/
+void   Riftfront::FreezeConstraints(void* vinputs, int analysis_type){
+
+	/*Just set frozen flag to 1: */
+	this->frozen=1;
+
+}
+/*}}}1*/
 /*FUNCTION Riftfront::GetDofList {{{1*/
 
@@ -482,4 +490,12 @@
 char* Riftfront::GetName(void){
 	return "riftfront";
+}
+/*}}}1*/
+/*FUNCTION Riftfront::IsFrozen{{{1*/
+bool   Riftfront::IsFrozen(void){
+
+	/*Just set frozen flag to 1: */
+	if(this->frozen)return 1;
+	else return 0;
 }
 /*}}}1*/
@@ -791,6 +807,5 @@
 }
 /*}}}1*/
-/*FUNCTION Riftfront::PotentialUnstableC
- * nstraint {{{1*/
+/*FUNCTION Riftfront::PotentialUnstableConstraint {{{1*/
 int   Riftfront::PotentialUnstableConstraint(int* punstable, void* vinputs, int analysis_type){
 
@@ -894,4 +909,10 @@
 }
 /*}}}1*/
+/*FUNCTION Riftfront::SetClone {{{1*/
+void  Riftfront::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
 /*FUNCTION Riftfront::UpdateFromInputs {{{1*/
 void  Riftfront::UpdateFromInputs(void* vinputs){
@@ -908,18 +929,2 @@
 }
 /*}}}1*/
-/*FUNCTION Riftfront::FreezeConstraints{{{1*/
-void   Riftfront::FreezeConstraints(void* vinputs, int analysis_type){
-
-	/*Just set frozen flag to 1: */
-	this->frozen=1;
-
-}
-/*}}}1*/
-/*FUNCTION Riftfront::IsFrozen{{{1*/
-bool   Riftfront::IsFrozen(void){
-
-	/*Just set frozen flag to 1: */
-	if(this->frozen)return 1;
-	else return 0;
-}
-/*}}}1*/
Index: /issm/trunk/src/c/objects/Riftfront.h
===================================================================
--- /issm/trunk/src/c/objects/Riftfront.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Riftfront.h	(revision 3454)
@@ -66,15 +66,17 @@
 		/*}}}*/
 		/*object management: {{{1*/
+		void  Configure(void* elements,void* nodes,void* materials);
+		Object* copy();
+		void  DeepEcho();
+		void  Demarshall(char** pmarshalled_dataset);
 		void  Echo();
-		void  DeepEcho();
+		int   Enum();
+		int   GetId(); 
+		char* GetName();
 		void  Marshall(char** pmarshalled_dataset);
 		int   MarshallSize();
-		char* GetName();
-		void  Demarshall(char** pmarshalled_dataset);
-		int   Enum();
-		int   GetId(); 
 		int   MyRank();
-		void  Configure(void* elements,void* nodes,void* materials);
-		Object* copy();
+		void   SetClone(int* minranks);
+
 		/*}}}*/
 		/*numerics: {{{1*/
Index: /issm/trunk/src/c/objects/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Sing.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Sing.cpp	(revision 3454)
@@ -623,2 +623,8 @@
 }
 /*}}}*/
+/*FUNCTION Sing::SetClone {{{1*/
+void  Sing::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Sing.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Sing.h	(revision 3454)
@@ -52,4 +52,5 @@
 		void  Marshall(char** pmarshalled_dataset);
 		int   MarshallSize();
+		void  SetClone(int* minranks);
 		int   MyRank();
 		/*}}}*/
Index: /issm/trunk/src/c/objects/SolPar.h
===================================================================
--- /issm/trunk/src/c/objects/SolPar.h	(revision 3453)
+++ /issm/trunk/src/c/objects/SolPar.h	(revision 3454)
@@ -37,4 +37,5 @@
 		int   Enum();
 		Object* copy();
+		void  SetClone(int* minranks);
 
 		/*functionality: */
Index: /issm/trunk/src/c/objects/Spc.cpp
===================================================================
--- /issm/trunk/src/c/objects/Spc.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Spc.cpp	(revision 3454)
@@ -12,4 +12,6 @@
 #include "stdio.h"
 #include <string.h>
+#include "../include/macros.h"
+#include "../shared/shared.h"
 #include "../EnumDefinitions/EnumDefinitions.h"
 #include "../DataSet/DataSet.h"
@@ -162,2 +164,8 @@
 }
 /*}}}1*/
+/*FUNCTION Spc::SetClone {{{1*/
+void  Spc::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Spc.h
===================================================================
--- /issm/trunk/src/c/objects/Spc.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Spc.h	(revision 3454)
@@ -37,4 +37,5 @@
 		double GetValue();
 		Object* copy();
+		void  SetClone(int* minranks);
 
 };
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 3454)
@@ -5245,4 +5245,10 @@
 }
 /*}}}*/
+/*FUNCTION Tria::SetClone {{{1*/
+void  Tria::SetClone(int* minranks){
+
+	ISSMERROR("not implemented yet");
+}
+/*}}}1*/
 /*FUNCTION SurfaceNormal{{{1*/
 
Index: /issm/trunk/src/c/objects/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Tria.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Tria.h	(revision 3454)
@@ -56,4 +56,5 @@
 		int   MarshallSize();
 		int   MyRank();
+		void  SetClone(int* minranks);
 		void  UpdateFromDakota(void* inputs);
 		void  UpdateFromInputs(void* inputs);
Index: /issm/trunk/src/c/objects/Vertex.cpp
===================================================================
--- /issm/trunk/src/c/objects/Vertex.cpp	(revision 3453)
+++ /issm/trunk/src/c/objects/Vertex.cpp	(revision 3454)
@@ -185,4 +185,20 @@
 }
 /*}}}*/
+/*FUNCTION SetClone {{{1*/
+void  Vertex::SetClone(int* minranks){
+
+	extern int my_rank;
+
+	if (minranks[id-1]==my_rank){
+		this->clone=0;
+	}
+	else{
+		/*!there is a cpu with lower rank that has the same node, 
+		therefore, I am a clone*/
+		this->clone=1; 	
+	}
+
+}
+/*}}}*/
 /*FUNCTION UpdateFromDakota {{{1*/
 void  Vertex::UpdateFromDakota(void* vinputs){
Index: /issm/trunk/src/c/objects/Vertex.h
===================================================================
--- /issm/trunk/src/c/objects/Vertex.h	(revision 3453)
+++ /issm/trunk/src/c/objects/Vertex.h	(revision 3454)
@@ -42,4 +42,5 @@
 		int   MarshallSize();
 		int   MyRank();
+		void  SetClone(int* minranks);
 		void  UpdateFromDakota(void* vinputs);
 		void  UpdateFromInputs(void* vinputs);
