Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3886)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3887)
@@ -1126,5 +1126,5 @@
 /*}}}*/
 /*FUNCTION DataSet::Gradj{{{1*/
-void  DataSet::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type){
+void  DataSet::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type){
 
 
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3886)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3887)
@@ -87,5 +87,5 @@
 		DataSet* Copy(void);
 		void  Du(Vec du_g,int analysis_type,int sub_analysis_type);
-		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type);
+		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type);
 		void  Misfit(double* pJ, int analysis_type,int sub_analysis_type);
 		void  CostFunction(double* pJ, int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/Gradjx/Gradjx.cpp
===================================================================
--- /issm/trunk/src/c/Gradjx/Gradjx.cpp	(revision 3886)
+++ /issm/trunk/src/c/Gradjx/Gradjx.cpp	(revision 3887)
@@ -11,5 +11,5 @@
 
 void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,
-			int analysis_type,int sub_analysis_type,char* control_type){
+			int analysis_type,int sub_analysis_type,int control_type){
 
 	/*output: */
Index: /issm/trunk/src/c/Gradjx/Gradjx.h
===================================================================
--- /issm/trunk/src/c/Gradjx/Gradjx.h	(revision 3886)
+++ /issm/trunk/src/c/Gradjx/Gradjx.h	(revision 3887)
@@ -11,5 +11,5 @@
 /* local prototypes: */
 void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials,  Parameters* parameters,
-			int analysis_type,int sub_analysis_type,char* control_type);
+			int analysis_type,int sub_analysis_type,int control_type);
 
 #endif  /* _GRADJX_H */
Index: /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp
===================================================================
--- /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp	(revision 3886)
+++ /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp	(revision 3887)
@@ -92,7 +92,4 @@
 	_printf_("qmu iteration: %i\n",counter);
 
-	//initialize results:
-	results=new DataSet(ResultsEnum);
-
 	/*Modify core inputs in objects contained in model, to reflect the dakota variables inputs: */
 	model->UpdateFromDakota(variables,variables_descriptors,numvariables,model->GetFormulation(DiagnosticAnalysisEnum,HorizAnalysisEnum)->parameters,qmu_part,qmu_npart); //diagnostic horiz model is the one holding the parameters for Dakota.
@@ -103,5 +100,5 @@
 		if(verbose)_printf_("Starting diagnostic core\n");
 
-		diagnostic_core(results,model);
+		results=diagnostic_core(model);
 
 	}
@@ -109,5 +106,5 @@
 		
 		if(verbose)_printf_("Starting thermal core\n");
-		thermal_core(results,model);
+		results=thermal_core(model);
 
 	}
@@ -115,5 +112,5 @@
 
 		if(verbose)_printf_("Starting prognostic core\n");
-		prognostic_core(results,model);
+		results=prognostic_core(model);
 
 	}
@@ -121,5 +118,5 @@
 
 		if(verbose)_printf_("Starting transient core\n");
-		transient_core(results,model);
+		results=transient_core(model);
 
 	}
Index: /issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3887)
@@ -718,5 +718,5 @@
 /*}}}*/
 /*FUNCTION Beam::Gradj{{{1*/
-void  Beam::Gradj(Vec, int, int,char*){
+void  Beam::Gradj(Vec, int, int,int){
 	ISSMERROR(" not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Elements/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3887)
@@ -85,5 +85,5 @@
 		void  GetThicknessList(double* thickness_list);
 		void  Du(Vec, int,int);
-		void  Gradj(Vec,  int, int,char*);
+		void  Gradj(Vec,  int, int,int);
 		void  GradjDrag(Vec,  int,int );
 		void  GradjB(Vec,  int,int );
Index: /issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Element.h	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Element.h	(revision 3887)
@@ -36,5 +36,5 @@
 		virtual void   GetBedList(double* bed_list)=0;
 		virtual void   Du(Vec du_g,int analysis_type,int sub_analysis_type)=0;
-		virtual void   Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type)=0;
+		virtual void   Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type)=0;
 		virtual void   GradjDrag(Vec grad_g,int analysis_type,int sub_analysis_type)=0;
 		virtual void   GradjB(Vec grad_g,int analysis_type,int sub_analysis_type)=0;
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3887)
@@ -4242,5 +4242,5 @@
 /*}}}*/
 /*FUNCTION Penta::Gradj {{{1*/
