Index: /issm/trunk/src/c/parallel/OutputControl.cpp
===================================================================
--- /issm/trunk/src/c/parallel/OutputControl.cpp	(revision 84)
+++ /issm/trunk/src/c/parallel/OutputControl.cpp	(revision 85)
@@ -1,3 +1,2 @@
-
 /*
 	OutputControl.c: output model results for control solution.
@@ -10,5 +9,5 @@
 #include "../io/io.h"
 #include "../objects/objects.h"
-
+			
 void OutputControl(Vec u_g,double* p_g, double* J, int nsteps, Vec partition,char* filename,NodeSets* nodesets){
 
@@ -20,15 +19,18 @@
 
 	/* standard output: */
+	Vec     partition_shifted=NULL;
 	double* serial_partition=NULL;
 
-	double* serial_u_g=NULL;
+	double* serial_ug=NULL;
 	int     one=1;
 	int     gsize;
 
 	/*serialize outputs: */
-	VecShift(partition,1.0); //matlab indexing
-	VecToMPISerial(&serial_partition,partition);
-
-	VecToMPISerial(&serial_u_g,u_g);
+	VecDuplicate(partition,&partition_shifted);
+	VecCopy(partition,partition_shifted);
+	VecShift(partition_shifted,1.0); //matlab indexing starts at 1
+	VecToMPISerial(&serial_partition,partition_shifted);
+	
+	VecToMPISerial(&serial_ug,u_g);
 
 	/* Open output file to write raw binary data: */
@@ -46,7 +48,7 @@
 		/*Write partition: */
 		WriteDataToDisk(serial_partition,&gsize,&one,"Mat",fid);
-		
+	
 		/*Write solution to disk: */
-		WriteDataToDisk(serial_u_g,&gsize,&one,"Mat",fid);
+		WriteDataToDisk(serial_ug,&gsize,&one,"Mat",fid);
 
 		/*Write parameter to disk: */
@@ -56,8 +58,12 @@
 		WriteDataToDisk(&nsteps,NULL,NULL,"Integer",fid);
 		WriteDataToDisk(J,&nsteps,&one,"Mat",fid);
-	
+
 		/*Close file: */
 		if(fclose(fid)!=0)throw ErrorException(__FUNCT__,exprintf("%s%s","could not close file ",filename));
 	}
 
+	VecFree(&partition_shifted);
+	xfree((void**)&serial_partition);
+	xfree((void**)&serial_ug);
+
 }	
Index: /issm/trunk/src/c/parallel/OutputDiagnostic.cpp
===================================================================
--- /issm/trunk/src/c/parallel/OutputDiagnostic.cpp	(revision 84)
+++ /issm/trunk/src/c/parallel/OutputDiagnostic.cpp	(revision 85)
@@ -20,16 +20,19 @@
 
 	/* standard output: */
+	Vec partition_shifted=NULL;
 	double* serial_partition=NULL;
 	int    analysis_size;
 
-	double* serial_u_g=NULL;
+	double* serial_ug=NULL;
 	int     one=1;
 	int     gsize;
 
 	/*serialize outputs: */
-	VecShift(partition,1.0); //matlab indexing
-	VecToMPISerial(&serial_partition,partition);
+	VecDuplicate(partition,&partition_shifted);
+	VecCopy(partition,partition_shifted);
+	VecShift(partition_shifted,1.0); //matlab indexing starts at 1
+	VecToMPISerial(&serial_partition,partition_shifted);
 
-	VecToMPISerial(&serial_u_g,u_g);
+	VecToMPISerial(&serial_ug,u_g);
 
 	/* Open output file to write raw binary data: */
@@ -49,5 +52,5 @@
 		
 		/*Write solution to disk: */
-		WriteDataToDisk(serial_u_g,&gsize,&one,"Mat",fid);
+		WriteDataToDisk(serial_ug,&gsize,&one,"Mat",fid);
 	
 		/*Close file: */
@@ -55,3 +58,7 @@
 	}
 
+	/*Free ressources: */
+	VecFree(&partition_shifted);
+	xfree((void**)&serial_partition);
+	xfree((void**)&serial_ug);
 }	
