Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15558)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15559)
@@ -188,5 +188,5 @@
 
 	/*Open input file on cpu 0: */
-	if(my_rank==0) IOMODEL = pfopen(inputfilename ,"rb");
+	if(my_rank==0) IOMODEL = pfopen0(inputfilename ,"rb");
 
 	/*Initialize internal data: */
@@ -1465,8 +1465,11 @@
 	/*Get response*/
 	J=0;
+	//_printf_(true,"list of misfits: ");
 	for(int i=0;i<num_responses;i++){
 		this->Responsex(&Jplus,EnumToStringx(responses[i]),i);
+		//_printf_(true," %12.7g ",Jplus);
 		J+=Jplus;
 	}
+	//_printf_(true," \n");
 
 	/*Assign output pointers: */
Index: /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 15558)
+++ /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 15559)
@@ -61,5 +61,5 @@
 		if(io_gather){
 			/*Just open the file for output on cpu 0. We are gathering the data on cpu 0 from all other cpus: */
-			if(my_rank==0) fid=pfopen(outputfilename ,"wb");
+			if(my_rank==0) fid=pfopen0(outputfilename ,"wb");
 		}
 		else{
Index: /issm/trunk-jpl/src/c/shared/io/Disk/diskio.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Disk/diskio.h	(revision 15558)
+++ /issm/trunk-jpl/src/c/shared/io/Disk/diskio.h	(revision 15559)
@@ -9,4 +9,5 @@
 
 FILE* pfopen(char* filename,const char* format);
+FILE* pfopen0(char* filename,const char* format);
 void  pfclose(FILE* fid,char* filename);
 void WriteLockFile(char* filename);
Index: /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15558)
+++ /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15559)
@@ -4,5 +4,5 @@
 
 #ifdef HAVE_CONFIG_H
-	#include <config.h>
+#include <config.h>
 #else
 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
@@ -10,13 +10,38 @@
 
 #include <stdio.h>
-#include "../../shared.h"
+#include "../Print/Print.h"
+#include "../Comm/Comm.h"
+#include "../../Exceptions/exceptions.h"
 
+FILE* pfopen0(char* filename,const char* format){
+
+	FILE* fid=NULL;
+
+	/*recover my_rank:*/
+	int my_rank  = IssmComm::GetRank();
+	if(my_rank) _error_("This function should only be called by cpu 0");
+
+	/*Open handle to data on disk*/
+	fid = fopen(filename,format);
+	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing");
+
+	return fid;
+}
 FILE* pfopen(char* filename,const char* format){
 
 	FILE* fid=NULL;
 
-	/*Open handle to data on disk: */
-	fid=fopen(filename,format);
-	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing"); 
+	/*recover my_rank:*/
+	int my_rank  = IssmComm::GetRank();
+	int num_proc = IssmComm::GetSize();
+
+	/*Open handle to data on disk (one by one to avoid errors)*/
+	for(int i=0;i<num_proc;i++){
+		if(my_rank==i) fid = fopen(filename,format);
+#ifdef _HAVE_MPI_
+		MPI_Barrier(IssmComm::GetComm());
+#endif
+	}
+	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing");
 
 	return fid;
