File: | gromacs/tools/dump.c |
Location: | line 147, column 13 |
Description: | Function call argument is an uninitialized value |
1 | /* | |||||
2 | * This file is part of the GROMACS molecular simulation package. | |||||
3 | * | |||||
4 | * Copyright (c) 1991-2000, University of Groningen, The Netherlands. | |||||
5 | * Copyright (c) 2001-2013, The GROMACS development team. | |||||
6 | * Copyright (c) 2013,2014, 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. | |||||
10 | * | |||||
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. | |||||
15 | * | |||||
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. | |||||
20 | * | |||||
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. | |||||
25 | * | |||||
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. | |||||
33 | * | |||||
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. | |||||
36 | */ | |||||
37 | #ifdef HAVE_CONFIG_H1 | |||||
38 | #include <config.h> | |||||
39 | #endif | |||||
40 | ||||||
41 | #include <stdio.h> | |||||
42 | #include <string.h> | |||||
43 | #include <math.h> | |||||
44 | #include <assert.h> | |||||
45 | #include "macros.h" | |||||
46 | #include "gromacs/commandline/pargs.h" | |||||
47 | #include "txtdump.h" | |||||
48 | #include "gromacs/utility/fatalerror.h" | |||||
49 | #include "gromacs/utility/smalloc.h" | |||||
50 | #include "names.h" | |||||
51 | #include "txtdump.h" | |||||
52 | #include "gromacs/gmxpreprocess/gmxcpp.h" | |||||
53 | #include "checkpoint.h" | |||||
54 | #include "mtop_util.h" | |||||
55 | #include "gromacs/fileio/xtcio.h" | |||||
56 | #include "gromacs/fileio/enxio.h" | |||||
57 | #include "gromacs/fileio/gmxfio.h" | |||||
58 | #include "gromacs/fileio/tpxio.h" | |||||
59 | #include "gromacs/fileio/trnio.h" | |||||
60 | #include "gromacs/utility/futil.h" | |||||
61 | #include "gromacs/fileio/tngio.h" | |||||
62 | #include "gromacs/fileio/tngio_for_tools.h" | |||||
63 | ||||||
64 | #ifdef HAVE_UNISTD_H | |||||
65 | #include <unistd.h> | |||||
66 | #endif | |||||
67 | ||||||
68 | #include "gromacs/linearalgebra/mtxio.h" | |||||
69 | #include "gromacs/linearalgebra/sparsematrix.h" | |||||
70 | ||||||
71 | ||||||
72 | static void list_tpx(const char *fn, gmx_bool bShowNumbers, const char *mdpfn, | |||||
73 | gmx_bool bSysTop) | |||||
74 | { | |||||
75 | FILE *gp; | |||||
76 | int fp, indent, i, j, **gcount, atot; | |||||
77 | t_state state; | |||||
78 | rvec *f = NULL((void*)0); | |||||
79 | t_inputrec ir; | |||||
80 | t_tpxheader tpx; | |||||
81 | gmx_mtop_t mtop; | |||||
82 | gmx_groups_t *groups; | |||||
83 | t_topology top; | |||||
84 | ||||||
85 | read_tpxheader(fn, &tpx, TRUE1, NULL((void*)0), NULL((void*)0)); | |||||
86 | ||||||
87 | read_tpx_state(fn, | |||||
88 | tpx.bIr ? &ir : NULL((void*)0), | |||||
| ||||||
89 | &state, tpx.bF ? f : NULL((void*)0), | |||||
90 | tpx.bTop ? &mtop : NULL((void*)0)); | |||||
91 | ||||||
92 | if (mdpfn && tpx.bIr) | |||||
93 | { | |||||
94 | gp = gmx_fio_fopen(mdpfn, "w"); | |||||
95 | pr_inputrec(gp, 0, NULL((void*)0), &(ir), TRUE1); | |||||
96 | gmx_fio_fclose(gp); | |||||
97 | } | |||||
98 | ||||||
99 | if (!mdpfn) | |||||
100 | { | |||||
101 | if (bSysTop) | |||||
102 | { | |||||
103 | top = gmx_mtop_t_to_t_topology(&mtop); | |||||
104 | } | |||||
105 | ||||||
106 | if (available(stdoutstdout, &tpx, 0, fn)) | |||||
107 | { | |||||
108 | indent = 0; | |||||
109 | indent = pr_title(stdoutstdout, indent, fn); | |||||
110 | pr_inputrec(stdoutstdout, 0, "inputrec", tpx.bIr ? &(ir) : NULL((void*)0), FALSE0); | |||||
111 | ||||||
112 | indent = 0; | |||||
113 | pr_header(stdoutstdout, indent, "header", &(tpx)); | |||||
114 | ||||||
115 | if (!bSysTop) | |||||
116 | { | |||||
117 | pr_mtop(stdoutstdout, indent, "topology", &(mtop), bShowNumbers); | |||||
118 | } | |||||
119 | else | |||||
120 | { | |||||
121 | pr_top(stdoutstdout, indent, "topology", &(top), bShowNumbers); | |||||
122 | } | |||||
123 | ||||||
124 | pr_rvecs(stdoutstdout, indent, "box", tpx.bBox ? state.box : NULL((void*)0), DIM3); | |||||
125 | pr_rvecs(stdoutstdout, indent, "box_rel", tpx.bBox ? state.box_rel : NULL((void*)0), DIM3); | |||||
126 | pr_rvecs(stdoutstdout, indent, "boxv", tpx.bBox ? state.boxv : NULL((void*)0), DIM3); | |||||
127 | pr_rvecs(stdoutstdout, indent, "pres_prev", tpx.bBox ? state.pres_prev : NULL((void*)0), DIM3); | |||||
128 | pr_rvecs(stdoutstdout, indent, "svir_prev", tpx.bBox ? state.svir_prev : NULL((void*)0), DIM3); | |||||
129 | pr_rvecs(stdoutstdout, indent, "fvir_prev", tpx.bBox ? state.fvir_prev : NULL((void*)0), DIM3); | |||||
130 | /* leave nosehoover_xi in for now to match the tpr version */ | |||||
131 | pr_doubles(stdoutstdout, indent, "nosehoover_xi", state.nosehoover_xi, state.ngtc); | |||||
132 | /*pr_doubles(stdout,indent,"nosehoover_vxi",state.nosehoover_vxi,state.ngtc);*/ | |||||
133 | /*pr_doubles(stdout,indent,"therm_integral",state.therm_integral,state.ngtc);*/ | |||||
134 | pr_rvecs(stdoutstdout, indent, "x", tpx.bX ? state.x : NULL((void*)0), state.natoms); | |||||
135 | pr_rvecs(stdoutstdout, indent, "v", tpx.bV ? state.v : NULL((void*)0), state.natoms); | |||||
136 | if (tpx.bF) | |||||
137 | { | |||||
138 | pr_rvecs(stdoutstdout, indent, "f", f, state.natoms); | |||||
139 | } | |||||
140 | } | |||||
141 | ||||||
142 | groups = &mtop.groups; | |||||
143 | ||||||
144 | snew(gcount, egcNR)(gcount) = save_calloc("gcount", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 144, (egcNR), sizeof(*(gcount))); | |||||
145 | for (i = 0; (i < egcNR); i++) | |||||
146 | { | |||||
147 | snew(gcount[i], groups->grps[i].nr)(gcount[i]) = save_calloc("gcount[i]", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 147, (groups->grps[i].nr), sizeof(*(gcount[i]))); | |||||
| ||||||
148 | } | |||||
149 | ||||||
150 | for (i = 0; (i < mtop.natoms); i++) | |||||
151 | { | |||||
152 | for (j = 0; (j < egcNR); j++) | |||||
153 | { | |||||
154 | gcount[j][ggrpnr(groups, j, i)((groups)->grpnr[j] ? (groups)->grpnr[j][i] : 0)]++; | |||||
155 | } | |||||
156 | } | |||||
157 | printf("Group statistics\n"); | |||||
158 | for (i = 0; (i < egcNR); i++) | |||||
159 | { | |||||
160 | atot = 0; | |||||
161 | printf("%-12s: ", gtypes[i]); | |||||
162 | for (j = 0; (j < groups->grps[i].nr); j++) | |||||
163 | { | |||||
164 | printf(" %5d", gcount[i][j]); | |||||
165 | atot += gcount[i][j]; | |||||
166 | } | |||||
167 | printf(" (total %d atoms)\n", atot); | |||||
168 | sfree(gcount[i])save_free("gcount[i]", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 168, (gcount[i])); | |||||
169 | } | |||||
170 | sfree(gcount)save_free("gcount", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 170, (gcount)); | |||||
171 | } | |||||
172 | done_state(&state); | |||||
173 | sfree(f)save_free("f", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 173, (f)); | |||||
174 | } | |||||
175 | ||||||
176 | static void list_top(const char *fn) | |||||
177 | { | |||||
178 | int status, done; | |||||
179 | #define BUFLEN256 256 | |||||
180 | char buf[BUFLEN256]; | |||||
181 | gmx_cpp_t handle; | |||||
182 | char *cppopts[] = { NULL((void*)0) }; | |||||
183 | ||||||
184 | status = cpp_open_file(fn, &handle, cppopts); | |||||
185 | if (status != 0) | |||||
186 | { | |||||
187 | gmx_fatal(FARGS0, "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c", 187, cpp_error(&handle, status)); | |||||
188 | } | |||||
189 | do | |||||
190 | { | |||||
191 | status = cpp_read_line(&handle, BUFLEN256, buf); | |||||
192 | done = (status == eCPP_EOF); | |||||
193 | if (!done) | |||||
194 | { | |||||
195 | if (status != eCPP_OK) | |||||
196 | { | |||||
197 | gmx_fatal(FARGS0, "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c", 197, cpp_error(&handle, status)); | |||||
198 | } | |||||
199 | else | |||||
200 | { | |||||
201 | printf("%s\n", buf); | |||||
202 | } | |||||
203 | } | |||||
204 | } | |||||
205 | while (!done); | |||||
206 | status = cpp_close_file(&handle); | |||||
207 | if (status != eCPP_OK) | |||||
208 | { | |||||
209 | gmx_fatal(FARGS0, "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c", 209, cpp_error(&handle, status)); | |||||
210 | } | |||||
211 | } | |||||
212 | ||||||
213 | static void list_trn(const char *fn) | |||||
214 | { | |||||
215 | t_fileio *fpread, *fpwrite; | |||||
216 | int nframe, indent; | |||||
217 | char buf[256]; | |||||
218 | rvec *x, *v, *f; | |||||
219 | matrix box; | |||||
220 | t_trnheader trn; | |||||
221 | gmx_bool bOK; | |||||
222 | ||||||
223 | fpread = open_trn(fn, "r"); | |||||
224 | fpwrite = open_tpx(NULL((void*)0), "w"); | |||||
225 | gmx_fio_setdebug(fpwrite, TRUE1); | |||||
226 | ||||||
227 | nframe = 0; | |||||
228 | while (fread_trnheader(fpread, &trn, &bOK)) | |||||
229 | { | |||||
230 | snew(x, trn.natoms)(x) = save_calloc("x", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 230, (trn.natoms), sizeof(*(x))); | |||||
231 | snew(v, trn.natoms)(v) = save_calloc("v", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 231, (trn.natoms), sizeof(*(v))); | |||||
232 | snew(f, trn.natoms)(f) = save_calloc("f", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 232, (trn.natoms), sizeof(*(f))); | |||||
233 | if (fread_htrn(fpread, &trn, | |||||
234 | trn.box_size ? box : NULL((void*)0), | |||||
235 | trn.x_size ? x : NULL((void*)0), | |||||
236 | trn.v_size ? v : NULL((void*)0), | |||||
237 | trn.f_size ? f : NULL((void*)0))) | |||||
238 | { | |||||
239 | sprintf(buf, "%s frame %d", fn, nframe); | |||||
240 | indent = 0; | |||||
241 | indent = pr_title(stdoutstdout, indent, buf); | |||||
242 | pr_indent(stdoutstdout, indent); | |||||
243 | fprintf(stdoutstdout, "natoms=%10d step=%10d time=%12.7e lambda=%10g\n", | |||||
244 | trn.natoms, trn.step, trn.t, trn.lambda); | |||||
245 | if (trn.box_size) | |||||
246 | { | |||||
247 | pr_rvecs(stdoutstdout, indent, "box", box, DIM3); | |||||
248 | } | |||||
249 | if (trn.x_size) | |||||
250 | { | |||||
251 | pr_rvecs(stdoutstdout, indent, "x", x, trn.natoms); | |||||
252 | } | |||||
253 | if (trn.v_size) | |||||
254 | { | |||||
255 | pr_rvecs(stdoutstdout, indent, "v", v, trn.natoms); | |||||
256 | } | |||||
257 | if (trn.f_size) | |||||
258 | { | |||||
259 | pr_rvecs(stdoutstdout, indent, "f", f, trn.natoms); | |||||
260 | } | |||||
261 | } | |||||
262 | else | |||||
263 | { | |||||
264 | fprintf(stderrstderr, "\nWARNING: Incomplete frame: nr %d, t=%g\n", | |||||
265 | nframe, trn.t); | |||||
266 | } | |||||
267 | ||||||
268 | sfree(x)save_free("x", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 268, (x)); | |||||
269 | sfree(v)save_free("v", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 269, (v)); | |||||
270 | sfree(f)save_free("f", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 270, (f)); | |||||
271 | nframe++; | |||||
272 | } | |||||
273 | if (!bOK) | |||||
274 | { | |||||
275 | fprintf(stderrstderr, "\nWARNING: Incomplete frame header: nr %d, t=%g\n", | |||||
276 | nframe, trn.t); | |||||
277 | } | |||||
278 | close_tpx(fpwrite); | |||||
279 | close_trn(fpread); | |||||
280 | } | |||||
281 | ||||||
282 | void list_xtc(const char *fn) | |||||
283 | { | |||||
284 | t_fileio *xd; | |||||
285 | int indent; | |||||
286 | char buf[256]; | |||||
287 | rvec *x; | |||||
288 | matrix box; | |||||
289 | int nframe, natoms, step; | |||||
290 | real prec, time; | |||||
291 | gmx_bool bOK; | |||||
292 | ||||||
293 | xd = open_xtc(fn, "r"); | |||||
294 | read_first_xtc(xd, &natoms, &step, &time, box, &x, &prec, &bOK); | |||||
295 | ||||||
296 | nframe = 0; | |||||
297 | do | |||||
298 | { | |||||
299 | sprintf(buf, "%s frame %d", fn, nframe); | |||||
300 | indent = 0; | |||||
301 | indent = pr_title(stdoutstdout, indent, buf); | |||||
302 | pr_indent(stdoutstdout, indent); | |||||
303 | fprintf(stdoutstdout, "natoms=%10d step=%10d time=%12.7e prec=%10g\n", | |||||
304 | natoms, step, time, prec); | |||||
305 | pr_rvecs(stdoutstdout, indent, "box", box, DIM3); | |||||
306 | pr_rvecs(stdoutstdout, indent, "x", x, natoms); | |||||
307 | nframe++; | |||||
308 | } | |||||
309 | while (read_next_xtc(xd, natoms, &step, &time, box, x, &prec, &bOK)); | |||||
310 | if (!bOK) | |||||
311 | { | |||||
312 | fprintf(stderrstderr, "\nWARNING: Incomplete frame at time %g\n", time); | |||||
313 | } | |||||
314 | sfree(x)save_free("x", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 314, (x)); | |||||
315 | close_xtc(xd); | |||||
316 | } | |||||
317 | ||||||
318 | /*! \brief Callback used by list_tng_for_gmx_dump. */ | |||||
319 | static void list_tng_inner(const char *fn, | |||||
320 | gmx_bool bFirstFrame, | |||||
321 | real *values, | |||||
322 | gmx_int64_t step, | |||||
323 | double frame_time, | |||||
324 | gmx_int64_t n_values_per_frame, | |||||
325 | gmx_int64_t n_atoms, | |||||
326 | real prec, | |||||
327 | gmx_int64_t nframe, | |||||
328 | char *block_name) | |||||
329 | { | |||||
330 | char buf[256]; | |||||
331 | int indent = 0; | |||||
332 | ||||||
333 | if (bFirstFrame) | |||||
334 | { | |||||
335 | sprintf(buf, "%s frame %" GMX_PRId64"l" "d", fn, nframe); | |||||
336 | indent = 0; | |||||
337 | indent = pr_title(stdoutstdout, indent, buf); | |||||
338 | pr_indent(stdoutstdout, indent); | |||||
339 | fprintf(stdoutstdout, "natoms=%10" GMX_PRId64"l" "d" " step=%10" GMX_PRId64"l" "d" " time=%12.7e", | |||||
340 | n_atoms, step, frame_time); | |||||
341 | if (prec > 0) | |||||
342 | { | |||||
343 | fprintf(stdoutstdout, " prec=%10g", prec); | |||||
344 | } | |||||
345 | fprintf(stdoutstdout, "\n"); | |||||
346 | } | |||||
347 | pr_reals_of_dim(stdoutstdout, indent, block_name, values, n_atoms, n_values_per_frame); | |||||
348 | } | |||||
349 | ||||||
350 | static void list_tng(const char gmx_unused__attribute__ ((unused)) *fn) | |||||
351 | { | |||||
352 | #ifdef GMX_USE_TNG | |||||
353 | tng_trajectory_t tng; | |||||
354 | gmx_int64_t nframe = 0; | |||||
355 | gmx_int64_t i, *block_ids = NULL((void*)0), step, ndatablocks; | |||||
356 | gmx_bool bOK; | |||||
357 | ||||||
358 | gmx_tng_open(fn, 'r', &tng); | |||||
359 | gmx_print_tng_molecule_system(tng, stdoutstdout); | |||||
360 | ||||||
361 | bOK = gmx_get_tng_data_block_types_of_next_frame(tng, -1, | |||||
362 | 0, | |||||
363 | NULL((void*)0), | |||||
364 | &step, &ndatablocks, | |||||
365 | &block_ids); | |||||
366 | do | |||||
367 | { | |||||
368 | for (i = 0; i < ndatablocks; i++) | |||||
369 | { | |||||
370 | double frame_time; | |||||
371 | real prec, *values = NULL((void*)0); | |||||
372 | gmx_int64_t n_values_per_frame, n_atoms; | |||||
373 | char block_name[STRLEN4096]; | |||||
374 | ||||||
375 | gmx_get_tng_data_next_frame_of_block_type(tng, block_ids[i], &values, | |||||
376 | &step, &frame_time, | |||||
377 | &n_values_per_frame, &n_atoms, | |||||
378 | &prec, | |||||
379 | block_name, STRLEN4096, &bOK); | |||||
380 | if (!bOK) | |||||
381 | { | |||||
382 | /* Can't write any output because we don't know what | |||||
383 | arrays are valid. */ | |||||
384 | fprintf(stderrstderr, "\nWARNING: Incomplete frame at time %g, will not write output\n", frame_time); | |||||
385 | list_tng_inner(fn, (0 == i), values, step, frame_time, | |||||
386 | n_values_per_frame, n_atoms, prec, nframe, block_name); | |||||
387 | } | |||||
388 | } | |||||
389 | nframe++; | |||||
390 | } | |||||
391 | while (gmx_get_tng_data_block_types_of_next_frame(tng, step, | |||||
392 | 0, | |||||
393 | NULL((void*)0), | |||||
394 | &step, | |||||
395 | &ndatablocks, | |||||
396 | &block_ids)); | |||||
397 | ||||||
398 | if (block_ids) | |||||
399 | { | |||||
400 | sfree(block_ids)save_free("block_ids", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 400, (block_ids)); | |||||
401 | } | |||||
402 | ||||||
403 | gmx_tng_close(&tng); | |||||
404 | #endif | |||||
405 | } | |||||
406 | ||||||
407 | void list_trx(const char *fn) | |||||
408 | { | |||||
409 | int ftp; | |||||
410 | ||||||
411 | ftp = fn2ftp(fn); | |||||
412 | if (ftp == efXTC) | |||||
413 | { | |||||
414 | list_xtc(fn); | |||||
415 | } | |||||
416 | else if ((ftp == efTRR) || (ftp == efTRJ)) | |||||
417 | { | |||||
418 | list_trn(fn); | |||||
419 | } | |||||
420 | else if (ftp == efTNG) | |||||
421 | { | |||||
422 | list_tng(fn); | |||||
423 | } | |||||
424 | else | |||||
425 | { | |||||
426 | fprintf(stderrstderr, "File %s is of an unsupported type. Try using the command\n 'less %s'\n", | |||||
427 | fn, fn); | |||||
428 | } | |||||
429 | } | |||||
430 | ||||||
431 | void list_ene(const char *fn) | |||||
432 | { | |||||
433 | int ndr; | |||||
434 | ener_file_t in; | |||||
435 | gmx_bool bCont; | |||||
436 | gmx_enxnm_t *enm = NULL((void*)0); | |||||
437 | t_enxframe *fr; | |||||
438 | int i, j, nre, b; | |||||
439 | real rav, minthird; | |||||
440 | char buf[22]; | |||||
441 | ||||||
442 | printf("gmx dump: %s\n", fn); | |||||
443 | in = open_enx(fn, "r"); | |||||
444 | do_enxnms(in, &nre, &enm); | |||||
445 | assert(enm)((void) (0)); | |||||
446 | ||||||
447 | printf("energy components:\n"); | |||||
448 | for (i = 0; (i < nre); i++) | |||||
449 | { | |||||
450 | printf("%5d %-24s (%s)\n", i, enm[i].name, enm[i].unit); | |||||
451 | } | |||||
452 | ||||||
453 | minthird = -1.0/3.0; | |||||
454 | snew(fr, 1)(fr) = save_calloc("fr", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 454, (1), sizeof(*(fr))); | |||||
455 | do | |||||
456 | { | |||||
457 | bCont = do_enx(in, fr); | |||||
458 | ||||||
459 | if (bCont) | |||||
460 | { | |||||
461 | printf("\n%24s %12.5e %12s %12s\n", "time:", | |||||
462 | fr->t, "step:", gmx_step_str(fr->step, buf)); | |||||
463 | printf("%24s %12s %12s %12s\n", | |||||
464 | "", "", "nsteps:", gmx_step_str(fr->nsteps, buf)); | |||||
465 | printf("%24s %12.5e %12s %12s\n", | |||||
466 | "delta_t:", fr->dt, "sum steps:", gmx_step_str(fr->nsum, buf)); | |||||
467 | if (fr->nre == nre) | |||||
468 | { | |||||
469 | printf("%24s %12s %12s %12s\n", | |||||
470 | "Component", "Energy", "Av. Energy", "Sum Energy"); | |||||
471 | if (fr->nsum > 0) | |||||
472 | { | |||||
473 | for (i = 0; (i < nre); i++) | |||||
474 | { | |||||
475 | printf("%24s %12.5e %12.5e %12.5e\n", | |||||
476 | enm[i].name, fr->ener[i].e, fr->ener[i].eav, | |||||
477 | fr->ener[i].esum); | |||||
478 | } | |||||
479 | } | |||||
480 | else | |||||
481 | { | |||||
482 | for (i = 0; (i < nre); i++) | |||||
483 | { | |||||
484 | printf("%24s %12.5e\n", | |||||
485 | enm[i].name, fr->ener[i].e); | |||||
486 | } | |||||
487 | } | |||||
488 | } | |||||
489 | for (b = 0; b < fr->nblock; b++) | |||||
490 | { | |||||
491 | const char *typestr = ""; | |||||
492 | ||||||
493 | t_enxblock *eb = &(fr->block[b]); | |||||
494 | printf("Block data %2d (%3d subblocks, id=%d)\n", | |||||
495 | b, eb->nsub, eb->id); | |||||
496 | ||||||
497 | if (eb->id < enxNR) | |||||
498 | { | |||||
499 | typestr = enx_block_id_name[eb->id]; | |||||
500 | } | |||||
501 | printf(" id='%s'\n", typestr); | |||||
502 | for (i = 0; i < eb->nsub; i++) | |||||
503 | { | |||||
504 | t_enxsubblock *sb = &(eb->sub[i]); | |||||
505 | printf(" Sub block %3d (%5d elems, type=%s) values:\n", | |||||
506 | i, sb->nr, xdr_datatype_names[sb->type]); | |||||
507 | ||||||
508 | switch (sb->type) | |||||
509 | { | |||||
510 | case xdr_datatype_float: | |||||
511 | for (j = 0; j < sb->nr; j++) | |||||
512 | { | |||||
513 | printf("%14d %8.4f\n", j, sb->fval[j]); | |||||
514 | } | |||||
515 | break; | |||||
516 | case xdr_datatype_double: | |||||
517 | for (j = 0; j < sb->nr; j++) | |||||
518 | { | |||||
519 | printf("%14d %10.6f\n", j, sb->dval[j]); | |||||
520 | } | |||||
521 | break; | |||||
522 | case xdr_datatype_int: | |||||
523 | for (j = 0; j < sb->nr; j++) | |||||
524 | { | |||||
525 | printf("%14d %10d\n", j, sb->ival[j]); | |||||
526 | } | |||||
527 | break; | |||||
528 | case xdr_datatype_int64: | |||||
529 | for (j = 0; j < sb->nr; j++) | |||||
530 | { | |||||
531 | printf("%14d %s\n", | |||||
532 | j, gmx_step_str(sb->lval[j], buf)); | |||||
533 | } | |||||
534 | break; | |||||
535 | case xdr_datatype_char: | |||||
536 | for (j = 0; j < sb->nr; j++) | |||||
537 | { | |||||
538 | printf("%14d %1c\n", j, sb->cval[j]); | |||||
539 | } | |||||
540 | break; | |||||
541 | case xdr_datatype_string: | |||||
542 | for (j = 0; j < sb->nr; j++) | |||||
543 | { | |||||
544 | printf("%14d %80s\n", j, sb->sval[j]); | |||||
545 | } | |||||
546 | break; | |||||
547 | default: | |||||
548 | gmx_incons("Unknown subblock type")_gmx_error("incons", "Unknown subblock type", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 548); | |||||
549 | } | |||||
550 | } | |||||
551 | } | |||||
552 | } | |||||
553 | } | |||||
554 | while (bCont); | |||||
555 | ||||||
556 | close_enx(in); | |||||
557 | ||||||
558 | free_enxframe(fr); | |||||
559 | sfree(fr)save_free("fr", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 559, (fr)); | |||||
560 | sfree(enm)save_free("enm", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 560, (enm)); | |||||
561 | } | |||||
562 | ||||||
563 | static void list_mtx(const char *fn) | |||||
564 | { | |||||
565 | int nrow, ncol, i, j, k; | |||||
566 | real *full = NULL((void*)0), value; | |||||
567 | gmx_sparsematrix_t * sparse = NULL((void*)0); | |||||
568 | ||||||
569 | gmx_mtxio_read(fn, &nrow, &ncol, &full, &sparse); | |||||
570 | ||||||
571 | if (full == NULL((void*)0)) | |||||
572 | { | |||||
573 | snew(full, nrow*ncol)(full) = save_calloc("full", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 573, (nrow*ncol), sizeof(*(full))); | |||||
574 | for (i = 0; i < nrow*ncol; i++) | |||||
575 | { | |||||
576 | full[i] = 0; | |||||
577 | } | |||||
578 | ||||||
579 | for (i = 0; i < sparse->nrow; i++) | |||||
580 | { | |||||
581 | for (j = 0; j < sparse->ndata[i]; j++) | |||||
582 | { | |||||
583 | k = sparse->data[i][j].col; | |||||
584 | value = sparse->data[i][j].value; | |||||
585 | full[i*ncol+k] = value; | |||||
586 | full[k*ncol+i] = value; | |||||
587 | } | |||||
588 | } | |||||
589 | gmx_sparsematrix_destroy(sparse); | |||||
590 | } | |||||
591 | ||||||
592 | printf("%d %d\n", nrow, ncol); | |||||
593 | for (i = 0; i < nrow; i++) | |||||
594 | { | |||||
595 | for (j = 0; j < ncol; j++) | |||||
596 | { | |||||
597 | printf(" %g", full[i*ncol+j]); | |||||
598 | } | |||||
599 | printf("\n"); | |||||
600 | } | |||||
601 | ||||||
602 | sfree(full)save_free("full", "/home/alexxy/Develop/gromacs/src/gromacs/tools/dump.c" , 602, (full)); | |||||
603 | } | |||||
604 | ||||||
605 | int gmx_dump(int argc, char *argv[]) | |||||
606 | { | |||||
607 | const char *desc[] = { | |||||
608 | "[THISMODULE] reads a run input file ([TT].tpa[tt]/[TT].tpr[tt]/[TT].tpb[tt]),", | |||||
609 | "a trajectory ([TT].trj[tt]/[TT].trr[tt]/[TT].xtc[tt]), an energy", | |||||
610 | "file ([TT].ene[tt]/[TT].edr[tt]), or a checkpoint file ([TT].cpt[tt])", | |||||
611 | "and prints that to standard output in a readable format.", | |||||
612 | "This program is essential for checking your run input file in case of", | |||||
613 | "problems.[PAR]", | |||||
614 | "The program can also preprocess a topology to help finding problems.", | |||||
615 | "Note that currently setting [TT]GMXLIB[tt] is the only way to customize", | |||||
616 | "directories used for searching include files.", | |||||
617 | }; | |||||
618 | const char *bugs[] = { | |||||
619 | "Position restraint output from -sys -s is broken" | |||||
620 | }; | |||||
621 | t_filenm fnm[] = { | |||||
622 | { efTPX, "-s", NULL((void*)0), ffOPTRD(1<<1 | 1<<3) }, | |||||
623 | { efTRX, "-f", NULL((void*)0), ffOPTRD(1<<1 | 1<<3) }, | |||||
624 | { efEDR, "-e", NULL((void*)0), ffOPTRD(1<<1 | 1<<3) }, | |||||
625 | { efCPT, NULL((void*)0), NULL((void*)0), ffOPTRD(1<<1 | 1<<3) }, | |||||
626 | { efTOP, "-p", NULL((void*)0), ffOPTRD(1<<1 | 1<<3) }, | |||||
627 | { efMTX, "-mtx", "hessian", ffOPTRD(1<<1 | 1<<3) }, | |||||
628 | { efMDP, "-om", NULL((void*)0), ffOPTWR(1<<2| 1<<3) } | |||||
629 | }; | |||||
630 | #define NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))) asize(fnm)((int)(sizeof(fnm)/sizeof((fnm)[0]))) | |||||
631 | ||||||
632 | output_env_t oenv; | |||||
633 | /* Command line options */ | |||||
634 | static gmx_bool bShowNumbers = TRUE1; | |||||
635 | static gmx_bool bSysTop = FALSE0; | |||||
636 | t_pargs pa[] = { | |||||
637 | { "-nr", FALSE0, etBOOL, {&bShowNumbers}, "Show index numbers in output (leaving them out makes comparison easier, but creates a useless topology)" }, | |||||
638 | { "-sys", FALSE0, etBOOL, {&bSysTop}, "List the atoms and bonded interactions for the whole system instead of for each molecule type" } | |||||
639 | }; | |||||
640 | ||||||
641 | if (!parse_common_args(&argc, argv, 0, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm, asize(pa)((int)(sizeof(pa)/sizeof((pa)[0]))), pa, | |||||
642 | asize(desc)((int)(sizeof(desc)/sizeof((desc)[0]))), desc, asize(bugs)((int)(sizeof(bugs)/sizeof((bugs)[0]))), bugs, &oenv)) | |||||
643 | { | |||||
644 | return 0; | |||||
645 | } | |||||
646 | ||||||
647 | ||||||
648 | if (ftp2bSet(efTPX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
649 | { | |||||
650 | list_tpx(ftp2fn(efTPX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm), bShowNumbers, | |||||
651 | ftp2fn_null(efMDP, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm), bSysTop); | |||||
652 | } | |||||
653 | else if (ftp2bSet(efTRX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
654 | { | |||||
655 | list_trx(ftp2fn(efTRX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)); | |||||
656 | } | |||||
657 | else if (ftp2bSet(efEDR, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
658 | { | |||||
659 | list_ene(ftp2fn(efEDR, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)); | |||||
660 | } | |||||
661 | else if (ftp2bSet(efCPT, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
662 | { | |||||
663 | list_checkpoint(ftp2fn(efCPT, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm), stdoutstdout); | |||||
664 | } | |||||
665 | else if (ftp2bSet(efTOP, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
666 | { | |||||
667 | list_top(ftp2fn(efTOP, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)); | |||||
668 | } | |||||
669 | else if (ftp2bSet(efMTX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)) | |||||
670 | { | |||||
671 | list_mtx(ftp2fn(efMTX, NFILE((int)(sizeof(fnm)/sizeof((fnm)[0]))), fnm)); | |||||
672 | } | |||||
673 | ||||||
674 | return 0; | |||||
675 | } |