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 * check out http://www.gromacs.org for more information.
7 * Copyright (c) 2012, by the GROMACS development team, led by
8 * David van der Spoel, Berk Hess, Erik Lindahl, and including many
9 * others, as listed in the AUTHORS file in the top-level source
10 * directory and at http://www.gromacs.org.
12 * GROMACS is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 2.1
15 * of the License, or (at your option) any later version.
17 * GROMACS is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with GROMACS; if not, see
24 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
25 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * If you want to redistribute modifications to GROMACS, please
28 * consider that scientific software is very special. Version
29 * control is crucial - bugs must be traceable. We will be happy to
30 * consider code for inclusion in the official distribution, but
31 * derived work must not be called official GROMACS. Details are found
32 * in the README & COPYING files - if they are missing, get the
33 * official version at http://www.gromacs.org.
35 * To help us fund GROMACS development, we humbly ask that you cite
36 * the research papers on the package. Check out http://www.gromacs.org.
49 #include "gmx_fatal.h"
59 #include "thread_mpi.h"
62 #include "gmxfio_int.h"
65 /*******************************************************************
67 * READ/WRITE FUNCTIONS
69 *******************************************************************/
71 gmx_bool gmx_fio_reade_real(t_fileio *fio, real *item,
72 const char *desc, const char *srcfile, int line)
76 ret=fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
81 gmx_bool gmx_fio_reade_float(t_fileio *fio, float *item,
82 const char *desc, const char *srcfile, int line)
86 ret=fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
92 gmx_bool gmx_fio_reade_double(t_fileio *fio, double *item,
93 const char *desc, const char *srcfile, int line)
97 ret=fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
102 gmx_bool gmx_fio_reade_int(t_fileio *fio, int *item,
103 const char *desc, const char *srcfile, int line)
107 ret=fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
112 gmx_bool gmx_fio_reade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
113 const char *desc, const char *srcfile, int line)
117 ret=fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
122 gmx_bool gmx_fio_reade_uchar(t_fileio *fio, unsigned char *item,
123 const char *desc, const char *srcfile, int line)
127 ret=fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
133 gmx_bool gmx_fio_reade_ushort(t_fileio *fio, unsigned short *item,
134 const char *desc, const char *srcfile, int line)
138 ret=fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
143 gmx_bool gmx_fio_reade_rvec(t_fileio *fio, rvec *item,
144 const char *desc, const char *srcfile, int line)
148 ret=fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
153 gmx_bool gmx_fio_reade_ivec(t_fileio *fio, ivec *item,
154 const char *desc, const char *srcfile, int line)
158 ret=fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
163 gmx_bool gmx_fio_reade_string(t_fileio *fio, char *item,
164 const char *desc, const char *srcfile, int line)
168 ret=fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
176 gmx_bool gmx_fio_writee_real(t_fileio *fio, real item,
177 const char *desc, const char *srcfile, int line)
181 ret=fio->iotp->nwrite(fio, &item, 1, eioREAL, desc, srcfile, line);
186 gmx_bool gmx_fio_writee_float(t_fileio *fio, float item,
187 const char *desc, const char *srcfile, int line)
191 ret=fio->iotp->nwrite(fio, &item, 1, eioFLOAT, desc, srcfile, line);
196 gmx_bool gmx_fio_writee_double(t_fileio *fio, double item,
197 const char *desc, const char *srcfile, int line)
201 ret=fio->iotp->nwrite(fio, &item, 1, eioDOUBLE, desc, srcfile, line);
207 gmx_bool gmx_fio_writee_int(t_fileio *fio, int item,
208 const char *desc, const char *srcfile, int line)
212 ret=fio->iotp->nwrite(fio, &item, 1, eioINT, desc, srcfile, line);
217 gmx_bool gmx_fio_writee_gmx_large_int(t_fileio *fio, gmx_large_int_t item,
218 const char *desc, const char *srcfile, int line)
222 ret=fio->iotp->nwrite(fio, &item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
227 gmx_bool gmx_fio_writee_uchar(t_fileio *fio, unsigned char item,
228 const char *desc, const char *srcfile, int line)
232 ret=fio->iotp->nwrite(fio, &item, 1, eioUCHAR, desc, srcfile, line);
237 gmx_bool gmx_fio_writee_ushort(t_fileio *fio, unsigned short item,
238 const char *desc, const char *srcfile, int line)
242 ret=fio->iotp->nwrite(fio, &item, 1, eioUSHORT, desc, srcfile, line);
247 gmx_bool gmx_fio_writee_rvec(t_fileio *fio, rvec *item,
248 const char *desc, const char *srcfile, int line)
252 ret=fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
257 gmx_bool gmx_fio_writee_ivec(t_fileio *fio, ivec *item,
258 const char *desc, const char *srcfile, int line)
262 ret=fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
267 gmx_bool gmx_fio_writee_string(t_fileio *fio, const char *item,
268 const char *desc, const char *srcfile, int line)
272 ret=fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
279 /* Read/write functions */
281 gmx_bool gmx_fio_doe_real(t_fileio *fio, real *item,
282 const char *desc, const char *srcfile, int line)
287 ret=fio->iotp->nread(fio, item, 1, eioREAL, desc, srcfile, line);
289 ret=fio->iotp->nwrite(fio, item, 1, eioREAL, desc, srcfile, line);
295 gmx_bool gmx_fio_doe_float(t_fileio *fio, float *item,
296 const char *desc, const char *srcfile, int line)
301 ret=fio->iotp->nread(fio, item, 1, eioFLOAT, desc, srcfile, line);
303 ret=fio->iotp->nwrite(fio, item, 1, eioFLOAT, desc, srcfile, line);
308 gmx_bool gmx_fio_doe_double(t_fileio *fio, double *item,
309 const char *desc, const char *srcfile, int line)
314 ret=fio->iotp->nread(fio, item, 1, eioDOUBLE, desc, srcfile, line);
316 ret=fio->iotp->nwrite(fio, item, 1, eioDOUBLE, desc, srcfile, line);
322 gmx_bool gmx_fio_doe_gmx_bool(t_fileio *fio, gmx_bool *item,
323 const char *desc, const char *srcfile, int line)
331 ret=fio->iotp->nread(fio, &itmp, 1, eioINT, desc, srcfile, line);
337 ret=fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc, srcfile, line);
343 gmx_bool gmx_fio_doe_int(t_fileio *fio, int *item,
344 const char *desc, const char *srcfile, int line)
349 ret=fio->iotp->nread(fio, item, 1, eioINT, desc, srcfile, line);
351 ret=fio->iotp->nwrite(fio, item, 1, eioINT, desc, srcfile, line);
356 gmx_bool gmx_fio_doe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item,
357 const char *desc, const char *srcfile, int line)
362 ret=fio->iotp->nread(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
364 ret=fio->iotp->nwrite(fio, item, 1, eioGMX_LARGE_INT, desc, srcfile, line);
369 gmx_bool gmx_fio_doe_uchar(t_fileio *fio, unsigned char *item,
370 const char *desc, const char *srcfile, int line)
375 ret=fio->iotp->nread(fio, item, 1, eioUCHAR, desc, srcfile, line);
377 ret=fio->iotp->nwrite(fio, item, 1, eioUCHAR, desc, srcfile, line);
382 gmx_bool gmx_fio_doe_ushort(t_fileio *fio, unsigned short *item,
383 const char *desc, const char *srcfile, int line)
388 ret=fio->iotp->nread(fio, item, 1, eioUSHORT, desc, srcfile, line);
390 ret=fio->iotp->nwrite(fio, item, 1, eioUSHORT, desc, srcfile, line);
395 gmx_bool gmx_fio_doe_rvec(t_fileio *fio, rvec *item,
396 const char *desc, const char *srcfile, int line)
401 ret=fio->iotp->nread(fio, item, 1, eioRVEC, desc, srcfile, line);
403 ret=fio->iotp->nwrite(fio, item, 1, eioRVEC, desc, srcfile, line);
408 gmx_bool gmx_fio_doe_ivec(t_fileio *fio, ivec *item,
409 const char *desc, const char *srcfile, int line)
414 ret=fio->iotp->nread(fio, item, 1, eioIVEC, desc, srcfile, line);
416 ret=fio->iotp->nwrite(fio, item, 1, eioIVEC, desc, srcfile, line);
421 gmx_bool gmx_fio_doe_string(t_fileio *fio, char *item,
422 const char *desc, const char *srcfile, int line)
427 ret=fio->iotp->nread(fio, item, 1, eioSTRING, desc, srcfile, line);
429 ret=fio->iotp->nwrite(fio, item, 1, eioSTRING, desc, srcfile, line);
440 /* Array reading & writing */
442 gmx_bool gmx_fio_nreade_real(t_fileio *fio, real *item, int n,
443 const char *desc, const char *srcfile, int line)
449 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc, srcfile, line);
454 gmx_bool gmx_fio_nreade_float(t_fileio *fio, float *item, int n,
455 const char *desc, const char *srcfile, int line)
461 ret= ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
468 gmx_bool gmx_fio_nreade_double(t_fileio *fio, double *item, int n,
469 const char *desc, const char *srcfile, int line)
475 ret= ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
481 gmx_bool gmx_fio_nreade_int(t_fileio *fio, int *item, int n,
482 const char *desc, const char *srcfile, int line)
488 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc, srcfile, line);
493 gmx_bool gmx_fio_nreade_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
494 const char *desc, const char *srcfile, int line)
500 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
507 gmx_bool gmx_fio_nreade_uchar(t_fileio *fio, unsigned char *item, int n,
508 const char *desc, const char *srcfile, int line)
512 ret=fio->iotp->nread(fio, item, n, eioNUCHAR, desc, srcfile, line);
517 gmx_bool gmx_fio_nreade_ushort(t_fileio *fio, unsigned short *item, int n,
518 const char *desc, const char *srcfile, int line)
524 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
530 gmx_bool gmx_fio_nreade_rvec(t_fileio *fio, rvec *item, int n,
531 const char *desc, const char *srcfile, int line)
535 ret=fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
540 gmx_bool gmx_fio_nreade_ivec(t_fileio *fio, ivec *item, int n,
541 const char *desc, const char *srcfile, int line)
547 ret=ret && fio->iotp->nread(fio, item[i], 1, eioIVEC, desc, srcfile, line);
552 gmx_bool gmx_fio_nreade_string(t_fileio *fio, char *item[], int n,
553 const char *desc, const char *srcfile, int line)
559 ret=ret && fio->iotp->nread(fio, item[i], 1, eioSTRING, desc, srcfile, line);
569 gmx_bool gmx_fio_nwritee_real(t_fileio *fio, const real *item, int n,
570 const char *desc, const char *srcfile, int line)
576 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
582 gmx_bool gmx_fio_nwritee_float(t_fileio *fio, const float *item, int n,
583 const char *desc, const char *srcfile, int line)
589 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
595 gmx_bool gmx_fio_nwritee_double(t_fileio *fio, const double *item, int n,
596 const char *desc, const char *srcfile, int line)
602 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
608 gmx_bool gmx_fio_nwritee_int(t_fileio *fio, const int *item, int n,
609 const char *desc, const char *srcfile, int line)
615 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc, srcfile,
621 gmx_bool gmx_fio_nwritee_gmx_large_int(t_fileio *fio,
622 const gmx_large_int_t *item, int n,
623 const char *desc, const char *srcfile, int line)
629 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT,
630 desc, srcfile, line);
635 gmx_bool gmx_fio_nwritee_uchar(t_fileio *fio, const unsigned char *item, int n,
636 const char *desc, const char *srcfile, int line)
640 ret=fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc, srcfile, line);
645 gmx_bool gmx_fio_nwritee_ushort(t_fileio *fio, const unsigned short *item, int n,
646 const char *desc, const char *srcfile, int line)
652 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
659 gmx_bool gmx_fio_nwritee_rvec(t_fileio *fio, const rvec *item, int n,
660 const char *desc, const char *srcfile, int line)
664 ret=fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile, line);
669 gmx_bool gmx_fio_nwritee_ivec(t_fileio *fio, const ivec *item, int n,
670 const char *desc, const char *srcfile, int line)
676 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
683 gmx_bool gmx_fio_nwritee_string(t_fileio *fio, const char *item[], int n,
684 const char *desc, const char *srcfile, int line)
690 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc, srcfile,
698 /* array read/write functions */
700 gmx_bool gmx_fio_ndoe_real(t_fileio *fio, real *item, int n,
701 const char *desc, const char *srcfile, int line)
710 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioREAL, desc,
715 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioREAL, desc,
725 gmx_bool gmx_fio_ndoe_float(t_fileio *fio, float *item, int n,
726 const char *desc, const char *srcfile, int line)
735 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioFLOAT, desc,
740 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioFLOAT, desc,
750 gmx_bool gmx_fio_ndoe_double(t_fileio *fio, double *item, int n,
751 const char *desc, const char *srcfile, int line)
760 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioDOUBLE, desc,
765 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioDOUBLE, desc,
775 gmx_bool gmx_fio_ndoe_gmx_bool(t_fileio *fio, gmx_bool *item, int n,
776 const char *desc, const char *srcfile, int line)
786 ret=ret && fio->iotp->nread(fio, &itmp, 1, eioINT, desc,
793 ret=ret && fio->iotp->nwrite(fio, &itmp, 1, eioINT, desc,
801 gmx_bool gmx_fio_ndoe_int(t_fileio *fio, int *item, int n,
802 const char *desc, const char *srcfile, int line)
811 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioINT, desc,
816 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioINT, desc,
826 gmx_bool gmx_fio_ndoe_gmx_large_int(t_fileio *fio, gmx_large_int_t *item, int n,
827 const char *desc, const char *srcfile, int line)
836 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
841 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioGMX_LARGE_INT, desc,
851 gmx_bool gmx_fio_ndoe_uchar(t_fileio *fio, unsigned char *item, int n,
852 const char *desc, const char *srcfile, int line)
858 ret=ret && fio->iotp->nread(fio, item, n, eioNUCHAR, desc,
863 ret=ret && fio->iotp->nwrite(fio, item, n, eioNUCHAR, desc,
872 gmx_bool gmx_fio_ndoe_ushort(t_fileio *fio, unsigned short *item, int n,
873 const char *desc, const char *srcfile, int line)
882 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioUSHORT, desc,
887 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioUSHORT, desc,
897 gmx_bool gmx_fio_ndoe_rvec(t_fileio *fio, rvec *item, int n,
898 const char *desc, const char *srcfile, int line)
904 ret=ret && fio->iotp->nread(fio, item, n, eioNRVEC, desc, srcfile, line);
908 ret=ret && fio->iotp->nwrite(fio, item, n, eioNRVEC, desc, srcfile,
917 gmx_bool gmx_fio_ndoe_ivec(t_fileio *fio, ivec *item, int n,
918 const char *desc, const char *srcfile, int line)
927 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioIVEC, desc,
932 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioIVEC, desc,
942 gmx_bool gmx_fio_ndoe_string(t_fileio *fio, char *item[], int n,
943 const char *desc, const char *srcfile, int line)
952 ret=ret && fio->iotp->nread(fio, &(item[i]), 1, eioSTRING, desc,
957 ret=ret && fio->iotp->nwrite(fio, &(item[i]), 1, eioSTRING, desc,