1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | #ifdef HAVE_CONFIG_H1 |
36 | #include <config.h> |
37 | #endif |
38 | |
39 | #include "typedefs.h" |
40 | #include "gromacs/utility/smalloc.h" |
41 | #include "gromacs/math/vec.h" |
42 | #include "sim_util.h" |
43 | #include "mdrun.h" |
44 | #include "confio.h" |
45 | #include "trajectory_writing.h" |
46 | #include "mdoutf.h" |
47 | |
48 | #include "gromacs/timing/wallcycle.h" |
49 | |
50 | void |
51 | do_md_trajectory_writing(FILE *fplog, |
52 | t_commrec *cr, |
53 | int nfile, |
54 | const t_filenm fnm[], |
55 | gmx_int64_t step, |
56 | gmx_int64_t step_rel, |
57 | double t, |
58 | t_inputrec *ir, |
59 | t_state *state, |
60 | t_state *state_global, |
61 | gmx_mtop_t *top_global, |
62 | t_forcerec *fr, |
63 | gmx_mdoutf_t outf, |
64 | t_mdebin *mdebin, |
65 | gmx_ekindata_t *ekind, |
66 | rvec *f, |
67 | rvec *f_global, |
68 | gmx_wallcycle_t wcycle, |
69 | int *nchkpt, |
70 | gmx_bool bCPT, |
71 | gmx_bool bRerunMD, |
72 | gmx_bool bLastStep, |
73 | gmx_bool bDoConfOut, |
74 | gmx_bool bSumEkinhOld |
75 | ) |
76 | { |
77 | int mdof_flags; |
78 | |
79 | mdof_flags = 0; |
80 | if (do_per_step(step, ir->nstxout)) |
81 | { |
82 | mdof_flags |= MDOF_X(1<<0); |
83 | } |
84 | if (do_per_step(step, ir->nstvout)) |
85 | { |
86 | mdof_flags |= MDOF_V(1<<1); |
87 | } |
88 | if (do_per_step(step, ir->nstfout)) |
89 | { |
90 | mdof_flags |= MDOF_F(1<<2); |
91 | } |
92 | if (do_per_step(step, ir->nstxout_compressed)) |
93 | { |
94 | mdof_flags |= MDOF_X_COMPRESSED(1<<3); |
95 | } |
96 | if (bCPT) |
97 | { |
98 | mdof_flags |= MDOF_CPT(1<<4); |
99 | } |
100 | ; |
101 | |
102 | #if defined(GMX_FAHCORE) || defined(GMX_WRITELASTSTEP) |
103 | if (bLastStep) |
104 | { |
105 | |
106 | mdof_flags |= (MDOF_X(1<<0) | MDOF_V(1<<1)); |
107 | } |
108 | #endif |
109 | #ifdef GMX_FAHCORE |
110 | if (MASTER(cr)(((cr)->nodeid == 0) || !((cr)->nnodes > 1))) |
111 | { |
112 | fcReportProgress( ir->nsteps, step ); |
113 | } |
114 | |
115 | #if defined(__native_client__) |
116 | fcCheckin(MASTER(cr)(((cr)->nodeid == 0) || !((cr)->nnodes > 1))); |
117 | #endif |
118 | |
119 | |
120 | if (bCPT && MASTER(cr)(((cr)->nodeid == 0) || !((cr)->nnodes > 1))) |
121 | { |
122 | fcRequestCheckPoint(); |
123 | } |
124 | #endif |
125 | |
126 | if (mdof_flags != 0) |
127 | { |
128 | wallcycle_start(wcycle, ewcTRAJ); |
129 | if (bCPT) |
130 | { |
131 | if (MASTER(cr)(((cr)->nodeid == 0) || !((cr)->nnodes > 1))) |
132 | { |
133 | if (bSumEkinhOld) |
134 | { |
135 | state_global->ekinstate.bUpToDate = FALSE0; |
136 | } |
137 | else |
138 | { |
139 | update_ekinstate(&state_global->ekinstate, ekind); |
140 | state_global->ekinstate.bUpToDate = TRUE1; |
141 | } |
142 | update_energyhistory(&state_global->enerhist, mdebin); |
143 | } |
144 | } |
145 | mdoutf_write_to_trajectory_files(fplog, cr, outf, mdof_flags, top_global, |
146 | step, t, state, state_global, f, f_global); |
147 | if (bCPT) |
148 | { |
149 | (*nchkpt)++; |
150 | bCPT = FALSE0; |
| Value stored to 'bCPT' is never read |
151 | } |
152 | debug_gmx(); |
153 | if (bLastStep && step_rel == ir->nsteps && |
154 | bDoConfOut && MASTER(cr)(((cr)->nodeid == 0) || !((cr)->nnodes > 1)) && |
155 | !bRerunMD) |
156 | { |
157 | |
158 | |
159 | |
160 | |
161 | fprintf(stderrstderr, "\nWriting final coordinates.\n"); |
162 | if (fr->bMolPBC) |
163 | { |
164 | |
165 | do_pbc_mtop(fplog, ir->ePBC, state->box, top_global, state_global->x); |
166 | } |
167 | write_sto_conf_mtop(ftp2fn(efSTO, nfile, fnm), |
168 | *top_global->name, top_global, |
169 | state_global->x, state_global->v, |
170 | ir->ePBC, state->box); |
171 | debug_gmx(); |
172 | } |
173 | wallcycle_stop(wcycle, ewcTRAJ); |
174 | } |
175 | } |