Index: /issm/trunk/src/c/objects/Result.cpp
===================================================================
--- /issm/trunk/src/c/objects/Result.cpp	(revision 1270)
+++ /issm/trunk/src/c/objects/Result.cpp	(revision 1271)
@@ -37,4 +37,5 @@
 		VecDuplicatePatch(&field,result.field);
 		dfield=NULL;
+		cfield=NULL;
 	}
 	if(result.dfield){
@@ -42,4 +43,11 @@
 		memcpy(dfield,result.dfield,result.size*sizeof(double));
 		field=NULL;
+		cfield=NULL;
+	}
+	if(result.cfield){
+		cfield=(char*)xmalloc((strlen(result.cfield)+1)*sizeof(char));
+		strcpy(cfield,result.cfield);
+		field=NULL;
+		dfield=NULL;
 	}
 }
@@ -63,4 +71,5 @@
 	field=result_field; //do not copy, as the results are large in memory size.
 	dfield=NULL;
+	cfield=NULL;
 }
 
@@ -84,6 +93,28 @@
 	size=result_size;
 	field=NULL;
-}
-
+	cfield=NULL;
+}
+
+#undef __FUNCT__ 
+#define __FUNCT__ "Result::Result"
+Result::Result(int result_id,double result_time,int result_step,char* result_fieldname,char* result_field){
+
+	id=result_id;
+	time=result_time;
+	step=result_step;
+	
+	if(!result_fieldname){
+		throw  ErrorException(__FUNCT__," NULL fieldname in constructor argument");
+	}
+	else{
+		fieldname=(char*)xmalloc((strlen(result_fieldname)+1)*sizeof(char));
+		strcpy(fieldname,result_fieldname);
+	}
+	cfield=(char*)xmalloc((strlen(result_field)+1)*sizeof(char));
+	strcpy(cfield,result_field);
+
+	field=NULL;
+	dfield=NULL;
+}
 
 Result::~Result(){
@@ -91,4 +122,5 @@
 	VecFree(&field);
 	xfree((void**)&dfield);
+	xfree((void**)&cfield);
 }
 		
@@ -103,7 +135,11 @@
 		printf("   field pointer %p\n",field);
 	}
-	else{
+	if(dfield){
 		printf("   field pointer %p\n",dfield);
 		printf("   field size %i\n",size);
+	}
+	if(cfield){
+		printf("   field pointer %p\n",cfield);
+		printf("   field string %s\n",cfield);
 	}
 }
@@ -119,9 +155,14 @@
 		printf("   field pointer %p\n",field);
 	}
-	else{
+	if(dfield){
 		printf("   field pointer %p\n",dfield);
 		printf("   field size %i\n",size);
 	}
+	if(cfield){
+		printf("   field pointer %p\n",cfield);
+		printf("   field string %s\n",cfield);
+	}
 }	
+
 #undef __FUNCT__ 
 #define __FUNCT__ "Result::Marshall"
@@ -179,4 +220,5 @@
 
 	int length;
+	int type;
 
 	/*First write field name :*/
@@ -190,6 +232,17 @@
 
 	/*Now write field: */
-	fwrite(&size,sizeof(int),1,fid);
-	fwrite(dfield,size*sizeof(double),1,fid);
+	if(dfield){
+		type=1;
+		fwrite(&type,sizeof(int),1,fid);
+		fwrite(&size,sizeof(int),1,fid);
+		fwrite(dfield,size*sizeof(double),1,fid);
+	}
+	if(cfield){
+		type=2;
+		fwrite(&type,sizeof(int),1,fid);
+		length=(strlen(cfield)+1)*sizeof(char);
+		fwrite(&length,sizeof(int),1,fid);
+		fwrite(cfield,length,1,fid);
+	}
 }
 
@@ -200,5 +253,15 @@
 
 }
-		
+
+void  Result::GetField(char** pcfield){
+
+	char* string=NULL;
+
+	string=(char*)xmalloc((strlen(cfield)+1)*sizeof(char));
+	strcpy(string,cfield);
+
+	*pcfield=string;
+}
+
 void  Result::GetField(double** pfield){
 	*pfield=(double*)xmalloc(size*sizeof(double));
Index: /issm/trunk/src/c/objects/Result.h
===================================================================
--- /issm/trunk/src/c/objects/Result.h	(revision 1270)
+++ /issm/trunk/src/c/objects/Result.h	(revision 1271)
@@ -19,4 +19,5 @@
 		Vec    field;
 		double* dfield;
+		char*   cfield;
 		int     size;
 
@@ -27,4 +28,5 @@
 		Result(int result_id,double result_time,int result_step,char* result_fieldname,Vec result_field);
 		Result(int result_id,double result_time,int result_step,char* result_fieldname,double* result_field,int result_size);
+		Result(int result_id,double result_time,int result_step,char* result_fieldname,char* result_field);
 		~Result();
 
@@ -43,4 +45,5 @@
 		void  GetField(Vec* pfield);
 		void  GetField(double** pfield);
+		void  GetField(char** pcfield);
 		int    GetStep();
 		void   WriteData(FILE* fid);
Index: /issm/trunk/src/c/parallel/control.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control.cpp	(revision 1270)
+++ /issm/trunk/src/c/parallel/control.cpp	(revision 1271)
@@ -24,4 +24,5 @@
 	int   numberofnodes;
 	int   qmu_analysis=0;
+	char* control_type=NULL;
 
 	/*Fem models : */
@@ -30,4 +31,5 @@
 	/*Results: */
 	DataSet* results=NULL;
+	Result*  result=NULL;
 
 	ParameterInputs* inputs=NULL;
@@ -117,4 +119,12 @@
 	}
 
