Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 13854)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 13855)
@@ -325,6 +325,6 @@
 					./solutions/ResetBoundaryConditions.cpp\
 					./solutions/AnalysisConfiguration.cpp\
+					./solutions/WrapperCorePointerFromSolutionEnum.cpp\
 					./solutions/CorePointerFromSolutionEnum.cpp\
-					./solutions/PureCorePointerFromSolutionEnum.cpp\
 					./solutions/EnvironmentInit.cpp\
 					./solutions/EnvironmentFinalize.cpp\
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13855)
@@ -304,5 +304,5 @@
 
 	/*Figure out which solution core we are going to run with the current solution type: */
-	CorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
+	WrapperCorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
 
 	/*run solutoin core: */
Index: /issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13855)
@@ -1,3 +1,3 @@
-/*!\file:  CorePointerFromSolutionEnum.cpp
+/*!\file:  AdjointCorePointerFromSolutionEnum.cpp
  * \brief: return type of analyses, number of analyses and core solution function.
  */ 
Index: /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13855)
@@ -18,39 +18,85 @@
 #include "../solvers/solvers.h"
 
-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
 
 	/*output: */
 	void (*solutioncore)(FemModel*)=NULL;
 
-	/*parameters: */
-	bool control_analysis=false;
-	bool tao_analysis=false;
-	bool dakota_analysis=false;
+	switch(solutiontype){
 
-	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
-	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
-	 * carries out adjoint based inversion on a certain core: */
-	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
-	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
-	parameters->FindParam(&tao_analysis,InversionTaoEnum);
-
-	if(nodakotacore)dakota_analysis=false;
-
-	if(dakota_analysis){
-		#ifdef _HAVE_DAKOTA_
-		solutioncore=dakota_core;
-		#else
-		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
-		#endif
+		case DiagnosticSolutionEnum:
+			#ifdef _HAVE_DIAGNOSTIC_
+			solutioncore=&diagnostic_core;
+			#else
+			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
+			#endif
+			break;
+		case SteadystateSolutionEnum:
+			#ifdef _HAVE_STEADYSTATE_
+			solutioncore=&steadystate_core;
+			#else
+			_error_("ISSM was not compiled with steady state capabilities. Exiting");
+			#endif
+			break;
+		case ThermalSolutionEnum:
+			#ifdef _HAVE_THERMAL_
+			solutioncore=&thermal_core;
+			#else
+			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+			#endif
+			break;
+		case EnthalpySolutionEnum:
+			#ifdef _HAVE_THERMAL_
+			solutioncore=&enthalpy_core;
+			#else
+			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+			#endif
+			break;
+		case BalancethicknessSolutionEnum:
+			#ifdef _HAVE_BALANCED_
+			solutioncore=&balancethickness_core;
+			#else
+			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+			#endif
+			break;
+		case HydrologySolutionEnum:
+			#ifdef _HAVE_HYDROLOGY_
+			solutioncore=&hydrology_core;
+			#else
+			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
+			#endif
+			break;
+		case SurfaceSlopeSolutionEnum:
+			#ifdef _HAVE_SLOPE_
+			solutioncore=&surfaceslope_core;
+			#else
+			_error_("ISSM was not compiled with slope capabilities. Exiting");
+			#endif
+			break;
+		case BedSlopeSolutionEnum:
+			#ifdef _HAVE_SLOPE_
+			solutioncore=&bedslope_core;
+			#else
+			_error_("ISSM was not compiled with slope capabilities. Exiting");
+			#endif
+			break;
+		case TransientSolutionEnum:
+			#ifdef _HAVE_TRANSIENT_
+			solutioncore=&transient_core;
+			#else
+			_error_("ISSM was not compiled with transient capabilities. Exiting");
+			#endif
+			break;
+		case PrognosticSolutionEnum:
+			#ifdef _HAVE_PROGNOSTIC_
+			solutioncore=&prognostic_core;
+			#else
+			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
+			#endif
+			break;
+		default:
+			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+			break;
 	}
-	else if(control_analysis){
-		#ifdef _HAVE_CONTROL_
-		if(tao_analysis) solutioncore=controltao_core;
-		else solutioncore=control_core;
-		#else
-		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
-		#endif
-	}
-	else PureCorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
 
 	/*Assign output pointer:*/
Index: /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13855)
@@ -76,5 +76,5 @@
 	/*Determine solution sequence: */
 	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
+	WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
 
 	/*Run the core solution sequence: */
