Hi Justin,

On Mon, Oct 29, 2007 at 01:11:54PM +0100, Justin Schmitz wrote:
> Hello All!
> 
> I have a problem with the output there from CCP4 into the log files on a 
> dual-Core Intel Mac with Os X Server 10.4 and CCP4 6.0.1.
> 
> 
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM13   Ano   0.147 -0.001  0.723    2.055 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM14   Ano   0.347  0.519  0.895    0.939 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM15   Ano   0.232  0.498  0.965    0.546 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM16   Ano   0.031  0.124  0.022   -2.575  MLPHARE:  Normal termination
> Times: User:      84.9s System:    0.3s Elapsed:     1:27 
> </pre>
> </html>
> <!--SUMMARY_END--></FONT></B>
> BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM17   Ano   0.027 -0.001  0.859    2.450 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM18   Ano   0.102 -0.002  0.870    3.247 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM19   Ano   0.025  0.107  0.024    5.815 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> ATOM20   Ano   0.024  0.072  0.069    5.565 BFAC   20.000
> ATREF X ALL Y ALL Z ALL OCC ALL AOCC ALL B ALL
> 
> 
> 
> Many Programs do this e.g. refmac. The Termination message is passed to 
> the log file before all other data is in it. This  breaks of ploting or 
> in case of mlphare of the whole process.
> 
> Does anybody know how to handle this? Is it related to the OS or to CCP4?

I have seen a similar problem with scaleit using a gfortran compiler
on a recent snapshot of the ccp4 tarball.

This was on an Intel T7500 equipped box running Fedora 8 (rawhide)
with these versions:  gfortran-4.1.2 and glibc-2.7-2.

If you are compiling with gfortran you can give the attached patch a try:

cd $CCP4
patch -p0 < yt-fixup-ccperr-flushing-buglet.patch
make


With best wishes,

ClAuS
diff -ru lib/src/ccp4_general_f.c~ lib/src/ccp4_general_f.c
--- lib/src/ccp4_general_f.c~   2005-09-08 17:27:26.000000000 +0100
+++ lib/src/ccp4_general_f.c    2007-10-29 13:06:50.000000000 +0000
@@ -198,6 +198,12 @@
   strncpy(tmp_errstr,errstr,length);
   tmp_errstr[length]='\0';
 
+  /* work around a buglet: gfortran-4.1.2 glibc-2.7-2 (2.6.23.1-37.fc8 x86_64 
SMP)
+     Flush stdout using a Fortran call before printing further. C. Flensburg 
20071029. */
+#ifdef GFORTRAN
+  FORTRAN_CALL (CCP4_FFLUSH_STDOUT, ccp4_fflush_stdout, (), (), ());
+#endif
+
   if (abs(*istat) <= 2)
     FORTRAN_CALL (CCP4H_SUMMARY_BEG, ccp4h_summary_beg, (), (), ());
 
diff -ru lib/src/unix.m4~ lib/src/unix.m4
--- lib/src/unix.m4~    2007-05-30 16:53:19.000000000 +0100
+++ lib/src/unix.m4     2007-10-29 13:08:34.000000000 +0000
@@ -123,6 +123,7 @@
 C     options
 C UGTARG - Get command-line argument
 C hciftime - Time in cif format
+C ccp4_fflush_stdout - Flush buffers to stdout
 C
 C Functions:
 C
@@ -934,3 +935,12 @@
 
 C
 
+      subroutine ccp4_fflush_stdout()
+dnl   work around a buglet: : gfortran-4.1.2 glibc-2.7-2
+dnl   (2.6.23.1-37.fc8 x86_64 SMP) C. Flensburg 20071029.
+      implicit none
+ifelse(_gfort,1,
+[      call flush(6)
+],dnl (else)
+[      continue])
+      end

Reply via email to