-void  Penta::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type){
+void  Penta::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type){
 
 	/*inputs: */
@@ -4253,11 +4253,11 @@
 	if(onwater)return;
 
-	if (strcmp(control_type,"drag")==0){
+	if (control_type==DragCoefficientEnum){
 		GradjDrag( grad_g,analysis_type,sub_analysis_type);
 	}
-	else if (strcmp(control_type,"B")==0){
+	else if (control_type=RheologyBEnum){
 		GradjB( grad_g, analysis_type,sub_analysis_type);
 	}
-	else ISSMERROR("%s%s","control type not supported yet: ",control_type);
+	else ISSMERROR("%s%i","control type not supported yet: ",control_type);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3887)
@@ -77,5 +77,5 @@
 		bool   GetOnBed();
 		void  Du(Vec du_g,int analysis_type,int sub_analysis_type);
-		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type);
+		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type);
 		void  GradjDrag(Vec grad_g,int analysis_type,int sub_analysis_type);
 		void  GradjB(Vec grad_g,int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/objects/Elements/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3887)
@@ -508,5 +508,5 @@
 /*}}}*/
 /*FUNCTION Sing::Gradj {{{1*/
-void  Sing::Gradj(Vec,  int, int ,char*){
+void  Sing::Gradj(Vec,  int, int ,int){
 	ISSMERROR(" not supported yet!");
 }
Index: /issm/trunk/src/c/objects/Elements/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3887)
@@ -84,5 +84,5 @@
 		void  GetThicknessList(double* thickness_list);
 		void  Du(Vec,int,int);
-		void  Gradj(Vec, int, int,char*);
+		void  Gradj(Vec, int, int,int);
 		void  GradjDrag(Vec , int,int);
 		void  GradjB(Vec,  int,int);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3887)
@@ -658,5 +658,5 @@
 	double  dk[NDOF2]; 
 	double  dB[NDOF2]; 
-	char*   control_type=NULL;
+	int    control_type;
 	double  cm_noisedmp;
 
@@ -700,5 +700,5 @@
 
 		/*Add Tikhonov regularization term to misfit*/
-		if (strcmp(control_type,"drag")==0){
+		if (control_type==DragCoefficientEnum){
 			if (shelf){
 				inputs->GetParameterDerivativeValue(&dk[0],&xyz_list[0][0],&gauss_l1l2l3[0],DragCoefficientEnum);
@@ -707,10 +707,10 @@
 			}
 		}
-		else if (strcmp(control_type,"B")==0){
+		else if (control_type==RheologyBEnum){
 			inputs->GetParameterDerivativeValue(&dB[0], &xyz_list[0][0], &gauss_l1l2l3[0],RheologyBEnum);
 			Jelem+=cm_noisedmp*1/2*(pow(dB[0],2)+pow(dB[1],2))*Jdet*gauss_weight;
 		}
 		else{
-			ISSMERROR("%s%s","unsupported control type: ",control_type);
+			ISSMERROR("%s%i","unsupported control type: ",control_type);
 		}
 
@@ -721,5 +721,4 @@
 	xfree((void**)&third_gauss_area_coord);
 	xfree((void**)&gauss_weights);
-	xfree((void**)&control_type);
 
 	/*Return: */
@@ -3831,5 +3830,5 @@
 /*}}}*/
 /*FUNCTION Tria::Gradj {{{1*/
-void  Tria::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type){
+void  Tria::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type){
 
 	/*inputs: */
@@ -3842,11 +3841,11 @@
 	if(onwater)return;
 
-	if (strcmp(control_type,"drag")==0){
+	if (control_type==DragCoefficientEnum){
 		GradjDrag( grad_g,analysis_type,sub_analysis_type);
 	}
-	else if (strcmp(control_type,"B")==0){
+	else if (control_type==RheologyBEnum){
 		GradjB( grad_g,analysis_type,sub_analysis_type);
 	}
-	else ISSMERROR("%s%s","control type not supported yet: ",control_type);
+	else ISSMERROR("%s%i","control type not supported yet: ",control_type);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3886)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3887)
@@ -80,5 +80,5 @@
 		void  GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3);
 		void  Du(Vec du_g,int analysis_type,int sub_analysis_type);
-		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type);
+		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,int control_type);
 		void  GradjDrag(Vec grad_g,int analysis_type,int sub_analysis_type);
 		void  GradjDragStokes(Vec grad_g,int analysis_type,int sub_analysis_type);
Index: /issm/trunk/src/c/parallel/ControlRestart.cpp
===================================================================
--- /issm/trunk/src/c/parallel/ControlRestart.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/ControlRestart.cpp	(revision 3887)
@@ -39,5 +39,5 @@
 	temporary_results->AddObject(result);
 	
