1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
11 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
12 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
13 * Copyright (c) 2001-2004, The GROMACS development team,
14 * check out http://www.gromacs.org for more information.
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * If you want to redistribute modifications, please consider that
22 * scientific software is very special. Version control is crucial -
23 * bugs must be traceable. We will be happy to consider code for
24 * inclusion in the official distribution, but derived work must not
25 * be called official GROMACS. Details are found in the README & COPYING
26 * files - if they are missing, get the official version at www.gromacs.org.
28 * To help us fund GROMACS development, we humbly ask that you cite
29 * the papers on the package - you can find them in the top README file.
31 * For more info, check our website at http://www.gromacs.org
34 * GROningen Mixture of Alchemy and Childrens' Stories
47 #include "gmx_fatal.h"
57 #include "thread_mpi.h"
60 #include "gmxfio_int.h"
63 /*******************************************************************
65 * READ/WRITE FUNCTIONS
67 *******************************************************************/
69 gmx_bool
gmx_fio_reade_real(t_fileio
*fio
, real
*item
,
70 const char *desc
, const char *srcfile
, int line
)
74 ret
=fio
->iotp
->nread(fio
, item
, 1, eioREAL
, desc
, srcfile
, line
);
79 gmx_bool
gmx_fio_reade_float(t_fileio
*fio
, float *item
,
80 const char *desc
, const char *srcfile
, int line
)
84 ret
=fio
->iotp
->nread(fio
, item
, 1, eioFLOAT
, desc
, srcfile
, line
);
90 gmx_bool
gmx_fio_reade_double(t_fileio
*fio
, double *item
,
91 const char *desc
, const char *srcfile
, int line
)
95 ret
=fio
->iotp
->nread(fio
, item
, 1, eioDOUBLE
, desc
, srcfile
, line
);
100 gmx_bool
gmx_fio_reade_int(t_fileio
*fio
, int *item
,
101 const char *desc
, const char *srcfile
, int line
)
105 ret
=fio
->iotp
->nread(fio
, item
, 1, eioINT
, desc
, srcfile
, line
);
110 gmx_bool
gmx_fio_reade_gmx_large_int(t_fileio
*fio
, gmx_large_int_t
*item
,
111 const char *desc
, const char *srcfile
, int line
)
115 ret
=fio
->iotp
->nread(fio
, item
, 1, eioGMX_LARGE_INT
, desc
, srcfile
, line
);
120 gmx_bool
gmx_fio_reade_uchar(t_fileio
*fio
, unsigned char *item
,
121 const char *desc
, const char *srcfile
, int line
)
125 ret
=fio
->iotp
->nread(fio
, item
, 1, eioUCHAR
, desc
, srcfile
, line
);
131 gmx_bool
gmx_fio_reade_ushort(t_fileio
*fio
, unsigned short *item
,
132 const char *desc
, const char *srcfile
, int line
)
136 ret
=fio
->iotp
->nread(fio
, item
, 1, eioUSHORT
, desc
, srcfile
, line
);
141 gmx_bool
gmx_fio_reade_rvec(t_fileio
*fio
, rvec
*item
,
142 const char *desc
, const char *srcfile
, int line
)
146 ret
=fio
->iotp
->nread(fio
, item
, 1, eioRVEC
, desc
, srcfile
, line
);
151 gmx_bool
gmx_fio_reade_ivec(t_fileio
*fio
, ivec
*item
,
152 const char *desc
, const char *srcfile
, int line
)
156 ret
=fio
->iotp
->nread(fio
, item
, 1, eioIVEC
, desc
, srcfile
, line
);
161 gmx_bool
gmx_fio_reade_string(t_fileio
*fio
, char *item
,
162 const char *desc
, const char *srcfile
, int line
)
166 ret
=fio
->iotp
->nread(fio
, item
, 1, eioSTRING
, desc
, srcfile
, line
);
174 gmx_bool
gmx_fio_writee_real(t_fileio
*fio
, real item
,
175 const char *desc
, const char *srcfile
, int line
)
179 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioREAL
, desc
, srcfile
, line
);
184 gmx_bool
gmx_fio_writee_float(t_fileio
*fio
, float item
,
185 const char *desc
, const char *srcfile
, int line
)
189 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioFLOAT
, desc
, srcfile
, line
);
194 gmx_bool
gmx_fio_writee_double(t_fileio
*fio
, double item
,
195 const char *desc
, const char *srcfile
, int line
)
199 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioDOUBLE
, desc
, srcfile
, line
);
205 gmx_bool
gmx_fio_writee_int(t_fileio
*fio
, int item
,
206 const char *desc
, const char *srcfile
, int line
)
210 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioINT
, desc
, srcfile
, line
);
215 gmx_bool
gmx_fio_writee_gmx_large_int(t_fileio
*fio
, gmx_large_int_t item
,
216 const char *desc
, const char *srcfile
, int line
)
220 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioGMX_LARGE_INT
, desc
, srcfile
, line
);
225 gmx_bool
gmx_fio_writee_uchar(t_fileio
*fio
, unsigned char item
,
226 const char *desc
, const char *srcfile
, int line
)
230 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioUCHAR
, desc
, srcfile
, line
);
235 gmx_bool
gmx_fio_writee_ushort(t_fileio
*fio
, unsigned short item
,
236 const char *desc
, const char *srcfile
, int line
)
240 ret
=fio
->iotp
->nwrite(fio
, &item
, 1, eioUSHORT
, desc
, srcfile
, line
);
245 gmx_bool
gmx_fio_writee_rvec(t_fileio
*fio
, rvec
*item
,
246 const char *desc
, const char *srcfile
, int line
)
250 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioRVEC
, desc
, srcfile
, line
);
255 gmx_bool
gmx_fio_writee_ivec(t_fileio
*fio
, ivec
*item
,
256 const char *desc
, const char *srcfile
, int line
)
260 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioIVEC
, desc
, srcfile
, line
);
265 gmx_bool
gmx_fio_writee_string(t_fileio
*fio
, const char *item
,
266 const char *desc
, const char *srcfile
, int line
)
270 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioSTRING
, desc
, srcfile
, line
);
277 /* Read/write functions */
279 gmx_bool
gmx_fio_doe_real(t_fileio
*fio
, real
*item
,
280 const char *desc
, const char *srcfile
, int line
)
285 ret
=fio
->iotp
->nread(fio
, item
, 1, eioREAL
, desc
, srcfile
, line
);
287 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioREAL
, desc
, srcfile
, line
);
293 gmx_bool
gmx_fio_doe_float(t_fileio
*fio
, float *item
,
294 const char *desc
, const char *srcfile
, int line
)
299 ret
=fio
->iotp
->nread(fio
, item
, 1, eioFLOAT
, desc
, srcfile
, line
);
301 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioFLOAT
, desc
, srcfile
, line
);
306 gmx_bool
gmx_fio_doe_double(t_fileio
*fio
, double *item
,
307 const char *desc
, const char *srcfile
, int line
)
312 ret
=fio
->iotp
->nread(fio
, item
, 1, eioDOUBLE
, desc
, srcfile
, line
);
314 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioDOUBLE
, desc
, srcfile
, line
);
320 gmx_bool
gmx_fio_doe_gmx_bool(t_fileio
*fio
, gmx_bool
*item
,
321 const char *desc
, const char *srcfile
, int line
)
329 ret
=fio
->iotp
->nread(fio
, &itmp
, 1, eioINT
, desc
, srcfile
, line
);
335 ret
=fio
->iotp
->nwrite(fio
, &itmp
, 1, eioINT
, desc
, srcfile
, line
);
341 gmx_bool
gmx_fio_doe_int(t_fileio
*fio
, int *item
,
342 const char *desc
, const char *srcfile
, int line
)
347 ret
=fio
->iotp
->nread(fio
, item
, 1, eioINT
, desc
, srcfile
, line
);
349 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioINT
, desc
, srcfile
, line
);
354 gmx_bool
gmx_fio_doe_gmx_large_int(t_fileio
*fio
, gmx_large_int_t
*item
,
355 const char *desc
, const char *srcfile
, int line
)
360 ret
=fio
->iotp
->nread(fio
, item
, 1, eioGMX_LARGE_INT
, desc
, srcfile
, line
);
362 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioGMX_LARGE_INT
, desc
, srcfile
, line
);
367 gmx_bool
gmx_fio_doe_uchar(t_fileio
*fio
, unsigned char *item
,
368 const char *desc
, const char *srcfile
, int line
)
373 ret
=fio
->iotp
->nread(fio
, item
, 1, eioUCHAR
, desc
, srcfile
, line
);
375 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioUCHAR
, desc
, srcfile
, line
);
380 gmx_bool
gmx_fio_doe_ushort(t_fileio
*fio
, unsigned short *item
,
381 const char *desc
, const char *srcfile
, int line
)
386 ret
=fio
->iotp
->nread(fio
, item
, 1, eioUSHORT
, desc
, srcfile
, line
);
388 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioUSHORT
, desc
, srcfile
, line
);
393 gmx_bool
gmx_fio_doe_rvec(t_fileio
*fio
, rvec
*item
,
394 const char *desc
, const char *srcfile
, int line
)
399 ret
=fio
->iotp
->nread(fio
, item
, 1, eioRVEC
, desc
, srcfile
, line
);
401 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioRVEC
, desc
, srcfile
, line
);
406 gmx_bool
gmx_fio_doe_ivec(t_fileio
*fio
, ivec
*item
,
407 const char *desc
, const char *srcfile
, int line
)
412 ret
=fio
->iotp
->nread(fio
, item
, 1, eioIVEC
, desc
, srcfile
, line
);
414 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioIVEC
, desc
, srcfile
, line
);
419 gmx_bool
gmx_fio_doe_string(t_fileio
*fio
, char *item
,
420 const char *desc
, const char *srcfile
, int line
)
425 ret
=fio
->iotp
->nread(fio
, item
, 1, eioSTRING
, desc
, srcfile
, line
);
427 ret
=fio
->iotp
->nwrite(fio
, item
, 1, eioSTRING
, desc
, srcfile
, line
);
438 /* Array reading & writing */
440 gmx_bool
gmx_fio_nreade_real(t_fileio
*fio
, real
*item
, int n
,
441 const char *desc
, const char *srcfile
, int line
)
447 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioREAL
, desc
, srcfile
, line
);
452 gmx_bool
gmx_fio_nreade_float(t_fileio
*fio
, float *item
, int n
,
453 const char *desc
, const char *srcfile
, int line
)
459 ret
= ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioFLOAT
, desc
,
466 gmx_bool
gmx_fio_nreade_double(t_fileio
*fio
, double *item
, int n
,
467 const char *desc
, const char *srcfile
, int line
)
473 ret
= ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioDOUBLE
, desc
,
479 gmx_bool
gmx_fio_nreade_int(t_fileio
*fio
, int *item
, int n
,
480 const char *desc
, const char *srcfile
, int line
)
486 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioINT
, desc
, srcfile
, line
);
491 gmx_bool
gmx_fio_nreade_gmx_large_int(t_fileio
*fio
, gmx_large_int_t
*item
, int n
,
492 const char *desc
, const char *srcfile
, int line
)
498 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioGMX_LARGE_INT
, desc
,
505 gmx_bool
gmx_fio_nreade_uchar(t_fileio
*fio
, unsigned char *item
, int n
,
506 const char *desc
, const char *srcfile
, int line
)
510 ret
=fio
->iotp
->nread(fio
, item
, n
, eioNUCHAR
, desc
, srcfile
, line
);
515 gmx_bool
gmx_fio_nreade_ushort(t_fileio
*fio
, unsigned short *item
, int n
,
516 const char *desc
, const char *srcfile
, int line
)
522 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioUSHORT
, desc
,
528 gmx_bool
gmx_fio_nreade_rvec(t_fileio
*fio
, rvec
*item
, int n
,
529 const char *desc
, const char *srcfile
, int line
)
533 ret
=fio
->iotp
->nread(fio
, item
, n
, eioNRVEC
, desc
, srcfile
, line
);
538 gmx_bool
gmx_fio_nreade_ivec(t_fileio
*fio
, ivec
*item
, int n
,
539 const char *desc
, const char *srcfile
, int line
)
545 ret
=ret
&& fio
->iotp
->nread(fio
, item
[i
], 1, eioIVEC
, desc
, srcfile
, line
);
550 gmx_bool
gmx_fio_nreade_string(t_fileio
*fio
, char *item
[], int n
,
551 const char *desc
, const char *srcfile
, int line
)
557 ret
=ret
&& fio
->iotp
->nread(fio
, item
[i
], 1, eioSTRING
, desc
, srcfile
, line
);
567 gmx_bool
gmx_fio_nwritee_real(t_fileio
*fio
, const real
*item
, int n
,
568 const char *desc
, const char *srcfile
, int line
)
574 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioREAL
, desc
,
580 gmx_bool
gmx_fio_nwritee_float(t_fileio
*fio
, const float *item
, int n
,
581 const char *desc
, const char *srcfile
, int line
)
587 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioFLOAT
, desc
,
593 gmx_bool
gmx_fio_nwritee_double(t_fileio
*fio
, const double *item
, int n
,
594 const char *desc
, const char *srcfile
, int line
)
600 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioDOUBLE
, desc
,
606 gmx_bool
gmx_fio_nwritee_int(t_fileio
*fio
, const int *item
, int n
,
607 const char *desc
, const char *srcfile
, int line
)
613 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioINT
, desc
, srcfile
,
619 gmx_bool
gmx_fio_nwritee_gmx_large_int(t_fileio
*fio
,
620 const gmx_large_int_t
*item
, int n
,
621 const char *desc
, const char *srcfile
, int line
)
627 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioGMX_LARGE_INT
,
628 desc
, srcfile
, line
);
633 gmx_bool
gmx_fio_nwritee_uchar(t_fileio
*fio
, const unsigned char *item
, int n
,
634 const char *desc
, const char *srcfile
, int line
)
638 ret
=fio
->iotp
->nwrite(fio
, item
, n
, eioNUCHAR
, desc
, srcfile
, line
);
643 gmx_bool
gmx_fio_nwritee_ushort(t_fileio
*fio
, const unsigned short *item
, int n
,
644 const char *desc
, const char *srcfile
, int line
)
650 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioUSHORT
, desc
,
657 gmx_bool
gmx_fio_nwritee_rvec(t_fileio
*fio
, const rvec
*item
, int n
,
658 const char *desc
, const char *srcfile
, int line
)
662 ret
=fio
->iotp
->nwrite(fio
, item
, n
, eioNRVEC
, desc
, srcfile
, line
);
667 gmx_bool
gmx_fio_nwritee_ivec(t_fileio
*fio
, const ivec
*item
, int n
,
668 const char *desc
, const char *srcfile
, int line
)
674 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioIVEC
, desc
,
681 gmx_bool
gmx_fio_nwritee_string(t_fileio
*fio
, const char *item
[], int n
,
682 const char *desc
, const char *srcfile
, int line
)
688 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioSTRING
, desc
, srcfile
,
696 /* array read/write functions */
698 gmx_bool
gmx_fio_ndoe_real(t_fileio
*fio
, real
*item
, int n
,
699 const char *desc
, const char *srcfile
, int line
)
708 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioREAL
, desc
,
713 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioREAL
, desc
,
723 gmx_bool
gmx_fio_ndoe_float(t_fileio
*fio
, float *item
, int n
,
724 const char *desc
, const char *srcfile
, int line
)
733 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioFLOAT
, desc
,
738 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioFLOAT
, desc
,
748 gmx_bool
gmx_fio_ndoe_double(t_fileio
*fio
, double *item
, int n
,
749 const char *desc
, const char *srcfile
, int line
)
758 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioDOUBLE
, desc
,
763 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioDOUBLE
, desc
,
773 gmx_bool
gmx_fio_ndoe_gmx_bool(t_fileio
*fio
, gmx_bool
*item
, int n
,
774 const char *desc
, const char *srcfile
, int line
)
784 ret
=ret
&& fio
->iotp
->nread(fio
, &itmp
, 1, eioINT
, desc
,
791 ret
=ret
&& fio
->iotp
->nwrite(fio
, &itmp
, 1, eioINT
, desc
,
799 gmx_bool
gmx_fio_ndoe_int(t_fileio
*fio
, int *item
, int n
,
800 const char *desc
, const char *srcfile
, int line
)
809 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioINT
, desc
,
814 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioINT
, desc
,
824 gmx_bool
gmx_fio_ndoe_gmx_large_int(t_fileio
*fio
, gmx_large_int_t
*item
, int n
,
825 const char *desc
, const char *srcfile
, int line
)
834 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioGMX_LARGE_INT
, desc
,
839 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioGMX_LARGE_INT
, desc
,
849 gmx_bool
gmx_fio_ndoe_uchar(t_fileio
*fio
, unsigned char *item
, int n
,
850 const char *desc
, const char *srcfile
, int line
)
856 ret
=ret
&& fio
->iotp
->nread(fio
, item
, n
, eioNUCHAR
, desc
,
861 ret
=ret
&& fio
->iotp
->nwrite(fio
, item
, n
, eioNUCHAR
, desc
,
870 gmx_bool
gmx_fio_ndoe_ushort(t_fileio
*fio
, unsigned short *item
, int n
,
871 const char *desc
, const char *srcfile
, int line
)
880 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioUSHORT
, desc
,
885 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioUSHORT
, desc
,
895 gmx_bool
gmx_fio_ndoe_rvec(t_fileio
*fio
, rvec
*item
, int n
,
896 const char *desc
, const char *srcfile
, int line
)
902 ret
=ret
&& fio
->iotp
->nread(fio
, item
, n
, eioNRVEC
, desc
, srcfile
, line
);
906 ret
=ret
&& fio
->iotp
->nwrite(fio
, item
, n
, eioNRVEC
, desc
, srcfile
,
915 gmx_bool
gmx_fio_ndoe_ivec(t_fileio
*fio
, ivec
*item
, int n
,
916 const char *desc
, const char *srcfile
, int line
)
925 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioIVEC
, desc
,
930 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioIVEC
, desc
,
940 gmx_bool
gmx_fio_ndoe_string(t_fileio
*fio
, char *item
[], int n
,
941 const char *desc
, const char *srcfile
, int line
)
950 ret
=ret
&& fio
->iotp
->nread(fio
, &(item
[i
]), 1, eioSTRING
, desc
,
955 ret
=ret
&& fio
->iotp
->nwrite(fio
, &(item
[i
]), 1, eioSTRING
, desc
,