Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 5246)
+++ /issm/trunk/src/c/Makefile.am	(revision 5247)
@@ -610,4 +610,5 @@
 					./objects/Bamg/VertexOnGeom.cpp\
 					./objects/Bamg/VertexOnVertex.h\
+					./objects/Bamg/VertexOnVertex.cpp\
 					./objects/Bamg/Mesh.h\
 					./objects/Bamg/Mesh.cpp\
@@ -1092,4 +1093,5 @@
 					./solutions/ResetBoundaryConditions.cpp\
 					./solutions/SolutionConfiguration.cpp\
+					./solutions/CorePointerFromSolutionEnum.cpp\
 					./solvers/solver_linear.cpp\
 					./solvers/solver_adjoint_linear.cpp\
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 5246)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 5247)
@@ -32,16 +32,17 @@
 			parameters->AddObject(new IntParam(ControlTypeEnum,RheologyB2dEnum));
 		}
-		else
-		 ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
+		else  if (strcmp(iomodel->control_type,"dhdt")==0){
+			parameters->AddObject(new IntParam(ControlTypeEnum,DhDtEnum));
+		}
+		else{
+			ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
+		}
 
 		/*What solution type?*/
-		if (solution_type==DiagnosticSolutionEnum){
-			parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
-		}
-		else if (solution_type==SteadystateSolutionEnum){
+		if (solution_type==SteadystateSolutionEnum){
 			parameters->AddObject(new BoolParam(ControlSteadyEnum,true));
 		}
 		else{
-			ISSMERROR("Control for solution of type %s not supported yet",EnumToString(solution_type));
+			parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
 		}
 		parameters->AddObject(new IntParam(NStepsEnum,iomodel->nsteps));
Index: /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 5247)
+++ /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 5247)
@@ -0,0 +1,66 @@
+/*!\file:  CorePointerFromSolutionEnum.cpp
+ * \brief: return type of analyses, number of analyses and core solution function.
+ */ 
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../toolkits/toolkits.h"
+#include "../objects/objects.h"
+#include "../shared/shared.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+#include "./solutions.h"
+#include "../modules/modules.h"
+#include "../include/include.h"
+#include "../solvers/solvers.h"
+
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),int solutiontype){
+
+	/*output: */
+	void (*solutioncore)(FemModel*)=NULL;
+
+	switch(solutiontype){
+	
+		case DiagnosticSolutionEnum:
+			solutioncore=&diagnostic_core;
+			break;
+		case SteadystateSolutionEnum:
+			solutioncore=&steadystate_core;
+			break;
+		case ThermalSolutionEnum:
+			solutioncore=&thermal_core;
+			break;
+		case PrognosticSolutionEnum:
+			solutioncore=&prognostic_core;
+			break;
+		case BalancedthicknessSolutionEnum:
+			solutioncore=&balancedthickness_core;
+			break;
+		case BalancedvelocitiesSolutionEnum:
+			solutioncore=&balancedvelocities_core;
+			break;
+		case SurfaceSlopeSolutionEnum:
+			solutioncore=&surfaceslope_core;
+			break;
+		case BedSlopeSolutionEnum:
+			solutioncore=&bedslope_core;
+			break;
+		case Transient2DSolutionEnum:
+			solutioncore=&transient2d_core;
+			break;
+		case Transient3DSolutionEnum:
+			solutioncore=&transient3d_core;
+			break;
+		default:
+			ISSMERROR("%s%s%s"," solution type: ",EnumToString(solutiontype)," not supported yet!");
+			break;
+	}
+	
+	/*Assign output pointer:*/
+	ISSMASSERT(psolutioncore);
+	*psolutioncore=solutioncore;
+
+}
Index: /issm/trunk/src/c/solutions/SolutionConfiguration.cpp
===================================================================
--- /issm/trunk/src/c/solutions/SolutionConfiguration.cpp	(revision 5246)
+++ /issm/trunk/src/c/solutions/SolutionConfiguration.cpp	(revision 5247)
@@ -26,4 +26,8 @@
 	void (*solutioncore)(FemModel*)=NULL;
 