-	result=new Result(temporary_results->Size()+1,0,1,"analysis_type","diagnostic");
+	result=new Result(temporary_results->Size()+1,0,1,"analysis_type",EnumAsString(DiagnosticAnalysisEnum));
 	temporary_results->AddObject(result);
 
Index: /issm/trunk/src/c/parallel/balancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedthickness.cpp	(revision 3887)
@@ -79,6 +79,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -89,5 +87,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedthickness_core(results,model);
+		results=balancedthickness_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -107,8 +105,4 @@
 	}
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","balancedthickness");
-	results->AddObject(result);
-	
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,BalancedthicknessAnalysisEnum);
Index: /issm/trunk/src/c/parallel/balancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness2.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedthickness2.cpp	(revision 3887)
@@ -79,6 +79,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -89,5 +87,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedthickness2_core(results,model);
+		results=balancedthickness2_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -107,8 +105,4 @@
 	}
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","balancedthickness2");
-	results->AddObject(result);
-	
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,Balancedthickness2AnalysisEnum);
Index: /issm/trunk/src/c/parallel/balancedthickness2_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness2_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedthickness2_core.cpp	(revision 3887)
@@ -11,5 +11,5 @@
 #include "../modules.h"
 
-void balancedthickness2_core(DataSet* results,Model* model){
+DataSet* balancedthickness2_core(Model* model){
 
 	extern int my_rank;
@@ -17,4 +17,5 @@
 	/*output: */
 	Result* result=NULL;
+	DataSet* results=NULL;
 
 	/*intermediary: */
@@ -35,4 +36,6 @@
 	FemModel* fem_p=NULL;
 
+	//initialize results:
+	results=new DataSet(ResultsEnum);
 
 	fem_p=model->GetFormulation(Balancedthickness2AnalysisEnum);
@@ -68,7 +71,15 @@
 	results->AddObject(result);
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","balancedthickness2");
+	results->AddObject(result);
+
 	/*Free ressources:*/
 	VecFree(&vx_g);
 	VecFree(&vy_g);
 	VecFree(&h_g);
+	
+	/*return: */
+	return results;
+
 }
Index: /issm/trunk/src/c/parallel/balancedthickness_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3887)
@@ -11,5 +11,5 @@
 #include "../modules.h"
 
