+ switch (pcrd->eGeom)
+ {
+ case epullgDIST:
+ /* Pull along the vector between the com's */
+ pcrd->value = dnorm(pcrd->dr);
+ break;
+ case epullgDIR:
+ case epullgDIRPBC:
+ case epullgDIRRELATIVE:
+ case epullgCYL:
+ /* Pull along vec */
+ pcrd->value = 0;
+ for (m = 0; m < DIM; m++)
+ {
+ pcrd->value += pcrd->vec[m]*pcrd->dr[m];
+ }
+ break;
+ }
+}
+
+/* Returns the deviation from the reference value.
+ * Updates pull->coord[coord_ind].dr, .value and .value_ref.
+ */
+static double get_pull_coord_deviation(t_pull *pull,
+ int coord_ind,
+ const t_pbc *pbc,
+ double t)
+{
+ static gmx_bool bWarned = FALSE; /* TODO: this should be fixed for thread-safety,
+ but is fairly benign */
+ t_pull_coord *pcrd;
+ double dev = 0;
+
+ pcrd = &pull->coord[coord_ind];
+
+ get_pull_coord_distance(pull, coord_ind, pbc);
+
+ update_pull_coord_reference_value(pcrd, t);