+	/*Add analysis_type and control_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","control");
+	results->AddObject(result);
+	
+	femmodels[0].parameters->FindParam((void*)&control_type,"control_type");
+	result=new Result(results->Size()+1,0,1,"control_type",control_type);
+	results->AddObject(result);
+
 	_printf_("process results:\n");
 	ProcessResults(&results,&femmodels[0],ControlAnalysisEnum());
Index: /issm/trunk/src/c/parallel/diagnostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 1270)
+++ /issm/trunk/src/c/parallel/diagnostic.cpp	(revision 1271)
@@ -31,4 +31,5 @@
 	/*Results: */
 	DataSet* results=NULL;
+	Result* result=NULL;
 	
 	ParameterInputs* inputs=NULL;
@@ -105,4 +106,8 @@
 	}
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","diagnostic");
+	results->AddObject(result);
+
 	_printf_("process results:\n");
 	ProcessResults(&results,&femmodels[0],DiagnosticAnalysisEnum());
Index: /issm/trunk/src/c/parallel/prognostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic.cpp	(revision 1270)
+++ /issm/trunk/src/c/parallel/prognostic.cpp	(revision 1271)
@@ -39,4 +39,5 @@
 	/*Results: */
 	DataSet* results=NULL;
+	Result*  result=NULL;
 
 	ParameterInputs* inputs=NULL;
@@ -106,4 +107,8 @@
 	}
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","prognostic");
+	results->AddObject(result);
+	
 	_printf_("process results:\n");
 	ProcessResults(&results,&fem,PrognosticAnalysisEnum());
Index: /issm/trunk/src/c/parallel/thermal.cpp
===================================================================
--- /issm/trunk/src/c/parallel/thermal.cpp	(revision 1270)
+++ /issm/trunk/src/c/parallel/thermal.cpp	(revision 1271)
@@ -36,4 +36,5 @@
 	/*Results: */
 	DataSet* results=NULL;
+	Result*  result=NULL;
 	
 	ParameterInputs* inputs=NULL;
@@ -113,5 +114,9 @@
 		#endif
 	}
-	
+
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","thermal");
+	results->AddObject(result);
+		
 	_printf_("process results:\n");
 	ProcessResults(&results,&femmodels[0],ThermalAnalysisEnum());
Index: /issm/trunk/src/c/parallel/transient.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient.cpp	(revision 1270)
+++ /issm/trunk/src/c/parallel/transient.cpp	(revision 1271)
@@ -32,4 +32,5 @@
 	/*Results: */
 	DataSet* results=NULL;
+	Result*  result=NULL;
 	
 	ParameterInputs* inputs=NULL;
@@ -124,4 +125,8 @@
 	}
 
+	/*Add analysis_type to results: */
+	result=new Result(results->Size()+1,0,1,"analysis_type","transient");
+	results->AddObject(result);
+
 	_printf_("process results:\n");
 	ProcessResults(&results,&femmodels[0],TransientAnalysisEnum());
Index: /issm/trunk/src/m/classes/public/ReadData.m
===================================================================
--- /issm/trunk/src/m/classes/public/ReadData.m	(revision 1270)
+++ /issm/trunk/src/m/classes/public/ReadData.m	(revision 1271)
@@ -17,6 +17,13 @@
 	time=fread(fid,1,'double');
 	step=fread(fid,1,'int');
+
+	type=fread(fid,1,'int');
 	ssize=fread(fid,1,'int');
-	field=fread(fid,ssize,'double');
+	if type==1,
+		field=fread(fid,ssize,'double');
+	else
+		field=fread(fid,ssize,'char');
+		field=char(field(1:end-1)');
+	end
 
 	result.fieldname=fieldname;
Index: /issm/trunk/src/m/classes/public/loadresultsfromdisk.m
===================================================================
--- /issm/trunk/src/m/classes/public/loadresultsfromdisk.m	(revision 1270)
+++ /issm/trunk/src/m/classes/public/loadresultsfromdisk.m	(revision 1271)
@@ -15,5 +15,7 @@
 	md.results=struct();
 end
-eval(['md.results.' md.analysis_type '=parseresultsfromdisk(filename);']);
+
+structure=parseresultsfromdisk(filename);
+eval(['md.results.' structure.analysis_type '=structure;']);
 
 %Check result is consistent, only if it exists
Index: /issm/trunk/src/m/classes/public/parseresultsfromdisk.m
===================================================================
--- /issm/trunk/src/m/classes/public/parseresultsfromdisk.m	(revision 1270)
+++ /issm/trunk/src/m/classes/public/parseresultsfromdisk.m	(revision 1271)
@@ -10,5 +10,4 @@
 	error(['loadresultsfromdisk error message: could not open ',filename,' for binary reading']);
 end
-
 results=struct();
 
Index: /issm/trunk/src/m/solutions/cielo/diagnostic.m
===================================================================
--- /issm/trunk/src/m/solutions/cielo/diagnostic.m	(revision 1270)
+++ /issm/trunk/src/m/solutions/cielo/diagnostic.m	(revision 1271)
@@ -37,5 +37,5 @@
 	if ~models.dh.parameters.qmu_analysis,
 		%launch core of diagnostic solution.
-		results=diagnostic_core(models,inputs);
+		results=diagnostic_core(models,inputs)
 	
 		%process results