-void balancedthickness_core(DataSet* results,Model* model){
+DataSet* balancedthickness_core(Model* model){
 
 	extern int my_rank;
@@ -17,4 +17,5 @@
 	/*output: */
 	Result* result=NULL;
+	DataSet* results=NULL;
 
 	/*intermediary: */
@@ -33,4 +34,6 @@
 	FemModel* fem_p=NULL;
 
+	//initialize results:
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem model: */
@@ -58,6 +61,14 @@
 	results->AddObject(result);
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","balancedthickness");
+	results->AddObject(result);
+
 	/*Free ressources:*/
 	VecFree(&u_g);
 	VecFree(&h_g);
+	
+	/*return: */
+	return results;
+
 }
Index: /issm/trunk/src/c/parallel/balancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedvelocities.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedvelocities.cpp	(revision 3887)
@@ -35,5 +35,4 @@
 	DataSet* processedresults=NULL;
 	Result*  result=NULL;
-
 	Param*   param=NULL;
 
@@ -78,6 +77,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -88,5 +85,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedvelocities_core(results,model);
+		results=balancedvelocities_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -106,8 +103,4 @@
 	}
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","balancedvelocities");
-	results->AddObject(result);
-	
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,BalancedvelocitiesAnalysisEnum);
Index: /issm/trunk/src/c/parallel/balancedvelocities_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void balancedvelocities_core(DataSet* results,Model* model){
+DataSet* balancedvelocities_core(Model* model){
 
 	extern int my_rank;
@@ -16,4 +16,5 @@
 	/*output: */
 	Result* result=NULL;
+	DataSet* results=NULL;
 
 	/*intermediary: */
@@ -32,4 +33,6 @@
 	FemModel* fem_p=NULL;
 
+	//initialize results:
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem model: */
@@ -57,6 +60,13 @@
 	results->AddObject(result);
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","balancedvelocities");
+	results->AddObject(result);
+
 	/*Free ressources:*/
 	VecFree(&u_g);
 	VecFree(&v_g);
+
+	/*return: */
+	return results;
 }
Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 3887)
@@ -7,5 +7,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void control_core(DataSet* results,Model* model){
+DataSet* control_core(Model* model){
 
 	extern int my_rank;
@@ -15,4 +15,5 @@
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -55,4 +56,7 @@
 	int numberofnodes;
 
+	//initialize results
+	results=new DataSet(ResultsEnum);
+
 	/*Process models*/
 	ControlInitialization(model);
@@ -91,6 +95,5 @@
 		 * distribution: */
 		if (control_steady){
-			steadystate_results=new DataSet(ResultsEnum);
-			steadystate_core(steadystate_results,model);
+			steadystate_results= steadystate_core(model);
 			VecFree(&t_g); steadystate_results->FindResult(&t_g,"t_g");
 			delete steadystate_results;
@@ -99,6 +102,5 @@
 	
 		_printf_("%s\n","      computing gradJ...");
-		gradjcompute_results=new DataSet(ResultsEnum); 
-		gradjcompute_core(gradjcompute_results,model);
+		gradjcompute_results= gradjcompute_core(model);
 		gradjcompute_results->FindResult(&grad_g,"grad_g");
 		delete gradjcompute_results;
@@ -110,5 +112,8 @@
 			result=new Result(results->Size()+1,0,1,"grad_g",grad_g);
 			results->AddObject(result);
-		
+	
+			result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(analysis_type));
+			results->AddObject(result);
+	
 			/*Free ressources: */
 			xfree((void**)&control_type);
@@ -123,5 +128,5 @@
 			VecFree(&m_g);
 			xfree((void**)&J);
-			return;
+			return results;
 		}
 
@@ -196,6 +201,5 @@
 	if (control_steady){
 		model->UpdateInputsFromVector(param_g,control_type,VertexEnum);
-		steadystate_results=new DataSet(ResultsEnum);
-		steadystate_core(steadystate_results,model);
+		steadystate_results=steadystate_core(model);
 
 		//extract u_g ,t_g and m_g from steadystate results, and erase diagnostic_results;
@@ -207,6 +211,5 @@
 	else{
 		model->UpdateInputsFromVector(param_g,control_type,VertexEnum);
-		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model);
+		diagnostic_results=diagnostic_core(model);
 
 		//extract u_g from diagnostic_results, and erase diagnostic_results;
@@ -228,4 +231,11 @@
 		results->AddObject(result);
 	}
+	
+	/*Add analysis_type and control_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(analysis_type));
+	results->AddObject(result);
+	result=new Result(results->Size()+1,0,1,"control_type",EnumAsString(control_type));
+	results->AddObject(result);
+
 
 	/*Free ressources: */
@@ -242,3 +252,6 @@
 	VecFree(&m_g);
 	xfree((void**)&J);
+
+	//return: 
+	return results;
 }
Index: /issm/trunk/src/c/parallel/diagnostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 3887)
@@ -26,5 +26,4 @@
 	bool  qmu_analysis=false;
 	bool  control_analysis=false;
-	char* control_type=NULL;
 
 	/*Model: */
