Index: /issm/trunk/src/c/parallel/OutputThermal.cpp
===================================================================
--- /issm/trunk/src/c/parallel/OutputThermal.cpp	(revision 560)
+++ /issm/trunk/src/c/parallel/OutputThermal.cpp	(revision 561)
@@ -30,7 +30,6 @@
 	double* serial_partition=NULL;
 
-	double* serial_tg=NULL;
-	int     t_g_size;
-	double* serial_mg=NULL;
+	double** serial_tg=NULL;
+	double** serial_mg=NULL;
 
 	double ndt,dt;
@@ -59,4 +58,5 @@
 	VecGetSize(partition,&nods);
 
+
 	if(sub_analysis_type==SteadyAnalysisEnum()){
 		nsteps=0;
@@ -66,6 +66,17 @@
 	}
 
+	/*allocate t_g and m_g arrays: */
+	serial_tg=(double**)xmalloc((nsteps+1)*sizeof(double*));
+	serial_mg=(double**)xmalloc((nsteps+1)*sizeof(double*));
+
+	/*get tg_i*/
+	for(i=0;i<=nsteps;i++){
+		VecToMPISerial(&serial_tg[i],t_g[i]);
+		VecToMPISerial(&serial_mg[i],m_g[i]);
+	}
+	
 	/* Open output file to write raw binary data: */
 	if(my_rank==0){
+
 		fid=pfopen(filename,"wb");
 
@@ -81,12 +92,6 @@
 		/*Write solutions to disk: */
 		for(i=0;i<=nsteps;i++){
-	
-			xfree((void**)&serial_tg);
-			xfree((void**)&serial_mg);
-			VecToMPISerial(&serial_tg,t_g[i]);
-			VecToMPISerial(&serial_mg,m_g[i]);
-
-			WriteDataToDisk(serial_tg,&nods,&one,"Mat",fid);
-			WriteDataToDisk(serial_mg,&nods,&one,"Mat",fid);
+			WriteDataToDisk(serial_tg[i],&nods,&one,"Mat",fid);
+			WriteDataToDisk(serial_mg[i],&nods,&one,"Mat",fid);
 		}
 	
Index: /issm/trunk/src/c/parallel/thermal.cpp
===================================================================
--- /issm/trunk/src/c/parallel/thermal.cpp	(revision 560)
+++ /issm/trunk/src/c/parallel/thermal.cpp	(revision 561)
@@ -149,4 +149,5 @@
 	_printf_("write lock file:\n");
 	femmodels[0].parameters->FindParam((void*)&waitonlock,"waitonlock");
+
 	if (waitonlock){
 		WriteLockFile(lockname);
