Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateConstraintsBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateConstraintsBalancedthickness.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateConstraintsBalancedthickness.cpp	(revision 4008)
@@ -13,15 +13,23 @@
 void	CreateConstraintsBalancedthickness(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
-	int count=0;
+	int count;
+
+	/*Output*/
 	DataSet* constraints = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Fetch data: */
 	IoModelFetchData(&iomodel->spcthickness,NULL,NULL,iomodel_handle,"spcthickness");
 
-	count=1; //matlab indexing
+	/*Initialize counter*/
+	count=0;
+
 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
 	for (i=0;i<iomodel->numberofvertices;i++){
@@ -30,5 +38,6 @@
 			if ((int)iomodel->spcthickness[2*i]){
 		
-				constraints->AddObject(new Spc(count,i+1,1,*(iomodel->spcthickness+2*i+1)));//we enforce first translation degree of freedom, for temperature
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+								*(iomodel->spcthickness+2*i+1),BalancedthicknessAnalysisEnum));//we enforce first translation degree of freedom, for temperature
 				count++;
 			}
@@ -39,10 +48,4 @@
 	xfree((void**)&iomodel->spcthickness);
 
-	/*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: */
-	constraints->Presort();
-
-	cleanup_and_return:
-	
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateConstraintsBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateConstraintsBalancedthickness2.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateConstraintsBalancedthickness2.cpp	(revision 4008)
@@ -13,8 +13,12 @@
 void	CreateConstraintsBalancedthickness2(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp	(revision 4008)
@@ -13,12 +13,17 @@
 void	CreateConstraintsBalancedvelocities(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
-	int count=1;
+	int count=0;
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Fetch data: */
@@ -34,8 +39,8 @@
 
 				/*This grid needs to be spc'd: */
-				constraints->AddObject(new Spc(count,i+1,1,pow( pow(*(iomodel->spcvelocity+6*i+4),2.0) + pow(*(iomodel->spcvelocity+6*i+5),2.0) ,0.5)));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+								pow( pow(*(iomodel->spcvelocity+6*i+4),2.0) + pow(*(iomodel->spcvelocity+6*i+5),2.0) ,0.5),BalancedvelocitiesAnalysisEnum));
 				count++;
 			}
-
 		} //if((my_vertices[i]==1))
 	}
@@ -44,10 +49,4 @@
 	xfree((void**)&iomodel->spcvelocity);
 	
-	/*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: */
-	constraints->Presort();
-
-	cleanup_and_return:
-	
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 4008)
@@ -11,11 +11,11 @@
 #include "../ModelProcessorx.h"
 
-
 void	CreateConstraintsDiagnosticHoriz(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
-
+	/*Intermediary*/
 	int i,j;
-	int count=0;
+	int count;
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
@@ -62,5 +62,7 @@
 	IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,"penalties");
 	
-	count=1; //matlab indexing
+	/*Initilize counter*/
+	count=0;
+
 	if(iomodel->numpenalties){
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 4008)
@@ -13,12 +13,17 @@
 void	CreateConstraintsDiagnosticHutter(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
-	int count=0;
+	int count;
 
+	/*Output*/
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
@@ -28,5 +33,7 @@
 	IoModelFetchData(&iomodel->gridonhutter,NULL,NULL,iomodel_handle,"gridonhutter");
 
-	count=1; //matlab indexing
+	/*Initialize conunter*/
+	count=0;
+
 	/*vx and vy are spc'd if we are not on gridonhutter: */
 	for (i=0;i<iomodel->numberofvertices;i++){
@@ -35,8 +42,8 @@
 			if (!(int)iomodel->gridonhutter[i]){
 
-				constraints->AddObject(new Spc(count,i+1,1,0));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
 				count++;
 
-				constraints->AddObject(new Spc(count,i+1,2,0));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHutterAnalysisEnum));
 				count++;
 			}
@@ -47,8 +54,4 @@
 	xfree((void**)&iomodel->gridonhutter);
 
-	/*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: */
-	constraints->Presort();
-
 	cleanup_and_return:
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 4008)
@@ -13,11 +13,17 @@
 void	CreateConstraintsDiagnosticStokes(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
+	Spc*    spc  = NULL;
+	int count;
+
+	/*Intermediary*/
 	DataSet* constraints = NULL;
-	Spc*    spc  = NULL;
-	int count=0;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
@@ -27,5 +33,7 @@
 	IoModelFetchData(&iomodel->gridonstokes,NULL,NULL,iomodel_handle,"gridonstokes");
 
-	count=1; //matlab indexing
+	/*Initialize counter*/
+	count=0;
+
 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
 	for (i=0;i<iomodel->numberofvertices;i++){
@@ -36,11 +44,11 @@
 
 				/*This grid will see its vx,vy and vz dofs spc'd to pattyn velocities: */
-				constraints->AddObject(new Spc(count,i+1,1,0));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticStokesAnalysisEnum));
 				count++;
 
-				constraints->AddObject(new Spc(count,i+1,2,0));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticStokesAnalysisEnum));
 				count++;
 