@@ -90,6 +89,4 @@
 	model->FindParam(&waitonlock,WaitOnLockEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -97,14 +94,10 @@
 	if(!qmu_analysis){
 		if(!control_analysis){
-			/*run diagnostic analysis: */
+			
 			_printf_("call computational core:\n");
 			MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-			diagnostic_core(results,model);
+			results=diagnostic_core(model);
 			MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
-			/*Add analysis_type to results: */
-			result=new Result(results->Size()+1,0,1,"analysis_type","diagnostic");
-			results->AddObject(result);
-			
 			_printf_("process results:\n");
 			ProcessResults(&processed_results,results,model,DiagnosticAnalysisEnum);
@@ -114,14 +107,6 @@
 			_printf_("call computational core:\n");
 			MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-			control_core(results,model);
+			results=control_core(model);
 			MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
-
-			/*Add analysis_type and control_type to results: */
-			result=new Result(results->Size()+1,0,1,"analysis_type","diagnostic");
-			results->AddObject(result);
-			
-			model->FindParam(&control_type,ControlTypeEnum);
-			result=new Result(results->Size()+1,0,1,"control_type",control_type);
-			results->AddObject(result);
 
 			_printf_("process results:\n");
@@ -151,5 +136,4 @@
 
 	/*Free ressources */
-	xfree((void**)&control_type);
 	delete model;
 	delete results;
Index: /issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3887)
@@ -11,5 +11,5 @@
 #include "../include/include.h"
 
-void diagnostic_core(DataSet* results,Model* model){
+DataSet* diagnostic_core(Model* model){
 
 	extern int my_rank;
@@ -24,4 +24,5 @@
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -66,4 +67,7 @@
 	double* dofset=NULL;
 
+	//initialize results
+	results=new DataSet(ResultsEnum);
+
 	//first recover parameters common to all solutions
 	model->FindParam(&verbose,VerboseEnum);
@@ -180,4 +184,6 @@
 	result=new Result(results->Size()+1,0,1,"p_g",pg);
 	results->AddObject(result);
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(DiagnosticAnalysisEnum));
+	results->AddObject(result);
 
 	/*output if we have rifts: */
@@ -199,3 +205,5 @@
 	VecFree(&bedslopey);
 
+	/*return: */
+	return results;
 }
Index: /issm/trunk/src/c/parallel/gradjcompute_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3887)
@@ -13,5 +13,5 @@
 #endif
 
-void gradjcompute_core(DataSet* results,Model* model){
+DataSet* gradjcompute_core(Model* model){
 	
 	
@@ -25,5 +25,5 @@
 	int numberofdofspernode;
 	char* solverstring=NULL;
-	char* control_type=NULL;
+	int  control_type;
 	
 	Vec u_g=NULL;
@@ -45,4 +45,5 @@
 	
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -51,4 +52,7 @@
 	int dim=-1;
 	int extrude_param=0;
+
+	//initialize results
+	results=new DataSet(ResultsEnum);
 	
 	/*some parameters:*/
@@ -100,6 +104,5 @@
 
 	if(control_steady){
-		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model);
+		diagnostic_results= diagnostic_core(model);
 
 		//extract u_g and add it to input (3d velocity needed by thermal_core)
@@ -117,4 +120,6 @@
 	result=new Result(results->Size()+1,0,1,"grad_g",grad_g);
 	results->AddObject(result);
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(GradientAnalysisEnum));
+	results->AddObject(result);
 	
 	/*Free ressources:*/
@@ -122,5 +127,4 @@
 	VecFree(&grad_g);
 	xfree((void**)&solverstring);
-	xfree((void**)&control_type);
 	xfree((void**)&lambdax);
 	xfree((void**)&lambday);
Index: /issm/trunk/src/c/parallel/objectivefunctionC.cpp
===================================================================
--- /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3887)
@@ -98,6 +98,5 @@
 	else{
 		//We need a 3D velocity!! (vz is required for the next thermal run)
-		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model);
+		diagnostic_results=	diagnostic_core(model);
 
 		//extract u_g and add it to input (3d velocity needed by thermal_core)
Index: /issm/trunk/src/c/parallel/parallel.h
===================================================================
--- /issm/trunk/src/c/parallel/parallel.h	(revision 3886)
+++ /issm/trunk/src/c/parallel/parallel.h	(revision 3887)
@@ -12,31 +12,32 @@
 class FemModel;
 
-void gradjcompute_core(DataSet* results,Model* model);
+/*cores: */
+DataSet* gradjcompute_core(Model* model);
+DataSet* diagnostic_core(Model* model);
+DataSet* prognostic_core(Model* model);
+DataSet* prognostic2_core(Model* model);
+DataSet* balancedthickness_core(Model* model);
+DataSet* balancedthickness2_core(Model* model);
+DataSet* balancedvelocities_core(Model* model);
+DataSet* slopecompute_core(Model* model);
+DataSet* control_core(Model* model);
+DataSet* steadystate_core(Model* model);
+DataSet* transient_core(Model* model);
+DataSet* transient_core_2d(Model* model);
+DataSet* transient_core_3d(Model* model);
+DataSet* thermal_core(Model* model);
 
-void diagnostic_core(DataSet* results,Model* model);
-void prognostic_core(DataSet* results,Model* model);
-void prognostic2_core(DataSet* results,Model* model);
-void balancedthickness_core(DataSet* results,Model* model);
-void balancedthickness2_core(DataSet* results,Model* model);
-void balancedvelocities_core(DataSet* results,Model* model);
-void slopecompute_core(DataSet* results,Model* model);
-void control_core(DataSet* results,Model* model);
-
-void thermal_core(DataSet* results,Model* model);
+/*computational cores: */
 void thermal_core_nonlinear(Vec* ptg,double* pmelting_offset,FemModel* fem,int analysis_type,int sub_analysis_type);
-
-void steadystate_core(DataSet* results,Model* model);
-
 void diagnostic_core_nonlinear(Vec* pug,Mat* pK_ff0,Mat* pK_fs0, DataSet* loads, FemModel* fem,int analysis_type,int sub_analysis_type);
 void diagnostic_core_linear(Vec* ppg,FemModel* fem,int  analysis_type,int sub_analysis_type);
-void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters);
-
-void transient_core(DataSet* results,Model* model);
-void transient_core_2d(DataSet* results,Model* model);
-void transient_core_3d(DataSet* results,Model* model);
-
 void slope_core(Vec* pslopex,Vec* pslopey,FemModel* fem,int AnalysisEnum);
 
