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
355};
356
357
358inline colvarvalue const & colvar::cvc::value() const
359{
360 return x;
361}
362
363
365{
366 return ft;
367}
368
369
371{
372 return jd;
373}
374
375
376
379
381 : public colvar::cvc
382{
383protected:
390public:
391 distance();
392 virtual ~distance() {}
393 virtual int init(std::string const &conf);
394 virtual void calc_value();
395 virtual void calc_gradients();
396 virtual void calc_force_invgrads();
397 virtual void calc_Jacobian_derivative();
398};
399
400
401
402// \brief Colvar component: distance vector between centers of mass
403// of two groups (\link colvarvalue::type_3vector \endlink type,
404// range (-*:*)x(-*:*)x(-*:*))
406 : public colvar::distance
407{
408public:
409 distance_vec();
410 virtual ~distance_vec() {}
411 virtual void calc_value();
412 virtual void calc_gradients();
413 virtual void apply_force(colvarvalue const &force);
415 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
417 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
419 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
421 virtual void wrap(colvarvalue &x_unwrapped) const;
422};
423
424
429 : public colvar::distance
430{
431public:
432 distance_dir();
433 virtual ~distance_dir() {}
434 virtual void calc_value();
435 virtual void calc_gradients();
436 virtual void apply_force(colvarvalue const &force);
438 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
440 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
442 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
444 virtual void wrap(colvarvalue &x_unwrapped) const;
445};
446
447
448
452 : public colvar::cvc
453{
454protected:
468 bool fixed_axis = true;
469public:
470 distance_z();
471 virtual ~distance_z() {}
472 virtual int init(std::string const &conf);
473 virtual void calc_value();
474 virtual void calc_gradients();
475 virtual void calc_force_invgrads();
476 virtual void calc_Jacobian_derivative();
477};
478
479
480
484 : public colvar::distance_z
485{
486protected:
491public:
492 distance_xy();
493 virtual ~distance_xy() {}
494 virtual void calc_value();
495 virtual void calc_gradients();
496 virtual void calc_force_invgrads();
497 virtual void calc_Jacobian_derivative();
498};
499
500
504 : public colvar::cvc
505{
506protected:
507 cvm::atom_group *atoms = nullptr;
508 cvm::real r, theta, phi;
509
510public:
511 polar_phi();
512 virtual ~polar_phi() {}
513 virtual int init(std::string const &conf);
514 virtual void calc_value();
515 virtual void calc_gradients();
516};
517
518
522 : public colvar::cvc
523{
524public:
525 polar_theta();
526 virtual ~polar_theta() {}
527 virtual int init(std::string const &conf);
528protected:
529 cvm::atom_group *atoms = nullptr;
530 cvm::real r, theta, phi;
531public:
532 virtual void calc_value();
533 virtual void calc_gradients();
534};
535
536
540 : public colvar::cvc
541{
542protected:
548 int exponent = 6;
549public:
550 distance_inv();
551 virtual ~distance_inv() {}
552 virtual int init(std::string const &conf);
553 virtual void calc_value();
554 virtual void calc_gradients();
555};
556
557
558
562 : public colvar::cvc
563{
564protected:
569public:
571 virtual ~distance_pairs() {}
572 virtual int init(std::string const &conf);
573 virtual void calc_value();
574 virtual void calc_gradients();
575 virtual void apply_force(colvarvalue const &force);
577 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
579 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
581 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
583 virtual void wrap(colvarvalue &x_unwrapped) const;
584};
585
586
589 : public colvar::cvc
590{
591protected:
594 cvm::atom_pos dipoleV;
595public:
597 virtual ~dipole_magnitude() {}
598 virtual int init(std::string const &conf);
599 virtual void calc_value();
600 virtual void calc_gradients();
601};
602
603
604
608 : public colvar::cvc
609{
610protected:
613public:
614 gyration();
615 virtual ~gyration() {}
616 virtual int init(std::string const &conf);
617 virtual void calc_value();
618 virtual void calc_gradients();
619 virtual void calc_force_invgrads();
620 virtual void calc_Jacobian_derivative();
621};
622
623
624
628 : public colvar::gyration
629{
630public:
631 inertia();
632 virtual ~inertia() {}
633 virtual void calc_value();
634 virtual void calc_gradients();
635};
636
637
638
642 : public colvar::inertia
643{
644protected:
647public:
648 inertia_z();
649 virtual ~inertia_z() {}
650 virtual int init(std::string const &conf);
651 virtual void calc_value();
652 virtual void calc_gradients();
653};
654
655
656
660 : public colvar::cvc
661{
662protected:
663
666
668 std::vector<cvm::atom_pos> ref_pos;
669
671 std::vector<cvm::rvector> eigenvec;
672
675
676public:
677
678 eigenvector();
679 virtual ~eigenvector() {}
680 virtual int init(std::string const &conf);
681 virtual void calc_value();
682 virtual void calc_gradients();
683 virtual void calc_force_invgrads();
684 virtual void calc_Jacobian_derivative();
685};
686
687
688
692 : public colvar::cvc
693{
694protected:
707
711 bool b_1site_force = false;
712public:
713
714 angle();
719 virtual ~angle() {}
720 virtual int init(std::string const &conf);
721 virtual void calc_value();
722 virtual void calc_gradients();
723 virtual void calc_force_invgrads();
724 virtual void calc_Jacobian_derivative();
725};
726
727
728
732 : public colvar::cvc
733{
734protected:
735
748
752 bool b_1site_force = false;
753public:
754
755 dipole_angle();
756 virtual ~dipole_angle() {}
757 virtual int init(std::string const &conf);
758 virtual void calc_value();
759 virtual void calc_gradients();
760};
761
762
763
767 : public colvar::cvc
768{
769protected:
770
780 cvm::rvector r12, r23, r34;
781
784 bool b_1site_force = false;
785
786public:
787
793 dihedral();
794 virtual ~dihedral() {}
795 virtual int init(std::string const &conf);
796 virtual void calc_value();
797 virtual void calc_gradients();
798 virtual void calc_force_invgrads();
799 virtual void calc_Jacobian_derivative();
800};
801
802
808 : public colvar::cvc
809{
810protected:
811
814
817
819 std::vector<angle *> theta;
820
822 std::vector<h_bond *> hb;
823
826
829
831 int en = 6;
832
834 int ed = 8;
835
836public:
837
838 alpha_angles();
839 virtual ~alpha_angles();
840 virtual int init(std::string const &conf);
841 void calc_value();
842 void calc_gradients();
844 void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
845 void apply_force(colvarvalue const &force);
846};
847
848
849
855 : public colvar::cvc
856{
857protected:
858
859 std::vector<dihedral *> theta;
860 std::vector<cvm::real> coeffs;
861
862public:
863
864 dihedPC();
865 virtual ~dihedPC();
866 virtual int init(std::string const &conf);
867 virtual void calc_value();
868 virtual void calc_gradients();
870 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
871 virtual void apply_force(colvarvalue const &force);
872};
873
874
875
881 : public colvar::cvc
882{
883protected:
888
890 cvm::ag_vector_real_t ref_pos_soa;
891 size_t num_ref_pos;
892
894 cvm::ag_vector_real_t shifted_pos_soa;
895 size_t num_shifted_pos;
896
899
903
906 std::unique_ptr<rotation_derivative_impl_> rot_deriv_impl;
907
908public:
909
910 orientation();
911 virtual ~orientation();
912 virtual int init(std::string const &conf);
913 virtual void calc_value();
914 virtual void calc_gradients();
915 virtual void apply_force(colvarvalue const &force);
917 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
919 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
921 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
923 virtual void wrap(colvarvalue &x_unwrapped) const;
924};
925
926
931 : public colvar::orientation
932{
933public:
934
936 virtual ~orientation_angle() {}
937 virtual void calc_value();
938 virtual void calc_gradients();
939 virtual void apply_force(colvarvalue const &force);
941 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
943 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
945 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
947 virtual void wrap(colvarvalue &x_unwrapped) const;
948};
949
950
951
957{
958public:
959
961 virtual ~orientation_proj() {}
962 virtual void calc_value();
963 virtual void calc_gradients();
964};
965
966
967
972{
973protected:
974
975 cvm::rvector axis;
976
977public:
978
979 tilt();
980 virtual ~tilt() {}
981 virtual int init(std::string const &conf);
982 virtual void calc_value();
983 virtual void calc_gradients();
984};
985
986
987
991 : public colvar::tilt
992{
993public:
994
995 spin_angle();
996 virtual ~spin_angle() {}
997 virtual void calc_value();
998 virtual void calc_gradients();
999};
1000
1001
1004{
1005public:
1006 euler_phi();
1007 virtual ~euler_phi() {}
1008 virtual void calc_value();
1009 virtual void calc_gradients();
1010};
1011
1012
1015{
1016public:
1017 euler_psi();
1018 virtual ~euler_psi() {}
1019 virtual void calc_value();
1020 virtual void calc_gradients();
1021};
1022
1023
1026{
1027public:
1028 euler_theta();
1029 virtual ~euler_theta() {}
1030 virtual void calc_value();
1031 virtual void calc_gradients();
1032};
1033
1034
1040 : public colvar::cvc
1041{
1042protected:
1043
1044 // TODO: transfrom ref_pos to soa
1047
1050 size_t num_ref_pos = 0;
1051 cvm::ag_vector_real_t ref_pos_soa;
1052
1053#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1054 cvm::real* d_ref_pos_soa;
1055 cvm::real* d_permutation_msds;
1056 unsigned int* d_tbcounts;
1057 cvm::real* h_rmsd;
1058 size_t* h_best_perm_index;
1059 cvm::real* d_ft;
1060 cvm::real* h_ft;
1061 cvm::real* d_jd;
1062 cvm::real* h_jd;
1063 unsigned int* d_tbcount_ft;
1064 unsigned int* d_tbcount_jd;
1065#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1066
1068 size_t n_permutations = 1;
1069 cvm::ag_vector_real_t permutation_msds;
1070
1073
1075 int init_permutation(std::vector<cvm::atom_pos>& ref_pos, std::string const &conf);
1076
1077public:
1078 rmsd();
1079 bool has_gpu_implementation() const override;
1080#if defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1082 cudaGraph_t& graph,
1083 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1084 int calc_value_after_gpu() override;
1086 cudaGraph_t& graph,
1087 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1089 cudaGraph_t& graph,
1090 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1091 int calc_force_invgrads_after_gpu() override;
1093 cudaGraph_t& graph,
1094 std::unordered_map<std::string, cudaGraphNode_t>& nodes_map) override;
1096#endif // defined (COLVARS_CUDA) || defined (COLVARS_HIP)
1097 virtual ~rmsd();
1098 virtual int init(std::string const &conf) override;
1099 virtual void calc_value() override;
1100 virtual void calc_gradients() override;
1101 virtual void calc_force_invgrads() override;
1102 virtual void calc_Jacobian_derivative() override;
1103};
1104
1105
1106
1107// \brief Colvar component: flat vector of Cartesian coordinates
1108// Mostly useful to compute scripted colvar values
1110 : public colvar::cvc
1111{
1112protected:
1116 std::vector<size_t> axes;
1117public:
1118 cartesian();
1119 virtual ~cartesian() {}
1120 virtual int init(std::string const &conf);
1121 virtual void calc_value();
1122 virtual void calc_gradients();
1123 virtual void apply_force(colvarvalue const &force);
1125 virtual cvm::real dist2(colvarvalue const &x1,
1126 colvarvalue const &x2) const;
1128 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1129 colvarvalue const &x2) const;
1131 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1132 colvarvalue const &x2) const;
1134 virtual void wrap(colvarvalue &x_unwrapped) const;
1135};
1136
1137
1138// \brief Colvar component: alch_lambda
1139// To communicate value with back-end in lambda-dynamics
1141 : public colvar::cvc
1142{
1143protected:
1144 // No atom groups needed
1145public:
1146 alch_lambda();
1147 int init_alchemy(int time_step_factor);
1148 virtual ~alch_lambda() {}
1149 virtual void calc_value();
1150 virtual void calc_force_invgrads();
1151 virtual void calc_Jacobian_derivative();
1152 virtual void apply_force(colvarvalue const &force);
1153};
1154
1155
1156// \brief Colvar component: alch_Flambda
1157// To communicate force on lambda with back-end in lambda-dynamics
1159 : public colvar::cvc
1160{
1161protected:
1162 // No atom groups needed
1163public:
1164 alch_Flambda();
1165 virtual ~alch_Flambda() {}
1166 virtual void calc_value();
1167 virtual void calc_gradients();
1168 virtual void apply_force(colvarvalue const &force);
1169};
1170
1171
1173 : public colvar::cvc
1174{
1175protected:
1176 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result);
1177 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1183 std::vector<std::vector<cvm::atom_pos>> reference_frames;
1184 std::vector<std::vector<cvm::atom_pos>> reference_fitting_frames;
1186 std::vector<cvm::atom_group*> comp_atoms;
1189public:
1191 virtual ~CartesianBasedPath();
1192 virtual int init(std::string const &conf);
1193 virtual void calc_value() = 0;
1195 virtual void apply_force(colvarvalue const &force);
1196};
1197
1202 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::S>
1203{
1204private:
1205 // Optimal rotation for compute v3
1206 cvm::rotation rot_v3;
1207protected:
1208 virtual void prepareVectors();
1209 virtual void updateDistanceToReferenceFrames();
1210public:
1211 gspath();
1212 virtual ~gspath() {}
1213 virtual int init(std::string const &conf);
1214 virtual void calc_value();
1215 virtual void calc_gradients();
1216 virtual void apply_force(colvarvalue const &force);
1217};
1218
1219
1220
1224 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::Z>
1225{
1226private:
1227 // Optimal rotation for compute v3, v4
1228 cvm::rotation rot_v3;
1229 cvm::rotation rot_v4;
1230protected:
1231 virtual void prepareVectors();
1232 virtual void updateDistanceToReferenceFrames();
1233public:
1234 gzpath();
1235 virtual ~gzpath() {}
1236 virtual int init(std::string const &conf);
1237 virtual void calc_value();
1238 virtual void calc_gradients();
1239 virtual void apply_force(colvarvalue const &force);
1240};
1241
1244 : public colvar::cvc
1245{
1246protected:
1248 std::vector<colvar::cvc*> cv;
1251protected:
1252 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1253public:
1255 virtual ~linearCombination();
1256 virtual int init(std::string const &conf);
1257 virtual void calc_value();
1258 virtual void calc_gradients();
1259 virtual void apply_force(colvarvalue const &force);
1261 virtual cvm::real dist2(colvarvalue const &x1,
1262 colvarvalue const &x2) const;
1264 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1265 colvarvalue const &x2) const;
1267 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1268 colvarvalue const &x2) const;
1270 virtual void wrap(colvarvalue &x_unwrapped) const;
1271};
1272
1273
1277{
1278protected:
1279 bool use_custom_function = false;
1280#ifdef LEPTON
1282 std::vector<Lepton::CompiledExpression *> value_evaluators;
1284 std::vector<Lepton::CompiledExpression *> gradient_evaluators;
1286 std::vector<double *> value_eval_var_refs;
1287 std::vector<double *> grad_eval_var_refs;
1289 double dev_null = 0.0;
1290#endif
1291public:
1292 customColvar();
1293 virtual ~customColvar();
1294 virtual int init(std::string const &conf);
1295 virtual void calc_value();
1296 virtual void calc_gradients();
1297 virtual void apply_force(colvarvalue const &force);
1298};
1299
1300
1302 : public colvar::cvc
1303{
1304protected:
1306 std::vector<colvar::cvc*> cv;
1308 std::vector<std::vector<colvarvalue>> ref_cv;
1313protected:
1314 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1316 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result) const;
1317 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1318public:
1319 CVBasedPath();
1320 virtual ~CVBasedPath();
1321 virtual int init(std::string const &conf);
1322 virtual void calc_value() = 0;
1324 virtual void apply_force(colvarvalue const &force);
1326 virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const;
1328 virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1330 virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const;
1332 virtual void wrap(colvarvalue &x_unwrapped) const;
1333};
1334
1335
1341 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::S>
1342{
1343protected:
1344 virtual void updateDistanceToReferenceFrames();
1345 virtual void prepareVectors();
1346public:
1347 gspathCV();
1348 virtual ~gspathCV();
1349 virtual int init(std::string const &conf);
1350 virtual void calc_value();
1351 virtual void calc_gradients();
1352 virtual void apply_force(colvarvalue const &force);
1353};
1354
1355
1356
1358 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::Z>
1359{
1360protected:
1361 virtual void updateDistanceToReferenceFrames();
1362 virtual void prepareVectors();
1363public:
1364 gzpathCV();
1365 virtual ~gzpathCV();
1366 virtual int init(std::string const &conf);
1367 virtual void calc_value();
1368 virtual void calc_gradients();
1369 virtual void apply_force(colvarvalue const &force);
1370};
1371
1372struct ArithmeticPathImpl;
1373
1376{
1377private:
1378 std::unique_ptr<ArithmeticPathImpl> impl_;
1379 friend struct ArithmeticPathImpl;
1380public:
1381 aspath();
1382 virtual ~aspath();
1383 virtual int init(std::string const &conf);
1384 virtual void calc_value();
1385 virtual void calc_gradients();
1386 virtual void apply_force(colvarvalue const &force);
1387};
1388
1391{
1392private:
1393 std::unique_ptr<ArithmeticPathImpl> impl_;
1394 friend struct ArithmeticPathImpl;
1395public:
1396 azpath();
1397 virtual ~azpath();
1398 virtual int init(std::string const &conf);
1399 virtual void calc_value();
1400 virtual void calc_gradients();
1401 virtual void apply_force(colvarvalue const &force);
1402};
1403
1405 : public colvar::CVBasedPath
1406{
1407private:
1408 std::unique_ptr<ArithmeticPathImpl> impl_;
1409 friend struct ArithmeticPathImpl;
1410public:
1411 aspathCV();
1412 virtual ~aspathCV();
1413 virtual int init(std::string const &conf);
1414 virtual void calc_value();
1415 virtual void calc_gradients();
1416 virtual void apply_force(colvarvalue const &force);
1417};
1418
1419
1421 : public colvar::CVBasedPath
1422{
1423private:
1424 std::unique_ptr<ArithmeticPathImpl> impl_;
1425 friend struct ArithmeticPathImpl;
1426public:
1427 azpathCV();
1428 virtual ~azpathCV();
1429 virtual int init(std::string const &conf);
1430 virtual void calc_value();
1431 virtual void calc_gradients();
1432 virtual void apply_force(colvarvalue const &force);
1433};
1434
1435// forward declaration
1436namespace neuralnetworkCV {
1437 class neuralNetworkCompute;
1438}
1439
1440
1442 : public linearCombination
1443{
1444protected:
1446 std::unique_ptr<neuralnetworkCV::neuralNetworkCompute> nn;
1448 size_t m_output_index = 0;
1449public:
1450 neuralNetwork();
1451 virtual ~neuralNetwork();
1452 virtual int init(std::string const &conf);
1453 virtual void calc_value();
1454 virtual void calc_gradients();
1455 virtual void apply_force(colvarvalue const &force);
1457 virtual cvm::real dist2(colvarvalue const &x1,
1458 colvarvalue const &x2) const;
1460 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1461 colvarvalue const &x2) const;
1463 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1464 colvarvalue const &x2) const;
1466 virtual void wrap(colvarvalue &x_unwrapped) const;
1467};
1468
1469
1470// \brief Colvar component: total value of a scalar map
1471// (usually implemented as a grid by the simulation engine)
1473 : public colvar::cvc
1474{
1475public:
1476
1477 map_total();
1478 virtual ~map_total() {}
1479 virtual int init(std::string const &conf);
1480 virtual void calc_value();
1481 virtual void calc_gradients();
1482 virtual void apply_force(colvarvalue const &force);
1483
1484protected:
1485
1487 std::string volmap_name;
1488
1490 int volmap_id = -1;
1491
1494
1497
1499 std::vector<cvm::real> atom_weights;
1500};
1501
1502
1503
1504#endif
Definition: colvar_geometricpath.h:24
Definition: colvarcomp.h:1303
std::vector< colvar::cvc * > cv
Sub-colvar components.
Definition: colvarcomp.h:1306
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1312
bool use_explicit_gradients
If all sub-cvs use explicit gradients then we also use it.
Definition: colvarcomp.h:1310
std::vector< std::vector< colvarvalue > > ref_cv
Reference colvar values from path.
Definition: colvarcomp.h:1308
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:1174
cvm::atom_group * atoms
Selected atoms.
Definition: colvarcomp.h:1179
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:1183
size_t total_reference_frames
Total number of reference frames.
Definition: colvarcomp.h:1188
bool has_user_defined_fitting
Fitting options.
Definition: colvarcomp.h:1181
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:1186
Definition: colvarcomp.h:1160
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:1142
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:809
void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:237
cvm::real theta_tol
Tolerance on the Calpha-Calpha angle.
Definition: colvarcomp.h:816
int en
Integer exponent of the HB numerator.
Definition: colvarcomp.h:831
cvm::real theta_ref
Reference Calpha-Calpha angle (default: 88 degrees)
Definition: colvarcomp.h:813
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:248
void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:193
cvm::real hb_coeff
Contribution of the HB terms.
Definition: colvarcomp.h:825
int ed
Integer exponent of the HB denominator.
Definition: colvarcomp.h:834
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:300
cvm::real r0
Cutoff for HB.
Definition: colvarcomp.h:828
std::vector< h_bond * > hb
List of hydrogen bonds.
Definition: colvarcomp.h:822
virtual int init(std::string const &conf)
Definition: colvarcomp_protein.cpp:29
std::vector< angle * > theta
List of Calpha-Calpha angles.
Definition: colvarcomp.h:819
Colvar component: angle between the centers of mass of three groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:693
bool b_1site_force
Definition: colvarcomp.h:711
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:700
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:702
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:77
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:117
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:698
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:94
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:706
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:704
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:696
Definition: colvarcomp.h:1406
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:1376
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:1422
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:1391
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:1111
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1601
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1564
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1114
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1607
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:1521
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1550
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1589
std::vector< size_t > axes
Which Cartesian coordinates to include.
Definition: colvarcomp.h:1116
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:1595
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:1572
custom expression of colvars
Definition: colvarcomp.h:1277
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:497
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:1160
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:542
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:1154
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:579
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:370
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:1143
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:358
static std::vector< feature * > cvc_features
Implementation of the feature list for colvar.
Definition: colvarcomp.h:311
cvm::system_boundary_conditions boundary_conditions
Boundary conditions for the system, copied from the engine when needed.
Definition: colvarcomp.h:354
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:1132
colvarvalue x
Cached value.
Definition: colvarcomp.h:317
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp.cpp:550
void calc_fit_gradients()
Calculate the atomic fit gradients.
Definition: colvarcomp.cpp:558
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:479
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:860
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:364
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:568
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:856
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:560
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:540
virtual int init(std::string const &conf)
Definition: colvarcomp_protein.cpp:351
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:552
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:583
Colvar component: dihedral between the centers of mass of four groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:768
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:293
cvm::atom_group * group4
Atom group.
Definition: colvarcomp.h:778
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:229
cvm::rvector r12
Inter site vectors.
Definition: colvarcomp.h:780
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:315
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:346
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:772
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:776
bool b_1site_force
Compute total force on first site only to avoid unwanted coupling to other colvars (see e....
Definition: colvarcomp.h:784
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:774
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:270
Colvar component: angle between the dipole of a molecule and an axis formed by two groups of atoms(co...
Definition: colvarcomp.h:733
bool b_1site_force
Definition: colvarcomp.h:752
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:743
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:745
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:147
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:747
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:737
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:134
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:741
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:739
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:174
Colvar component: dipole magnitude of a molecule.
Definition: colvarcomp.h:590
cvm::atom_group * atoms
Dipole atom group.
Definition: colvarcomp.h:593
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:587
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:596
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:578
Colvar component: distance unit vector (direction) between centers of mass of two groups (colvarvalue...
Definition: colvarcomp.h:430
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:355
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:334
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:324
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:367
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:349
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:316
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:361
Colvar component: average distance between two groups of atoms, weighted as the sixth power,...
Definition: colvarcomp.h:541
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:546
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:378
int exponent
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:548
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:544
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:410
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:460
Colvar component: N1xN2 vector of pairwise distances (colvarvalue::type_vector type,...
Definition: colvarcomp.h:563
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:555
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:567
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:568
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:561
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:474
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:486
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:520
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:549
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:566
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:514
Definition: colvarcomp.h:407
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:130
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:124
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:94
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:118
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:101
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:108
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to deal with multiple dimensions.
Definition: colvarcomp_distances.cpp:136
Colvar component: projection of the distance vector on a plane (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:485
cvm::rvector dist_v_ortho
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:488
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:263
cvm::rvector v12
Vector distances.
Definition: colvarcomp.h:490
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:249
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:287
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:300
Colvar component: projection of the distance vector along an axis(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:453
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:202
cvm::rvector dist_v
Vector distance, cached to be recycled.
Definition: colvarcomp.h:466
cvm::atom_group * main
Main atom group.
Definition: colvarcomp.h:456
bool fixed_axis
Flag: using a fixed axis vector?
Definition: colvarcomp.h:468
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:221
cvm::real axis_norm
Norm of the axis.
Definition: colvarcomp.h:464
cvm::atom_group * ref1
Reference atom group.
Definition: colvarcomp.h:458
cvm::atom_group * ref2
Optional, second ref atom group.
Definition: colvarcomp.h:460
cvm::rvector axis
Vector on which the distance vector is projected.
Definition: colvarcomp.h:462
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:183
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:150
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:234
Colvar component: distance between the centers of mass of two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:382
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:387
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:79
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:389
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:67
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:59
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:385
Colvar component: projection of 3N coordinates onto an eigenvector(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:661
std::vector< cvm::atom_pos > ref_pos
Reference coordinates.
Definition: colvarcomp.h:668
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:1230
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1459
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1426
std::vector< cvm::rvector > eigenvec
Eigenvector (of a normal or essential mode): will always have zero center.
Definition: colvarcomp.h:671
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:665
cvm::real eigenvec_invnorm2
Inverse square norm of the eigenvector.
Definition: colvarcomp.h:674
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1437
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1447
Definition: colvarcomp.h:1004
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:397
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:381
Definition: colvarcomp.h:1015
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:444
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:428
Definition: colvarcomp.h:1026
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:489
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:475
Colvar component: alternative path collective variable using geometry, variable s Allow any combinati...
Definition: colvarcomp.h:1342
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:1203
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:609
cvm::atom_group * atoms
Atoms involved.
Definition: colvarcomp.h:612
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:638
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:659
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:649
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:673
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:619
Definition: colvarcomp.h:1359
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:1225
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: moment of inertia of an atom group around a user-defined axis (colvarvalue::type_sc...
Definition: colvarcomp.h:643
cvm::rvector axis
Vector on which the inertia tensor is projected.
Definition: colvarcomp.h:646
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:728
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:741
virtual int init(std::string const &conf)
Definition: colvarcomp_distances.cpp:712
Colvar component: moment of inertia of an atom group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:629
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:686
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:696
Current only linear combination of sub-CVCs is available.
Definition: colvarcomp.h:1245
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:1248
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:1250
Definition: colvarcomp.h:1474
std::string volmap_name
String identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1487
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:1493
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:1496
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:1499
int volmap_id
Numeric identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1490
Definition: colvarcomp.h:1443
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:1448
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:1446
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:932
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:957
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:263
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:272
Colvar component: orientation in space of an atom group, with respect to a set of reference coordinat...
Definition: colvarcomp.h:882
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:898
cvm::ag_vector_real_t shifted_pos_soa
Shifted atomic positions.
Definition: colvarcomp.h:894
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:890
cvm::atom_pos atoms_cog
Center of geometry of the group.
Definition: colvarcomp.h:887
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:902
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:41
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:885
Colvar component: polar coordinate phi of a group (colvarvalue::type_scalar type, range [-180:180])
Definition: colvarcomp.h:505
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:414
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:405
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:425
Colvar component: polar coordinate theta of a group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:523
virtual int init(std::string const &conf)
Definition: colvarcomp_angles.cpp:363
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:372
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:383
Colvar component: root mean square deviation (RMSD) of a group with respect to a set of reference coo...
Definition: colvarcomp.h:1041
size_t best_perm_index
Index of the permutation yielding the smallest RMSD (0 for identity)
Definition: colvarcomp.h:1072
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:1186
int init_permutation(std::vector< cvm::atom_pos > &ref_pos, std::string const &conf)
Permutation RMSD input parsing.
Definition: colvarcomp_distances.cpp:933
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1046
size_t num_ref_pos
Definition: colvarcomp.h:1050
virtual void calc_gradients() override
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1008
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:1214
virtual void calc_force_invgrads() override
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1032
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:1141
virtual void calc_Jacobian_derivative() override
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1046
size_t n_permutations
Number of permutations of symmetry-related atoms.
Definition: colvarcomp.h:1068
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:1111
virtual int init(std::string const &conf) override
Definition: colvarcomp_distances.cpp:810
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:1181
virtual void calc_value() override
Calculate the variable.
Definition: colvarcomp_distances.cpp:982
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:1156
bool has_gpu_implementation() const override
Check the GPU availability.
Definition: colvarcomp_distances.cpp:796
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:1129
Colvar component: angle of rotation around a predefined axis (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:992
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:345
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:357
Colvar component: projection of the orientation vector onto a predefined axis (colvarvalue::type_scal...
Definition: colvarcomp.h:972
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:321
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:296
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:310
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
Class to store the system's boundary conditions.
Definition: colvars_system.h:16
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:120
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:113
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