-				constraints->AddObject(new Spc(count,i+1,3,0));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticStokesAnalysisEnum));
 				count++;
 			}
@@ -51,8 +59,4 @@
 	xfree((void**)&iomodel->gridonstokes);
 
-	/*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: */
-	constraints->Presort();
-
 	cleanup_and_return:
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 4008)
@@ -13,19 +13,27 @@
 void	CreateConstraintsDiagnosticVert(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
+	int count;
+
+	/*Output*/
 	DataSet* constraints = NULL;
-	int count=0;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*return if 2d mesh*/
-	if (iomodel->dim==2)goto cleanup_and_return;
+	if (iomodel->dim==2) goto cleanup_and_return;
 
 	/*Fetch data: */
 	IoModelFetchData(&iomodel->spcvelocity,NULL,NULL,iomodel_handle,"spcvelocity");
 
+	/*Initialize counter*/
+	count=0;
+
 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
-	count=1;
 	for (i=0;i<iomodel->numberofvertices;i++){
 
@@ -34,5 +42,6 @@
 
 			if ((int)iomodel->spcvelocity[6*i+2]){
-				constraints->AddObject(new Spc(count,i+1,1,*(iomodel->spcvelocity+6*i+5)/iomodel->yts)); //add count'th spc, on node i+1, setting dof 1 to vx.
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+								*(iomodel->spcvelocity+6*i+5)/iomodel->yts,DiagnosticVertAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 				count++;
 
@@ -41,11 +50,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: */
-	constraints->Presort();
+	/*Free data: */
+	xfree((void**)&iomodel->spcvelocity);
 
 	cleanup_and_return:
-	/*Free data: */
-	xfree((void**)&iomodel->spcvelocity);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 4008)
@@ -13,15 +13,16 @@
 void	CreateConstraintsMelting(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
 	int count;
 	
+	/*Intermediary*/
 	DataSet* constraints = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
 
-	/*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: */
-	constraints->Presort();
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 4008)
@@ -13,17 +13,24 @@
 void	CreateConstraintsPrognostic(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
-	int count=0;
+	int count;
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*Fetch data: */
 	IoModelFetchData(&iomodel->spcthickness,NULL,NULL,iomodel_handle,"spcthickness");
 
-	count=1;//matlab indexing
+	/*Initialize counter*/
+	count=0;
+
 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
 	for (i=0;i<iomodel->numberofvertices;i++){
@@ -33,5 +40,5 @@
 			if ((int)iomodel->spcthickness[2*i]){
 
-				constraints->AddObject(new Spc(count,i+1,1,*(iomodel->spcthickness+2*i+1)));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,*(iomodel->spcthickness+2*i+1),PrognosticAnalysisEnum));
 				count++;
 			}
@@ -42,10 +49,4 @@
 	xfree((void**)&iomodel->spcthickness);
 	
-	/*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: */
-	constraints->Presort();
-
-	cleanup_and_return:
-	
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateConstraintsPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateConstraintsPrognostic2.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateConstraintsPrognostic2.cpp	(revision 4008)
@@ -13,8 +13,12 @@
 void	CreateConstraintsPrognostic2(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateConstraintsSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateConstraintsSlopeCompute.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateConstraintsSlopeCompute.cpp	(revision 4008)
@@ -13,9 +13,13 @@
 void	CreateConstraintsSlopeCompute(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Output*/
 	DataSet* constraints = NULL;
+	
+	/*Recover pointer: */
+	constraints=*pconstraints;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
-	
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
+
 	/*Assign output pointer: */
 	*pconstraints=constraints;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 4007)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 4008)
@@ -13,20 +13,26 @@
 void	CreateConstraintsThermal(DataSet** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
-	int count=0;
+	int count;
 	
+	/*Output*/
 	DataSet* constraints = NULL;
 	Spc*    spc  = NULL;
 
-	/*Create constraints: */
-	constraints = new DataSet(ConstraintsEnum);
+	/*Recover pointer: */
+	constraints=*pconstraints;
+
+	/*Create constraints if they do not exist yet*/
+	if(!constraints) constraints = new DataSet(ConstraintsEnum);
 
 	/*return if 2d mesh*/
-	if (iomodel->dim==2)goto cleanup_and_return;
+	if (iomodel->dim==2) goto cleanup_and_return;
 
 	/*Fetch data: */
 	IoModelFetchData(&iomodel->spctemperature,NULL,NULL,iomodel_handle,"spctemperature");
 
-	count=1;
+	/*Initialize counter*/
+	count=0;
 
 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
@@ -37,5 +43,5 @@
 			if ((int)iomodel->spctemperature[2*i]){
 
-				constraints->AddObject(new Spc(count,i+1,1,iomodel->spctemperature[2*i+1]));
+				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spctemperature[2*i+1],ThermalAnalysisEnum));
 				count++;
 
@@ -48,8 +54,4 @@
 	xfree((void**)&iomodel->spctemperature);
 
-	/*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: */
-	constraints->Presort();
-
 	cleanup_and_return:
 	