+
+
+
+
 //int GradJOrth(WorkspaceParams* workspaceparams);
+void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters);
 
 int GoldenSearch(double* psearch_scalar,double* pJ,double xa, double xb, double tolerance, int maxiter, double fit,double optscal,double (*f)(double*,double,double,FemModel*),FemModel* femmodel);
Index: /issm/trunk/src/c/parallel/prognostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/prognostic.cpp	(revision 3887)
@@ -76,6 +76,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -86,5 +84,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		prognostic_core(results,model);
+		results=prognostic_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -104,8 +102,5 @@
 	}
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","prognostic");
-	results->AddObject(result);
-	
+		
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,PrognosticAnalysisEnum);
Index: /issm/trunk/src/c/parallel/prognostic2.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic2.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/prognostic2.cpp	(revision 3887)
@@ -77,6 +77,4 @@
 	model->FindParam(&numberofnodes,NumberOfNodesEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -87,5 +85,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		prognostic2_core(results,model);
+		results=prognostic2_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -105,8 +103,4 @@
 	}
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","prognostic2");
-	results->AddObject(result);
-	
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,Prognostic2AnalysisEnum);
Index: /issm/trunk/src/c/parallel/prognostic2_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void prognostic2_core(DataSet* results,Model* model){
+DataSet* prognostic2_core(Model* model){
 
 	extern int my_rank;
@@ -16,4 +16,5 @@
 	/*output: */
 	Result* result=NULL;
+	DataSet* results=NULL;
 
 	/*intermediary: */
@@ -33,4 +34,7 @@
 	/*fem prognostic model: */
 	FemModel* fem_p=NULL;
+
+	//initialize results:
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem model: */
@@ -63,3 +67,11 @@
 	VecFree(&vy_g);
 	VecFree(&h_g);
+
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(Prognostic2AnalysisEnum));
+	results->AddObject(result);
+	
+	/*return: */
+	return results;
+
 }
Index: /issm/trunk/src/c/parallel/prognostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 3887)
@@ -10,9 +10,10 @@
 #include "../modules.h"
 
-void prognostic_core(DataSet* results,Model* model){
+DataSet* prognostic_core(Model* model){
 
 	extern int my_rank;
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -26,4 +27,6 @@
 	FemModel* fem_p=NULL;
 
+	//initialize results
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem model: */
@@ -50,5 +53,13 @@
 	results->AddObject(result);
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(PrognosticAnalysisEnum));
+	results->AddObject(result);
+
 	/*Free ressources:*/
 	VecFree(&h_g);
+	
+	//return: 
+	return results;
+
 }
