2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team,
6 * Copyright (c) 2013, by the GROMACS development team, led by
7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8 * and including many others, as listed in the AUTHORS file in the
9 * top-level source directory and at http://www.gromacs.org.
11 * GROMACS is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
16 * GROMACS is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with GROMACS; if not, see
23 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * If you want to redistribute modifications to GROMACS, please
27 * consider that scientific software is very special. Version
28 * control is crucial - bugs must be traceable. We will be happy to
29 * consider code for inclusion in the official distribution, but
30 * derived work must not be called official GROMACS. Details are found
31 * in the README & COPYING files - if they are missing, get the
32 * official version at http://www.gromacs.org.
34 * To help us fund GROMACS development, we humbly ask that you cite
35 * the research papers on the package. Check out http://www.gromacs.org.
48 #include "gmx_fatal.h"
58 #include "thread_mpi.h"
61 #include "gmxfio_int.h"
64 /*******************************************************************
66 * READ/WRITE FUNCTIONS
68 *******************************************************************/
70 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
71 const char *desc, const char *srcfile, int line)
75 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
80 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
81 const char *desc, const char *srcfile, int line)
85 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
91 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
92 const char *desc, const char *srcfile, int line)
96 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
101 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
102 const char *desc, const char *srcfile, int line)
106 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
111 gmx_bool gmx_fio_reade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
112 const char *desc, const char *srcfile, int line)
116 ret = fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
121 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
122 const char *desc, const char *srcfile, int line)
126 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
132 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
133 const char *desc, const char *srcfile, int line)
137 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
142 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
143 const char *desc, const char *srcfile, int line)
147 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
152 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
153 const char *desc, const char *srcfile, int line)
157 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
162 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
163 const char *desc, const char *srcfile, int line)
167 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
175 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
176 const char *desc, const char *srcfile, int line)
180 ret = fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
185 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
186 const char *desc, const char *srcfile, int line)
190 ret = fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
195 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
196 const char *desc, const char *srcfile, int line)
200 ret = fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
206 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
207 const char *desc, const char *srcfile, int line)
211 ret = fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
216 gmx_bool gmx_fio_writee_gmx_large_int(t_fileio *fio, gmx_large_int_t item,
217 const char *desc, const char *srcfile, int line)
221 ret = fio->iotp->nwrite(fio, &item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
226 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
227 const char *desc, const char *srcfile, int line)
231 ret = fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
236 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
237 const char *desc, const char *srcfile, int line)
241 ret = fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
246 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
247 const char *desc, const char *srcfile, int line)
251 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
256 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
257 const char *desc, const char *srcfile, int line)
261 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
266 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
267 const char *desc, const char *srcfile, int line)
271 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
278 /* Read/write functions */
280 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
281 const char *desc, const char *srcfile, int line)
287 ret = fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
291 ret = fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
298 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
299 const char *desc, const char *srcfile, int line)
305 ret = fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
309 ret = fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
315 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
316 const char *desc, const char *srcfile, int line)
322 ret = fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
326 ret = fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
333 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
334 const char *desc, const char *srcfile, int line)
342 ret = fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
348 ret = fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
354 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
355 const char *desc, const char *srcfile, int line)
361 ret = fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
365 ret = fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
371 gmx_bool gmx_fio_doe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
372 const char *desc, const char *srcfile, int line)
378 ret = fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
382 ret = fio->iotp->nwrite(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
388 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
389 const char *desc, const char *srcfile, int line)
395 ret = fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
399 ret = fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
405 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
406 const char *desc, const char *srcfile, int line)
412 ret = fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
416 ret = fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
422 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
423 const char *desc, const char *srcfile, int line)
429 ret = fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
433 ret = fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
439 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
440 const char *desc, const char *srcfile, int line)
446 ret = fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
450 ret = fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
456 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
457 const char *desc, const char *srcfile, int line)
463 ret = fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
467 ret = fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
479 /* Array reading & writing */
481 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
482 const char *desc, const char *srcfile, int line)
487 for (i = 0; i < n; i++)
489 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
495 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
496 const char *desc, const char *srcfile, int line)
501 for (i = 0; i < n; i++)
503 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
511 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
512 const char *desc, const char *srcfile, int line)
517 for (i = 0; i < n; i++)
519 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
526 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
527 const char *desc, const char *srcfile, int line)
532 for (i = 0; i < n; i++)
534 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
540 gmx_bool gmx_fio_nreade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
541 const char *desc, const char *srcfile, int line)
546 for (i = 0; i < n; i++)
548 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
556 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
557 const char *desc, const char *srcfile, int line)
561 ret = fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
566 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
567 const char *desc, const char *srcfile, int line)
572 for (i = 0; i < n; i++)
574 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
581 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
582 const char *desc, const char *srcfile, int line)
586 ret = fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
591 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
592 const char *desc, const char *srcfile, int line)
597 for (i = 0; i < n; i++)
599 ret = ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
605 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
606 const char *desc, const char *srcfile, int line)
611 for (i = 0; i < n; i++)
613 ret = ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
624 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
625 const char *desc, const char *srcfile, int line)
630 for (i = 0; i < n; i++)
632 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
639 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
640 const char *desc, const char *srcfile, int line)
645 for (i = 0; i < n; i++)
647 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
654 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
655 const char *desc, const char *srcfile, int line)
660 for (i = 0; i < n; i++)
662 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
669 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
670 const char *desc, const char *srcfile, int line)
675 for (i = 0; i < n; i++)
677 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
684 gmx_bool gmx_fio_nwritee_gmx_large_int(t_fileio *fio,
685 const gmx_large_int_t *item, int n,
686 const char *desc, const char *srcfile, int line)
691 for (i = 0; i < n; i++)
693 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT,
694 desc, srcfile, line);
700 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
701 const char *desc, const char *srcfile, int line)
705 ret = fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
710 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
711 const char *desc, const char *srcfile, int line)
716 for (i = 0; i < n; i++)
718 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
726 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
727 const char *desc, const char *srcfile, int line)
731 ret = fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
736 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
737 const char *desc, const char *srcfile, int line)
742 for (i = 0; i < n; i++)
744 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
752 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
753 const char *desc, const char *srcfile, int line)
758 for (i = 0; i < n; i++)
760 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
769 /* array read/write functions */
771 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
772 const char *desc, const char *srcfile, int line)
777 for (i = 0; i < n; i++)
781 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
786 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
796 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
797 const char *desc, const char *srcfile, int line)
802 for (i = 0; i < n; i++)
806 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
811 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
821 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
822 const char *desc, const char *srcfile, int line)
827 for (i = 0; i < n; i++)
831 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
836 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
846 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
847 const char *desc, const char *srcfile, int line)
853 for (i = 0; i < n; i++)
857 ret = ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
864 ret = ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
872 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
873 const char *desc, const char *srcfile, int line)
878 for (i = 0; i < n; i++)
882 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
887 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
897 gmx_bool gmx_fio_ndoe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
898 const char *desc, const char *srcfile, int line)
903 for (i = 0; i < n; i++)
907 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
912 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
922 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
923 const char *desc, const char *srcfile, int line)
929 ret = ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
934 ret = ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
943 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
944 const char *desc, const char *srcfile, int line)
949 for (i = 0; i < n; i++)
953 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
958 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
968 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
969 const char *desc, const char *srcfile, int line)
975 ret = ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
979 ret = ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
988 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
989 const char *desc, const char *srcfile, int line)
994 for (i = 0; i < n; i++)
998 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
1003 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
1007 gmx_fio_unlock(fio);
1013 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
1014 const char *desc, const char *srcfile, int line)
1016 gmx_bool ret = TRUE;
1019 for (i = 0; i < n; i++)
1023 ret = ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
1028 ret = ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,
1032 gmx_fio_unlock(fio);