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,2014,2015,2016,2017,2019, 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.
44 #include "gromacs/math/vec.h"
45 #include "gromacs/utility/strconvert.h"
46 #include "gromacs/utility/txtdump.h"
48 void pr_ivec(FILE* fp, int indent, const char* title, const int vec[], int n, gmx_bool bShowNumbers)
52 if (available(fp, vec, indent, title))
54 indent = pr_title_n(fp, indent, title, n);
55 for (i = 0; i < n; i++)
57 pr_indent(fp, indent);
58 fprintf(fp, "%s[%d]=%d\n", title, bShowNumbers ? i : -1, vec[i]);
63 void pr_ivec_block(FILE* fp, int indent, const char* title, const int vec[], int n, gmx_bool bShowNumbers)
67 if (available(fp, vec, indent, title))
69 indent = pr_title_n(fp, indent, title, n);
74 while (j < n && vec[j] == vec[j - 1] + 1)
78 /* Print consecutive groups of 3 or more as blocks */
83 pr_indent(fp, indent);
84 fprintf(fp, "%s[%d]=%d\n", title, bShowNumbers ? i : -1, vec[i]);
90 pr_indent(fp, indent);
91 fprintf(fp, "%s[%d,...,%d] = {%d,...,%d}\n", title, bShowNumbers ? i : -1,
92 bShowNumbers ? j - 1 : -1, vec[i], vec[j - 1]);
99 void pr_bvec(FILE* fp, int indent, const char* title, const gmx_bool vec[], int n, gmx_bool bShowNumbers)
103 if (available(fp, vec, indent, title))
105 indent = pr_title_n(fp, indent, title, n);
106 for (i = 0; i < n; i++)
108 pr_indent(fp, indent);
109 fprintf(fp, "%s[%d]=%s\n", title, bShowNumbers ? i : -1, gmx::boolToString(vec[i]));
114 void pr_ivecs(FILE* fp, int indent, const char* title, const ivec vec[], int n, gmx_bool bShowNumbers)
118 if (available(fp, vec, indent, title))
120 indent = pr_title_nxn(fp, indent, title, n, DIM);
121 for (i = 0; i < n; i++)
123 pr_indent(fp, indent);
124 fprintf(fp, "%s[%d]={", title, bShowNumbers ? i : -1);
125 for (j = 0; j < DIM; j++)
131 fprintf(fp, "%d", vec[i][j]);
139 static void printRealVector(FILE* fp, int indent, const char* title, const T vec[], int n, gmx_bool bShowNumbers)
141 if (available(fp, vec, indent, title))
143 indent = pr_title_n(fp, indent, title, n);
144 for (int i = 0; i < n; i++)
146 pr_indent(fp, indent);
147 fprintf(fp, "%s[%d]=%12.5e\n", title, bShowNumbers ? i : -1, vec[i]);
152 void pr_rvec(FILE* fp, int indent, const char* title, const real vec[], int n, gmx_bool bShowNumbers)
154 printRealVector<real>(fp, indent, title, vec, n, bShowNumbers);
157 void pr_fvec(FILE* fp, int indent, const char* title, const float vec[], int n, gmx_bool bShowNumbers)
159 printRealVector<float>(fp, indent, title, vec, n, bShowNumbers);
162 void pr_dvec(FILE* fp, int indent, const char* title, const double vec[], int n, gmx_bool bShowNumbers)
164 printRealVector<double>(fp, indent, title, vec, n, bShowNumbers);
168 void pr_rvecs_len(FILE* fp, int indent, const char* title, const rvec vec[], int n)
172 if (available(fp, vec, indent, title))
174 indent = pr_title_nxn(fp, indent, title, n, DIM);
175 for (i = 0; i < n; i++)
177 pr_indent(fp, indent);
178 fprintf(fp, "%s[%5d]={", title, i);
179 for (j = 0; j < DIM; j++)
185 fprintf(fp, "%12.5e", vec[i][j]);
187 fprintf(fp, "} len=%12.5e\n", norm(vec[i]));
192 void pr_rvecs(FILE* fp, int indent, const char* title, const rvec vec[], int n)
194 const char* fshort = "%12.5e";
195 const char* flong = "%15.8e";
199 if (getenv("GMX_PRINT_LONGFORMAT") != nullptr)
208 if (available(fp, vec, indent, title))
210 indent = pr_title_nxn(fp, indent, title, n, DIM);
211 for (i = 0; i < n; i++)
213 pr_indent(fp, indent);
214 fprintf(fp, "%s[%5d]={", title, i);
215 for (j = 0; j < DIM; j++)
221 fprintf(fp, format, vec[i][j]);
229 void pr_rvecs_of_dim(FILE* fp, int indent, const char* title, const rvec vec[], int n, int dim)
231 const char* fshort = "%12.5e";
232 const char* flong = "%15.8e";
236 if (getenv("GMX_PRINT_LONGFORMAT") != nullptr)
245 if (available(fp, vec, indent, title))
247 indent = pr_title_nxn(fp, indent, title, n, dim);
248 for (i = 0; i < n; i++)
250 pr_indent(fp, indent);
251 fprintf(fp, "%s[%5d]={", title, i);
252 for (j = 0; j < dim; j++)
258 fprintf(fp, format, vec[i][j]);