Index: /issm/trunk/src/c/parallel/slopecompute.cpp
===================================================================
--- /issm/trunk/src/c/parallel/slopecompute.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/slopecompute.cpp	(revision 3887)
@@ -76,6 +76,4 @@
 	model->FindParam(&waitonlock,WaitOnLockEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -83,11 +81,7 @@
 	_printf_("call computational core:\n");
 	MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-	slopecompute_core(results,model);
+	results=slopecompute_core(model);
 	MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
-	/*Add analysis_type to results: */
-	result=new Result(results->Size()+1,0,1,"analysis_type","slopecompute");
-	results->AddObject(result);
-	
 	_printf_("process results:\n");
 	ProcessResults(&processedresults,results,model,SlopecomputeAnalysisEnum);
Index: /issm/trunk/src/c/parallel/slopecompute_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/slopecompute_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/slopecompute_core.cpp	(revision 3887)
@@ -10,9 +10,10 @@
 #include "../modules.h"
 
-void slopecompute_core(DataSet* results,Model* model){
+DataSet* slopecompute_core(Model* model){
 
 	extern int my_rank;
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -29,4 +30,7 @@
 	/*fem slopecompute model: */
 	FemModel* fem_sl=NULL;
+
+	//initialize results
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem model: */
@@ -51,7 +55,13 @@
 	result=new Result(results->Size()+1,0,1,"sy_g",sy_g);
 	results->AddObject(result);
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(SlopecomputeAnalysisEnum));
+	results->AddObject(result);
+
 
 	/*Free ressources:*/
 	VecFree(&sx_g);
 	VecFree(&sy_g);
+	
+	//return: 
+	return results;
 }
Index: /issm/trunk/src/c/parallel/steadystate.cpp
===================================================================
--- /issm/trunk/src/c/parallel/steadystate.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/steadystate.cpp	(revision 3887)
@@ -106,6 +106,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -117,10 +115,6 @@
 			_printf_("call computational core:\n");
 			MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-			steadystate_core(results,model);
+			results=steadystate_core(model);
 			MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
-
-			/*Add analysis_type to results: */
-			result=new Result(results->Size()+1,0,1,"analysis_type","steadystate");
-			results->AddObject(result);
 
 			_printf_("process results:\n");
@@ -138,14 +132,6 @@
 			_printf_("call computational core:\n");
 			MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-			control_core(results,model);
+			results=control_core(model);
 			MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
-
-			/*Add analysis_type and control_type to results: */
-			result=new Result(results->Size()+1,0,1,"analysis_type","steadystate");
-			results->AddObject(result);
-
-			model->FindParam(&control_type,ControlTypeEnum);
-			result=new Result(results->Size()+1,0,1,"control_type",control_type);
-			results->AddObject(result);
 
 			_printf_("process results:\n");
Index: /issm/trunk/src/c/parallel/steadystate_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/steadystate_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/steadystate_core.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void steadystate_core(DataSet* results,Model* model){
+DataSet* steadystate_core(Model* model){
 
 	extern int my_rank;
@@ -25,4 +25,5 @@
 	/*output: */
 	Result* result=NULL;
+	DataSet* results=NULL;
 	DataSet* results_thermal=NULL;
 	DataSet* results_diagnostic=NULL;
@@ -78,6 +79,5 @@
 
 		//first compute temperature at steady state.
-		results_thermal=new DataSet(ResultsEnum); 
-		thermal_core(results_thermal,model);
+		results_thermal=thermal_core(model);
 	
 		//get t_g and m_g;
@@ -95,6 +95,5 @@
 
 		//now compute diagnostic velocity using the steady state temperature.
-		results_diagnostic=new DataSet(ResultsEnum);
-		diagnostic_core(results_diagnostic,model);
+		results_diagnostic=diagnostic_core(model);
 
 		//get p_g and u_g
@@ -137,4 +136,7 @@
 	result=new Result(results->Size()+1,0,1,"m_g",m_g);
 	results->AddObject(result);
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(SteadyAnalysisEnum));
+	results->AddObject(result);
+
 
 	/*Free ressource*/
Index: /issm/trunk/src/c/parallel/thermal.cpp
===================================================================
--- /issm/trunk/src/c/parallel/thermal.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/thermal.cpp	(revision 3887)
@@ -81,6 +81,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -91,11 +89,7 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		thermal_core(results,model);
+		results=thermal_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
-		/*Add analysis_type to results: */
-		result=new Result(results->Size()+1,0,1,"analysis_type","thermal");
-		results->AddObject(result);
-			
 		_printf_("process results:\n");
 		ProcessResults(&processed_results,results,model,ThermalAnalysisEnum);
Index: /issm/trunk/src/c/parallel/thermal_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/thermal_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/thermal_core.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void thermal_core(DataSet* results,Model* model){
+DataSet* thermal_core(Model* model){
 
 	extern int my_rank;
@@ -20,4 +20,5 @@
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -43,4 +44,7 @@
 	int    sub_analysis_type;
 	double melting_offset;
+
+	//initialize results
+	results=new DataSet(ResultsEnum);
 
 	/*recover fem models: */
@@ -120,4 +124,7 @@
 		}
 	}
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(ThermalAnalysisEnum));
+	results->AddObject(result);
 
 	/*free ressource*/
@@ -125,4 +132,8 @@
 	xfree((void**)&m_g);
 	xfree((void**)&time);
+	
+	//return: 
+	return results;
+
 
 }
