Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 5208)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 5209)
@@ -34,4 +34,7 @@
 	IoModelFetchData(&iomodel->spcvelocity,NULL,NULL,iomodel_handle,"spcvelocity");
 	IoModelFetchData(&iomodel->gridonhutter,NULL,NULL,iomodel_handle,"gridonhutter");
+	IoModelFetchData(&iomodel->gridonmacayeal,NULL,NULL,iomodel_handle,"gridonmacayeal");
+	IoModelFetchData(&iomodel->gridonpattyn,NULL,NULL,iomodel_handle,"gridonpattyn");
+	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,"vertices_type");
 
 	/*Initialize counter: */
@@ -42,12 +45,32 @@
 		if(iomodel->my_vertices[i]){
 
-			if ((int)iomodel->spcvelocity[6*i+0] || (int)iomodel->gridonhutter[i]){
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,*(iomodel->spcvelocity+6*i+3)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
-				count++;
+			/*Start with adding spcs of coupling: zero at the border macayeal/pattyn for the appropriate dofs*/
+			if ((int)iomodel->vertices_type[2*i+0]==MacAyealPattynApproximationEnum){
+				/*If grionmacayeal, spc pattyn dofs: 3 & 4*/
+					if ((int)iomodel->gridonpattyn[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++;
+					}
+					else if ((int)iomodel->gridonmacayeal[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++;
+					}
+					else ISSMERROR("if vertices_type is MacAyealPattyn, you shoud have gridonpattyn or gridonmacayeal");
 			}
-			
-			if ((int)iomodel->spcvelocity[6*i+1] || (int)iomodel->gridonhutter[i]){
-				constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,*(iomodel->spcvelocity+6*i+4)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
-				count++;
+			/*Now add the regular spcs*/
+			else{
+				if ((int)iomodel->spcvelocity[6*i+0] || (int)iomodel->gridonhutter[i]){
+					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,*(iomodel->spcvelocity+6*i+3)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					count++;
+				}
+				
+				if ((int)iomodel->spcvelocity[6*i+1] || (int)iomodel->gridonhutter[i]){
+					constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,*(iomodel->spcvelocity+6*i+4)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					count++;
+				}
 			}
 		}
@@ -57,4 +80,7 @@
 	xfree((void**)&iomodel->spcvelocity);
 	xfree((void**)&iomodel->gridonhutter);
+	xfree((void**)&iomodel->gridonmacayeal);
+	xfree((void**)&iomodel->gridonpattyn);
+	xfree((void**)&iomodel->vertices_type);
 
 	/*penalty loads: */