Index: sm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13854)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/*!\file:  PureCorePointerFromSolutionEnum.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 "../classes/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 PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
-
-	/*output: */
-	void (*solutioncore)(FemModel*)=NULL;
-
-	switch(solutiontype){
-
-		case DiagnosticSolutionEnum:
-			#ifdef _HAVE_DIAGNOSTIC_
-			solutioncore=&diagnostic_core;
-			#else
-			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
-			#endif
-			break;
-		case SteadystateSolutionEnum:
-			#ifdef _HAVE_STEADYSTATE_
-			solutioncore=&steadystate_core;
-			#else
-			_error_("ISSM was not compiled with steady state capabilities. Exiting");
-			#endif
-			break;
-		case ThermalSolutionEnum:
-			#ifdef _HAVE_THERMAL_
-			solutioncore=&thermal_core;
-			#else
-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
-			#endif
-			break;
-		case EnthalpySolutionEnum:
-			#ifdef _HAVE_THERMAL_
-			solutioncore=&enthalpy_core;
-			#else
-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
-			#endif
-			break;
-		case BalancethicknessSolutionEnum:
-			#ifdef _HAVE_BALANCED_
-			solutioncore=&balancethickness_core;
-			#else
-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
-			#endif
-			break;
-		case HydrologySolutionEnum:
-			#ifdef _HAVE_HYDROLOGY_
-			solutioncore=&hydrology_core;
-			#else
-			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
-			#endif
-			break;
-		case SurfaceSlopeSolutionEnum:
-			#ifdef _HAVE_SLOPE_
-			solutioncore=&surfaceslope_core;
-			#else
-			_error_("ISSM was not compiled with slope capabilities. Exiting");
-			#endif
-			break;
-		case BedSlopeSolutionEnum:
-			#ifdef _HAVE_SLOPE_
-			solutioncore=&bedslope_core;
-			#else
-			_error_("ISSM was not compiled with slope capabilities. Exiting");
-			#endif
-			break;
-		case TransientSolutionEnum:
-			#ifdef _HAVE_TRANSIENT_
-			solutioncore=&transient_core;
-			#else
-			_error_("ISSM was not compiled with transient capabilities. Exiting");
-			#endif
-			break;
-		case PrognosticSolutionEnum:
-			#ifdef _HAVE_PROGNOSTIC_
-			solutioncore=&prognostic_core;
-			#else
-			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
-			#endif
-			break;
-		default:
-			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
-			break;
-	}
-
-	/*Assign output pointer:*/
-	_assert_(psolutioncore);
-	*psolutioncore=solutioncore;
-
-}
Index: /issm/trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp	(revision 13855)
+++ /issm/trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp	(revision 13855)
@@ -0,0 +1,60 @@
+/*!\file:  WrapperCorePointerFromSolutionEnum.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 "../classes/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 WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
+
+	/*output: */
+	void (*solutioncore)(FemModel*)=NULL;
+
+	/*parameters: */
+	bool control_analysis=false;
+	bool tao_analysis=false;
+	bool dakota_analysis=false;
+
+	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
+	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
+	 * carries out adjoint based inversion on a certain core: */
+	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+	parameters->FindParam(&tao_analysis,InversionTaoEnum);
+
+	if(nodakotacore)dakota_analysis=false;
+
+	if(dakota_analysis){
+		#ifdef _HAVE_DAKOTA_
+		solutioncore=dakota_core;
+		#else
+		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
+		#endif
+	}
+	else if(control_analysis){
+		#ifdef _HAVE_CONTROL_
+		if(tao_analysis) solutioncore=controltao_core;
+		else solutioncore=control_core;
+		#else
+		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
+		#endif
+	}
+	else CorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
+
+	/*Assign output pointer:*/
+	_assert_(psolutioncore);
+	*psolutioncore=solutioncore;
+
+}
Index: /issm/trunk-jpl/src/c/solutions/control_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/control_core.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/control_core.cpp	(revision 13855)
@@ -62,5 +62,5 @@
 
 	/*out of solution_type, figure out solution core and adjoint function pointer*/
-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
 
Index: /issm/trunk-jpl/src/c/solutions/controltao_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13855)
@@ -94,9 +94,10 @@
 	femmodel->parameters->SetParam(true,SaveResultsEnum);
 	void (*solutioncore)(FemModel*)=NULL;
-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	solutioncore(femmodel);
 
 	/*Clean up and return*/
 	xDelete<int>(control_list);
+	xDelete<double>(user.J);
 	xdelete(&X);
 	TaoDestroy(&tao);
@@ -135,5 +136,5 @@
 	void (*solutioncore)(FemModel*)=NULL;
 	void (*adjointcore)(FemModel*)=NULL;
-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
 	solutioncore(femmodel);
Index: /issm/trunk-jpl/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13854)
+++ /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13855)
@@ -55,6 +55,6 @@
 //solution configuration
 void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
-void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
+void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
 void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
 
