Collective Variables Module - Developer Documentation
Loading...
Searching...
No Matches
colvarcomp.h
1// -*- c++ -*-
2
3// This file is part of the Collective Variables module (Colvars).
4// The original version of Colvars and its updates are located at:
5// https://github.com/Colvars/colvars
6// Please update all Colvars source files before making any changes.
7// If you wish to distribute your changes, please submit them to the
8// Colvars repository at GitHub.
9
10#ifndef COLVARCOMP_H
11#define COLVARCOMP_H
12
13// Declaration of colvar::cvc base class and derived ones.
14//
15// Future cvc's could be declared on additional header files.
16// After the declaration of a new derived class, its metric
17// functions must be reimplemented as well.
18// If the new cvc has no symmetry or periodicity,
19// this can be done straightforwardly by using the macro:
20// simple_scalar_dist_functions (derived_class)
21
22#include <memory>
23
24#include "colvarmodule.h"
25#include "colvaratoms.h"
26#include "colvar.h"
27#include "colvar_geometricpath.h"
28#include "colvaratoms.h"
29#include "colvarproxy.h"
30#include "colvar_gpu_calc.h"
31
69
71 : public colvarparse, public colvardeps
72{
73public:
74
77 std::string name;
78
80 std::string function_type() const;
81
83 std::string config_key;
84
87
89 int sup_np = 1;
90
93
96
98 cvc();
99
101 virtual ~cvc();
102
106 virtual int init(std::string const &conf);
107
109 virtual int init_dependencies();
110
112 int setup();
113
115 virtual const std::vector<feature *> &features() const
116 {
117 return cvc_features;
118 }
119
120 virtual std::vector<feature *> &modify_features()
121 {
122 return cvc_features;
123 }
124
125 static void delete_features() {
126 for (size_t i=0; i < cvc_features.size(); i++) {
127 delete cvc_features[i];
128 }
129 cvc_features.clear();
130 }
131
133 virtual std::vector<std::vector<int> > get_atom_lists();
134
136 virtual void read_data();
137
139 virtual void calc_value() = 0;
140
143 virtual void calc_gradients() {}
144
146 void calc_fit_gradients();
147
149 virtual void debug_gradients();
150
153 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
154
157 virtual void calc_force_invgrads();
158
160 virtual void calc_Jacobian_derivative();
161
162 // TODO: Maybe this should be a feature in colvarsdep but I am still constantly confused by colvarsdep
164 virtual bool has_gpu_implementation() const { return false; }
165
166#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
169 cudaGraph_t& graph,
170 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
171 { return COLVARS_NOT_IMPLEMENTED; }
172
174 virtual int calc_value_after_gpu() { return COLVARS_OK; }
175
179 cudaGraph_t& graph,
180 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
181 { return COLVARS_NOT_IMPLEMENTED; }
182
186 cudaGraph_t& graph,
187 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
188 { return COLVARS_NOT_IMPLEMENTED; }
189
191 virtual int calc_force_invgrads_after_gpu() { return COLVARS_OK; }
192
195 cudaGraph_t& graph,
196 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
197 { return COLVARS_NOT_IMPLEMENTED; }
198
200 virtual int calc_Jacobian_derivative_after_gpu() { return COLVARS_OK; }
201
203 virtual int debug_gradients_gpu(
206#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
207
209 colvarvalue const & value() const;
210
212 colvarvalue const & total_force() const;
213
216 colvarvalue const & Jacobian_derivative() const;
217
227 virtual void apply_force(colvarvalue const &cvforce);
228
247 virtual cvm::real dist2(colvarvalue const &x1,
248 colvarvalue const &x2) const;
249
253 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
254 colvarvalue const &x2) const;
255
259 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
260 colvarvalue const &x2) const;
261
263 virtual void wrap(colvarvalue &x_unwrapped) const;
264
267 std::vector<cvm::atom_group *> atom_groups;
268
271
273 virtual colvarvalue const *get_param_grad(std::string const &param_name);
274
276 virtual int set_param(std::string const &param_name, void const *new_value);
277
279 bool b_try_scalable = true;
280
283 inline void set_value(colvarvalue const &new_value, bool now=false) {
284 x = new_value;
285 // Cache value to be communicated to back-end between time steps
287 if (now) {
288 // If requested (e.g. upon restarting), sync to back-end
290 }
291 }
292
293protected:
294
296 int set_function_type(std::string const &type);
297
299 int update_description();
300
302 cvm::atom_group *parse_group(std::string const &conf, char const *group_key,
303 bool optional = false);
304
306 virtual int init_total_force_params(std::string const &conf);
307
309 static std::vector<feature *> cvc_features;
310
312 std::vector<std::string> function_types;
313
316
319
325
329
331 void init_as_distance();
332
334 void init_as_angle();
335
338
341
344
347
350};
351
352
353inline colvarvalue const & colvar::cvc::value() const
354{
355 return x;
356}
357
358
360{
361 return ft;
362}
363
364
366{
367 return jd;
368}
369
370
371
374
376 : public colvar::cvc
377{
378protected:
385public:
386 distance();
387 virtual ~distance() {}
388 virtual int init(std::string const &conf);
389 virtual void calc_value();
390 virtual void calc_gradients();
391 virtual void calc_force_invgrads();
392 virtual void calc_Jacobian_derivative();
393};
394
395
396
397// \brief Colvar component: distance vector between centers of mass
398// of two groups (\link colvarvalue::type_3vector \endlink type,
399// range (-*:*)x(-*:*)x(-*:*))
401 : public colvar::distance
402{
403public:
404 distance_vec();
405 virtual ~distance_vec() {}
406 virtual void calc_value();
407 virtual void calc_gradients();
408 virtual void apply_force(colvarvalue const &force);
410 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
412 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
414 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
416 virtual void wrap(colvarvalue &x_unwrapped) const;
417};
418
419
424 : public colvar::distance
425{
426public:
427 distance_dir();
428 virtual ~distance_dir() {}
429 virtual void calc_value();
430 virtual void calc_gradients();
431 virtual void apply_force(colvarvalue const &force);
433 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
435 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
437 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
439 virtual void wrap(colvarvalue &x_unwrapped) const;
440};
441
442
443
447 : public colvar::cvc
448{
449protected:
463 bool fixed_axis = true;
464public:
465 distance_z();
466 virtual ~distance_z() {}
467 virtual int init(std::string const &conf);
468 virtual void calc_value();
469 virtual void calc_gradients();
470 virtual void calc_force_invgrads();
471 virtual void calc_Jacobian_derivative();
472};
473
474
475
479 : public colvar::distance_z
480{
481protected:
486public:
487 distance_xy();
488 virtual ~distance_xy() {}
489 virtual void calc_value();
490 virtual void calc_gradients();
491 virtual void calc_force_invgrads();
492 virtual void calc_Jacobian_derivative();
493};
494
495
499 : public colvar::cvc
500{
501protected:
502 cvm::atom_group *atoms = nullptr;
503 cvm::real r, theta, phi;
504
505public:
506 polar_phi();
507 virtual ~polar_phi() {}
508 virtual int init(std::string const &conf);
509 virtual void calc_value();
510 virtual void calc_gradients();
511};
512
513
517 : public colvar::cvc
518{
519public:
520 polar_theta();
521 virtual ~polar_theta() {}
522 virtual int init(std::string const &conf);
523protected:
524 cvm::atom_group *atoms = nullptr;
525 cvm::real r, theta, phi;
526public:
527 virtual void calc_value();
528 virtual void calc_gradients();
529};
530
531
535 : public colvar::cvc
536{
537protected:
543 int exponent = 6;
544public:
545 distance_inv();
546 virtual ~distance_inv() {}
547 virtual int init(std::string const &conf);
548 virtual void calc_value();
549 virtual void calc_gradients();
550};
551
552
553
557 : public colvar::cvc
558{
559protected:
564public:
566 virtual ~distance_pairs() {}
567 virtual int init(std::string const &conf);
568 virtual void calc_value();
569 virtual void calc_gradients();
570 virtual void apply_force(colvarvalue const &force);
572 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
574 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
576 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
578 virtual void wrap(colvarvalue &x_unwrapped) const;
579};
580
581
584 : public colvar::cvc
585{
586protected:
589 cvm::atom_pos dipoleV;
590public:
592 virtual ~dipole_magnitude() {}
593 virtual int init(std::string const &conf);
594 virtual void calc_value();
595 virtual void calc_gradients();
596};
597
598
599
603 : public colvar::cvc
604{
605protected:
608public:
609 gyration();
610 virtual ~gyration() {}
611 virtual int init(std::string const &conf);
612 virtual void calc_value();
613 virtual void calc_gradients();
614 virtual void calc_force_invgrads();
615 virtual void calc_Jacobian_derivative();
616};
617
618
619
623 : public colvar::gyration
624{
625public:
626 inertia();
627 virtual ~inertia() {}
628 virtual void calc_value();
629 virtual void calc_gradients();
630};
631
632
633
637 : public colvar::inertia
638{
639protected:
642public:
643 inertia_z();
644 virtual ~inertia_z() {}
645 virtual int init(std::string const &conf);
646 virtual void calc_value();
647 virtual void calc_gradients();
648};
649
650
651
655 : public colvar::cvc
656{
657protected:
658
661
663 std::vector<cvm::atom_pos> ref_pos;
664
666 std::vector<cvm::rvector> eigenvec;
667
670
671public:
672
673 eigenvector();
674 virtual ~eigenvector() {}
675 virtual int init(std::string const &conf);
676 virtual void calc_value();
677 virtual void calc_gradients();
678 virtual void calc_force_invgrads();
679 virtual void calc_Jacobian_derivative();
680};
681
682
683
687 : public colvar::cvc
688{
689protected:
702
706 bool b_1site_force = false;
707public:
708
709 angle();
714 virtual ~angle() {}
715 virtual int init(std::string const &conf);
716 virtual void calc_value();
717 virtual void calc_gradients();
718 virtual void calc_force_invgrads();
719 virtual void calc_Jacobian_derivative();
720};
721
722
723
727 : public colvar::cvc
728{
729protected:
730
743
747 bool b_1site_force = false;
748public:
749
750 dipole_angle();
751 virtual ~dipole_angle() {}
752 virtual int init(std::string const &conf);
753 virtual void calc_value();
754 virtual void calc_gradients();
755};
756
757
758
762 : public colvar::cvc
763{
764protected:
765
775 cvm::rvector r12, r23, r34;
776
779 bool b_1site_force = false;
780
781public:
782
788 dihedral();
789 virtual ~dihedral() {}
790 virtual int init(std::string const &conf);
791 virtual void calc_value();
792 virtual void calc_gradients();
793 virtual void calc_force_invgrads();
794 virtual void calc_Jacobian_derivative();
795};
796
797
798
802 : public colvar::cvc
803{
804protected:
814 bool b_anisotropic = false;
816 int en = 6;
818 int ed = 12;
819
822
825
827 int pairlist_freq = 100;
828
830 bool *pairlist = nullptr;
831
832public:
833
834 coordnum();
835 virtual ~coordnum();
836 virtual int init(std::string const &conf);
837 virtual void calc_value();
838 virtual void calc_gradients();
839
840 enum {
841 ef_null = 0,
842 ef_gradients = 1,
843 ef_anisotropic = (1<<8),
844 ef_use_pairlist = (1<<9),
845 ef_rebuild_pairlist = (1<<10)
846 };
847
855 template<int flags>
857 cvm::rvector const &inv_r0_vec,
858 cvm::rvector const &inv_r0sq_vec,
859 int en,
860 int ed,
861 const cvm::real a1x,
862 const cvm::real a1y,
863 const cvm::real a1z,
864 const cvm::real a2x,
865 const cvm::real a2y,
866 const cvm::real a2z,
867 cvm::real& g1x,
868 cvm::real& g1y,
869 cvm::real& g1z,
870 cvm::real& g2x,
871 cvm::real& g2y,
872 cvm::real& g2z,
873 bool **pairlist_elem,
875
877 template<int flags> int compute_coordnum();
878
880 template<int flags> void main_loop(bool **pairlist_elem);
881
882};
883
884
885
889 : public colvar::cvc
890{
891protected:
897 int en = 6;
899 int ed = 12;
900 cvm::real tolerance = 0.0;
901 int pairlist_freq = 100;
902
903 bool *pairlist = nullptr;
904
905public:
906
907 selfcoordnum();
909 virtual int init(std::string const &conf);
910 virtual void calc_value();
911 virtual void calc_gradients();
912
914 template<int flags> int compute_selfcoordnum();
915};
916
917
918
922 : public colvar::distance
923{
924protected:
931 bool b_anisotropic = false;
933 int en = 6;
935 int ed = 12;
936public:
938 virtual ~groupcoordnum() {}
939 virtual int init(std::string const &conf);
940 virtual void calc_value();
941 virtual void calc_gradients();
942};
943
944
945
950 : public colvar::cvc
951{
952protected:
956 int en = 6;
958 int ed = 8;
959public:
961 h_bond(cvm::atom_group::simple_atom const &acceptor,
962 cvm::atom_group::simple_atom const &donor,
963 cvm::real r0, int en, int ed);
964 h_bond();
965 virtual ~h_bond() {}
966 virtual int init(std::string const &conf);
967 virtual void calc_value();
968 virtual void calc_gradients();
969};
970
971
977 : public colvar::cvc
978{
979protected:
980
983
986
988 std::vector<angle *> theta;
989
991 std::vector<h_bond *> hb;
992
995
998
1000 int en = 6;
1001
1003 int ed = 8;
1004
1005public:
1006
1007 alpha_angles();
1008 virtual ~alpha_angles();
1009 virtual int init(std::string const &conf);
1010 void calc_value();
1011 void calc_gradients();
1013 void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1014 void apply_force(colvarvalue const &force);
1015};
1016
1017
1018
1024 : public colvar::cvc
1025{
1026protected:
1027
1028 std::vector<dihedral *> theta;
1029 std::vector<cvm::real> coeffs;
1030
1031public:
1032
1033 dihedPC();
1034 virtual ~dihedPC();
1035 virtual int init(std::string const &conf);
1036 virtual void calc_value();
1037 virtual void calc_gradients();
1039 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1040 virtual void apply_force(colvarvalue const &force);
1041};
1042
1043
1044
1050 : public colvar::cvc
1051{
1052protected:
1057
1059 cvm::ag_vector_real_t ref_pos_soa;
1060 size_t num_ref_pos;
1061
1063 cvm::ag_vector_real_t shifted_pos_soa;
1064 size_t num_shifted_pos;
1065
1068
1072
1075 std::unique_ptr<rotation_derivative_impl_> rot_deriv_impl;
1076
1077public:
1078
1079 orientation();
1080 virtual ~orientation();
1081 virtual int init(std::string const &conf);
1082 virtual void calc_value();
1083 virtual void calc_gradients();
1084 virtual void apply_force(colvarvalue const &force);
1086 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1088 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1090 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1092 virtual void wrap(colvarvalue &x_unwrapped) const;
1093};
1094
1095
1100 : public colvar::orientation
1101{
1102public:
1103
1105 virtual ~orientation_angle() {}
1106 virtual void calc_value();
1107 virtual void calc_gradients();
1108 virtual void apply_force(colvarvalue const &force);
1110 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1112 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1114 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1116 virtual void wrap(colvarvalue &x_unwrapped) const;
1117};
1118
1119
1120
1126{
1127public:
1128
1130 virtual ~orientation_proj() {}
1131 virtual void calc_value();
1132 virtual void calc_gradients();
1133};
1134
1135
1136
1141{
1142protected:
1143
1144 cvm::rvector axis;
1145
1146public:
1147
1148 tilt();
1149 virtual ~tilt() {}
1150 virtual int init(std::string const &conf);
1151 virtual void calc_value();
1152 virtual void calc_gradients();
1153};
1154
1155
1156
1160 : public colvar::tilt
1161{
1162public:
1163
1164 spin_angle();
1165 virtual ~spin_angle() {}
1166 virtual void calc_value();
1167 virtual void calc_gradients();
1168};
1169
1170
1173{
1174public:
1175 euler_phi();
1176 virtual ~euler_phi() {}
1177 virtual void calc_value();
1178 virtual void calc_gradients();
1179};
1180
1181
1184{
1185public:
1186 euler_psi();
1187 virtual ~euler_psi() {}
1188 virtual void calc_value();
1189 virtual void calc_gradients();
1190};
1191
1192
1195{
1196public:
1197 euler_theta();
1198 virtual ~euler_theta() {}
1199 virtual void calc_value();
1200 virtual void calc_gradients();
1201};
1202
1203
1209 : public colvar::cvc
1210{
1211protected:
1212
1213 // TODO: transfrom ref_pos to soa
1216
1219 size_t num_ref_pos = 0;
1220 cvm::ag_vector_real_t ref_pos_soa;
1221
1222#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1223 cvm::real* d_ref_pos_soa;
1224 cvm::real* d_permutation_msds;
1225 unsigned int* d_tbcounts;
1226 cvm::real* h_rmsd;
1227 size_t* h_best_perm_index;
1228 cvm::real* d_ft;
1229 cvm::real* h_ft;
1230 cvm::real* d_jd;
1231 cvm::real* h_jd;
1232 unsigned int* d_tbcount_ft;
1233 unsigned int* d_tbcount_jd;
1234#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1235
1237 size_t n_permutations = 1;
1238 cvm::ag_vector_real_t permutation_msds;
1239
1242
1244 int init_permutation(std::vector<cvm::atom_pos>& ref_pos, std::string const &conf);
1245
1246public:
1247 rmsd();
1248 bool has_gpu_implementation() const override;
1249#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1251 cudaGraph_t& graph,
1252 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1253 int calc_value_after_gpu() override;
1255 cudaGraph_t& graph,
1256 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1258 cudaGraph_t& graph,
1259 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1260 int calc_force_invgrads_after_gpu() override;
1262 cudaGraph_t& graph,
1263 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1265#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1266 virtual ~rmsd();
1267 virtual int init(std::string const &conf) override;
1268 virtual void calc_value() override;
1269 virtual void calc_gradients() override;
1270 virtual void calc_force_invgrads() override;
1271 virtual void calc_Jacobian_derivative() override;
1272};
1273
1274
1275
1276// \brief Colvar component: flat vector of Cartesian coordinates
1277// Mostly useful to compute scripted colvar values
1279 : public colvar::cvc
1280{
1281protected:
1285 std::vector<size_t> axes;
1286public:
1287 cartesian();
1288 virtual ~cartesian() {}
1289 virtual int init(std::string const &conf);
1290 virtual void calc_value();
1291 virtual void calc_gradients();
1292 virtual void apply_force(colvarvalue const &force);
1294 virtual cvm::real dist2(colvarvalue const &x1,
1295 colvarvalue const &x2) const;
1297 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1298 colvarvalue const &x2) const;
1300 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1301 colvarvalue const &x2) const;
1303 virtual void wrap(colvarvalue &x_unwrapped) const;
1304};
1305
1306
1307// \brief Colvar component: alch_lambda
1308// To communicate value with back-end in lambda-dynamics
1310 : public colvar::cvc
1311{
1312protected:
1313 // No atom groups needed
1314public:
1315 alch_lambda();
1316 int init_alchemy(int time_step_factor);
1317 virtual ~alch_lambda() {}
1318 virtual void calc_value();
1319 virtual void calc_force_invgrads();
1320 virtual void calc_Jacobian_derivative();
1321 virtual void apply_force(colvarvalue const &force);
1322};
1323
1324
1325// \brief Colvar component: alch_Flambda
1326// To communicate force on lambda with back-end in lambda-dynamics
1328 : public colvar::cvc
1329{
1330protected:
1331 // No atom groups needed
1332public:
1333 alch_Flambda();
1334 virtual ~alch_Flambda() {}
1335 virtual void calc_value();
1336 virtual void calc_gradients();
1337 virtual void apply_force(colvarvalue const &force);
1338};
1339
1340
1342 : public colvar::cvc
1343{
1344protected:
1345 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result);
1346 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1352 std::vector<std::vector<cvm::atom_pos>> reference_frames;
1353 std::vector<std::vector<cvm::atom_pos>> reference_fitting_frames;
1355 std::vector<cvm::atom_group*> comp_atoms;
1358public:
1360 virtual ~CartesianBasedPath();
1361 virtual int init(std::string const &conf);
1362 virtual void calc_value() = 0;
1364 virtual void apply_force(colvarvalue const &force);
1365};
1366
1371 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::S>
1372{
1373private:
1374 // Optimal rotation for compute v3
1375 cvm::rotation rot_v3;
1376protected:
1377 virtual void prepareVectors();
1378 virtual void updateDistanceToReferenceFrames();
1379public:
1380 gspath();
1381 virtual ~gspath() {}
1382 virtual int init(std::string const &conf);
1383 virtual void calc_value();
1384 virtual void calc_gradients();
1385 virtual void apply_force(colvarvalue const &force);
1386};
1387
1388
1389
1393 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::Z>
1394{
1395private:
1396 // Optimal rotation for compute v3, v4
1397 cvm::rotation rot_v3;
1398 cvm::rotation rot_v4;
1399protected:
1400 virtual void prepareVectors();
1401 virtual void updateDistanceToReferenceFrames();
1402public:
1403 gzpath();
1404 virtual ~gzpath() {}
1405 virtual int init(std::string const &conf);
1406 virtual void calc_value();
1407 virtual void calc_gradients();
1408 virtual void apply_force(colvarvalue const &force);
1409};
1410
1413 : public colvar::cvc
1414{
1415protected:
1417 std::vector<colvar::cvc*> cv;
1420protected:
1421 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1422public:
1424 virtual ~linearCombination();
1425 virtual int init(std::string const &conf);
1426 virtual void calc_value();
1427 virtual void calc_gradients();
1428 virtual void apply_force(colvarvalue const &force);
1430 virtual cvm::real dist2(colvarvalue const &x1,
1431 colvarvalue const &x2) const;
1433 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1434 colvarvalue const &x2) const;
1436 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1437 colvarvalue const &x2) const;
1439 virtual void wrap(colvarvalue &x_unwrapped) const;
1440};
1441
1442
1446{
1447protected:
1448 bool use_custom_function = false;
1449#ifdef LEPTON
1451 std::vector<Lepton::CompiledExpression *> value_evaluators;
1453 std::vector<Lepton::CompiledExpression *> gradient_evaluators;
1455 std::vector<double *> value_eval_var_refs;
1456 std::vector<double *> grad_eval_var_refs;
1458 double dev_null = 0.0;
1459#endif
1460public:
1461 customColvar();
1462 virtual ~customColvar();
1463 virtual int init(std::string const &conf);
1464 virtual void calc_value();
1465 virtual void calc_gradients();
1466 virtual void apply_force(colvarvalue const &force);
1467};
1468
1469
1471 : public colvar::cvc
1472{
1473protected:
1475 std::vector<colvar::cvc*> cv;
1477 std::vector<std::vector<colvarvalue>> ref_cv;
1482protected:
1483 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1485 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result) const;
1486 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1487public:
1488 CVBasedPath();
1489 virtual ~CVBasedPath();
1490 virtual int init(std::string const &conf);
1491 virtual void calc_value() = 0;
1493 virtual void apply_force(colvarvalue const &force);
1495 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1497 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1499 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1501 virtual void wrap(colvarvalue &x_unwrapped) const;
1502};
1503
1504
1510 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::S>
1511{
1512protected:
1513 virtual void updateDistanceToReferenceFrames();
1514 virtual void prepareVectors();
1515public:
1516 gspathCV();
1517 virtual ~gspathCV();
1518 virtual int init(std::string const &conf);
1519 virtual void calc_value();
1520 virtual void calc_gradients();
1521 virtual void apply_force(colvarvalue const &force);
1522};
1523
1524
1525
1527 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::Z>
1528{
1529protected:
1530 virtual void updateDistanceToReferenceFrames();
1531 virtual void prepareVectors();
1532public:
1533 gzpathCV();
1534 virtual ~gzpathCV();
1535 virtual int init(std::string const &conf);
1536 virtual void calc_value();
1537 virtual void calc_gradients();
1538 virtual void apply_force(colvarvalue const &force);
1539};
1540
1541struct ArithmeticPathImpl;
1542
1545{
1546private:
1547 std::unique_ptr<ArithmeticPathImpl> impl_;
1548 friend struct ArithmeticPathImpl;
1549public:
1550 aspath();
1551 virtual ~aspath();
1552 virtual int init(std::string const &conf);
1553 virtual void calc_value();
1554 virtual void calc_gradients();
1555 virtual void apply_force(colvarvalue const &force);
1556};
1557
1560{
1561private:
1562 std::unique_ptr<ArithmeticPathImpl> impl_;
1563 friend struct ArithmeticPathImpl;
1564public:
1565 azpath();
1566 virtual ~azpath();
1567 virtual int init(std::string const &conf);
1568 virtual void calc_value();
1569 virtual void calc_gradients();
1570 virtual void apply_force(colvarvalue const &force);
1571};
1572
1574 : public colvar::CVBasedPath
1575{
1576private:
1577 std::unique_ptr<ArithmeticPathImpl> impl_;
1578 friend struct ArithmeticPathImpl;
1579public:
1580 aspathCV();
1581 virtual ~aspathCV();
1582 virtual int init(std::string const &conf);
1583 virtual void calc_value();
1584 virtual void calc_gradients();
1585 virtual void apply_force(colvarvalue const &force);
1586};
1587
1588
1590 : public colvar::CVBasedPath
1591{
1592private:
1593 std::unique_ptr<ArithmeticPathImpl> impl_;
1594 friend struct ArithmeticPathImpl;
1595public:
1596 azpathCV();
1597 virtual ~azpathCV();
1598 virtual int init(std::string const &conf);
1599 virtual void calc_value();
1600 virtual void calc_gradients();
1601 virtual void apply_force(colvarvalue const &force);
1602};
1603
1604// forward declaration
1605namespace neuralnetworkCV {
1606 class neuralNetworkCompute;
1607}
1608
1609
1611 : public linearCombination
1612{
1613protected:
1615 std::unique_ptr<neuralnetworkCV::neuralNetworkCompute> nn;
1617 size_t m_output_index = 0;
1618public:
1619 neuralNetwork();
1620 virtual ~neuralNetwork();
1621 virtual int init(std::string const &conf);
1622 virtual void calc_value();
1623 virtual void calc_gradients();
1624 virtual void apply_force(colvarvalue const &force);
1626 virtual cvm::real dist2(colvarvalue const &x1,
1627 colvarvalue const &x2) const;
1629 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1630 colvarvalue const &x2) const;
1632 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1633 colvarvalue const &x2) const;
1635 virtual void wrap(colvarvalue &x_unwrapped) const;
1636};
1637
1638
1639// \brief Colvar component: total value of a scalar map
1640// (usually implemented as a grid by the simulation engine)
1642 : public colvar::cvc
1643{
1644public:
1645
1646 map_total();
1647 virtual ~map_total() {}
1648 virtual int init(std::string const &conf);
1649 virtual void calc_value();
1650 virtual void calc_gradients();
1651 virtual void apply_force(colvarvalue const &force);
1652
1653protected:
1654
1656 std::string volmap_name;
1657
1659 int volmap_id = -1;
1660
1663
1666
1668 std::vector<cvm::real> atom_weights;
1669};
1670
1671
1672
1673#endif
Definition: colvar_geometricpath.h:24
Definition: colvarcomp.h:1472
std::vector< colvar::cvc * > cv
Sub-colvar components.
Definition: colvarcomp.h:1475
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1481
bool use_explicit_gradients
If all sub-cvs use explicit gradients then we also use it.
Definition: colvarcomp.h:1479
std::vector< std::vector< colvarvalue > > ref_cv
Reference colvar values from path.
Definition: colvarcomp.h:1477
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:673
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use the metric of the returned colvarvalue (defined at runtime)
Definition: colvarcomp_gpath.cpp:680
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use the metric of the returned colvarvalue (defined at runtime)
Definition: colvarcomp_gpath.cpp:686
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to use the metric of the returned colvarvalue (defined at runtime)
Definition: colvarcomp_gpath.cpp:698
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:506
virtual void calc_value()=0
Calculate the variable.
virtual void computeDistanceBetweenReferenceFrames(std::vector< cvm::real > &result) const
Helper function to determine the distance between reference frames.
Definition: colvarcomp_gpath.cpp:628
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use the metric of the returned colvarvalue (defined at runtime)
Definition: colvarcomp_gpath.cpp:692
Definition: colvarcomp.h:1343
cvm::atom_group * atoms
Selected atoms.
Definition: colvarcomp.h:1348
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:173
std::vector< std::vector< cvm::atom_pos > > reference_frames
Reference frames.
Definition: colvarcomp.h:1352
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1357
bool has_user_defined_fitting
Fitting options.
Definition: colvarcomp.h:1350
virtual void calc_value()=0
Calculate the variable.
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:31
std::vector< cvm::atom_group * > comp_atoms
Atom groups for RMSD calculation together with reference frames.
Definition: colvarcomp.h:1355
Definition: colvarcomp.h:1329
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_alchlambda.cpp:110
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_alchlambda.cpp:115
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_alchlambda.cpp:99
Definition: colvarcomp.h:1311
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_alchlambda.cpp:70
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_alchlambda.cpp:54
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_alchlambda.cpp:82
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_alchlambda.cpp:76
Colvar component: alpha helix content of a contiguous segment of 5 or more residues,...
Definition: colvarcomp.h:978
void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:236
cvm::real theta_tol
Tolerance on the Calpha-Calpha angle.
Definition: colvarcomp.h:985
int en
Integer exponent of the HB numerator.
Definition: colvarcomp.h:1000
cvm::real theta_ref
Reference Calpha-Calpha angle (default: 88 degrees)
Definition: colvarcomp.h:982
void collect_gradients(std::vector< int > const &atom_ids, std::vector< cvm::rvector > &atomic_gradients)
Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs.
Definition: colvarcomp_protein.cpp:247
void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:192
cvm::real hb_coeff
Contribution of the HB terms.
Definition: colvarcomp.h:994
int ed
Integer exponent of the HB denominator.
Definition: colvarcomp.h:1003
void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_protein.cpp:299
cvm::real r0
Cutoff for HB.
Definition: colvarcomp.h:997
std::vector< h_bond * > hb
List of hydrogen bonds.
Definition: colvarcomp.h:991
virtual int init(std::string const &conf)
Definition: colvarcomp_protein.cpp:28
std::vector< angle * > theta
List of Calpha-Calpha angles.
Definition: colvarcomp.h:988
Colvar component: angle between the centers of mass of three groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:688
bool b_1site_force
Definition: colvarcomp.h:706
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:695
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:697
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:81
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:121
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:693
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:26
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:60
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:98
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:701
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:699
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:691
Definition: colvarcomp.h:1575
virtual int init(std::string const &conf)
Definition: colvarcomp_apath.cpp:258
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_apath.cpp:282
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_apath.cpp:297
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_apath.cpp:323
Definition: colvarcomp.h:1545
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_apath.cpp:188
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_apath.cpp:177
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_apath.cpp:162
virtual int init(std::string const &conf)
Definition: colvarcomp_apath.cpp:144
Definition: colvarcomp.h:1591
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_apath.cpp:404
virtual int init(std::string const &conf)
Definition: colvarcomp_apath.cpp:367
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_apath.cpp:389
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_apath.cpp:430
Definition: colvarcomp.h:1560
virtual int init(std::string const &conf)
Definition: colvarcomp_apath.cpp:201
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_apath.cpp:234
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_apath.cpp:245
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_apath.cpp:219
Definition: colvarcomp.h:1280
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1664
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1627
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1283
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1670
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:1584
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1613
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1652
std::vector< size_t > axes
Which Cartesian coordinates to include.
Definition: colvarcomp.h:1285
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1658
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_distances.cpp:1635
Colvar component: coordination number between two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:803
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:816
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:337
int compute_coordnum()
Workhorse function.
Definition: colvarcomp_coordnums.cpp:288
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:808
cvm::real tolerance
Tolerance for the pair list.
Definition: colvarcomp.h:824
bool b_group2_center_only
If true, group2 will be treated as a single atom.
Definition: colvarcomp.h:821
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:818
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:348
static cvm::real switching_function(cvm::real const &r0, cvm::rvector const &inv_r0_vec, cvm::rvector const &inv_r0sq_vec, int en, int ed, const cvm::real a1x, const cvm::real a1y, const cvm::real a1z, const cvm::real a2x, const cvm::real a2y, const cvm::real a2z, cvm::real &g1x, cvm::real &g1y, cvm::real &g1z, cvm::real &g2x, cvm::real &g2y, cvm::real &g2z, bool **pairlist_elem, cvm::real tolerance)
Calculate a coordination number through the function (1-x**n)/(1-x**m), where x = |A1-A2|/r0.
Definition: colvarcomp_coordnums.cpp:18
int pairlist_freq
Frequency of update of the pair list.
Definition: colvarcomp.h:827
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:810
bool b_anisotropic
Whether r/r0 or \vec{r}*\vec{1/r0_vec} should be used.
Definition: colvarcomp.h:814
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:136
bool * pairlist
Pair list.
Definition: colvarcomp.h:830
void main_loop(bool **pairlist_elem)
Workhorse function.
Definition: colvarcomp_coordnums.cpp:229
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:806
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:812
custom expression of colvars
Definition: colvarcomp.h:1446
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_combination.cpp:310
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_combination.cpp:350
virtual int init(std::string const &conf)
Definition: colvarcomp_combination.cpp:179
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_combination.cpp:279
Colvar component (base class for collective variables)
Definition: colvarcomp.h:72
virtual void collect_gradients(std::vector< int > const &atom_ids, std::vector< cvm::rvector > &atomic_gradients)
Calculate atomic gradients and add them to the corresponding item in gradient vector May be overridde...
Definition: colvarcomp.cpp:479
virtual int init_total_force_params(std::string const &conf)
Parse options pertaining to total force calculation.
Definition: colvarcomp.cpp:139
virtual void wrap(colvarvalue &x_unwrapped) const
Wrap value (for periodic/symmetric cvcs)
Definition: colvarcomp.cpp:1142
int sup_np
Exponent in the polynomial combination (default: 1)
Definition: colvarcomp.h:89
int set_function_type(std::string const &type)
Set the value of function_type and its dependencies.
Definition: colvarcomp.cpp:49
cvm::real sup_coeff
Coefficient in the polynomial combination (default: 1.0)
Definition: colvarcomp.h:86
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp.cpp:524
colvarvalue jd
Calculated Jacobian derivative (divergence of the inverse gradients): serves to calculate the phase s...
Definition: colvarcomp.h:328
std::vector< std::string > function_types
Record the type of this class as well as those it is derived from.
Definition: colvarcomp.h:312
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Gradient(with respect to x2) of the square distance (can be redefined to transparently implement cons...
Definition: colvarcomp.cpp:1136
std::string function_type() const
String identifier for the type of collective variable.
Definition: colvarcomp.cpp:40
virtual int init(std::string const &conf)
Definition: colvarcomp.cpp:62
virtual void debug_gradients()
Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component.
Definition: colvarcomp.cpp:561
virtual int add_calc_Jacobian_derivative_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map)
Calculate the divergence of the inverse atomic gradients on GPU.
Definition: colvarcomp.h:194
virtual ~cvc()
Destructor.
Definition: colvarcomp.cpp:355
colvarvalue const & Jacobian_derivative() const
Return the previously calculated divergence of the inverse atomic gradients.
Definition: colvarcomp.h:365
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp.h:143
cvm::real width
CVC-specific default colvar width (default: not provided)
Definition: colvarcomp.h:349
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Gradient(with respect to x1) of the square distance (can be redefined to transparently implement cons...
Definition: colvarcomp.cpp:1125
virtual colvarvalue const * get_param_grad(std::string const &param_name)
Pointer to the gradient of parameter param_name.
Definition: colvarcomp.cpp:413
int setup()
After construction, set data related to dependency handling.
Definition: colvarcomp.cpp:348
virtual int set_param(std::string const &param_name, void const *new_value)
Set the named parameter to the given value.
Definition: colvarcomp.cpp:421
colvarvalue const & value() const
Return the previously calculated value.
Definition: colvarcomp.h:353
static std::vector< feature * > cvc_features
Implementation of the feature list for colvar.
Definition: colvarcomp.h:309
virtual int init_dependencies()
Initialize dependency tree.
Definition: colvarcomp.cpp:233
colvarvalue ft
Calculated total force (Note: this is calculated from the total atomic forces read from the program,...
Definition: colvarcomp.h:324
int update_description()
Update the description string based on name and type.
Definition: colvarcomp.cpp:28
std::string name
The name of the object (helps to identify this cvc instance when debugging)
Definition: colvarcomp.h:77
virtual int add_calc_value_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map)
Calculate the variable on GPU.
Definition: colvarcomp.h:168
virtual int add_calc_force_invgrads_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map)
Calculate the total force from the system using the inverse atomic gradients on GPU.
Definition: colvarcomp.h:185
virtual int add_calc_gradients_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map)
Calculate the atomic gradients, to be reused later in order to apply forces on GPU.
Definition: colvarcomp.h:178
virtual int calc_value_after_gpu()
CPU-side calculation after the graph in add_calc_value_node is done on GPU.
Definition: colvarcomp.h:174
bool b_try_scalable
Whether or not this CVC will be computed in parallel whenever possible.
Definition: colvarcomp.h:279
cvm::real wrap_center
If the component is periodic, wrap around this value (default: 0.0)
Definition: colvarcomp.h:95
virtual void calc_value()=0
Calculate the variable.
void set_value(colvarvalue const &new_value, bool now=false)
Definition: colvarcomp.h:283
virtual void read_data()
Obtain data needed for the calculation for the backend.
Definition: colvarcomp.cpp:447
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Definition: colvarcomp.cpp:1114
colvarvalue x
Cached value.
Definition: colvarcomp.h:315
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp.cpp:532
void calc_fit_gradients()
Calculate the atomic fit gradients.
Definition: colvarcomp.cpp:540
void init_as_periodic_angle()
Set data types for a periodic angle (-180° to 180°)
Definition: colvarcomp.cpp:382
virtual std::vector< std::vector< int > > get_atom_lists()
Get vector of vectors of atom IDs for all atom groups.
Definition: colvarcomp.cpp:461
cvc()
Constructor.
Definition: colvarcomp.cpp:21
virtual int calc_force_invgrads_after_gpu()
CPU-side calculation after the graph in add_calc_force_invgrads_node is done on GPU.
Definition: colvarcomp.h:191
void register_atom_group(cvm::atom_group *ag)
Store a pointer to new atom group, and list as child for dependencies.
Definition: colvarcomp.cpp:405
virtual int debug_gradients_gpu(colvars_gpu::colvarmodule_gpu_calc::compute_gpu_graph_t &calc_value_graph, colvars_gpu::colvarmodule_gpu_calc::compute_gpu_graph_t &calc_gradients_graph)
Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component on ...
Definition: colvarcomp.cpp:842
virtual bool has_gpu_implementation() const
Check the GPU availability.
Definition: colvarcomp.h:164
void init_as_angle()
Set data types for a bounded angle (0° to 180°)
Definition: colvarcomp.cpp:375
void init_as_distance()
Set data types for a scalar distance (convenience function)
Definition: colvarcomp.cpp:365
colvarvalue const & total_force() const
Return the previously calculated total force.
Definition: colvarcomp.h:359
colvarvalue x_old
Value at the previous step.
Definition: colvarcomp.h:318
colvarvalue upper_boundary
Location of the upper boundary (not defined by user choice)
Definition: colvarcomp.h:346
colvarvalue lower_boundary
Location of the lower boundary (not defined by user choice)
Definition: colvarcomp.h:343
void init_scalar_boundaries(cvm::real lb, cvm::real ub)
Set two scalar boundaries (convenience function)
Definition: colvarcomp.cpp:392
std::vector< cvm::atom_group * > atom_groups
Pointers to all atom groups, to let colvars collect info e.g. atomic gradients.
Definition: colvarcomp.h:267
std::string config_key
Keyword used in the input to denote this CVC.
Definition: colvarcomp.h:83
virtual int calc_Jacobian_derivative_after_gpu()
CPU-side calculation after the graph in add_calc_Jacobian_derivative_node is done on GPU.
Definition: colvarcomp.h:200
virtual const std::vector< feature * > & features() const
Implementation of the feature list accessor for colvar.
Definition: colvarcomp.h:115
cvm::atom_group * parse_group(std::string const &conf, char const *group_key, bool optional=false)
Parse a group definition.
Definition: colvarcomp.cpp:168
virtual void apply_force(colvarvalue const &cvforce)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp.cpp:550
cvm::real period
Period of the values of this CVC (default: 0.0, non periodic)
Definition: colvarcomp.h:92
Colvar component: dihedPC Projection of the config onto a dihedral principal component See e....
Definition: colvarcomp.h:1025
virtual void collect_gradients(std::vector< int > const &atom_ids, std::vector< cvm::rvector > &atomic_gradients)
Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs.
Definition: colvarcomp_protein.cpp:559
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:539
virtual int init(std::string const &conf)
Definition: colvarcomp_protein.cpp:350
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:551
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_protein.cpp:582
Colvar component: dihedral between the centers of mass of four groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:763
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:305
cvm::atom_group * group4
Atom group.
Definition: colvarcomp.h:773
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:235
cvm::rvector r12
Inter site vectors.
Definition: colvarcomp.h:775
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:327
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:358
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:767
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:771
bool b_1site_force
Compute total force on first site only to avoid unwanted coupling to other colvars (see e....
Definition: colvarcomp.h:779
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:769
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:276
Colvar component: angle between the dipole of a molecule and an axis formed by two groups of atoms(co...
Definition: colvarcomp.h:728
bool b_1site_force
Definition: colvarcomp.h:747
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:738
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:740
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:151
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:742
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:732
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:138
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:736
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:734
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:180
Colvar component: dipole magnitude of a molecule.
Definition: colvarcomp.h:585
cvm::atom_group * atoms
Dipole atom group.
Definition: colvarcomp.h:588
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:650
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:659
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:641
Colvar component: distance unit vector (direction) between centers of mass of two groups (colvarvalue...
Definition: colvarcomp.h:425
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:398
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_distances.cpp:377
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:367
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:410
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:392
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:355
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:404
Colvar component: average distance between two groups of atoms, weighted as the sixth power,...
Definition: colvarcomp.h:536
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:541
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:421
int exponent
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:543
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:539
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:453
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:511
Colvar component: N1xN2 vector of pairwise distances (colvarvalue::type_vector type,...
Definition: colvarcomp.h:558
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:618
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:630
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:563
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:624
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:525
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:537
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_distances.cpp:577
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:612
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:561
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:571
Definition: colvarcomp.h:402
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:145
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:136
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:99
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:127
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:110
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_distances.cpp:117
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:151
Colvar component: projection of the distance vector on a plane (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:480
cvm::rvector dist_v_ortho
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:483
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:297
cvm::rvector v12
Vector distances.
Definition: colvarcomp.h:485
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:273
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:326
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:339
Colvar component: projection of the distance vector along an axis(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:448
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:226
cvm::rvector dist_v
Vector distance, cached to be recycled.
Definition: colvarcomp.h:461
cvm::atom_group * main
Main atom group.
Definition: colvarcomp.h:451
bool fixed_axis
Flag: using a fixed axis vector?
Definition: colvarcomp.h:463
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:245
cvm::real axis_norm
Norm of the axis.
Definition: colvarcomp.h:459
cvm::atom_group * ref1
Reference atom group.
Definition: colvarcomp.h:453
cvm::atom_group * ref2
Optional, second ref atom group.
Definition: colvarcomp.h:455
cvm::rvector axis
Vector on which the distance vector is projected.
Definition: colvarcomp.h:457
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:198
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:165
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:258
Colvar component: distance between the centers of mass of two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:377
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:382
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:84
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:52
cvm::rvector dist_v
Vector distance, cached to be recycled.
Definition: colvarcomp.h:384
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:72
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:35
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:64
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:380
Colvar component: projection of 3N coordinates onto an eigenvector(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:656
std::vector< cvm::atom_pos > ref_pos
Reference coordinates.
Definition: colvarcomp.h:663
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:1293
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1522
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1489
std::vector< cvm::rvector > eigenvec
Eigenvector (of a normal or essential mode): will always have zero center.
Definition: colvarcomp.h:666
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:660
cvm::real eigenvec_invnorm2
Inverse square norm of the eigenvector.
Definition: colvarcomp.h:669
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1500
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1510
Definition: colvarcomp.h:1173
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:396
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:380
Definition: colvarcomp.h:1184
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:443
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:427
Definition: colvarcomp.h:1195
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:488
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:474
Colvar component: coordination number between two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:923
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:928
bool b_anisotropic
Wheter dist/r0 or \vec{dist}*\vec{1/r0_vec} should ne be used.
Definition: colvarcomp.h:931
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:933
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:935
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:652
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:696
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:926
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:730
Colvar component: alternative path collective variable using geometry, variable s Allow any combinati...
Definition: colvarcomp.h:1511
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:708
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_gpath.cpp:777
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:815
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_gpath.cpp:772
Colvar component: alternative path collective variable using geometry, variable s For more informatio...
Definition: colvarcomp.h:1372
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_gpath.cpp:312
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_gpath.cpp:307
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:337
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:187
Colvar component: Radius of gyration of an atom group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:604
cvm::atom_group * atoms
Atoms involved.
Definition: colvarcomp.h:607
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:701
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:722
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:712
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:736
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:682
Definition: colvarcomp.h:1528
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:961
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:845
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_gpath.cpp:922
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_gpath.cpp:927
Colvar component: alternative path collective variable using geometry, variable z This should be merg...
Definition: colvarcomp.h:1394
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_gpath.cpp:471
virtual int init(std::string const &conf)
Definition: colvarcomp_gpath.cpp:350
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_gpath.cpp:476
virtual void apply_force(colvarvalue const &force)
Redefined to raise error because this is an abstract type.
Definition: colvarcomp_gpath.cpp:491
Colvar component: hydrogen bond, defined as the product of a colvar::coordnum and 1/2*(1-cos((180-ang...
Definition: colvarcomp.h:951
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:958
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:428
cvm::real r0
"Cutoff" distance between acceptor and donor
Definition: colvarcomp.h:954
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:956
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:466
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:367
Colvar component: moment of inertia of an atom group around a user-defined axis (colvarvalue::type_sc...
Definition: colvarcomp.h:638
cvm::rvector axis
Vector on which the inertia tensor is projected.
Definition: colvarcomp.h:641
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:791
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:804
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:775
Colvar component: moment of inertia of an atom group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:624
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:749
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:759
Current only linear combination of sub-CVCs is available.
Definition: colvarcomp.h:1414
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_combination.cpp:155
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_combination.cpp:131
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_combination.cpp:99
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_combination.cpp:169
std::vector< colvar::cvc * > cv
Sub-colvar components.
Definition: colvarcomp.h:1417
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_combination.cpp:113
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_combination.cpp:149
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_combination.cpp:162
virtual int init(std::string const &conf)
Definition: colvarcomp_combination.cpp:19
bool use_explicit_gradients
If all sub-cvs use explicit gradients then we also use it.
Definition: colvarcomp.h:1419
Definition: colvarcomp.h:1643
std::string volmap_name
String identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1656
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_volmaps.cpp:87
int volmap_index
Index of the map objet in the proxy arrays.
Definition: colvarcomp.h:1662
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_volmaps.cpp:117
cvm::atom_group * atoms
Group of atoms selected internally (optional)
Definition: colvarcomp.h:1665
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_volmaps.cpp:111
virtual int init(std::string const &conf)
Definition: colvarcomp_volmaps.cpp:24
std::vector< cvm::real > atom_weights
Weights assigned to each atom (default: uniform weights)
Definition: colvarcomp.h:1668
int volmap_id
Numeric identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1659
Definition: colvarcomp.h:1612
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_neuralnetwork.cpp:210
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_neuralnetwork.cpp:222
size_t m_output_index
the index of nn output components
Definition: colvarcomp.h:1617
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_neuralnetwork.cpp:229
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_neuralnetwork.cpp:155
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to allow arbitrary dimensions.
Definition: colvarcomp_neuralnetwork.cpp:216
std::unique_ptr< neuralnetworkCV::neuralNetworkCompute > nn
actual computation happens in neuralnetworkCV::neuralNetworkCompute
Definition: colvarcomp.h:1615
virtual int init(std::string const &conf)
Definition: colvarcomp_neuralnetwork.cpp:25
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_neuralnetwork.cpp:172
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_neuralnetwork.cpp:191
Definition: colvarcomp.h:1101
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:190
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:204
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_rotations.cpp:223
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to use scalar metrics.
Definition: colvarcomp_rotations.cpp:249
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use scalar metrics.
Definition: colvarcomp_rotations.cpp:242
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use scalar metrics.
Definition: colvarcomp_rotations.cpp:229
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use scalar metrics.
Definition: colvarcomp_rotations.cpp:235
Colvar component: cosine of the angle of rotation with respect to a set of reference coordinates (col...
Definition: colvarcomp.h:1126
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:262
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:271
Colvar component: orientation in space of an atom group, with respect to a set of reference coordinat...
Definition: colvarcomp.h:1051
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_rotations.cpp:140
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use quaternion metrics.
Definition: colvarcomp_rotations.cpp:157
cvm::rotation rot
Rotation object.
Definition: colvarcomp.h:1067
cvm::ag_vector_real_t shifted_pos_soa
Shifted atomic positions.
Definition: colvarcomp.h:1063
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:117
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:131
cvm::ag_vector_real_t ref_pos_soa
Reference coordinates.
Definition: colvarcomp.h:1059
cvm::atom_pos atoms_cog
Center of geometry of the group.
Definition: colvarcomp.h:1056
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use quaternion metrics.
Definition: colvarcomp_rotations.cpp:171
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to use quaternion metrics.
Definition: colvarcomp_rotations.cpp:164
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to use quaternion metrics.
Definition: colvarcomp_rotations.cpp:178
cvm::quaternion ref_quat
This is used to remove jumps in the sign of the quaternion, which may be annoying in the colvars traj...
Definition: colvarcomp.h:1071
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:41
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1054
Colvar component: polar coordinate phi of a group (colvarvalue::type_scalar type, range [-180:180])
Definition: colvarcomp.h:500
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:426
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:417
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:437
Colvar component: polar coordinate theta of a group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:518
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:375
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:384
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:395
Colvar component: root mean square deviation (RMSD) of a group with respect to a set of reference coo...
Definition: colvarcomp.h:1210
size_t best_perm_index
Index of the permutation yielding the smallest RMSD (0 for identity)
Definition: colvarcomp.h:1241
int add_calc_Jacobian_derivative_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map) override
Calculate the divergence of the inverse atomic gradients on GPU.
Definition: colvarcomp_distances.cpp:1249
int init_permutation(std::vector< cvm::atom_pos > &ref_pos, std::string const &conf)
Permutation RMSD input parsing.
Definition: colvarcomp_distances.cpp:996
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1215
size_t num_ref_pos
Definition: colvarcomp.h:1219
virtual void calc_gradients() override
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1071
int calc_Jacobian_derivative_after_gpu() override
CPU-side calculation after the graph in add_calc_Jacobian_derivative_node is done on GPU.
Definition: colvarcomp_distances.cpp:1277
virtual void calc_force_invgrads() override
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1095
int add_calc_gradients_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map) override
Calculate the atomic gradients, to be reused later in order to apply forces on GPU.
Definition: colvarcomp_distances.cpp:1204
virtual void calc_Jacobian_derivative() override
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1109
size_t n_permutations
Number of permutations of symmetry-related atoms.
Definition: colvarcomp.h:1237
int add_calc_value_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map) override
Calculate the variable on GPU.
Definition: colvarcomp_distances.cpp:1174
virtual int init(std::string const &conf) override
Definition: colvarcomp_distances.cpp:873
int calc_force_invgrads_after_gpu() override
CPU-side calculation after the graph in add_calc_force_invgrads_node is done on GPU.
Definition: colvarcomp_distances.cpp:1244
virtual void calc_value() override
Calculate the variable.
Definition: colvarcomp_distances.cpp:1045
int add_calc_force_invgrads_node(cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map) override
Calculate the total force from the system using the inverse atomic gradients on GPU.
Definition: colvarcomp_distances.cpp:1219
bool has_gpu_implementation() const override
Check the GPU availability.
Definition: colvarcomp_distances.cpp:859
int calc_value_after_gpu() override
CPU-side calculation after the graph in add_calc_value_node is done on GPU.
Definition: colvarcomp_distances.cpp:1192
Colvar component: self-coordination number within a group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:890
cvm::atom_group * group1
Selected atoms.
Definition: colvarcomp.h:893
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:632
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:504
int compute_selfcoordnum()
Main workhorse function.
Definition: colvarcomp_coordnums.cpp:559
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:899
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:621
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:895
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:897
Colvar component: angle of rotation around a predefined axis (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:1161
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:344
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:356
Colvar component: projection of the orientation vector onto a predefined axis (colvarvalue::type_scal...
Definition: colvarcomp.h:1141
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:320
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:295
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:309
std::vector< cvm::rvector > atomic_gradients
Array of atomic gradients collected from all cvcs with appropriate components, rotations etc....
Definition: colvar.h:724
colvarvalue ft
Total force, as derived from the atomic trajectory; should equal the system force plus f.
Definition: colvar.h:223
std::vector< int > atom_ids
Sorted array of (zero-based) IDs for all atoms involved.
Definition: colvar.h:719
Parent class for a member object of a bias, cv or cvc etc. containing features and their dependencies...
Definition: colvardeps.h:34
int time_step_factor
Definition: colvardeps.h:77
1-dimensional vector of real numbers with four components and a quaternion algebra
Definition: colvartypes.h:978
A rotation between two sets of coordinates (for the moment a wrapper for colvarmodule::quaternion)
Definition: colvartypes.h:1366
vector of real numbers with three components
Definition: colvartypes.h:726
double real
Defining an abstract real number allows to switch precision.
Definition: colvarmodule.h:98
static colvarproxy * proxy
Pointer to the proxy object, used to retrieve atomic data from the hosting program; it is static in o...
Definition: colvarmodule.h:931
Base class containing parsing functions; all objects which need to parse input inherit from this.
Definition: colvarparse.h:27
virtual int send_alch_lambda()
Send cached value of alchemical lambda parameter to back-end (if available)
Definition: colvarproxy_system.cpp:185
void set_alch_lambda(cvm::real lambda)
Set value of alchemical lambda parameter to be sent to back-end at end of timestep.
Definition: colvarproxy_system.cpp:178
A struct for holding a CUDA graph and its execution object.
Definition: colvar_gpu_calc.h:54
Value of a collective variable: this is a metatype which can be set at runtime. By default it is set ...
Definition: colvarvalue.h:43
cvm::real real_value
Real data member.
Definition: colvarvalue.h:77
Store the information of a group of atoms in a structure-of-arrays (SoA) style.
Definition: colvaratoms.h:52
Declaration of the class for GPU calculation of CVCs.
Collective variables main module.
Colvars proxy classes.
Definition: colvarcomp_apath.cpp:22
Definition: colvarcomp_rotations.cpp:16
A simplified class of cvm::atom that can be used with cvm::atom_group::atom_modifier.
Definition: colvaratoms.h:107