+	/*Get Core pointer*/
+	CorePointerFromSolutionEnum(&solutioncore,solutiontype);
+
+	/*Analyses lists*/
 	switch(solutiontype){
 	
@@ -37,5 +41,4 @@
 			analyses[4]=SurfaceSlopeAnalysisEnum;
 			analyses[5]=BedSlopeAnalysisEnum;
-			solutioncore=&diagnostic_core;
 			break;
 
@@ -51,5 +54,4 @@
 			analyses[6]=ThermalAnalysisEnum;
 			analyses[7]=MeltingAnalysisEnum;
-			solutioncore=&steadystate_core;
 			break;
 
@@ -59,5 +61,4 @@
 			analyses[0]=ThermalAnalysisEnum;
 			analyses[1]=MeltingAnalysisEnum;
-			solutioncore=&thermal_core;
 			break;
 
@@ -66,5 +67,4 @@
 			analyses=(int*)xmalloc(numanalyses*sizeof(int));
 			analyses[0]=PrognosticAnalysisEnum;
-			solutioncore=&prognostic_core;
 			break;
 
@@ -73,5 +73,4 @@
 			analyses=(int*)xmalloc(numanalyses*sizeof(int));
 			analyses[0]=BalancedthicknessAnalysisEnum;
-			solutioncore=&balancedthickness_core;
 			break;
 
@@ -80,5 +79,4 @@
 			analyses=(int*)xmalloc(numanalyses*sizeof(int));
 			analyses[0]=BalancedvelocitiesAnalysisEnum;
-			solutioncore=&balancedvelocities_core;
 			break;
 
@@ -87,5 +85,4 @@
 			analyses=(int*)xmalloc(numanalyses*sizeof(int));
 			analyses[0]=SurfaceSlopeAnalysisEnum;
-			solutioncore=&surfaceslope_core;
 			break;
 
@@ -94,5 +91,4 @@
 			analyses=(int*)xmalloc(numanalyses*sizeof(int));
 			analyses[0]=BedSlopeAnalysisEnum;
-			solutioncore=&bedslope_core;
 			break;
 
@@ -107,5 +103,4 @@
 			analyses[5]=BedSlopeAnalysisEnum;
 			analyses[6]=PrognosticAnalysisEnum;
-			solutioncore=&transient2d_core;
 			break;
 		
@@ -122,5 +117,4 @@
 			analyses[7]=ThermalAnalysisEnum;
 			analyses[8]=MeltingAnalysisEnum;
-			solutioncore=&transient3d_core;
 			break;
 
@@ -132,6 +126,6 @@
 	/*Assign output pointers:*/
 	if(pnumanalyses) *pnumanalyses=numanalyses;
-	if(panalyses)*panalyses=analyses;
-	else xfree((void**)&analyses);
+	if(panalyses)    *panalyses=analyses;
+	else              xfree((void**)&analyses);
 	if(psolutioncore)*psolutioncore=solutioncore;
 
Index: /issm/trunk/src/c/solutions/balancedvelocities_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/balancedvelocities_core.cpp	(revision 5246)
+++ /issm/trunk/src/c/solutions/balancedvelocities_core.cpp	(revision 5247)
@@ -31,6 +31,5 @@
 	if(verbose)_printf_("saving results:\n");
 	if(solution_type==BalancedvelocitiesSolutionEnum){
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
+		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
 	}
 
Index: /issm/trunk/src/c/solutions/control_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/control_core.cpp	(revision 5246)
+++ /issm/trunk/src/c/solutions/control_core.cpp	(revision 5247)
@@ -19,5 +19,4 @@
 	int     verbose=0;
 	int     control_type;
-	bool    control_steady;
 	int     nsteps;
 	double  eps_cm;
@@ -25,4 +24,5 @@
 	bool    cm_gradient;
 	int     dim;
+	int     solution_type;
 
 	double* fit=NULL;
@@ -37,9 +37,9 @@
 	OptPars optpars;
 
+	/*Solution core pointer*/
+	void (*solutioncore)(FemModel*)=NULL;
+
 	/*output: */
 	double* J=NULL;
-
-	/*some preliminary work to be done if running full-Stokes analysis: */
-	stokescontrolinit(femmodel);
 
 	/*Recover parameters used throughout the solution:{{{1*/
@@ -53,7 +53,15 @@
 	femmodel->parameters->FindParam(&tolx,TolXEnum);
 	femmodel->parameters->FindParam(&cm_gradient,CmGradientEnum);
-	femmodel->parameters->FindParam(&control_steady,ControlSteadyEnum);
 	femmodel->parameters->FindParam(&dim,DimEnum);
+	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	/*}}}*/
+
+	/*out of solution_type, figure out solution core function pointer*/
+	CorePointerFromSolutionEnum(&solutioncore,solution_type);
+
+	/*some preliminary work to be done if running full-Stokes analysis: */
+	if (solution_type==SteadystateSolutionEnum || solution_type==DiagnosticSolutionEnum){
+		stokescontrolinit(femmodel);
+	}
 
 	/*Initialize misfit: */
@@ -70,6 +78,6 @@
 		InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,(int)fit[n],FitEnum);
 		
-		/*In case we are running a steady state control method, compute new temperature field using new parameter * distribution: */
-		if (control_steady) steadystate_core(femmodel);
+		/*In case we are running a steady state control method, compute new temperature field using new parameter distribution: */
+		if (solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
 	
 		_printf_("%s\n","      computing gradJ...");
@@ -99,6 +107,5 @@
 
 	_printf_("%s\n","      preparing final velocity solution");
-	if (control_steady) steadystate_core(femmodel);
-	else diagnostic_core(femmodel);
+	solutioncore(femmodel);
 
 	/*some results not computed by steadystate_core or diagnostic_core: */
Index: /issm/trunk/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk/src/c/solutions/solutions.h	(revision 5246)
+++ /issm/trunk/src/c/solutions/solutions.h	(revision 5247)
@@ -48,4 +48,5 @@
 //solution configuration
 void SolutionConfiguration(int** panalyses,int* pnumanalyses, void (**psolutioncore)(FemModel*),int solutiontype);
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),int solutiontype);
 
 #endif
