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,