Index: /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22826)
+++ /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22827)
@@ -88,9 +88,12 @@
 	G = xNew<double>(n);
 
+	for(int i=0;i<intn;i++)_printf_(X[i]<<"\n");
 	/*Scale control for M1QN3*/
-	for(int i=0;i<numberofvertices;i++){
-		for(int c=0;c<num_controls;c++){
-			int index = num_controls*i+c;
+	for(int c=0;c<num_controls;c++){
+		for(int i=0;i<numberofvertices;i++){
+			int index = numberofvertices*c+i;
+			_printf_("Before "<<X[index]<<"\n");
 			X[index] = X[index]/scaling_factors[c];
+			_printf_("After "<<X[index]<<"\n");
 		}
 	}
@@ -144,7 +147,7 @@
 	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
 	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
-	for(int i=0;i<numberofvertices;i++){
-		for(int c=0;c<num_controls;c++){
-			int index = num_controls*i+c;
+	for(int c=0;c<num_controls;c++){
+		for(int i=0;i<numberofvertices;i++){
+			int index = numberofvertices*c+i;
 			X[index] = X[index]*scaling_factors[c];
 			if(X[index]>XU[index]) X[index]=XU[index];
@@ -200,7 +203,7 @@
 	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
 	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
-	for(int i=0;i<numberofvertices;i++){
-		for(int c=0;c<num_controls;c++){
-			int index = num_controls*i+c;
+	for(int c=0;c<num_controls;c++){
+		for(int i=0;i<numberofvertices;i++){
+			int index = numberofvertices*c+i;
 			X[index] = X[index]*scaling_factors[c];
 			if(X[index]>XU[index]) X[index]=XU[index];
@@ -256,7 +259,7 @@
 	/*Constrain Gradient*/
 	IssmDouble  Gnorm = 0.;
-	for(int i=0;i<numberofvertices;i++){
-		for(int c=0;c<num_controls;c++){
-			int index = num_controls*i+c;
+	for(int c=0;c<num_controls;c++){
+		for(int i=0;i<numberofvertices;i++){
+			int index = numberofvertices*c+i;
 			if(X[index]>=XU[index]) G[index]=0.;
 			if(X[index]<=XL[index]) G[index]=0.;
