File: | gromacs/tools/dump.c |
Location: | line 109, column 13 |
Description: | Value stored to 'indent' is never read |
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); |
Value stored to 'indent' is never read | |
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 | } |