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)
286 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
290 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
297 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
298 const char *desc, const char *srcfile, int line)
304 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
308 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
314 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
315 const char *desc, const char *srcfile, int line)
321 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
325 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
332 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
333 const char *desc, const char *srcfile, int line)
341 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
347 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
353 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
354 const char *desc, const char *srcfile, int line)
360 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
364 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
370 gmx_bool gmx_fio_doe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
371 const char *desc, const char *srcfile, int line)
377 ret = fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
381 ret = fio->iotp->nwrite(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
387 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
388 const char *desc, const char *srcfile, int line)
394 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
398 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
404 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
405 const char *desc, const char *srcfile, int line)
411 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
415 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
421 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
422 const char *desc, const char *srcfile, int line)
428 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
432 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
438 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
439 const char *desc, const char *srcfile, int line)
445 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
449 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
455 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
456 const char *desc, const char *srcfile, int line)
462 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
466 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
478 /* Array reading & writing */
480 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
481 const char *desc, const char *srcfile, int line)
486 for (i = 0; i < n; i++)
488 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
494 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
495 const char *desc, const char *srcfile, int line)
500 for (i = 0; i < n; i++)
502 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
510 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
511 const char *desc, const char *srcfile, int line)
516 for (i = 0; i < n; i++)
518 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
525 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
526 const char *desc, const char *srcfile, int line)
531 for (i = 0; i < n; i++)
533 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
539 gmx_bool gmx_fio_nreade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
540 const char *desc, const char *srcfile, int line)
545 for (i = 0; i < n; i++)
547 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
555 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
556 const char *desc, const char *srcfile, int line)
560 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
565 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
566 const char *desc, const char *srcfile, int line)
571 for (i = 0; i < n; i++)
573 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
580 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
581 const char *desc, const char *srcfile, int line)
585 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
590 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
591 const char *desc, const char *srcfile, int line)
596 for (i = 0; i < n; i++)
598 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
604 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
605 const char *desc, const char *srcfile, int line)
610 for (i = 0; i < n; i++)
612 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
623 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
624 const char *desc, const char *srcfile, int line)
629 for (i = 0; i < n; i++)
631 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
638 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
639 const char *desc, const char *srcfile, int line)
644 for (i = 0; i < n; i++)
646 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
653 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
654 const char *desc, const char *srcfile, int line)
659 for (i = 0; i < n; i++)
661 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
668 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
669 const char *desc, const char *srcfile, int line)
674 for (i = 0; i < n; i++)
676 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
683 gmx_bool gmx_fio_nwritee_gmx_large_int(t_fileio *fio,
684 const gmx_large_int_t *item, int n,
685 const char *desc, const char *srcfile, int line)
690 for (i = 0; i < n; i++)
692 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT,
693 desc, srcfile, line);
699 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
700 const char *desc, const char *srcfile, int line)
704 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
709 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
710 const char *desc, const char *srcfile, int line)
715 for (i = 0; i < n; i++)
717 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
725 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
726 const char *desc, const char *srcfile, int line)
730 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
735 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
736 const char *desc, const char *srcfile, int line)
741 for (i = 0; i < n; i++)
743 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
751 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
752 const char *desc, const char *srcfile, int line)
757 for (i = 0; i < n; i++)
759 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
768 /* array read/write functions */
770 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
771 const char *desc, const char *srcfile, int line)
776 for (i = 0; i < n; i++)
780 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
785 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
795 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
796 const char *desc, const char *srcfile, int line)
801 for (i = 0; i < n; i++)
805 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
810 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
820 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
821 const char *desc, const char *srcfile, int line)
826 for (i = 0; i < n; i++)
830 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
835 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
845 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
846 const char *desc, const char *srcfile, int line)
852 for (i = 0; i < n; i++)
856 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
863 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
871 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
872 const char *desc, const char *srcfile, int line)
877 for (i = 0; i < n; i++)
881 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
886 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
896 gmx_bool gmx_fio_ndoe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
897 const char *desc, const char *srcfile, int line)
902 for (i = 0; i < n; i++)
906 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
911 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
921 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
922 const char *desc, const char *srcfile, int line)
928 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
933 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
942 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
943 const char *desc, const char *srcfile, int line)
948 for (i = 0; i < n; i++)
952 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
957 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
967 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
968 const char *desc, const char *srcfile, int line)
974 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
978 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
987 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
988 const char *desc, const char *srcfile, int line)
993 for (i = 0; i < n; i++)
997 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
1002 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1006 gmx_fio_unlock(fio);
1012 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1013 const char *desc, const char *srcfile, int line)
1015 gmx_bool ret = TRUE;
1018 for (i = 0; i < n; i++)
1022 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1027 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1031 gmx_fio_unlock(fio);