3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2004, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
33 * GROningen Mixture of Alchemy and Childrens' Stories
41 #include "gmx_fatal.h"
44 int xdr_real(XDR *xdrs, real *r)
51 ret = xdr_float(xdrs, &f);
56 return xdr_float(xdrs, (float *)r);
60 int xdr3drcoord(XDR *xdrs, real *fp, int *size, real *precision)
70 gmx_fatal(FARGS, "Don't know what to malloc for ffp, isize = %d", isize);
75 for (i = 0; (i < isize); i++)
80 ret = xdr3dfcoord(xdrs, ffp, size, &fprec);
83 for (i = 0; (i < isize); i++)
91 return xdr3dfcoord(xdrs, (float *)fp, size, (float *)precision);
95 int xdr_gmx_large_int(XDR *xdrs, gmx_large_int_t *i)
97 /* This routine stores values compatible with xdr_int64_t */
102 #if ((defined SIZEOF_GMX_LARGE_INT) && SIZEOF_GMX_LARGE_INT == 8)
103 static const gmx_large_int_t two_p32_m1 = 0xFFFFFFFF;
104 gmx_large_int_t imaj64, imin64;
106 imaj64 = ((*i)>>32) & two_p32_m1;
107 imin64 = (*i) & two_p32_m1;
111 /* Our code has 4 bytes, but we should make sure that this value
112 * will be correctly read by 8 byte code.
124 ret = xdr_int(xdrs, &imaj);
125 ret = xdr_int(xdrs, &imin);
127 #if ((defined SIZEOF_GMX_LARGE_INT) && SIZEOF_GMX_LARGE_INT == 8)
128 *i = (((gmx_large_int_t)imaj << 32) | ((gmx_large_int_t)imin & two_p32_m1));
132 if (warn != NULL && (imaj < -1 || imaj > 0))
134 fprintf(stderr, "\nWARNING during %s:\n", warn);
135 fprintf(stderr, "a step value written by code supporting 64bit integers is read by code that only supports 32bit integers, out of range step value has been converted to %d\n\n", *i);