[gmx-users] compiling gromacs on powerpc64

Martin Siegert siegert at sfu.ca
Fri Aug 5 19:01:55 CEST 2005

On Thu, Aug 04, 2005 at 11:25:17PM +0200, David wrote:
> On Thu, 2005-08-04 at 12:29 -0700, Martin Siegert wrote:

> > Do you know which piece of the code actually writes these variables at the
> > beginning of topol.tpr?
> > 
> > write_tpx_state calls either write_xml or do_tpx. I quickly get lost in the
> > write_xml code. do_tpx calls do_string(GromacsVersion()); and then
> > do_int(precision); thus the problem ought to be visible already within
> > these two routines.
> > do_string is equivalent to
> > do_write((void *)(item),1,eioSTRING,(#item),__FILE__,__LINE__))
> > The actual routine seems to be determined in fio_select(int fio)
> > where it is set to (and here I get lost) do_xdr or do_binwrite.
> > If this actually is do_binwrite then this would first write an integer
> > namely the size of the string, in this case 14 = 0E. In this correct??
> It is actually do_xdr for a tpr file. In tpxio.c, 1098 after writing out
> the version string it writes out an integer which is either 4 or 8 and
> which holds the precision. It could be a problem in the xdr libraries on
> the IBM. I assume that all compilers use the same libraries. The crux
> with using these libraries is that the data should be system-indepedent
> (and usually is)... Talk to your IBM support people.

Thanks! That nails it: xdr_int is not working in 64 bit mode.

    i = atoi(argv[1]);
    fn = (char *) malloc(strlen(OUTFILE) + 1);
    strncpy(fn, OUTFILE, strlen(OUTFILE));
    fp = fopen(fn, "wb+");
    xdr = (XDR *) malloc((size_t)sizeof(XDR));
    xdrstdio_create(xdr, fp, XDR_ENCODE);

    if (xdr_int(xdr, &i) <= 0) {
       fprintf(stderr, "error: failed to write integer %i to file %s\n",
                       i, fn);


Regardless of the value entered the output file always contains 0.
This appears to be a bug in glibc ...
I notified IBM.

Thanks for your patience!


More information about the gromacs.org_gmx-users mailing list