Index: /issm/trunk/src/c/Container/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/Container/DataSet.cpp	(revision 9284)
+++ /issm/trunk/src/c/Container/DataSet.cpp	(revision 9285)
@@ -282,15 +282,15 @@
 				dataset->AddObject(matpar);}
 				break;
-			case SpcEnum:{
-				Spc* spc=NULL;
-				spc=new Spc();
-				spc->Demarshall(&marshalled_dataset);
-				dataset->AddObject(spc);}
-				break;
-			case SpctEnum:{
-				Spct* spct=NULL;
-				spct=new Spct();
-				spct->Demarshall(&marshalled_dataset);
-				dataset->AddObject(spct);}
+			case SpcStaticEnum:{
+				SpcStatic* spcstatic=NULL;
+				spcstatic=new SpcStatic();
+				spcstatic->Demarshall(&marshalled_dataset);
+				dataset->AddObject(spcstatic);}
+				break;
+			case SpcTransientEnum:{
+				SpcTransient* spctransient=NULL;
+				spctransient=new SpcTransient();
+				spctransient->Demarshall(&marshalled_dataset);
+				dataset->AddObject(spctransient);}
 				break;
 
Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9284)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9285)
@@ -153,6 +153,6 @@
 	ExternalResultEnum,
 	/*Spc: */
-	SpcEnum,
-	SpctEnum,
+	SpcStaticEnum,
+	SpcTransientEnum,
 	/*}}}*/
 	/*Geography {{{1*/
Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 9284)
+++ /issm/trunk/src/c/Makefile.am	(revision 9285)
@@ -231,8 +231,8 @@
 					./objects/Materials/Matpar.cpp\
 					./objects/Constraints/Constraint.h\
-					./objects/Constraints/Spc.cpp\
-					./objects/Constraints/Spc.h\
-					./objects/Constraints/Spct.cpp\
-					./objects/Constraints/Spct.h\
+					./objects/Constraints/SpcStatic.cpp\
+					./objects/Constraints/SpcStatic.h\
+					./objects/Constraints/SpcTransient.cpp\
+					./objects/Constraints/SpcTransient.h\
 					./objects/Loads/Penpair.cpp\
 					./objects/Loads/Penpair.h\
@@ -925,8 +925,8 @@
 					./objects/Materials/Matpar.cpp\
 					./objects/Constraints/Constraint.h\
-					./objects/Constraints/Spc.cpp\
-					./objects/Constraints/Spc.h\
-					./objects/Constraints/Spct.cpp\
-					./objects/Constraints/Spct.h\
+					./objects/Constraints/SpcStatic.cpp\
+					./objects/Constraints/SpcStatic.h\
+					./objects/Constraints/SpcTransient.cpp\
+					./objects/Constraints/SpcTransient.h\
 					./objects/Loads/Penpair.cpp\
 					./objects/Loads/Penpair.h\
Index: /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9285)
@@ -129,6 +129,6 @@
 		case ElementResultEnum : return "ElementResult";
 		case ExternalResultEnum : return "ExternalResult";
-		case SpcEnum : return "Spc";
-		case SpctEnum : return "Spct";
+		case SpcStaticEnum : return "SpcStatic";
+		case SpcTransientEnum : return "SpcTransient";
 		case GeographyEnum : return "Geography";
 		case IceSheetEnum : return "IceSheet";
Index: /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 9285)
@@ -1,4 +1,4 @@
 /*!\file IoModelToConstraintsx
- * \brief: used in ModelProcessor, to retrieve a nodal vector  and to create corresponding constraints using Spc objects
+ * \brief: used in ModelProcessor, to retrieve a nodal vector  and to create corresponding constraints using Constraints objects
  */
 
@@ -43,8 +43,8 @@
 	/*Transient or static?:*/
 	if(M==iomodel->numberofvertices){
-		/*static: just create Spc objects*/
+		/*static: just create Constraints objects*/
 		count=0;
 	
-		/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+		/*Create Constraints from x,y,z: */
 		for (i=0;i<iomodel->numberofvertices;i++){
 			
@@ -54,5 +54,5 @@
 				if (!isnan(doublevector[i])){
 
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,doublevector[i],analysis_type));
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,doublevector[i],analysis_type));
 					count++;
 				}
@@ -61,6 +61,6 @@
 	}
 	else if (M==iomodel->numberofvertices+1){
-		/*transient: create transient Spct objects. Same logic, except we need to retrieve 
-		 * various times and values to initialize an Spct object: */
+		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+		 * various times and values to initialize an SpcTransient object: */
 		count=0;
 
@@ -73,5 +73,5 @@
 		UnitConversion(times,N,ExtToIuEnum,TimeEnum);
 
-		/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+		/*Create constraints from x,y,z: */
 		for (i=0;i<iomodel->numberofvertices;i++){
 			
@@ -88,5 +88,5 @@
 
 				if(spcpresent){
-					constraints->AddObject(new Spct(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,analysis_type));
+					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,analysis_type));
 					count++;
 				}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9285)
@@ -19,5 +19,5 @@
 	/*Output*/
 	Constraints* constraints = NULL;
-	Spc*    spc  = NULL;
+	SpcStatic*    spcstatic  = NULL;
 	int     node1,node2;
 
@@ -31,5 +31,5 @@
 	if (!iomodel->ismacayealpattyn & !iomodel->isstokes)goto cleanup_and_return;
 	
-	/*Spcs: fetch data: */
+	/*Constraints: fetch data: */
 	IoModelFetchData(&iomodel->spcvx,NULL,NULL,iomodel_handle,SpcvxEnum);
 	IoModelFetchData(&iomodel->spcvy,NULL,NULL,iomodel_handle,SpcvyEnum);
