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 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
100 cvc(colvarmodule *cvmodule_in);
101
103 virtual ~cvc();
104
108 virtual int init(std::string const &conf);
109
111 int init_dependencies() override;
112
114 int setup();
115
117 virtual const std::vector<feature *> &features() const override
118 {
119 return cvc_features;
120 }
121
122 virtual std::vector<feature *> &modify_features() override
123 {
124 return cvc_features;
125 }
126
127 static void delete_features() {
128 for (size_t i=0; i < cvc_features.size(); i++) {
129 delete cvc_features[i];
130 }
131 cvc_features.clear();
132 }
133
135 virtual std::vector<std::vector<int> > get_atom_lists();
136
138 virtual void read_data();
139
141 virtual void calc_value() = 0;
142
145 virtual void calc_gradients() {}
146
148 void calc_fit_gradients();
149
151 virtual void debug_gradients();
152
155 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
156
159 virtual void calc_force_invgrads();
160
162 virtual void calc_Jacobian_derivative();
163
164 // TODO: Maybe this should be a feature in colvarsdep but I am still constantly confused by colvarsdep
166 virtual bool has_gpu_implementation() const { return false; }
167
168#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
171 cudaGraph_t& graph,
172 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
173 { return COLVARS_NOT_IMPLEMENTED; }
174
176 virtual int calc_value_after_gpu() { return COLVARS_OK; }
177
181 cudaGraph_t& graph,
182 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
183 { return COLVARS_NOT_IMPLEMENTED; }
184
188 cudaGraph_t& graph,
189 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
190 { return COLVARS_NOT_IMPLEMENTED; }
191
193 virtual int calc_force_invgrads_after_gpu() { return COLVARS_OK; }
194
197 cudaGraph_t& graph,
198 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map)
199 { return COLVARS_NOT_IMPLEMENTED; }
200
202 virtual int calc_Jacobian_derivative_after_gpu() { return COLVARS_OK; }
203
205 virtual int debug_gradients_gpu(
208#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
209
211 colvarvalue const & value() const;
212
214 colvarvalue const & total_force() const;
215
218 colvarvalue const & Jacobian_derivative() const;
219
229 virtual void apply_force(colvarvalue const &cvforce);
230
249 virtual cvm::real dist2(colvarvalue const &x1,
250 colvarvalue const &x2) const;
251
255 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
256 colvarvalue const &x2) const;
257
261 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
262 colvarvalue const &x2) const;
263
265 virtual void wrap(colvarvalue &x_unwrapped) const;
266
269 std::vector<cvm::atom_group *> atom_groups;
270
273
275 virtual colvarvalue const *get_param_grad(std::string const &param_name);
276
278 virtual int set_param(std::string const &param_name, void const *new_value) override;
279
281 bool b_try_scalable = true;
282
285 inline void set_value(colvarvalue const &new_value, bool now=false) {
286 x = new_value;
287 // Cache value to be communicated to back-end between time steps
288 cvmodule->proxy->set_alch_lambda(x.real_value);
289 if (now) {
290 // If requested (e.g. upon restarting), sync to back-end
291 cvmodule->proxy->send_alch_lambda();
292 }
293 }
294
295protected:
296
298 int set_function_type(std::string const &type);
299
301 int update_description();
302
304 cvm::atom_group *parse_group(std::string const &conf, char const *group_key,
305 bool optional = false);
306
308 virtual int init_total_force_params(std::string const &conf);
309
311 static std::vector<feature *> cvc_features;
312
314 std::vector<std::string> function_types;
315
318
321
327
331
333 void init_as_distance();
334
336 void init_as_angle();
337
340
343
346
349
352};
353
354
355inline colvarvalue const & colvar::cvc::value() const
356{
357 return x;
358}
359
360
362{
363 return ft;
364}
365
366
368{
369 return jd;
370}
371
372
373
376
378 : public colvar::cvc
379{
380protected:
387public:
388 distance();
389 virtual ~distance() {}
390 virtual int init(std::string const &conf);
391 virtual void calc_value();
392 virtual void calc_gradients();
393 virtual void calc_force_invgrads();
394 virtual void calc_Jacobian_derivative();
395};
396
397
398
399// \brief Colvar component: distance vector between centers of mass
400// of two groups (\link colvarvalue::type_3vector \endlink type,
401// range (-*:*)x(-*:*)x(-*:*))
403 : public colvar::distance
404{
405public:
406 distance_vec();
407 virtual ~distance_vec() {}
408 virtual void calc_value();
409 virtual void calc_gradients();
410 virtual void apply_force(colvarvalue const &force);
412 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
414 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
416 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
418 virtual void wrap(colvarvalue &x_unwrapped) const;
419};
420
421
426 : public colvar::distance
427{
428public:
429 distance_dir();
430 virtual ~distance_dir() {}
431 virtual void calc_value();
432 virtual void calc_gradients();
433 virtual void apply_force(colvarvalue const &force);
435 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
437 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
439 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
441 virtual void wrap(colvarvalue &x_unwrapped) const;
442};
443
444
445
449 : public colvar::cvc
450{
451protected:
465 bool fixed_axis = true;
466public:
467 distance_z();
468 virtual ~distance_z() {}
469 virtual int init(std::string const &conf);
470 virtual void calc_value();
471 virtual void calc_gradients();
472 virtual void calc_force_invgrads();
473 virtual void calc_Jacobian_derivative();
474};
475
476
477
481 : public colvar::distance_z
482{
483protected:
488public:
489 distance_xy();
490 virtual ~distance_xy() {}
491 virtual void calc_value();
492 virtual void calc_gradients();
493 virtual void calc_force_invgrads();
494 virtual void calc_Jacobian_derivative();
495};
496
497
501 : public colvar::cvc
502{
503protected:
504 cvm::atom_group *atoms = nullptr;
505 cvm::real r, theta, phi;
506
507public:
508 polar_phi();
509 virtual ~polar_phi() {}
510 virtual int init(std::string const &conf);
511 virtual void calc_value();
512 virtual void calc_gradients();
513};
514
515
519 : public colvar::cvc
520{
521public:
522 polar_theta();
523 virtual ~polar_theta() {}
524 virtual int init(std::string const &conf);
525protected:
526 cvm::atom_group *atoms = nullptr;
527 cvm::real r, theta, phi;
528public:
529 virtual void calc_value();
530 virtual void calc_gradients();
531};
532
533
537 : public colvar::cvc
538{
539protected:
545 int exponent = 6;
546public:
547 distance_inv();
548 virtual ~distance_inv() {}
549 virtual int init(std::string const &conf);
550 virtual void calc_value();
551 virtual void calc_gradients();
552};
553
554
555
559 : public colvar::cvc
560{
561protected:
566public:
568 virtual ~distance_pairs() {}
569 virtual int init(std::string const &conf);
570 virtual void calc_value();
571 virtual void calc_gradients();
572 virtual void apply_force(colvarvalue const &force);
574 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
576 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
578 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
580 virtual void wrap(colvarvalue &x_unwrapped) const;
581};
582
583
586 : public colvar::cvc
587{
588protected:
591 cvm::atom_pos dipoleV;
592public:
594 virtual ~dipole_magnitude() {}
595 virtual int init(std::string const &conf);
596 virtual void calc_value();
597 virtual void calc_gradients();
598};
599
600
601
605 : public colvar::cvc
606{
607protected:
610public:
611 gyration();
612 virtual ~gyration() {}
613 virtual int init(std::string const &conf);
614 virtual void calc_value();
615 virtual void calc_gradients();
616 virtual void calc_force_invgrads();
617 virtual void calc_Jacobian_derivative();
618};
619
620
621
625 : public colvar::gyration
626{
627public:
628 inertia();
629 virtual ~inertia() {}
630 virtual void calc_value();
631 virtual void calc_gradients();
632};
633
634
635
639 : public colvar::inertia
640{
641protected:
644public:
645 inertia_z();
646 virtual ~inertia_z() {}
647 virtual int init(std::string const &conf);
648 virtual void calc_value();
649 virtual void calc_gradients();
650};
651
652
653
657 : public colvar::cvc
658{
659protected:
660
663
665 std::vector<cvm::atom_pos> ref_pos;
666
668 std::vector<cvm::rvector> eigenvec;
669
672
673public:
674
675 eigenvector();
676 virtual ~eigenvector() {}
677 virtual int init(std::string const &conf);
678 virtual void calc_value();
679 virtual void calc_gradients();
680 virtual void calc_force_invgrads();
681 virtual void calc_Jacobian_derivative();
682};
683
684
685
689 : public colvar::cvc
690{
691protected:
704
708 bool b_1site_force = false;
709public:
710
711 angle();
716 virtual ~angle() {}
717 virtual int init(std::string const &conf);
718 virtual void calc_value();
719 virtual void calc_gradients();
720 virtual void calc_force_invgrads();
721 virtual void calc_Jacobian_derivative();
722};
723
724
725
729 : public colvar::cvc
730{
731protected:
732
745
749 bool b_1site_force = false;
750public:
751
752 dipole_angle();
753 virtual ~dipole_angle() {}
754 virtual int init(std::string const &conf);
755 virtual void calc_value();
756 virtual void calc_gradients();
757};
758
759
760
764 : public colvar::cvc
765{
766protected:
767
777 cvm::rvector r12, r23, r34;
778
781 bool b_1site_force = false;
782
783public:
784
790 dihedral();
791 virtual ~dihedral() {}
792 virtual int init(std::string const &conf);
793 virtual void calc_value();
794 virtual void calc_gradients();
795 virtual void calc_force_invgrads();
796 virtual void calc_Jacobian_derivative();
797};
798
799
800
804 : public colvar::cvc
805{
806protected:
816 bool b_anisotropic = false;
818 int en = 6;
820 int ed = 12;
821
824
827
829 int pairlist_freq = 100;
830
832 bool *pairlist = nullptr;
833
834public:
835
836 coordnum();
837 virtual ~coordnum();
838 virtual int init(std::string const &conf);
839 virtual void calc_value();
840 virtual void calc_gradients();
841
842 enum {
843 ef_null = 0,
844 ef_gradients = 1,
845 ef_anisotropic = (1<<8),
846 ef_use_pairlist = (1<<9),
847 ef_rebuild_pairlist = (1<<10)
848 };
849
857 template<int flags>
859 cvm::rvector const &inv_r0_vec,
860 cvm::rvector const &inv_r0sq_vec,
861 int en,
862 int ed,
863 const cvm::real a1x,
864 const cvm::real a1y,
865 const cvm::real a1z,
866 const cvm::real a2x,
867 const cvm::real a2y,
868 const cvm::real a2z,
869 cvm::real& g1x,
870 cvm::real& g1y,
871 cvm::real& g1z,
872 cvm::real& g2x,
873 cvm::real& g2y,
874 cvm::real& g2z,
875 bool **pairlist_elem,
877 colvarmodule *cvmodule_in);
878
880 template<int flags> int compute_coordnum();
881
883 template<int flags> void main_loop(bool **pairlist_elem);
884
885};
886
887
888
892 : public colvar::cvc
893{
894protected:
900 int en = 6;
902 int ed = 12;
903 cvm::real tolerance = 0.0;
904 int pairlist_freq = 100;
905
906 bool *pairlist = nullptr;
907
908public:
909
910 selfcoordnum();
912 virtual int init(std::string const &conf);
913 virtual void calc_value();
914 virtual void calc_gradients();
915
917 template<int flags> int compute_selfcoordnum();
918};
919
920
921
925 : public colvar::distance
926{
927protected:
934 bool b_anisotropic = false;
936 int en = 6;
938 int ed = 12;
939public:
941 virtual ~groupcoordnum() {}
942 virtual int init(std::string const &conf);
943 virtual void calc_value();
944 virtual void calc_gradients();
945};
946
947
948
953 : public colvar::cvc
954{
955protected:
959 int en = 6;
961 int ed = 8;
962public:
964 h_bond(cvm::atom_group::simple_atom const &acceptor,
965 cvm::atom_group::simple_atom const &donor,
966 cvm::real r0, int en, int ed);
967 h_bond();
968 virtual ~h_bond() {}
969 virtual int init(std::string const &conf);
970 virtual void calc_value();
971 virtual void calc_gradients();
972};
973
974
980 : public colvar::cvc
981{
982protected:
983
986
989
991 std::vector<angle *> theta;
992
994 std::vector<h_bond *> hb;
995
998
1001
1003 int en = 6;
1004
1006 int ed = 8;
1007
1008public:
1009
1010 alpha_angles();
1011 virtual ~alpha_angles();
1012 virtual int init(std::string const &conf);
1013 void calc_value();
1014 void calc_gradients();
1016 void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1017 void apply_force(colvarvalue const &force);
1018};
1019
1020
1021
1027 : public colvar::cvc
1028{
1029protected:
1030
1031 std::vector<dihedral *> theta;
1032 std::vector<cvm::real> coeffs;
1033
1034public:
1035
1036 dihedPC();
1037 virtual ~dihedPC();
1038 virtual int init(std::string const &conf);
1039 virtual void calc_value();
1040 virtual void calc_gradients();
1042 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1043 virtual void apply_force(colvarvalue const &force);
1044};
1045
1046
1047
1053 : public colvar::cvc
1054{
1055protected:
1060
1062 cvm::ag_vector_real_t ref_pos_soa;
1063 size_t num_ref_pos;
1064
1066 cvm::ag_vector_real_t shifted_pos_soa;
1067 size_t num_shifted_pos;
1068
1071
1075
1078 std::unique_ptr<rotation_derivative_impl_> rot_deriv_impl;
1079
1080public:
1081
1082 orientation();
1083 virtual ~orientation();
1084 virtual int init(std::string const &conf);
1085 virtual void calc_value();
1086 virtual void calc_gradients();
1087 virtual void apply_force(colvarvalue const &force);
1089 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1091 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1093 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1095 virtual void wrap(colvarvalue &x_unwrapped) const;
1096};
1097
1098
1103 : public colvar::orientation
1104{
1105public:
1106
1108 virtual ~orientation_angle() {}
1109 virtual void calc_value();
1110 virtual void calc_gradients();
1111 virtual void apply_force(colvarvalue const &force);
1113 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1115 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1117 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1119 virtual void wrap(colvarvalue &x_unwrapped) const;
1120};
1121
1122
1123
1129{
1130public:
1131
1133 virtual ~orientation_proj() {}
1134 virtual void calc_value();
1135 virtual void calc_gradients();
1136};
1137
1138
1139
1144{
1145protected:
1146
1147 cvm::rvector axis;
1148
1149public:
1150
1151 tilt();
1152 virtual ~tilt() {}
1153 virtual int init(std::string const &conf);
1154 virtual void calc_value();
1155 virtual void calc_gradients();
1156};
1157
1158
1159
1163 : public colvar::tilt
1164{
1165public:
1166
1167 spin_angle();
1168 virtual ~spin_angle() {}
1169 virtual void calc_value();
1170 virtual void calc_gradients();
1171};
1172
1173
1176{
1177public:
1178 euler_phi();
1179 virtual ~euler_phi() {}
1180 virtual void calc_value();
1181 virtual void calc_gradients();
1182};
1183
1184
1187{
1188public:
1189 euler_psi();
1190 virtual ~euler_psi() {}
1191 virtual void calc_value();
1192 virtual void calc_gradients();
1193};
1194
1195
1198{
1199public:
1200 euler_theta();
1201 virtual ~euler_theta() {}
1202 virtual void calc_value();
1203 virtual void calc_gradients();
1204};
1205
1206
1212 : public colvar::cvc
1213{
1214protected:
1215
1216 // TODO: transfrom ref_pos to soa
1219
1222 size_t num_ref_pos = 0;
1223 cvm::ag_vector_real_t ref_pos_soa;
1224
1225#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1226 cvm::real* d_ref_pos_soa;
1227 cvm::real* d_permutation_msds;
1228 unsigned int* d_tbcounts;
1229 cvm::real* h_rmsd;
1230 size_t* h_best_perm_index;
1231 cvm::real* d_ft;
1232 cvm::real* h_ft;
1233 cvm::real* d_jd;
1234 cvm::real* h_jd;
1235 unsigned int* d_tbcount_ft;
1236 unsigned int* d_tbcount_jd;
1237#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1238
1240 size_t n_permutations = 1;
1241 cvm::ag_vector_real_t permutation_msds;
1242
1245
1247 int init_permutation(std::vector<cvm::atom_pos>& ref_pos, std::string const &conf);
1248
1249public:
1250 rmsd();
1251 bool has_gpu_implementation() const override;
1252#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1254 cudaGraph_t& graph,
1255 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1256 int calc_value_after_gpu() override;
1258 cudaGraph_t& graph,
1259 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1261 cudaGraph_t& graph,
1262 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1263 int calc_force_invgrads_after_gpu() override;
1265 cudaGraph_t& graph,
1266 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1268#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1269 virtual ~rmsd();
1270 virtual int init(std::string const &conf) override;
1271 virtual void calc_value() override;
1272 virtual void calc_gradients() override;
1273 virtual void calc_force_invgrads() override;
1274 virtual void calc_Jacobian_derivative() override;
1275};
1276
1277
1278
1279// \brief Colvar component: flat vector of Cartesian coordinates
1280// Mostly useful to compute scripted colvar values
1282 : public colvar::cvc
1283{
1284protected:
1288 std::vector<size_t> axes;
1289public:
1290 cartesian();
1291 virtual ~cartesian() {}
1292 virtual int init(std::string const &conf);
1293 virtual void calc_value();
1294 virtual void calc_gradients();
1295 virtual void apply_force(colvarvalue const &force);
1297 virtual cvm::real dist2(colvarvalue const &x1,
1298 colvarvalue const &x2) const;
1300 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1301 colvarvalue const &x2) const;
1303 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1304 colvarvalue const &x2) const;
1306 virtual void wrap(colvarvalue &x_unwrapped) const;
1307};
1308
1309
1310// \brief Colvar component: alch_lambda
1311// To communicate value with back-end in lambda-dynamics
1313 : public colvar::cvc
1314{
1315protected:
1316 // No atom groups needed
1317public:
1318 alch_lambda();
1319 int init_alchemy(int time_step_factor);
1320 virtual ~alch_lambda() {}
1321 virtual void calc_value();
1322 virtual void calc_force_invgrads();
1323 virtual void calc_Jacobian_derivative();
1324 virtual void apply_force(colvarvalue const &force);
1325};
1326
1327
1328// \brief Colvar component: alch_Flambda
1329// To communicate force on lambda with back-end in lambda-dynamics
1331 : public colvar::cvc
1332{
1333protected:
1334 // No atom groups needed
1335public:
1336 alch_Flambda();
1337 virtual ~alch_Flambda() {}
1338 virtual void calc_value();
1339 virtual void calc_gradients();
1340 virtual void apply_force(colvarvalue const &force);
1341};
1342
1343
1345 : public colvar::cvc
1346{
1347protected:
1348 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result);
1349 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1355 std::vector<std::vector<cvm::atom_pos>> reference_frames;
1356 std::vector<std::vector<cvm::atom_pos>> reference_fitting_frames;
1358 std::vector<cvm::atom_group*> comp_atoms;
1361public:
1363 virtual ~CartesianBasedPath();
1364 virtual int init(std::string const &conf);
1365 virtual void calc_value() = 0;
1367 virtual void apply_force(colvarvalue const &force);
1368};
1369
1374 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::S>
1375{
1376private:
1377 // Optimal rotation for compute v3
1378 cvm::rotation rot_v3;
1379protected:
1380 virtual void prepareVectors();
1381 virtual void updateDistanceToReferenceFrames();
1382public:
1383 gspath();
1384 virtual ~gspath() {}
1385 virtual int init(std::string const &conf);
1386 virtual void calc_value();
1387 virtual void calc_gradients();
1388 virtual void apply_force(colvarvalue const &force);
1389};
1390
1391
1392
1396 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::Z>
1397{
1398private:
1399 // Optimal rotation for compute v3, v4
1400 cvm::rotation rot_v3;
1401 cvm::rotation rot_v4;
1402protected:
1403 virtual void prepareVectors();
1404 virtual void updateDistanceToReferenceFrames();
1405public:
1406 gzpath();
1407 virtual ~gzpath() {}
1408 virtual int init(std::string const &conf);
1409 virtual void calc_value();
1410 virtual void calc_gradients();
1411 virtual void apply_force(colvarvalue const &force);
1412};
1413
1416 : public colvar::cvc
1417{
1418protected:
1420 std::vector<colvar::cvc*> cv;
1423protected:
1424 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1425public:
1427 virtual ~linearCombination();
1428 virtual int init(std::string const &conf);
1429 virtual void calc_value();
1430 virtual void calc_gradients();
1431 virtual void apply_force(colvarvalue const &force);
1433 virtual cvm::real dist2(colvarvalue const &x1,
1434 colvarvalue const &x2) const;
1436 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1437 colvarvalue const &x2) const;
1439 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1440 colvarvalue const &x2) const;
1442 virtual void wrap(colvarvalue &x_unwrapped) const;
1443};
1444
1445
1449{
1450protected:
1451 bool use_custom_function = false;
1452#ifdef LEPTON
1454 std::vector<Lepton::CompiledExpression *> value_evaluators;
1456 std::vector<Lepton::CompiledExpression *> gradient_evaluators;
1458 std::vector<double *> value_eval_var_refs;
1459 std::vector<double *> grad_eval_var_refs;
1461 double dev_null = 0.0;
1462#endif
1463public:
1464 customColvar();
1465 virtual ~customColvar();
1466 virtual int init(std::string const &conf);
1467 virtual void calc_value();
1468 virtual void calc_gradients();
1469 virtual void apply_force(colvarvalue const &force);
1470};
1471
1472
1474 : public colvar::cvc
1475{
1476protected:
1478 std::vector<colvar::cvc*> cv;
1480 std::vector<std::vector<colvarvalue>> ref_cv;
1485protected:
1486 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1488 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result) const;
1489 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1490public:
1491 CVBasedPath();
1492 virtual ~CVBasedPath();
1493 virtual int init(std::string const &conf);
1494 virtual void calc_value() = 0;
1496 virtual void apply_force(colvarvalue const &force);
1498 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1500 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1502 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1504 virtual void wrap(colvarvalue &x_unwrapped) const;
1505};
1506
1507
1513 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::S>
1514{
1515protected:
1516 virtual void updateDistanceToReferenceFrames();
1517 virtual void prepareVectors();
1518public:
1519 gspathCV();
1520 virtual ~gspathCV();
1521 virtual int init(std::string const &conf);
1522 virtual void calc_value();
1523 virtual void calc_gradients();
1524 virtual void apply_force(colvarvalue const &force);
1525};
1526
1527
1528
1530 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::Z>
1531{
1532protected:
1533 virtual void updateDistanceToReferenceFrames();
1534 virtual void prepareVectors();
1535public:
1536 gzpathCV();
1537 virtual ~gzpathCV();
1538 virtual int init(std::string const &conf);
1539 virtual void calc_value();
1540 virtual void calc_gradients();
1541 virtual void apply_force(colvarvalue const &force);
1542};
1543
1544struct ArithmeticPathImpl;
1545
1548{
1549private:
1550 std::unique_ptr<ArithmeticPathImpl> impl_;
1551 friend struct ArithmeticPathImpl;
1552public:
1553 aspath();
1554 virtual ~aspath();
1555 virtual int init(std::string const &conf);
1556 virtual void calc_value();
1557 virtual void calc_gradients();
1558 virtual void apply_force(colvarvalue const &force);
1559};
1560
1563{
1564private:
1565 std::unique_ptr<ArithmeticPathImpl> impl_;
1566 friend struct ArithmeticPathImpl;
1567public:
1568 azpath();
1569 virtual ~azpath();
1570 virtual int init(std::string const &conf);
1571 virtual void calc_value();
1572 virtual void calc_gradients();
1573 virtual void apply_force(colvarvalue const &force);
1574};
1575
1577 : public colvar::CVBasedPath
1578{
1579private:
1580 std::unique_ptr<ArithmeticPathImpl> impl_;
1581 friend struct ArithmeticPathImpl;
1582public:
1583 aspathCV();
1584 virtual ~aspathCV();
1585 virtual int init(std::string const &conf);
1586 virtual void calc_value();
1587 virtual void calc_gradients();
1588 virtual void apply_force(colvarvalue const &force);
1589};
1590
1591
1593 : public colvar::CVBasedPath
1594{
1595private:
1596 std::unique_ptr<ArithmeticPathImpl> impl_;
1597 friend struct ArithmeticPathImpl;
1598public:
1599 azpathCV();
1600 virtual ~azpathCV();
1601 virtual int init(std::string const &conf);
1602 virtual void calc_value();
1603 virtual void calc_gradients();
1604 virtual void apply_force(colvarvalue const &force);
1605};
1606
1607// forward declaration
1608namespace neuralnetworkCV {
1609 class neuralNetworkCompute;
1610}
1611
1612
1614 : public linearCombination
1615{
1616protected:
1618 std::unique_ptr<neuralnetworkCV::neuralNetworkCompute> nn;
1620 size_t m_output_index = 0;
1621public:
1622 neuralNetwork();
1623 virtual ~neuralNetwork();
1624 virtual int init(std::string const &conf);
1625 virtual void calc_value();
1626 virtual void calc_gradients();
1627 virtual void apply_force(colvarvalue const &force);
1629 virtual cvm::real dist2(colvarvalue const &x1,
1630 colvarvalue const &x2) const;
1632 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1633 colvarvalue const &x2) const;
1635 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1636 colvarvalue const &x2) const;
1638 virtual void wrap(colvarvalue &x_unwrapped) const;
1639};
1640
1641
1642// \brief Colvar component: total value of a scalar map
1643// (usually implemented as a grid by the simulation engine)
1645 : public colvar::cvc
1646{
1647public:
1648
1649 map_total();
1650 virtual ~map_total() {}
1651 virtual int init(std::string const &conf);
1652 virtual void calc_value();
1653 virtual void calc_gradients();
1654 virtual void apply_force(colvarvalue const &force);
1655
1656protected:
1657
1659 std::string volmap_name;
1660
1662 int volmap_id = -1;
1663
1666
1669
1671 std::vector<cvm::real> atom_weights;
1672};
1673
1674
1675
1676#endif
Definition: colvar_geometricpath.h:24
Definition: colvarcomp.h:1475
std::vector< colvar::cvc * > cv
Sub-colvar components.
Definition: colvarcomp.h:1478
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1484
bool use_explicit_gradients
If all sub-cvs use explicit gradients then we also use it.
Definition: colvarcomp.h:1482
std::vector< std::vector< colvarvalue > > ref_cv
Reference colvar values from path.
Definition: colvarcomp.h:1480
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:1346
cvm::atom_group * atoms
Selected atoms.
Definition: colvarcomp.h:1351
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:1355
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1360
bool has_user_defined_fitting
Fitting options.
Definition: colvarcomp.h:1353
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:1358
Definition: colvarcomp.h:1332
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:1314
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:981
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:988
int en
Integer exponent of the HB numerator.
Definition: colvarcomp.h:1003
cvm::real theta_ref
Reference Calpha-Calpha angle (default: 88 degrees)
Definition: colvarcomp.h:985
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:997
int ed
Integer exponent of the HB denominator.
Definition: colvarcomp.h:1006
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:1000
std::vector< h_bond * > hb
List of hydrogen bonds.
Definition: colvarcomp.h:994
virtual int init(std::string const &conf)
Definition: colvarcomp_protein.cpp:28
std::vector< angle * > theta
List of Calpha-Calpha angles.
Definition: colvarcomp.h:991
Colvar component: angle between the centers of mass of three groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:690
bool b_1site_force
Definition: colvarcomp.h:708
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:697
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:699
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:695
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:703
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:701
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:693
Definition: colvarcomp.h:1578
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:1548
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:1594
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:1563
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:1283
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:1286
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:1288
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:805
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:818
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:340
int compute_coordnum()
Workhorse function.
Definition: colvarcomp_coordnums.cpp:291
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:810
cvm::real tolerance
Tolerance for the pair list.
Definition: colvarcomp.h:826
bool b_group2_center_only
If true, group2 will be treated as a single atom.
Definition: colvarcomp.h:823
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:820
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:351
int pairlist_freq
Frequency of update of the pair list.
Definition: colvarcomp.h:829
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:812
bool b_anisotropic
Whether r/r0 or \vec{r}*\vec{1/r0_vec} should be used.
Definition: colvarcomp.h:816
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:137
bool * pairlist
Pair list.
Definition: colvarcomp.h:832
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, colvarmodule *cvmodule_in)
Calculate a coordination number through the function (1-x**n)/(1-x**m), where x = |A1-A2|/r0.
Definition: colvarcomp_coordnums.cpp:18
void main_loop(bool **pairlist_elem)
Workhorse function.
Definition: colvarcomp_coordnums.cpp:230
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:808
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:814
custom expression of colvars
Definition: colvarcomp.h:1449
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:489
virtual int init_total_force_params(std::string const &conf)
Parse options pertaining to total force calculation.
Definition: colvarcomp.cpp:149
virtual void wrap(colvarvalue &x_unwrapped) const
Wrap value (for periodic/symmetric cvcs)
Definition: colvarcomp.cpp:1152
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:59
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:534
colvarvalue jd
Calculated Jacobian derivative (divergence of the inverse gradients): serves to calculate the phase s...
Definition: colvarcomp.h:330
std::vector< std::string > function_types
Record the type of this class as well as those it is derived from.
Definition: colvarcomp.h:314
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:1146
std::string function_type() const
String identifier for the type of collective variable.
Definition: colvarcomp.cpp:50
virtual int init(std::string const &conf)
Definition: colvarcomp.cpp:72
virtual void debug_gradients()
Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component.
Definition: colvarcomp.cpp:571
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:196
virtual ~cvc()
Destructor.
Definition: colvarcomp.cpp:365
colvarvalue const & Jacobian_derivative() const
Return the previously calculated divergence of the inverse atomic gradients.
Definition: colvarcomp.h:367
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp.h:145
cvm::real width
CVC-specific default colvar width (default: not provided)
Definition: colvarcomp.h:351
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:1135
virtual colvarvalue const * get_param_grad(std::string const &param_name)
Pointer to the gradient of parameter param_name.
Definition: colvarcomp.cpp:423
int setup()
After construction, set data related to dependency handling.
Definition: colvarcomp.cpp:358
colvarvalue const & value() const
Return the previously calculated value.
Definition: colvarcomp.h:355
static std::vector< feature * > cvc_features
Implementation of the feature list for colvar.
Definition: colvarcomp.h:311
colvarvalue ft
Calculated total force (Note: this is calculated from the total atomic forces read from the program,...
Definition: colvarcomp.h:326
virtual const std::vector< feature * > & features() const override
Implementation of the feature list accessor for colvar.
Definition: colvarcomp.h:117
int update_description()
Update the description string based on name and type.
Definition: colvarcomp.cpp:38
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:170
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:187
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:180
virtual int calc_value_after_gpu()
CPU-side calculation after the graph in add_calc_value_node is done on GPU.
Definition: colvarcomp.h:176
bool b_try_scalable
Whether or not this CVC will be computed in parallel whenever possible.
Definition: colvarcomp.h:281
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.
virtual int set_param(std::string const &param_name, void const *new_value) override
Set the named parameter to the given value.
Definition: colvarcomp.cpp:431
void set_value(colvarvalue const &new_value, bool now=false)
Definition: colvarcomp.h:285
virtual void read_data()
Obtain data needed for the calculation for the backend.
Definition: colvarcomp.cpp:457
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Definition: colvarcomp.cpp:1124
colvarvalue x
Cached value.
Definition: colvarcomp.h:317
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp.cpp:542
void calc_fit_gradients()
Calculate the atomic fit gradients.
Definition: colvarcomp.cpp:550
void init_as_periodic_angle()
Set data types for a periodic angle (-180° to 180°)
Definition: colvarcomp.cpp:392
virtual std::vector< std::vector< int > > get_atom_lists()
Get vector of vectors of atom IDs for all atom groups.
Definition: colvarcomp.cpp:471
cvc()
Constructor.
Definition: colvarcomp.cpp:22
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:193
void register_atom_group(cvm::atom_group *ag)
Store a pointer to new atom group, and list as child for dependencies.
Definition: colvarcomp.cpp:415
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:852
int init_dependencies() override
Initialize dependency tree.
Definition: colvarcomp.cpp:243
virtual bool has_gpu_implementation() const
Check the GPU availability.
Definition: colvarcomp.h:166
void init_as_angle()
Set data types for a bounded angle (0° to 180°)
Definition: colvarcomp.cpp:385
void init_as_distance()
Set data types for a scalar distance (convenience function)
Definition: colvarcomp.cpp:375
colvarvalue const & total_force() const
Return the previously calculated total force.
Definition: colvarcomp.h:361
colvarvalue x_old
Value at the previous step.
Definition: colvarcomp.h:320
colvarvalue upper_boundary
Location of the upper boundary (not defined by user choice)
Definition: colvarcomp.h:348
colvarvalue lower_boundary
Location of the lower boundary (not defined by user choice)
Definition: colvarcomp.h:345
void init_scalar_boundaries(cvm::real lb, cvm::real ub)
Set two scalar boundaries (convenience function)
Definition: colvarcomp.cpp:402
std::vector< cvm::atom_group * > atom_groups
Pointers to all atom groups, to let colvars collect info e.g. atomic gradients.
Definition: colvarcomp.h:269
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:202
cvm::atom_group * parse_group(std::string const &conf, char const *group_key, bool optional=false)
Parse a group definition.
Definition: colvarcomp.cpp:178
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:560
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:1028
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:765
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:775
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:235
cvm::rvector r12
Inter site vectors.
Definition: colvarcomp.h:777
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:769
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:773
bool b_1site_force
Compute total force on first site only to avoid unwanted coupling to other colvars (see e....
Definition: colvarcomp.h:781
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:771
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:730
bool b_1site_force
Definition: colvarcomp.h:749
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:740
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:742
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:151
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:744
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:734
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:138
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:738
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:736
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:587
cvm::atom_group * atoms
Dipole atom group.
Definition: colvarcomp.h:590
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:427
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:538
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:543
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:545
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:541
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:560
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:565
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:563
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:404
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:482
cvm::rvector dist_v_ortho
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:485
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:487
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:450
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:463
cvm::atom_group * main
Main atom group.
Definition: colvarcomp.h:453
bool fixed_axis
Flag: using a fixed axis vector?
Definition: colvarcomp.h:465
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:461
cvm::atom_group * ref1
Reference atom group.
Definition: colvarcomp.h:455
cvm::atom_group * ref2
Optional, second ref atom group.
Definition: colvarcomp.h:457
cvm::rvector axis
Vector on which the distance vector is projected.
Definition: colvarcomp.h:459
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:379
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:384
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:386
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:382
Colvar component: projection of 3N coordinates onto an eigenvector(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:658
std::vector< cvm::atom_pos > ref_pos
Reference coordinates.
Definition: colvarcomp.h:665
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:668
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:662
cvm::real eigenvec_invnorm2
Inverse square norm of the eigenvector.
Definition: colvarcomp.h:671
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:1176
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:1187
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:1198
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:926
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:931
bool b_anisotropic
Wheter dist/r0 or \vec{dist}*\vec{1/r0_vec} should ne be used.
Definition: colvarcomp.h:934
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:936
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:938
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:655
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:699
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:929
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:733
Colvar component: alternative path collective variable using geometry, variable s Allow any combinati...
Definition: colvarcomp.h:1514
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:1375
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:606
cvm::atom_group * atoms
Atoms involved.
Definition: colvarcomp.h:609
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:1531
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:1397
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:954
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:961
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:431
cvm::real r0
"Cutoff" distance between acceptor and donor
Definition: colvarcomp.h:957
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:959
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:469
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:370
Colvar component: moment of inertia of an atom group around a user-defined axis (colvarvalue::type_sc...
Definition: colvarcomp.h:640
cvm::rvector axis
Vector on which the inertia tensor is projected.
Definition: colvarcomp.h:643
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:626
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:1417
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:1420
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:1422
Definition: colvarcomp.h:1646
std::string volmap_name
String identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1659
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:1665
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:1668
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:1671
int volmap_id
Numeric identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1662
Definition: colvarcomp.h:1615
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:1620
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:1618
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:1104
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:1129
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:1054
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:1070
cvm::ag_vector_real_t shifted_pos_soa
Shifted atomic positions.
Definition: colvarcomp.h:1066
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:1062
cvm::atom_pos atoms_cog
Center of geometry of the group.
Definition: colvarcomp.h:1059
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:1074
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:41
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1057
Colvar component: polar coordinate phi of a group (colvarvalue::type_scalar type, range [-180:180])
Definition: colvarcomp.h:502
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:520
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:1213
size_t best_perm_index
Index of the permutation yielding the smallest RMSD (0 for identity)
Definition: colvarcomp.h:1244
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:1218
size_t num_ref_pos
Definition: colvarcomp.h:1222
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:1240
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:893
cvm::atom_group * group1
Selected atoms.
Definition: colvarcomp.h:896
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:635
virtual int init(std::string const &conf)
Definition: colvarcomp_coordnums.cpp:507
int compute_selfcoordnum()
Main workhorse function.
Definition: colvarcomp_coordnums.cpp:562
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:902
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:624
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:898
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:900
Colvar component: angle of rotation around a predefined axis (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:1164
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:1144
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:78
1-dimensional vector of real numbers with four components and a quaternion algebra
Definition: colvartypes.h:980
A rotation between two sets of coordinates (for the moment a wrapper for colvarmodule::quaternion)
Definition: colvartypes.h:1368
vector of real numbers with three components
Definition: colvartypes.h:728
Collective variables module (main class)
Definition: colvarmodule.h:72
double real
Defining an abstract real number allows to switch precision.
Definition: colvarmodule.h:99
colvarproxy * proxy
Pointer to the proxy object, used to retrieve atomic data from the hosting program.
Definition: colvarmodule.h:957
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