Index: /issm/trunk/src/c/parallel/transient.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/transient.cpp	(revision 3887)
@@ -102,6 +102,4 @@
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 	
-	_printf_("initialize results:\n");
-	results=new DataSet(ResultsEnum);
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
@@ -112,11 +110,7 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		transient_core(results,model);
+		results=transient_core(model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 	
-		/*Add analysis_type to results: */
-		result=new Result(results->Size()+1,0,1,"analysis_type","transient");
-		results->AddObject(result);
-
 		_printf_("process results:\n");
 		ProcessResults(&processed_results,results,model,TransientAnalysisEnum);
Index: /issm/trunk/src/c/parallel/transient_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient_core.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/transient_core.cpp	(revision 3887)
@@ -10,9 +10,8 @@
 #include "../modules.h"
 
-void transient_core(DataSet* results,Model* model){
-
-	extern int my_rank;
+DataSet* transient_core(Model* model){
 
 	int dim=-1;
+	DataSet* results=NULL;
 
 	//first recover parameters common to all solutions
@@ -21,8 +20,8 @@
 	//branch out 
 	if(dim==2){
-		transient_core_2d(results,model);
+		results=transient_core_2d(model);
 	}
 	else if(dim==3){
-		transient_core_3d(results,model);
+		results=transient_core_3d(model);
 	}
 	else ISSMERROR("%s%i%s"," dimension ",dim," not supported yet!");
Index: /issm/trunk/src/c/parallel/transient_core_2d.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void transient_core_2d(DataSet* results,Model* model){
+DataSet* transient_core_2d(Model* model){
 
 	extern int my_rank;
@@ -23,4 +23,5 @@
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -58,4 +59,7 @@
 	int dof3[1]={3};
 
+	//initialize results
+	results=new DataSet(ResultsEnum);
+
 	/*recover fem models: */
 	fem_dh=model->GetFormulation(DiagnosticAnalysisEnum,HorizAnalysisEnum);
@@ -86,6 +90,5 @@
 		//Deal with velocities.
 		_printf_("%s\n","computing new velocity");
-		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model);
+		diagnostic_results= diagnostic_core(model);
 
 		//extract u_g and p_g from diagnostic_results, and erase diagnostic_results;
@@ -102,6 +105,5 @@
 		xfree((void**)&vx); xfree((void**)&vy);
 		
-		prognostic_results=new DataSet(ResultsEnum); 
-		prognostic_core(prognostic_results,model);
+		prognostic_results= prognostic_core(model);
 	
 		//extract h_g prognostic_results, and erase prognostic_results;
@@ -136,4 +138,8 @@
 	}
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(TransientAnalysisEnum));
+	results->AddObject(result);
+
 	/*Free ressources:*/
 	VecFree(&u_g);
@@ -144,3 +150,7 @@
 	xfree((void**)&vx);
 	xfree((void**)&vy);
+	
+	//return: 
+	return results;
+
 }
Index: /issm/trunk/src/c/parallel/transient_core_3d.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient_core_3d.cpp	(revision 3886)
+++ /issm/trunk/src/c/parallel/transient_core_3d.cpp	(revision 3887)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void transient_core_3d(DataSet* results,Model* model){
+DataSet* transient_core_3d(Model* model){
 
 	extern int my_rank;
@@ -25,4 +25,5 @@
 
 	/*output: */
+	DataSet* results=NULL;
 	Result* result=NULL;
 
@@ -63,4 +64,7 @@
 	int dof3[1]={3};
 
+	//initialize results
+	results=new DataSet(ResultsEnum);
+
 	/*recover fem models: */
 	fem_dh=model->GetFormulation(DiagnosticAnalysisEnum,HorizAnalysisEnum);
@@ -107,6 +111,5 @@
 
 		//Deal with velocities.
-		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model);
+		diagnostic_results=diagnostic_core(model);
 
 		//extract u_g and p_g from diagnostic_results, and erase diagnostic_results;
@@ -124,5 +127,5 @@
 		xfree((void**)&vx); xfree((void**)&vy); xfree((void**)&vz);
 	
-		prognostic_results=new DataSet(ResultsEnum); prognostic_core(prognostic_results,model);
+		prognostic_results=prognostic_core(model);
 	
 		//extract h_g prognostic_results, and erase prognostic_results;
@@ -186,4 +189,9 @@
 	}
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(TransientAnalysisEnum));
+	results->AddObject(result);
+
+
 	/*Free ressources:*/
 	VecFree(&u_g);
@@ -197,3 +205,7 @@
 	xfree((void**)&vy); 
 	xfree((void**)&vz);
+	
+	//return: 
+	return results;
+
 }
Index: /issm/trunk/src/mex/Gradj/Gradj.cpp
===================================================================
--- /issm/trunk/src/mex/Gradj/Gradj.cpp	(revision 3886)
+++ /issm/trunk/src/mex/Gradj/Gradj.cpp	(revision 3887)
@@ -17,5 +17,5 @@
 	DataSet* materials=NULL;
 	Parameters* parameters=NULL;
-	char*    control_type=NULL;
+	int      control_type;
 	int      analysis_type;
 	int      sub_analysis_type;
@@ -57,5 +57,4 @@
 	delete materials;
 	delete parameters;
-	xfree((void**)&control_type);
 	VecFree(&grad_g);
 