@@ -54,14 +54,14 @@
 				/*If grionmacayeal, spc pattyn dofs: 3 & 4*/
 					if ((int)iomodel->nodeonpattyn[i]){
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -69,14 +69,14 @@
 					}
 					else if ((int)iomodel->nodeonmacayeal[i]){
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -89,16 +89,16 @@
 				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
 					if ((int)iomodel->nodeonpattyn[i]){
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -106,18 +106,18 @@
 					}
 					else if ((int)iomodel->nodeonstokes[i]){ //spc pattyn nodes: 1 & 2
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
 						if (!isnan(iomodel->spcvz[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -129,16 +129,16 @@
 				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
 					if ((int)iomodel->nodeonmacayeal[i]){
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -146,18 +146,18 @@
 					}
 					else if ((int)iomodel->nodeonstokes[i]){ //spc macayeal nodes: 1 & 2
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-						count++;
-						if (!isnan(iomodel->spcvx[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-							count++;
-						}
-						if (!isnan(iomodel->spcvy[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+						count++;
+						if (!isnan(iomodel->spcvx[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							count++;
+						}
+						if (!isnan(iomodel->spcvy[i])){
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
 						if (!isnan(iomodel->spcvz[i])){
-							constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 							count++;
 						}
@@ -168,18 +168,18 @@
 			else{
 				if (!isnan(iomodel->spcvx[i]) || (int)iomodel->nodeonhutter[i]){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 					count++;
 				}
 				
 				if (!isnan(iomodel->spcvy[i]) || (int)iomodel->nodeonhutter[i]){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
 				if (!isnan(iomodel->spcvz[i]) && ((int)iomodel->vertices_type[i]==StokesApproximationEnum ||  ((int)iomodel->vertices_type[i]==NoneApproximationEnum))){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,iomodel->spcvz[i]/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
 				if ((int)iomodel->vertices_type[i]==NoneApproximationEnum){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->g*iomodel->rho_ice*(iomodel->surface[i]-iomodel->z[i])/iomodel->stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,iomodel->g*iomodel->rho_ice*(iomodel->surface[i]-iomodel->z[i])/iomodel->stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9285)
@@ -19,5 +19,5 @@
 	/*Output*/
 	Constraints* constraints = NULL;
-	Spc*    spc  = NULL;
+	SpcStatic*    spcstatic  = NULL;
 
 	/*Recover pointer: */
@@ -44,18 +44,18 @@
 			if (!(int)iomodel->nodeonhutter[i]){
 
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
 				count++;
 
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHutterAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHutterAnalysisEnum));
 				count++;
 			}
 			else{
 				if (!isnan(iomodel->spcvx[i])){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->spcvx[i]/iomodel->yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 					count++;
 				}
 
 				if (!isnan(iomodel->spcvy[i])){
-					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->spcvy[i]/iomodel->yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9285)
@@ -43,9 +43,9 @@
 
 			if ((int)iomodel->nodeonstokes[i]){
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for Stokes
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for Stokes
 				count++;
 			}
 			else if (!isnan(iomodel->spcvz[i])){
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
 								iomodel->spcvz[i]/iomodel->yts,DiagnosticVertAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 				count++;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9285)
@@ -19,5 +19,5 @@
 	/*Output*/
 	Constraints* constraints = NULL;
-	Spc*    spc  = NULL;
+	SpcStatic*    spcstatic  = NULL;
 
 	/*Recover pointer: */
@@ -36,5 +36,5 @@
 	count=0;
 
-	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+	/*Create constraints from x,y,z: */
 	for (i=0;i<iomodel->numberofvertices;i++){
 		/*keep only this partition's nodes:*/
@@ -43,10 +43,9 @@
 			if ((int)iomodel->spctemperature[2*i]){
 
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->heatcapacity*(iomodel->spctemperature[2*i+1]-iomodel->referencetemperature),EnthalpyAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->heatcapacity*(iomodel->spctemperature[2*i+1]-iomodel->referencetemperature),EnthalpyAnalysisEnum));
 				count++;
 
 			}
-
-		} //if((my_nodes[i]==1))
+		}
 	}
 
Index: /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9285)
@@ -127,6 +127,6 @@
 	else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
 	else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
-	else if (strcmp(name,"Spc")==0) return SpcEnum;
-	else if (strcmp(name,"Spct")==0) return SpctEnum;
+	else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+	else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
 	else if (strcmp(name,"Geography")==0) return GeographyEnum;
 	else if (strcmp(name,"IceSheet")==0) return IceSheetEnum;
Index: /issm/trunk/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 9284)
+++ /issm/trunk/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 9285)
@@ -23,5 +23,5 @@
 	_printf_(VerboseModule(),"%s%g\n","   Updating constraints for time: ",time);
 	
-	/*First, update dof constraints in nodes, using Spc constraints: */
+	/*First, update dof constraints in nodes, using constraints: */
 	SpcNodesx(nodes,constraints,parameters,analysis_type); 
 
@@ -29,4 +29,3 @@
 	NodesDofx(nodes,parameters,analysis_type);
 
-
 }
Index: /issm/trunk/src/c/objects/Constraints/Constraint.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Constraint.h	(revision 9284)
+++ /issm/trunk/src/c/objects/Constraints/Constraint.h	(revision 9285)
@@ -1,5 +1,5 @@
 /*!\file:  Constraint.h
  * \brief abstract class for Constraint object
- * This class is a place holder for the Spc and Spct constraints
+ * This class is a place holder for constraints
  * It is derived from Object, so DataSets can contain them.
  */ 
Index: sm/trunk/src/c/objects/Constraints/Spc.cpp
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Spc.cpp	(revision 9284)
+++ 	(revision )
@@ -1,187 +1,0 @@
-/*!\file Spc.c
- * \brief: implementation of the Spc object
- */
-
-#ifdef HAVE_CONFIG_H
-	#include "config.h"
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "stdio.h"
-#include <string.h>
-#include "../../include/include.h"
-#include "../../shared/shared.h"
-#include "../../EnumDefinitions/EnumDefinitions.h"
-#include "../../Container/Container.h"
-#include "../objects.h"
-
-/*Spc constructors and destructor*/
-/*FUNCTION Spc::Spc(){{{1*/
-Spc::Spc(){
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spc::Spc(int spc_sid,int spc_nodeid,...){{{1*/
-Spc::Spc(int spc_sid,int spc_nodeid, int spc_dof,double spc_value,int spc_analysis_type){
-
-	sid=spc_sid;
-	nodeid=spc_nodeid;
-	dof=spc_dof;
-	value=spc_value;
-	analysis_type=spc_analysis_type;
-
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spc::~Spc{{{1*/
-Spc::~Spc(){
-	return;
-}
-/*}}}1*/
-		
-/*Object virtual functions definitions:*/
-/*FUNCTION Spc::Echo {{{1*/
-void Spc::Echo(void){
-
-	printf("Spc:\n");
-	printf("   sid: %i\n",sid);
-	printf("   nodeid: %i\n",nodeid);
-	printf("   dof: %i\n",dof);
-	printf("   value: %g\n",value);
-	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spc::DeepEcho {{{1*/
-void Spc::DeepEcho(void){
-
-	printf("Spc:\n");
-	printf("   sid: %i\n",sid);
-	printf("   nodeid: %i\n",nodeid);
-	printf("   dof: %i\n",dof);
-	printf("   value: %g\n",value);
-	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
-	return;
-}		
-/*}}}1*/
-/*FUNCTION Spc::Id {{{1*/
-int    Spc::Id(void){ return sid; }
-/*}}}1*/
-/*FUNCTION Spc::MyRank {{{1*/
-int    Spc::MyRank(void){ 
-	extern int my_rank;
-	return my_rank; 
-}
-/*}}}1*/
-/*FUNCTION Spc::Marshall {{{1*/
-void  Spc::Marshall(char** pmarshalled_dataset){
-
-	char* marshalled_dataset=NULL;
-	int   enum_type=0;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*get enum type of Spc: */
-	enum_type=SpcEnum;
-	
-	/*marshall enum: */
-	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
-	
-	/*marshall Spc data: */
-	memcpy(marshalled_dataset,&sid,sizeof(sid));marshalled_dataset+=sizeof(sid);
-	memcpy(marshalled_dataset,&nodeid,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
-	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(marshalled_dataset,&value,sizeof(value));marshalled_dataset+=sizeof(value);
-	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
-
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spc::MarshallSize {{{1*/
-int   Spc::MarshallSize(){
-
-	return sizeof(sid)
-		+sizeof(nodeid)
-		+sizeof(dof)
-		+sizeof(value)
-		+sizeof(analysis_type)
-		+sizeof(int); //sizeof(int) for enum type
-}
-/*}}}1*/
-/*FUNCTION Spc::Demarshall {{{1*/
-void  Spc::Demarshall(char** pmarshalled_dataset){
-
-	char* marshalled_dataset=NULL;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
-	 *object data (thanks to DataSet::Demarshall):*/
-
-	memcpy(&sid,marshalled_dataset,sizeof(sid));marshalled_dataset+=sizeof(sid);
-	memcpy(&nodeid,marshalled_dataset,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
-	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(&value,marshalled_dataset,sizeof(value));marshalled_dataset+=sizeof(value);
-	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
-
-	/*return: */
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spc::Enum {{{1*/
-int Spc::Enum(void){
-
-	return SpcEnum;
-
-}
-/*}}}1*/
-/*FUNCTION Spc::copy {{{1*/
-Object* Spc::copy() {
-	return new Spc(*this); 
-}
-/*}}}1*/
-
-/*Constraint virtual functions definitions: */
-/*FUNCTION Spc::InAnalysis{{{1*/
-bool Spc::InAnalysis(int in_analysis_type){
-	if (in_analysis_type==this->analysis_type) return true;
-	else return false;
-}
-/*}}}*/
-/*FUNCTION Spc::ConstrainNode{{{1*/
-void Spc::ConstrainNode(Nodes* nodes,Parameters* parameters){
-
-	Node* node=NULL;
-
-	/*Chase through nodes and find the node to which this Spc applys: */
-	node=(Node*)nodes->GetObjectById(NULL,nodeid);
-
-	/*Apply constraint: */
-	if(node){ //in case the spc is dealing with a node on another cpu
-		node->ApplyConstraint(dof,value);
-	}
-}
-/*}}}*/
-
-/*Spc functions*/
-/*FUNCTION Spc::GetDof {{{1*/
-int Spc::GetDof(){
-	return dof;
-}
-/*}}}1*/
-/*FUNCTION Spc::GetNodeId {{{1*/
-int   Spc::GetNodeId(){
-	
-	return nodeid;
-}
-/*}}}1*/
-/*FUNCTION Spc::GetValue {{{1*/
-double Spc::GetValue(){
-	return value;
-}
-/*}}}1*/
Index: sm/trunk/src/c/objects/Constraints/Spc.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Spc.h	(revision 9284)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/*!\file Spc.h
- * \brief: header file for spc object
- */
-
-#ifndef _SPC_H_
-#define _SPC_H_
-
-/*Headers:*/
-/*{{{1*/
-#include "../Object.h"
-class DataSet;
-/*}}}*/
-
-class Spc: public Constraint{
-
-	private: 
-		int	sid; /*! id, to track it*/
-		int	nodeid; /*!node id*/
-		int dof; /*!component*/
-		double value; /*value*/
-		int analysis_type;
-
-	public:
-
-		/*Spc constructors, destructors:{{{1*/
-		Spc();
-		Spc(int sid,int nodeid, int dof,double value,int analysis_type);
-		~Spc();
-		/*}}}*/
-		/*Object virtual functions definitions:{{{1 */
-		void  Echo();
-		void  DeepEcho();
-		int   Id(); 
-		int   MyRank();
-		void  Marshall(char** pmarshalled_dataset);
-		int   MarshallSize();
-		void  Demarshall(char** pmarshalled_dataset);
-		int   Enum();
-		Object* copy();
-		/*}}}*/
-		/*Constraint virtual functions definitions: {{{1*/
-		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
-		bool   InAnalysis(int analysis_type);
-		/*}}}*/
-		/*Spc management:{{{1 */
-		int    GetNodeId();
-		int    GetDof();
-		double GetValue();
-		/*}}}*/
-
-};
-
-#endif  /* _SPC_H_ */
Index: /issm/trunk/src/c/objects/Constraints/SpcStatic.cpp
===================================================================
--- /issm/trunk/src/c/objects/Constraints/SpcStatic.cpp	(revision 9285)
+++ /issm/trunk/src/c/objects/Constraints/SpcStatic.cpp	(revision 9285)
@@ -0,0 +1,188 @@
+/*!\file SpcStatic.c
+ * \brief: implementation of the SpcStatic object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../../include/include.h"
+#include "../../shared/shared.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../Container/Container.h"
+#include "../objects.h"
+
+/*SpcStatic constructors and destructor*/
+/*FUNCTION SpcStatic::SpcStatic(){{{1*/
+SpcStatic::SpcStatic(){
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::SpcStatic(int spc_sid,int spc_nodeid,...){{{1*/
+SpcStatic::SpcStatic(int spc_sid,int spc_nodeid, int spc_dof,double spc_value,int spc_analysis_type){
+
+	sid=spc_sid;
+	nodeid=spc_nodeid;
+	dof=spc_dof;
+	value=spc_value;
+	analysis_type=spc_analysis_type;
+
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::~SpcStatic{{{1*/
+SpcStatic::~SpcStatic(){
+	return;
+}
+/*}}}1*/
+		
+/*Object virtual functions definitions:*/
+/*FUNCTION SpcStatic::Echo {{{1*/
+void SpcStatic::Echo(void){
+
+	printf("SpcStatic:\n");
+	printf("   sid: %i\n",sid);
+	printf("   nodeid: %i\n",nodeid);
+	printf("   dof: %i\n",dof);
+	printf("   value: %g\n",value);
+	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::DeepEcho {{{1*/
+void SpcStatic::DeepEcho(void){
+
+	printf("SpcStatic:\n");
+	printf("   sid: %i\n",sid);
+	printf("   nodeid: %i\n",nodeid);
+	printf("   dof: %i\n",dof);
+	printf("   value: %g\n",value);
+	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
+	return;
+}		
+/*}}}1*/
+/*FUNCTION SpcStatic::Id {{{1*/
+int    SpcStatic::Id(void){ return sid; }
+/*}}}1*/
+/*FUNCTION SpcStatic::MyRank {{{1*/
+int    SpcStatic::MyRank(void){ 
+	extern int my_rank;
+	return my_rank; 
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::Marshall {{{1*/
+void  SpcStatic::Marshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   enum_type=0;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*get enum type of SpcStatic: */
+	enum_type=SpcStaticEnum;
+	
+	/*marshall enum: */
+	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
+	
+	/*marshall SpcStatic data: */
+	memcpy(marshalled_dataset,&sid,sizeof(sid));marshalled_dataset+=sizeof(sid);
+	memcpy(marshalled_dataset,&nodeid,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
+	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
+	memcpy(marshalled_dataset,&value,sizeof(value));marshalled_dataset+=sizeof(value);
+	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
+
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::MarshallSize {{{1*/
+int   SpcStatic::MarshallSize(){
+
+	return sizeof(sid)
+		+sizeof(nodeid)
+		+sizeof(dof)
+		+sizeof(value)
+		+sizeof(analysis_type)
+		+sizeof(int); //sizeof(int) for enum type
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::Demarshall {{{1*/
+void  SpcStatic::Demarshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+
+	memcpy(&sid,marshalled_dataset,sizeof(sid));marshalled_dataset+=sizeof(sid);
+	memcpy(&nodeid,marshalled_dataset,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
+	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
+	memcpy(&value,marshalled_dataset,sizeof(value));marshalled_dataset+=sizeof(value);
+	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::Enum {{{1*/
+int SpcStatic::Enum(void){
+
+	return SpcStaticEnum;
+
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::copy {{{1*/
+Object* SpcStatic::copy() {
+	return new SpcStatic(*this); 
+}
+/*}}}1*/
+
+/*Constraint virtual functions definitions: */
+/*FUNCTION SpcStatic::InAnalysis{{{1*/
+bool SpcStatic::InAnalysis(int in_analysis_type){
+	if (in_analysis_type==this->analysis_type) return true;
+	else return false;
+}
+/*}}}*/
+/*FUNCTION SpcStatic::ConstrainNode{{{1*/
+void SpcStatic::ConstrainNode(Nodes* nodes,Parameters* parameters){
+
+	Node* node=NULL;
+
+	/*Chase through nodes and find the node to which this SpcStatic applys: */
+	node=(Node*)nodes->GetObjectById(NULL,nodeid);
+
+	/*Apply constraint: */
+	if(node){ //in case the spc is dealing with a node on another cpu
+		node->ApplyConstraint(dof,value);
+	}
+}
+/*}}}*/
+
+/*SpcStatic functions*/
+/*FUNCTION SpcStatic::GetDof {{{1*/
+int SpcStatic::GetDof(){
+	return dof;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::GetNodeId {{{1*/
+int   SpcStatic::GetNodeId(){
+	
+	return nodeid;
+}
+/*}}}1*/
+/*FUNCTION SpcStatic::GetValue {{{1*/
+double SpcStatic::GetValue(){
+	_assert_(!isnan(value));
+	return value;
+}
+/*}}}1*/
Index: /issm/trunk/src/c/objects/Constraints/SpcStatic.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/SpcStatic.h	(revision 9285)
+++ /issm/trunk/src/c/objects/Constraints/SpcStatic.h	(revision 9285)
@@ -0,0 +1,53 @@
+/*!\file SpcStatic.h
+ * \brief: header file for spc object
+ */
+
+#ifndef _SPCStatic_H_
+#define _SPCStatic_H_
+
+/*Headers:*/
+/*{{{1*/
+#include "../Object.h"
+class DataSet;
+/*}}}*/
+
+class SpcStatic: public Constraint{
+
+	private: 
+		int	sid; /*! id, to track it*/
+		int	nodeid; /*!node id*/
+		int dof; /*!component*/
+		double value; /*value*/
+		int analysis_type;
+
+	public:
+
+		/*SpcStatic constructors, destructors:{{{1*/
+		SpcStatic();
+		SpcStatic(int sid,int nodeid, int dof,double value,int analysis_type);
+		~SpcStatic();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1 */
+		void  Echo();
+		void  DeepEcho();
+		int   Id(); 
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+		/*Constraint virtual functions definitions: {{{1*/
+		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
+		bool   InAnalysis(int analysis_type);
+		/*}}}*/
+		/*SpcStatic management:{{{1 */
+		int    GetNodeId();
+		int    GetDof();
+		double GetValue();
+		/*}}}*/
+
+};
+
+#endif  /* _SPCStatic_H_*/
Index: /issm/trunk/src/c/objects/Constraints/SpcTransient.cpp
===================================================================
--- /issm/trunk/src/c/objects/Constraints/SpcTransient.cpp	(revision 9285)
+++ /issm/trunk/src/c/objects/Constraints/SpcTransient.cpp	(revision 9285)
@@ -0,0 +1,246 @@
+/*!\file SpcTransient.c
+ * \brief: implementation of the SpcTransient object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../../include/include.h"
+#include "../../shared/shared.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../Container/Container.h"
+#include "../objects.h"
+
+/*SpcTransient constructors and destructor*/
+/*FUNCTION SpcTransient::SpcTransient(){{{1*/
+SpcTransient::SpcTransient(){
+	sid=-1;
+	nodeid=-1;
+	dof=-1;
+	values=NULL;
+	times=NULL;
+	nsteps=-1;
+	analysis_type=-1;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::SpcTransient(int spc_sid,int spc_nodeid,...){{{1*/
+SpcTransient::SpcTransient(int spc_sid,int spc_nodeid, int spc_dof,int spc_nsteps, double* spc_times, double* spc_values,int spc_analysis_type){
+
+	sid=spc_sid;
+	nodeid=spc_nodeid;
+	dof=spc_dof;
+	nsteps=spc_nsteps;
+	if(spc_nsteps){
+		values=(double*)xmalloc(spc_nsteps*sizeof(double));
+		times=(double*)xmalloc(spc_nsteps*sizeof(double));
+		memcpy(values,spc_values,nsteps*sizeof(double));
+		memcpy(times,spc_times,nsteps*sizeof(double));
+	}
+	analysis_type=spc_analysis_type;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::~SpcTransient{{{1*/
+SpcTransient::~SpcTransient(){
+	xfree((void**)&times);
+	xfree((void**)&values);
+	return;
+}
+/*}}}1*/
+		
+/*Object virtual functions definitions:*/
+/*FUNCTION SpcTransient::Echo {{{1*/
+void SpcTransient::Echo(void){
+
+	int i;
+	printf("SpcTransient:\n");
+	printf("   sid: %i\n",sid);
+	printf("   nodeid: %i\n",nodeid);
+	printf("   dof: %i\n",dof);
+	printf("   nsteps: %i\n",nsteps);
+	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
+	printf("   steps|times|values\n");
+	for(i=0;i<nsteps;i++){
+		printf("%i-%g:%g\n",i,times[i],values[i]);
+	}
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::DeepEcho {{{1*/
+void SpcTransient::DeepEcho(void){
+	this->Echo();
+}		
+/*}}}1*/
+/*FUNCTION SpcTransient::Id {{{1*/
+int    SpcTransient::Id(void){ return sid; }
+/*}}}1*/
+/*FUNCTION SpcTransient::MyRank {{{1*/
+int    SpcTransient::MyRank(void){ 
+	extern int my_rank;
+	return my_rank; 
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::Marshall {{{1*/
+void  SpcTransient::Marshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   enum_type=0;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*get enum type of SpcTransient: */
+	enum_type=SpcTransientEnum;
+	
+	/*marshall enum: */
+	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
+	
+	/*marshall SpcTransient data: */
+	memcpy(marshalled_dataset,&sid,sizeof(sid));marshalled_dataset+=sizeof(sid);
+	memcpy(marshalled_dataset,&nodeid,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
+	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
+	memcpy(marshalled_dataset,&nsteps,sizeof(nsteps));marshalled_dataset+=sizeof(nsteps);
+	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
+	if(nsteps){
+		memcpy(marshalled_dataset,values,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
+		memcpy(marshalled_dataset,times,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
+	}
+
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::MarshallSize {{{1*/
+int   SpcTransient::MarshallSize(){
+
+	return sizeof(sid)
+		+sizeof(nodeid)
+		+sizeof(dof)
+		+sizeof(nsteps)
+		+nsteps*2*sizeof(double)
+		+sizeof(analysis_type)
+		+sizeof(int); //sizeof(int) for enum type
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::Demarshall {{{1*/
+void  SpcTransient::Demarshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+
+	memcpy(&sid,marshalled_dataset,sizeof(sid));marshalled_dataset+=sizeof(sid);
+	memcpy(&nodeid,marshalled_dataset,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
+	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
+	memcpy(&nsteps,marshalled_dataset,sizeof(nsteps));marshalled_dataset+=sizeof(nsteps);
+	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
+	if(nsteps){
+		values=(double*)xmalloc(nsteps*sizeof(double));
+		times=(double*)xmalloc(nsteps*sizeof(double));
+		memcpy(values,marshalled_dataset,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
+		memcpy(times,marshalled_dataset,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
+	}
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::Enum {{{1*/
+int SpcTransient::Enum(void){
+
+	return SpcTransientEnum;
+
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::copy {{{1*/
+Object* SpcTransient::copy() {
+	return new SpcTransient(sid,nodeid,dof,nsteps,times,values,analysis_type);
+}
+/*}}}1*/
+
+/*Constraint virtual functions definitions:*/
+/*FUNCTION SpcTransient::InAnalysis{{{1*/
+bool SpcTransient::InAnalysis(int in_analysis_type){
+	
+	if (in_analysis_type==this->analysis_type) return true;
+	else return false;
+}
+/*}}}*/
+/*FUNCTION SpcTransient::ConstrainNode{{{1*/
+void SpcTransient::ConstrainNode(Nodes* nodes,Parameters* parameters){
+
+	Node* node=NULL;
+	double time=0;
+	int    i;
+	double alpha=-1;
+	double value;
+	bool   found=false;
+
+	/*Chase through nodes and find the node to which this SpcTransient applys: */
+	node=(Node*)nodes->GetObjectById(NULL,nodeid);
+	
+	if(node){ //in case the spc is dealing with a node on another cpu
+
+		/*Retrieve time in parameters: */
+		parameters->FindParam(&time,TimeEnum);
+
+		/*Now, go fetch value for this time: */
+		if (time<=times[0]){
+			value=values[0];
+			found=true;
+		}
+		else if (time>=times[nsteps-1]){
+			value=values[nsteps-1];
+			found=true;
+		}
+		else{
+			for(i=0;i<nsteps-1;i++){
+				if (times[i]<=time && time<times[i+1]){
+					alpha=(time-times[i])/(times[i+1]-times[i]);
+					value=(1-alpha)*values[i]+alpha*values[i+1];
+					found=true;
+					break;
+				}
+			}
+		}
+
+		if(!found)_error_("could not find time segment for constraint");
+
+		/*Apply or relax constraint: */
+		if(isnan(value)){
+			node->RelaxConstraint(dof);
+		}
+		else node->ApplyConstraint(dof,value);
+	}
+}
+/*}}}*/
+
+/*SpcTransient functions*/
+/*FUNCTION SpcTransient::GetDof {{{1*/
+int SpcTransient::GetDof(){
+	return dof;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::GetNodeId {{{1*/
+int   SpcTransient::GetNodeId(){
+	
+	return nodeid;
+}
+/*}}}1*/
+/*FUNCTION SpcTransient::GetValue {{{1*/
+double SpcTransient::GetValue(){
+	return values[0];
+}
+/*}}}1*/
+
Index: /issm/trunk/src/c/objects/Constraints/SpcTransient.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/SpcTransient.h	(revision 9285)
+++ /issm/trunk/src/c/objects/Constraints/SpcTransient.h	(revision 9285)
@@ -0,0 +1,55 @@
+/*!\file SpcTransient.h
+ * \brief: header file for spc object
+ */
+
+#ifndef _SPCTRANSIENT_H_
+#define _SPCTRANSIENT_H_
+
+/*Headers:*/
+/*{{{1*/
+#include "../Object.h"
+class DataSet;
+/*}}}*/
+
+class SpcTransient: public Constraint{
+
+	private: 
+		int	sid; /*! id, to track it*/
+		int	nodeid; /*!node id*/
+		int dof; /*!component*/
+		double* values; /*different values in time*/
+		double* times; /*different time steps*/
+		int nsteps; /*number of time steps*/
+		int analysis_type;
+
+	public:
+
+		/*SpcTransient constructors, destructors:{{{1*/
+		SpcTransient();
+		SpcTransient(int sid,int nodeid, int dof,int nsteps, double* times, double* values,int analysis_type);
+		~SpcTransient();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1 */
+		void  Echo();
+		void  DeepEcho();
+		int   Id(); 
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+		/*Constraint virtual functions definitions: {{{1*/
+		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
+		bool   InAnalysis(int analysis_type);
+		/*}}}*/
+		/*SpcTransient management:{{{1 */
+		int    GetNodeId();
+		int    GetDof();
+		double GetValue();
+		/*}}}*/
+
+};
+
+#endif  /* _SPCTRANSIENT_H_ */
Index: sm/trunk/src/c/objects/Constraints/Spct.cpp
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Spct.cpp	(revision 9284)
+++ 	(revision )
@@ -1,246 +1,0 @@
-/*!\file Spct.c
- * \brief: implementation of the Spct object
- */
-
-#ifdef HAVE_CONFIG_H
-	#include "config.h"
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "stdio.h"
-#include <string.h>
-#include "../../include/include.h"
-#include "../../shared/shared.h"
-#include "../../EnumDefinitions/EnumDefinitions.h"
-#include "../../Container/Container.h"
-#include "../objects.h"
-
-/*Spct constructors and destructor*/
-/*FUNCTION Spct::Spct(){{{1*/
-Spct::Spct(){
-	sid=-1;
-	nodeid=-1;
-	dof=-1;
-	values=NULL;
-	times=NULL;
-	nsteps=-1;
-	analysis_type=-1;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spct::Spct(int spc_sid,int spc_nodeid,...){{{1*/
-Spct::Spct(int spc_sid,int spc_nodeid, int spc_dof,int spc_nsteps, double* spc_times, double* spc_values,int spc_analysis_type){
-
-	sid=spc_sid;
-	nodeid=spc_nodeid;
-	dof=spc_dof;
-	nsteps=spc_nsteps;
-	if(spc_nsteps){
-		values=(double*)xmalloc(spc_nsteps*sizeof(double));
-		times=(double*)xmalloc(spc_nsteps*sizeof(double));
-		memcpy(values,spc_values,nsteps*sizeof(double));
-		memcpy(times,spc_times,nsteps*sizeof(double));
-	}
-	analysis_type=spc_analysis_type;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spct::~Spct{{{1*/
-Spct::~Spct(){
-	xfree((void**)&times);
-	xfree((void**)&values);
-	return;
-}
-/*}}}1*/
-		
-/*Object virtual functions definitions:*/
-/*FUNCTION Spct::Echo {{{1*/
-void Spct::Echo(void){
-
-	int i;
-	printf("Spct:\n");
-	printf("   sid: %i\n",sid);
-	printf("   nodeid: %i\n",nodeid);
-	printf("   dof: %i\n",dof);
-	printf("   nsteps: %i\n",nsteps);
-	printf("   analysis_type: %s\n",EnumToStringx(analysis_type));
-	printf("   steps|times|values\n");
-	for(i=0;i<nsteps;i++){
-		printf("%i-%g:%g\n",i,times[i],values[i]);
-	}
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spct::DeepEcho {{{1*/
-void Spct::DeepEcho(void){
-	this->Echo();
-}		
-/*}}}1*/
-/*FUNCTION Spct::Id {{{1*/
-int    Spct::Id(void){ return sid; }
-/*}}}1*/
-/*FUNCTION Spct::MyRank {{{1*/
-int    Spct::MyRank(void){ 
-	extern int my_rank;
-	return my_rank; 
-}
-/*}}}1*/
-/*FUNCTION Spct::Marshall {{{1*/
-void  Spct::Marshall(char** pmarshalled_dataset){
-
-	char* marshalled_dataset=NULL;
-	int   enum_type=0;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*get enum type of Spct: */
-	enum_type=SpctEnum;
-	
-	/*marshall enum: */
-	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
-	
-	/*marshall Spct data: */
-	memcpy(marshalled_dataset,&sid,sizeof(sid));marshalled_dataset+=sizeof(sid);
-	memcpy(marshalled_dataset,&nodeid,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
-	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(marshalled_dataset,&nsteps,sizeof(nsteps));marshalled_dataset+=sizeof(nsteps);
-	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
-	if(nsteps){
-		memcpy(marshalled_dataset,values,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
-		memcpy(marshalled_dataset,times,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
-	}
-
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spct::MarshallSize {{{1*/
-int   Spct::MarshallSize(){
-
-	return sizeof(sid)
-		+sizeof(nodeid)
-		+sizeof(dof)
-		+sizeof(nsteps)
-		+nsteps*2*sizeof(double)
-		+sizeof(analysis_type)
-		+sizeof(int); //sizeof(int) for enum type
-}
-/*}}}1*/
-/*FUNCTION Spct::Demarshall {{{1*/
-void  Spct::Demarshall(char** pmarshalled_dataset){
-
-	char* marshalled_dataset=NULL;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
-	 *object data (thanks to DataSet::Demarshall):*/
-
-	memcpy(&sid,marshalled_dataset,sizeof(sid));marshalled_dataset+=sizeof(sid);
-	memcpy(&nodeid,marshalled_dataset,sizeof(nodeid));marshalled_dataset+=sizeof(nodeid);
-	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(&nsteps,marshalled_dataset,sizeof(nsteps));marshalled_dataset+=sizeof(nsteps);
-	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
-	if(nsteps){
-		values=(double*)xmalloc(nsteps*sizeof(double));
-		times=(double*)xmalloc(nsteps*sizeof(double));
-		memcpy(values,marshalled_dataset,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
-		memcpy(times,marshalled_dataset,nsteps*sizeof(double));marshalled_dataset+=nsteps*sizeof(double);
-	}
-
-	/*return: */
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}1*/
-/*FUNCTION Spct::Enum {{{1*/
-int Spct::Enum(void){
-
-	return SpctEnum;
-
-}
-/*}}}1*/
-/*FUNCTION Spct::copy {{{1*/
-Object* Spct::copy() {
-	return new Spct(sid,nodeid,dof,nsteps,times,values,analysis_type);
-}
-/*}}}1*/
-
-/*Constraint virtual functions definitions:*/
-/*FUNCTION Spct::InAnalysis{{{1*/
-bool Spct::InAnalysis(int in_analysis_type){
-	
-	if (in_analysis_type==this->analysis_type) return true;
-	else return false;
-}
-/*}}}*/
-/*FUNCTION Spct::ConstrainNode{{{1*/
-void Spct::ConstrainNode(Nodes* nodes,Parameters* parameters){
-
-	Node* node=NULL;
-	double time=0;
-	int    i;
-	double alpha=-1;
-	double value;
-	bool   found=false;
-
-	/*Chase through nodes and find the node to which this Spct applys: */
-	node=(Node*)nodes->GetObjectById(NULL,nodeid);
-	
-	if(node){ //in case the spc is dealing with a node on another cpu
-
-		/*Retrieve time in parameters: */
-		parameters->FindParam(&time,TimeEnum);
-
-		/*Now, go fetch value for this time: */
-		if (time<=times[0]){
-			value=values[0];
-			found=true;
-		}
-		else if (time>=times[nsteps-1]){
-			value=values[nsteps-1];
-			found=true;
-		}
-		else{
-			for(i=0;i<nsteps-1;i++){
-				if (times[i]<=time && time<times[i+1]){
-					alpha=(time-times[i])/(times[i+1]-times[i]);
-					value=(1-alpha)*values[i]+alpha*values[i+1];
-					found=true;
-					break;
-				}
-			}
-		}
-
-		if(!found)_error_("could not find time segment for constraint");
-
-		/*Apply or relax constraint: */
-		if(isnan(value)){
-			node->RelaxConstraint(dof);
-		}
-		else node->ApplyConstraint(dof,value);
-	}
-}
-/*}}}*/
-
-/*Spct functions*/
-/*FUNCTION Spct::GetDof {{{1*/
-int Spct::GetDof(){
-	return dof;
-}
-/*}}}1*/
-/*FUNCTION Spct::GetNodeId {{{1*/
-int   Spct::GetNodeId(){
-	
-	return nodeid;
-}
-/*}}}1*/
-/*FUNCTION Spct::GetValue {{{1*/
-double Spct::GetValue(){
-	return values[0];
-}
-/*}}}1*/
-
Index: sm/trunk/src/c/objects/Constraints/Spct.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Spct.h	(revision 9284)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/*!\file Spct.h
- * \brief: header file for spc object
- */
-
-#ifndef _SPCT_H_
-#define _SPCT_H_
-
-/*Headers:*/
-/*{{{1*/
-#include "../Object.h"
-class DataSet;
-/*}}}*/
-
-class Spct: public Constraint{
-
-	private: 
-		int	sid; /*! id, to track it*/
-		int	nodeid; /*!node id*/
-		int dof; /*!component*/
-		double* values; /*different values in time*/
-		double* times; /*different time steps*/
-		int nsteps; /*number of time steps*/
-		int analysis_type;
-
-	public:
-
-		/*Spct constructors, destructors:{{{1*/
-		Spct();
-		Spct(int sid,int nodeid, int dof,int nsteps, double* times, double* values,int analysis_type);
-		~Spct();
-		/*}}}*/
-		/*Object virtual functions definitions:{{{1 */
-		void  Echo();
-		void  DeepEcho();
-		int   Id(); 
-		int   MyRank();
-		void  Marshall(char** pmarshalled_dataset);
-		int   MarshallSize();
-		void  Demarshall(char** pmarshalled_dataset);
-		int   Enum();
-		Object* copy();
-		/*}}}*/
-		/*Constraint virtual functions definitions: {{{1*/
-		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
-		bool   InAnalysis(int analysis_type);
-		/*}}}*/
-		/*Spct management:{{{1 */
-		int    GetNodeId();
-		int    GetDof();
-		double GetValue();
-		/*}}}*/
-
-};
-
-#endif  /* _SPCT_H_ */
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 9284)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 9285)
@@ -99,5 +99,5 @@
 	/*Diagnostic Hutter*/
 	if (analysis_type==DiagnosticHutterAnalysisEnum){
-		/*Spc all nodes that are not Hutter*/
+		/*Constrain all nodes that are not Hutter*/
 		if (!iomodel->nodeonhutter) _error_("iomodel->nodeonhutter is NULL");
 		if (!iomodel->nodeonhutter[io_index]){
@@ -576,4 +576,5 @@
 			if(this->indexing.s_set[i]){
 				values[count]=this->indexing.svalues[i];
+				_assert_(!isnan(values[count]));
 				count++;
 			}
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 9284)
+++ /issm/trunk/src/c/objects/objects.h	(revision 9285)
@@ -21,6 +21,6 @@
 /*Constraints: */
 #include "./Constraints/Constraint.h"
-#include "./Constraints/Spc.h"
-#include "./Constraints/Spct.h"
+#include "./Constraints/SpcStatic.h"
+#include "./Constraints/SpcTransient.h"
 
 /*Gauss*/
Index: /issm/trunk/src/c/solvers/solver_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/solvers/solver_nonlinear.cpp	(revision 9284)
+++ /issm/trunk/src/c/solvers/solver_nonlinear.cpp	(revision 9285)
@@ -35,5 +35,5 @@
 	femmodel->parameters->FindParam(&max_nonlinear_iterations,MaxNonlinearIterationsEnum);
 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
-	//UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
+	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
 
 	/*Were loads requested as output? : */
Index: sm/trunk/src/m/enum/SpcEnum.m
===================================================================
--- /issm/trunk/src/m/enum/SpcEnum.m	(revision 9284)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=SpcEnum()
-%SPCENUM - Enum of Spc
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=SpcEnum()
-
-macro=StringToEnum('Spc');
Index: /issm/trunk/src/m/enum/SpcStaticEnum.m
===================================================================
--- /issm/trunk/src/m/enum/SpcStaticEnum.m	(revision 9285)
+++ /issm/trunk/src/m/enum/SpcStaticEnum.m	(revision 9285)
@@ -0,0 +1,11 @@
+function macro=SpcStaticEnum()
+%SPCSTATICENUM - Enum of SpcStatic
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=SpcStaticEnum()
+
+macro=StringToEnum('SpcStatic');
Index: /issm/trunk/src/m/enum/SpcTransientEnum.m
===================================================================
--- /issm/trunk/src/m/enum/SpcTransientEnum.m	(revision 9285)
+++ /issm/trunk/src/m/enum/SpcTransientEnum.m	(revision 9285)
@@ -0,0 +1,11 @@
+function macro=SpcTransientEnum()
+%SPCTRANSIENTENUM - Enum of SpcTransient
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=SpcTransientEnum()
+
+macro=StringToEnum('SpcTransient');
Index: sm/trunk/src/m/enum/SpctEnum.m
===================================================================
--- /issm/trunk/src/m/enum/SpctEnum.m	(revision 9284)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=SpctEnum()
-%SPCTENUM - Enum of Spct
-%
-%   WARNING: DO NOT MODIFY THIS FILE
-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
-%            Please read src/c/EnumDefinitions/README for more information
-%
-%   Usage:
-%      macro=SpctEnum()
-
-macro=StringToEnum('Spct');
