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
23#include "colvarmodule.h"
24#include "colvar.h"
25#include "colvaratoms.h"
26#include "colvar_arithmeticpath.h"
27
28#if (__cplusplus >= 201103L)
29// C++11-only functions
30#include "colvar_geometricpath.h"
31#include <memory>
32#include <functional>
33#endif
34
35#include <map>
36
37
75
77 : public colvarparse, public colvardeps
78{
79public:
80
83 std::string name;
84
93 std::string function_type;
94
96 std::string config_key;
97
102
105
108
112 cvc(std::string const &conf);
113
115 int set_function_type(std::string const &type);
116
120 virtual int init(std::string const &conf);
121
123 virtual int init_dependencies();
124
128 cvm::atom_group *parse_group(std::string const &conf,
129 char const *group_key,
130 bool optional = false);
131
133 virtual int init_total_force_params(std::string const &conf);
134
136 int setup();
137
140 cvc();
141
143 virtual ~cvc();
144
146 static std::vector<feature *> cvc_features;
147
149 virtual const std::vector<feature *> &features() const
150 {
151 return cvc_features;
152 }
153 virtual std::vector<feature *> &modify_features()
154 {
155 return cvc_features;
156 }
157 static void delete_features() {
158 for (size_t i=0; i < cvc_features.size(); i++) {
159 delete cvc_features[i];
160 }
161 cvc_features.clear();
162 }
163
165 virtual std::vector<std::vector<int> > get_atom_lists();
166
168 virtual void read_data();
169
171 virtual void calc_value() = 0;
172
175 virtual void calc_gradients() {}
176
178 void calc_fit_gradients();
179
181 virtual void debug_gradients();
182
185 virtual void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
186
189 virtual void calc_force_invgrads();
190
192 virtual void calc_Jacobian_derivative();
193
194
196 colvarvalue const & value() const;
197
199 colvarvalue const & total_force() const;
200
203 colvarvalue const & Jacobian_derivative() const;
204
214 virtual void apply_force(colvarvalue const &cvforce) = 0;
215
244 virtual cvm::real dist2(colvarvalue const &x1,
245 colvarvalue const &x2) const;
246
250 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
251 colvarvalue const &x2) const;
252
256 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
257 colvarvalue const &x2) const;
258
260 virtual void wrap(colvarvalue &x_unwrapped) const;
261
264 std::vector<cvm::atom_group *> atom_groups;
265
268
270 virtual colvarvalue const *get_param_grad(std::string const &param_name);
271
273 virtual int set_param(std::string const &param_name, void const *new_value);
274
277
280 inline void set_value(colvarvalue const &new_value) {
281 x = new_value;
282 }
283
284protected:
285
287 std::vector<std::string> function_types;
288
291
294
300
304
306 void init_as_distance();
307
309 void init_as_angle();
310
313
316
319
322
325};
326
327
328inline colvarvalue const & colvar::cvc::value() const
329{
330 return x;
331}
332
333
335{
336 return ft;
337}
338
339
341{
342 return jd;
343}
344
345
346
349
351 : public colvar::cvc
352{
353protected:
360public:
361 distance(std::string const &conf);
362 distance();
363 virtual ~distance() {}
364 virtual void calc_value();
365 virtual void calc_gradients();
366 virtual void calc_force_invgrads();
367 virtual void calc_Jacobian_derivative();
368 virtual void apply_force(colvarvalue const &force);
369 virtual cvm::real dist2(colvarvalue const &x1,
370 colvarvalue const &x2) const;
372 colvarvalue const &x2) const;
374 colvarvalue const &x2) const;
375};
376
377
378
379// \brief Colvar component: distance vector between centers of mass
380// of two groups (\link colvarvalue::type_3vector \endlink type,
381// range (-*:*)x(-*:*)x(-*:*))
383 : public colvar::distance
384{
385public:
386 distance_vec(std::string const &conf);
387 distance_vec();
388 virtual ~distance_vec() {}
389 virtual void calc_value();
390 virtual void calc_gradients();
391 virtual void apply_force(colvarvalue const &force);
393 virtual cvm::real dist2(colvarvalue const &x1,
394 colvarvalue const &x2) const;
396 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
397 colvarvalue const &x2) const;
399 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
400 colvarvalue const &x2) const;
401};
402
403
404
409 : public colvar::distance
410{
411public:
412 distance_dir(std::string const &conf);
413 distance_dir();
414 virtual ~distance_dir() {}
415 virtual void calc_value();
416 virtual void calc_gradients();
417 virtual void apply_force(colvarvalue const &force);
419 virtual cvm::real dist2(colvarvalue const &x1,
420 colvarvalue const &x2) const;
422 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
423 colvarvalue const &x2) const;
425 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
426 colvarvalue const &x2) const;
427};
428
429
430
434 : public colvar::cvc
435{
436protected:
451public:
452 distance_z(std::string const &conf);
453 distance_z();
454 virtual ~distance_z() {}
455 virtual void calc_value();
456 virtual void calc_gradients();
457 virtual void calc_force_invgrads();
458 virtual void calc_Jacobian_derivative();
459 virtual void apply_force(colvarvalue const &force);
460 virtual cvm::real dist2(colvarvalue const &x1,
461 colvarvalue const &x2) const;
462 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
463 colvarvalue const &x2) const;
464 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
465 colvarvalue const &x2) const;
467 virtual void wrap(colvarvalue &x_unwrapped) const;
468};
469
470
471
475 : public colvar::distance_z
476{
477protected:
482public:
483 distance_xy(std::string const &conf);
484 distance_xy();
485 virtual ~distance_xy() {}
486 virtual void calc_value();
487 virtual void calc_gradients();
488 virtual void calc_force_invgrads();
489 virtual void calc_Jacobian_derivative();
490 virtual void apply_force(colvarvalue const &force);
491 virtual cvm::real dist2(colvarvalue const &x1,
492 colvarvalue const &x2) const;
494 colvarvalue const &x2) const;
496 colvarvalue const &x2) const;
497};
498
499
503 : public colvar::cvc
504{
505public:
506 polar_phi(std::string const &conf);
507 polar_phi();
508 virtual ~polar_phi() {}
509protected:
510 cvm::atom_group *atoms;
511 cvm::real r, theta, phi;
512public:
513 virtual void calc_value();
514 virtual void calc_gradients();
515 virtual void apply_force(colvarvalue const &force);
517 virtual cvm::real dist2(colvarvalue const &x1,
518 colvarvalue const &x2) const;
520 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
521 colvarvalue const &x2) const;
523 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
524 colvarvalue const &x2) const;
526 virtual void wrap(colvarvalue &x_unwrapped) const;
527};
528
529
533 : public colvar::cvc
534{
535public:
536 polar_theta(std::string const &conf);
537 polar_theta();
538 virtual ~polar_theta() {}
539protected:
540 cvm::atom_group *atoms;
541 cvm::real r, theta, phi;
542public:
543 virtual void calc_value();
544 virtual void calc_gradients();
545 virtual void apply_force(colvarvalue const &force);
547 virtual cvm::real dist2(colvarvalue const &x1,
548 colvarvalue const &x2) const;
551 colvarvalue const &x2) const;
554 colvarvalue const &x2) const;
555};
556
560 : public colvar::cvc
561{
562protected:
569public:
570 distance_inv(std::string const &conf);
571 virtual ~distance_inv() {}
572 virtual void calc_value();
573 virtual void calc_gradients();
574 virtual void apply_force(colvarvalue const &force);
575 virtual cvm::real dist2(colvarvalue const &x1,
576 colvarvalue const &x2) const;
578 colvarvalue const &x2) const;
580 colvarvalue const &x2) const;
581};
582
583
584
588 : public colvar::cvc
589{
590protected:
595public:
596 distance_pairs(std::string const &conf);
598 virtual ~distance_pairs() {}
599 virtual void calc_value();
600 virtual void calc_gradients();
601 virtual void apply_force(colvarvalue const &force);
602};
603
604
605
608 : public colvar::cvc
609{
610protected:
613 cvm::atom_pos dipoleV;
614public:
616 dipole_magnitude (std::string const &conf);
617 dipole_magnitude (cvm::atom const &a1);
619 virtual ~dipole_magnitude() {}
620 virtual void calc_value();
621 virtual void calc_gradients();
622 //virtual void calc_force_invgrads();
623 //virtual void calc_Jacobian_derivative();
624 virtual void apply_force (colvarvalue const &force);
625 virtual cvm::real dist2 (colvarvalue const &x1,
626 colvarvalue const &x2) const;
628 colvarvalue const &x2) const;
630 colvarvalue const &x2) const;
631};
632
633
634
638 : public colvar::cvc
639{
640protected:
643public:
644 gyration(std::string const &conf);
645 virtual ~gyration() {}
646 virtual void calc_value();
647 virtual void calc_gradients();
648 virtual void calc_force_invgrads();
649 virtual void calc_Jacobian_derivative();
650 virtual void apply_force(colvarvalue const &force);
651 virtual cvm::real dist2(colvarvalue const &x1,
652 colvarvalue const &x2) const;
654 colvarvalue const &x2) const;
656 colvarvalue const &x2) const;
657};
658
659
660
664 : public colvar::gyration
665{
666public:
668 inertia(std::string const &conf);
669 inertia();
670 virtual ~inertia() {}
671 virtual void calc_value();
672 virtual void calc_gradients();
673 virtual void apply_force(colvarvalue const &force);
674 virtual cvm::real dist2(colvarvalue const &x1,
675 colvarvalue const &x2) const;
677 colvarvalue const &x2) const;
679 colvarvalue const &x2) const;
680};
681
682
683
687 : public colvar::inertia
688{
689protected:
692public:
694 inertia_z(std::string const &conf);
695 inertia_z();
696 virtual ~inertia_z() {}
697 virtual void calc_value();
698 virtual void calc_gradients();
699 virtual void apply_force(colvarvalue const &force);
700 virtual cvm::real dist2(colvarvalue const &x1,
701 colvarvalue const &x2) const;
703 colvarvalue const &x2) const;
705 colvarvalue const &x2) const;
706};
707
708
709
713 : public colvar::cvc
714{
715protected:
716
719
721 std::vector<cvm::atom_pos> ref_pos;
722
724 std::vector<cvm::rvector> eigenvec;
725
728
729public:
730
732 eigenvector(std::string const &conf);
733 virtual ~eigenvector() {}
734 virtual void calc_value();
735 virtual void calc_gradients();
736 virtual void calc_force_invgrads();
737 virtual void calc_Jacobian_derivative();
738 virtual void apply_force(colvarvalue const &force);
739 virtual cvm::real dist2(colvarvalue const &x1,
740 colvarvalue const &x2) const;
742 colvarvalue const &x2) const;
744 colvarvalue const &x2) const;
745};
746
747
748
752 : public colvar::cvc
753{
754protected:
755
762
769
774public:
775
777 angle(std::string const &conf);
779 angle(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3);
780 virtual ~angle() {}
781 virtual void calc_value();
782 virtual void calc_gradients();
783 virtual void calc_force_invgrads();
784 virtual void calc_Jacobian_derivative();
785 virtual void apply_force(colvarvalue const &force);
786 virtual cvm::real dist2(colvarvalue const &x1,
787 colvarvalue const &x2) const;
789 colvarvalue const &x2) const;
791 colvarvalue const &x2) const;
792};
793
794
795
799 : public colvar::cvc
800{
801protected:
802
809
816
821public:
822
824 dipole_angle (std::string const &conf);
826 dipole_angle (cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3);
827 dipole_angle();
828 virtual ~dipole_angle() {}
829 virtual void calc_value();
830 virtual void calc_gradients();
831 virtual void apply_force (colvarvalue const &force);
832 virtual cvm::real dist2 (colvarvalue const &x1,
833 colvarvalue const &x2) const;
835 colvarvalue const &x2) const;
837 colvarvalue const &x2) const;
838};
839
840
841
845 : public colvar::cvc
846{
847protected:
848
858 cvm::rvector r12, r23, r34;
859
863
864public:
865
867 dihedral(std::string const &conf);
869 dihedral(cvm::atom const &a1, cvm::atom const &a2, cvm::atom const &a3, cvm::atom const &a4);
870 dihedral();
871 virtual ~dihedral() {}
872 virtual void calc_value();
873 virtual void calc_gradients();
874 virtual void calc_force_invgrads();
875 virtual void calc_Jacobian_derivative();
876 virtual void apply_force(colvarvalue const &force);
877
879 virtual cvm::real dist2(colvarvalue const &x1,
880 colvarvalue const &x2) const;
882 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
883 colvarvalue const &x2) const;
885 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
886 colvarvalue const &x2) const;
888 virtual void wrap(colvarvalue &x_unwrapped) const;
889};
890
891
892
896 : public colvar::cvc
897{
898protected:
910 int en;
912 int ed;
913
916
919
922
924 bool *pairlist;
925
926public:
927
928 coordnum(std::string const &conf);
929 ~coordnum();
930
931 virtual void calc_value();
932 virtual void calc_gradients();
933 virtual void apply_force(colvarvalue const &force);
934 virtual cvm::real dist2(colvarvalue const &x1,
935 colvarvalue const &x2) const;
937 colvarvalue const &x2) const;
939 colvarvalue const &x2) const;
940
941 enum {
942 ef_null = 0,
943 ef_gradients = 1,
944 ef_anisotropic = (1<<8),
945 ef_use_pairlist = (1<<9),
946 ef_rebuild_pairlist = (1<<10)
947 };
948
956 template<int flags>
958 cvm::rvector const &r0_vec,
959 int en,
960 int ed,
961 cvm::atom &A1,
962 cvm::atom &A2,
963 bool **pairlist_elem,
965
967 template<int flags> int compute_coordnum();
968
970 template<int flags> void main_loop(bool **pairlist_elem);
971
972};
973
974
975
979 : public colvar::cvc
980{
981protected:
982
988 int en;
990 int ed;
991 cvm::real tolerance;
992 int pairlist_freq;
993 bool *pairlist;
994
995public:
996
997 selfcoordnum(std::string const &conf);
999 virtual void calc_value();
1000 virtual void calc_gradients();
1001 virtual void apply_force(colvarvalue const &force);
1002
1003 virtual cvm::real dist2(colvarvalue const &x1,
1004 colvarvalue const &x2) const;
1006 colvarvalue const &x2) const;
1008 colvarvalue const &x2) const;
1009
1011 template<int flags> int compute_selfcoordnum();
1012};
1013
1014
1015
1019 : public colvar::distance
1020{
1021protected:
1030 int en;
1032 int ed;
1033public:
1035 groupcoordnum(std::string const &conf);
1036 virtual ~groupcoordnum() {}
1037 virtual void calc_value();
1038 virtual void calc_gradients();
1039 virtual void apply_force(colvarvalue const &force);
1040
1041 virtual cvm::real dist2(colvarvalue const &x1,
1042 colvarvalue const &x2) const;
1044 colvarvalue const &x2) const;
1046 colvarvalue const &x2) const;
1047};
1048
1049
1050
1055 : public colvar::cvc
1056{
1057protected:
1061 int en;
1063 int ed;
1064public:
1065 h_bond(std::string const &conf);
1067 h_bond(cvm::atom const &acceptor,
1068 cvm::atom const &donor,
1069 cvm::real r0, int en, int ed);
1070 h_bond();
1071 virtual ~h_bond() {}
1072 virtual void calc_value();
1073 virtual void calc_gradients();
1074 virtual void apply_force(colvarvalue const &force);
1075
1076 virtual cvm::real dist2(colvarvalue const &x1,
1077 colvarvalue const &x2) const;
1079 colvarvalue const &x2) const;
1081 colvarvalue const &x2) const;
1082};
1083
1084
1085
1090// class colvar::alpha_dihedrals
1091// : public colvar::cvc
1092// {
1093// protected:
1094
1095// /// Alpha-helical reference phi value
1096// cvm::real phi_ref;
1097
1098// /// Alpha-helical reference psi value
1099// cvm::real psi_ref;
1100
1101// /// List of phi dihedral angles
1102// std::vector<dihedral *> phi;
1103
1104// /// List of psi dihedral angles
1105// std::vector<dihedral *> psi;
1106
1107// /// List of hydrogen bonds
1108// std::vector<h_bond *> hb;
1109
1110// public:
1111
1112// alpha_dihedrals (std::string const &conf);
1113// alpha_dihedrals();
1114// virtual ~alpha_dihedrals() {}
1115// virtual void calc_value();
1116// virtual void calc_gradients();
1117// virtual void apply_force (colvarvalue const &force);
1118// virtual cvm::real dist2 (colvarvalue const &x1,
1119// colvarvalue const &x2) const;
1120// virtual colvarvalue dist2_lgrad (colvarvalue const &x1,
1121// colvarvalue const &x2) const;
1122// virtual colvarvalue dist2_rgrad (colvarvalue const &x1,
1123// colvarvalue const &x2) const;
1124// };
1125
1126
1127
1133 : public colvar::cvc
1134{
1135protected:
1136
1139
1142
1144 std::vector<angle *> theta;
1145
1147 std::vector<h_bond *> hb;
1148
1151
1152public:
1153
1154 alpha_angles(std::string const &conf);
1155 alpha_angles();
1156 virtual ~alpha_angles();
1157 void calc_value();
1158 void calc_gradients();
1160 void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1161 void apply_force(colvarvalue const &force);
1162 virtual cvm::real dist2(colvarvalue const &x1,
1163 colvarvalue const &x2) const;
1165 colvarvalue const &x2) const;
1167 colvarvalue const &x2) const;
1168};
1169
1170
1171
1177 : public colvar::cvc
1178{
1179protected:
1180
1181 std::vector<dihedral *> theta;
1182 std::vector<cvm::real> coeffs;
1183
1184public:
1185
1186 dihedPC(std::string const &conf);
1187 dihedPC();
1188 virtual ~dihedPC();
1189 void calc_value();
1190 void calc_gradients();
1192 void collect_gradients(std::vector<int> const &atom_ids, std::vector<cvm::rvector> &atomic_gradients);
1193 void apply_force(colvarvalue const &force);
1194 virtual cvm::real dist2(colvarvalue const &x1,
1195 colvarvalue const &x2) const;
1197 colvarvalue const &x2) const;
1199 colvarvalue const &x2) const;
1200};
1201
1202
1203
1209 : public colvar::cvc
1210{
1211protected:
1212
1217
1219 std::vector<cvm::atom_pos> ref_pos;
1220
1223
1227
1228public:
1229
1230 orientation(std::string const &conf);
1231 orientation();
1232 virtual int init(std::string const &conf);
1233 virtual ~orientation() {}
1234 virtual void calc_value();
1235 virtual void calc_gradients();
1236 virtual void apply_force(colvarvalue const &force);
1237 virtual cvm::real dist2(colvarvalue const &x1,
1238 colvarvalue const &x2) const;
1239 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1240 colvarvalue const &x2) const;
1241 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1242 colvarvalue const &x2) const;
1243};
1244
1245
1246
1251 : public colvar::orientation
1252{
1253public:
1254
1255 orientation_angle(std::string const &conf);
1256 virtual int init(std::string const &conf);
1257 virtual ~orientation_angle() {}
1258 virtual void calc_value();
1259 virtual void calc_gradients();
1260 virtual void apply_force(colvarvalue const &force);
1261 virtual cvm::real dist2(colvarvalue const &x1,
1262 colvarvalue const &x2) const;
1264 colvarvalue const &x2) const;
1266 colvarvalue const &x2) const;
1267};
1268
1269
1270
1275 : public colvar::orientation
1276{
1277public:
1278
1279 orientation_proj(std::string const &conf);
1281 virtual int init(std::string const &conf);
1282 virtual ~orientation_proj() {}
1283 virtual void calc_value();
1284 virtual void calc_gradients();
1285 virtual void apply_force(colvarvalue const &force);
1286 virtual cvm::real dist2(colvarvalue const &x1,
1287 colvarvalue const &x2) const;
1289 colvarvalue const &x2) const;
1291 colvarvalue const &x2) const;
1292};
1293
1294
1295
1299 : public colvar::orientation
1300{
1301protected:
1302
1303 cvm::rvector axis;
1304
1305public:
1306
1307 tilt(std::string const &conf);
1308 virtual int init(std::string const &conf);
1309 virtual ~tilt() {}
1310 virtual void calc_value();
1311 virtual void calc_gradients();
1312 virtual void apply_force(colvarvalue const &force);
1313 virtual cvm::real dist2(colvarvalue const &x1,
1314 colvarvalue const &x2) const;
1316 colvarvalue const &x2) const;
1318 colvarvalue const &x2) const;
1319};
1320
1321
1322
1326 : public colvar::orientation
1327{
1328protected:
1329
1330 cvm::rvector axis;
1331
1332public:
1333
1334 spin_angle(std::string const &conf);
1335 spin_angle();
1336 virtual int init(std::string const &conf);
1337 virtual ~spin_angle() {}
1338 virtual void calc_value();
1339 virtual void calc_gradients();
1340 virtual void apply_force(colvarvalue const &force);
1342 virtual cvm::real dist2(colvarvalue const &x1,
1343 colvarvalue const &x2) const;
1345 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1346 colvarvalue const &x2) const;
1348 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1349 colvarvalue const &x2) const;
1351 virtual void wrap(colvarvalue &x_unwrapped) const;
1352};
1353
1354
1356 : public colvar::orientation
1357{
1358public:
1359 euler_phi(std::string const &conf);
1360 euler_phi();
1361 virtual int init(std::string const &conf);
1362 virtual ~euler_phi() {}
1363 virtual void calc_value();
1364 virtual void calc_gradients();
1365 virtual void apply_force(colvarvalue const &force);
1366 virtual cvm::real dist2(colvarvalue const &x1,
1367 colvarvalue const &x2) const;
1368 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1369 colvarvalue const &x2) const;
1370 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1371 colvarvalue const &x2) const;
1373 virtual void wrap(colvarvalue &x_unwrapped) const;
1374};
1375
1376
1378 : public colvar::orientation
1379{
1380public:
1381 euler_psi(std::string const &conf);
1382 euler_psi();
1383 virtual int init(std::string const &conf);
1384 virtual ~euler_psi() {}
1385 virtual void calc_value();
1386 virtual void calc_gradients();
1387 virtual void apply_force(colvarvalue const &force);
1388 virtual cvm::real dist2(colvarvalue const &x1,
1389 colvarvalue const &x2) const;
1390 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1391 colvarvalue const &x2) const;
1392 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1393 colvarvalue const &x2) const;
1395 virtual void wrap(colvarvalue &x_unwrapped) const;
1396};
1397
1398
1400 : public colvar::orientation
1401{
1402public:
1403 euler_theta(std::string const &conf);
1404 euler_theta();
1405 virtual int init(std::string const &conf);
1406 virtual ~euler_theta() {}
1407 virtual void calc_value();
1408 virtual void calc_gradients();
1409 virtual void apply_force(colvarvalue const &force);
1410 // theta angle is a scalar variable and not periodic
1411 // we need to override the virtual functions from orientation
1412 virtual cvm::real dist2(colvarvalue const &x1,
1413 colvarvalue const &x2) const;
1414 virtual colvarvalue dist2_lgrad(colvarvalue const &x1,
1415 colvarvalue const &x2) const;
1416 virtual colvarvalue dist2_rgrad(colvarvalue const &x1,
1417 colvarvalue const &x2) const;
1418};
1419
1420
1426 : public colvar::cvc
1427{
1428protected:
1429
1432
1435 std::vector<cvm::atom_pos> ref_pos;
1436
1439
1442public:
1443
1445 rmsd(std::string const &conf);
1446 virtual ~rmsd() {}
1447 virtual void calc_value();
1448 virtual void calc_gradients();
1449 virtual void calc_force_invgrads();
1450 virtual void calc_Jacobian_derivative();
1451 virtual void apply_force(colvarvalue const &force);
1452 virtual cvm::real dist2(colvarvalue const &x1,
1453 colvarvalue const &x2) const;
1455 colvarvalue const &x2) const;
1457 colvarvalue const &x2) const;
1458};
1459
1460
1461
1462// \brief Colvar component: flat vector of Cartesian coordinates
1463// Mostly useful to compute scripted colvar values
1465 : public colvar::cvc
1466{
1467protected:
1471 std::vector<size_t> axes;
1472public:
1473 cartesian(std::string const &conf);
1474 cartesian();
1475 virtual ~cartesian() {}
1476 virtual void calc_value();
1477 virtual void calc_gradients();
1478 virtual void apply_force(colvarvalue const &force);
1479};
1480
1481
1482// \brief Colvar component: alch_lambda
1483// To communicate value with back-end in lambda-dynamics
1485 : public colvar::cvc
1486{
1487protected:
1488 // No atom groups needed
1489public:
1490 alch_lambda(std::string const &conf);
1491 alch_lambda();
1492 virtual ~alch_lambda() {}
1493 virtual void calc_value();
1494 virtual void calc_gradients();
1495 virtual void apply_force(colvarvalue const &force);
1496 virtual cvm::real dist2(colvarvalue const &x1,
1497 colvarvalue const &x2) const;
1499 colvarvalue const &x2) const;
1501 colvarvalue const &x2) const;
1502};
1503
1504
1505// \brief Colvar component: alch_Flambda
1506// To communicate force on lambda with back-end in lambda-dynamics
1508 : public colvar::cvc
1509{
1510protected:
1511 // No atom groups needed
1512public:
1513 alch_Flambda(std::string const &conf);
1514 alch_Flambda();
1515 virtual ~alch_Flambda() {}
1516 virtual void calc_value();
1517 virtual void calc_gradients();
1518 virtual void apply_force(colvarvalue const &force);
1519 virtual cvm::real dist2(colvarvalue const &x1,
1520 colvarvalue const &x2) const;
1522 colvarvalue const &x2) const;
1524 colvarvalue const &x2) const;
1525};
1526
1527
1529 : public colvar::cvc
1530{
1531public:
1532 componentDisabled(std::string const & /* conf */) {
1533 cvm::error("Error: this component is not enabled in the current build; please see https://colvars.github.io/README-c++11.html");
1534 }
1535 virtual ~componentDisabled() {}
1536 virtual void calc_value() {}
1537 virtual void calc_gradients() {}
1538 virtual void apply_force(colvarvalue const & /* force */) {}
1539};
1540
1541
1542
1543#if (__cplusplus >= 201103L)
1545 : public colvar::cvc
1546{
1547protected:
1548 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1550 cvm::atom_group *atoms;
1552 bool has_user_defined_fitting;
1554 std::vector<std::vector<cvm::atom_pos>> reference_frames;
1555 std::vector<std::vector<cvm::atom_pos>> reference_fitting_frames;
1557 std::vector<cvm::atom_group*> comp_atoms;
1559 size_t total_reference_frames;
1560public:
1561 CartesianBasedPath(std::string const &conf);
1562 virtual ~CartesianBasedPath();
1563 virtual void calc_value() = 0;
1564 virtual void apply_force(colvarvalue const &force) = 0;
1565};
1566
1570class colvar::gspath
1571 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::S>
1572{
1573private:
1574 // Optimal rotation for compute v3
1575 cvm::rotation rot_v3;
1576protected:
1577 virtual void prepareVectors();
1578 virtual void updateDistanceToReferenceFrames();
1579public:
1580 gspath(std::string const &conf);
1581 virtual ~gspath() {}
1582 virtual void calc_value();
1583 virtual void calc_gradients();
1584 virtual void apply_force(colvarvalue const &force);
1585};
1586
1587
1588
1591class colvar::gzpath
1592 : public colvar::CartesianBasedPath, public GeometricPathCV::GeometricPathBase<cvm::atom_pos, cvm::real, GeometricPathCV::path_sz::Z>
1593{
1594private:
1595 // Optimal rotation for compute v3, v4
1596 cvm::rotation rot_v3;
1597 cvm::rotation rot_v4;
1598protected:
1599 virtual void prepareVectors();
1600 virtual void updateDistanceToReferenceFrames();
1601public:
1602 gzpath(std::string const &conf);
1603 virtual ~gzpath() {}
1604 virtual void calc_value();
1605 virtual void calc_gradients();
1606 virtual void apply_force(colvarvalue const &force);
1607};
1608
1611 : public colvar::cvc
1612{
1613protected:
1615 std::vector<colvar::cvc*> cv;
1617 bool use_explicit_gradients;
1618protected:
1619 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1620public:
1621 linearCombination(std::string const &conf);
1622 virtual ~linearCombination();
1623 virtual void calc_value();
1624 virtual void calc_gradients();
1625 virtual void apply_force(colvarvalue const &force);
1626};
1627
1628
1630class colvar::customColvar
1632{
1633protected:
1634 bool use_custom_function;
1635#ifdef LEPTON
1637 std::vector<Lepton::CompiledExpression *> value_evaluators;
1639 std::vector<Lepton::CompiledExpression *> gradient_evaluators;
1641 std::vector<double *> value_eval_var_refs;
1642 std::vector<double *> grad_eval_var_refs;
1644 double dev_null;
1645#endif
1646public:
1647 customColvar(std::string const &conf);
1648 virtual ~customColvar();
1649 virtual void calc_value();
1650 virtual void calc_gradients();
1651 virtual void apply_force(colvarvalue const &force);
1652};
1653
1654
1656 : public colvar::cvc
1657{
1658protected:
1660 std::vector<colvar::cvc*> cv;
1662 std::vector<std::vector<colvarvalue>> ref_cv;
1664 bool use_explicit_gradients;
1666 size_t total_reference_frames;
1667protected:
1668 virtual void computeDistanceToReferenceFrames(std::vector<cvm::real>& result);
1670 virtual void computeDistanceBetweenReferenceFrames(std::vector<cvm::real>& result) const;
1671 cvm::real getPolynomialFactorOfCVGradient(size_t i_cv) const;
1672public:
1673 CVBasedPath(std::string const &conf);
1674 virtual ~CVBasedPath();
1675 virtual void calc_value() = 0;
1676 virtual void apply_force(colvarvalue const &force) = 0;
1677};
1678
1679
1684class colvar::gspathCV
1685 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::S>
1686{
1687protected:
1688 virtual void updateDistanceToReferenceFrames();
1689 virtual void prepareVectors();
1690public:
1691 gspathCV(std::string const &conf);
1692 virtual ~gspathCV();
1693 virtual void calc_value();
1694 virtual void calc_gradients();
1695 virtual void apply_force(colvarvalue const &force);
1696};
1697
1698
1699
1700class colvar::gzpathCV
1701 : public colvar::CVBasedPath, public GeometricPathCV::GeometricPathBase<colvarvalue, cvm::real, GeometricPathCV::path_sz::Z>
1702{
1703protected:
1704 virtual void updateDistanceToReferenceFrames();
1705 virtual void prepareVectors();
1706public:
1707 gzpathCV(std::string const &conf);
1708 virtual ~gzpathCV();
1709 virtual void calc_value();
1710 virtual void calc_gradients();
1711 virtual void apply_force(colvarvalue const &force);
1712};
1713
1714
1715
1716class colvar::aspathCV
1717 : public colvar::CVBasedPath, public ArithmeticPathCV::ArithmeticPathBase<colvarvalue, cvm::real, ArithmeticPathCV::path_sz::S>
1718{
1719protected:
1720 virtual void updateDistanceToReferenceFrames();
1721public:
1722 aspathCV(std::string const &conf);
1723 virtual ~aspathCV();
1724 virtual void calc_value();
1725 virtual void calc_gradients();
1726 virtual void apply_force(colvarvalue const &force);
1727};
1728
1729
1730class colvar::azpathCV
1731 : public colvar::CVBasedPath, public ArithmeticPathCV::ArithmeticPathBase<colvarvalue, cvm::real, ArithmeticPathCV::path_sz::Z>
1732{
1733protected:
1734 virtual void updateDistanceToReferenceFrames();
1735public:
1736 azpathCV(std::string const &conf);
1737 virtual ~azpathCV();
1738 virtual void calc_value();
1739 virtual void calc_gradients();
1740 virtual void apply_force(colvarvalue const &force);
1741};
1742
1743// forward declaration
1744namespace neuralnetworkCV {
1745 class neuralNetworkCompute;
1746}
1747
1749 : public linearCombination
1750{
1751protected:
1753 std::unique_ptr<neuralnetworkCV::neuralNetworkCompute> nn;
1755 size_t m_output_index;
1756public:
1757 neuralNetwork(std::string const &conf);
1758 virtual ~neuralNetwork();
1759 virtual void calc_value();
1760 virtual void calc_gradients();
1761 virtual void apply_force(colvarvalue const &force);
1762};
1763
1764#else // if the compiler doesn't support C++11
1765
1768{
1769public:
1770 linearCombination(std::string const &conf) : componentDisabled(conf) {}
1771};
1772
1775{
1776public:
1777 CartesianBasedPath(std::string const &conf) : componentDisabled(conf) {}
1778};
1779
1782{
1783public:
1784 CVBasedPath(std::string const &conf) : componentDisabled(conf) {}
1785};
1786
1789{
1790public:
1791 gspath(std::string const &conf) : componentDisabled(conf) {}
1792};
1793
1796{
1797public:
1798 gzpath(std::string const &conf) : componentDisabled(conf) {}
1799};
1800
1803{
1804public:
1805 gspathCV(std::string const &conf) : componentDisabled(conf) {}
1806};
1807
1810{
1811public:
1812 gzpathCV(std::string const &conf) : componentDisabled(conf) {}
1813};
1814
1817{
1818public:
1819 aspathCV(std::string const &conf) : componentDisabled(conf) {}
1820};
1821
1824{
1825public:
1826 azpathCV(std::string const &conf) : componentDisabled(conf) {}
1827};
1828
1831{
1832public:
1833 neuralNetwork(std::string const &conf) : componentDisabled(conf) {}
1834};
1835
1836#endif // C++11 checking
1837
1838
1839// \brief Colvar component: total value of a scalar map
1840// (usually implemented as a grid by the simulation engine)
1842 : public colvar::cvc
1843{
1844public:
1845
1846 map_total();
1847 map_total(std::string const &conf);
1848 virtual ~map_total() {}
1849 virtual int init(std::string const &conf);
1850 virtual void calc_value();
1851 virtual void calc_gradients();
1852 virtual void apply_force(colvarvalue const &force);
1853
1854protected:
1855
1857 std::string volmap_name;
1858
1861
1864
1867
1869 std::vector<cvm::real> atom_weights;
1870};
1871
1872
1873
1874// metrics functions for cvc implementations
1875
1876// simple definitions of the distance functions; these are useful only
1877// for optimization (the type check performed in the default
1878// colvarcomp functions is skipped)
1879
1880// definitions assuming the scalar type
1881
1882#define simple_scalar_dist_functions(TYPE) \
1883 \
1884 \
1885 cvm::real colvar::TYPE::dist2(colvarvalue const &x1, \
1886 colvarvalue const &x2) const \
1887 { \
1888 return (x1.real_value - x2.real_value)*(x1.real_value - x2.real_value); \
1889 } \
1890 \
1891 \
1892 colvarvalue colvar::TYPE::dist2_lgrad(colvarvalue const &x1, \
1893 colvarvalue const &x2) const \
1894 { \
1895 return 2.0 * (x1.real_value - x2.real_value); \
1896 } \
1897 \
1898 \
1899 colvarvalue colvar::TYPE::dist2_rgrad(colvarvalue const &x1, \
1900 colvarvalue const &x2) const \
1901 { \
1902 return this->dist2_lgrad(x2, x1); \
1903 } \
1904
1905
1906#endif
Definition: colvar_arithmeticpath.h:18
Definition: colvar_geometricpath.h:23
Definition: colvarcomp.h:1782
Definition: colvarcomp.h:1775
Definition: colvarcomp.h:1509
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_alchlambda.cpp:86
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...
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:91
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_alchlambda.cpp:75
Definition: colvarcomp.h:1486
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_alchlambda.cpp:34
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_alchlambda.cpp:48
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...
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...
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:53
Colvar component: alpha helix content of a contiguous segment of 5 or more residues,...
Definition: colvarcomp.h:1134
void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:177
cvm::real theta_tol
Tolerance on the Calpha-Calpha angle.
Definition: colvarcomp.h:1141
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...
cvm::real theta_ref
Reference Calpha-Calpha angle (default: 88 degrees)
Definition: colvarcomp.h:1138
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:188
void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:133
cvm::real hb_coeff
Contribution of the hb terms.
Definition: colvarcomp.h:1150
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:240
std::vector< h_bond * > hb
List of hydrogen bonds.
Definition: colvarcomp.h:1147
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...
std::vector< angle * > theta
List of Calpha-Calpha angles.
Definition: colvarcomp.h:1144
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Colvar component: angle between the centers of mass of three groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:753
bool b_1site_force
Definition: colvarcomp.h:773
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:761
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:764
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_angles.cpp:123
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:74
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:114
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...
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:759
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:53
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:91
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:768
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:766
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:757
Definition: colvarcomp.h:1817
Definition: colvarcomp.h:1824
Definition: colvarcomp.h:1466
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1554
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1469
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1542
std::vector< size_t > axes
Which Cartesian coordinates to include.
Definition: colvarcomp.h:1471
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:1562
Definition: colvarcomp.h:1530
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp.h:1536
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp.h:1537
virtual void apply_force(colvarvalue const &)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp.h:1538
Colvar component: coordination number between two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:897
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:910
static cvm::real switching_function(cvm::real const &r0, cvm::rvector const &r0_vec, int en, int ed, cvm::atom &A1, cvm::atom &A2, bool **pairlist_elem, cvm::real tolerance)
Calculate a coordination number through the function (1-x**n)/(1-x**m), where x = |A1-A2|/r0.
Definition: colvarcomp_coordnums.cpp:20
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:271
int compute_coordnum()
Workhorse function.
Definition: colvarcomp_coordnums.cpp:222
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:902
cvm::real tolerance
Tolerance for the pair list.
Definition: colvarcomp.h:918
bool b_group2_center_only
If true, group2 will be treated as a single atom.
Definition: colvarcomp.h:915
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:912
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:282
int pairlist_freq
Frequency of update of the pair list.
Definition: colvarcomp.h:921
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:904
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...
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...
bool b_anisotropic
Whether r/r0 or \vec{r}*\vec{1/r0_vec} should be used.
Definition: colvarcomp.h:908
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
bool * pairlist
Pair list.
Definition: colvarcomp.h:924
void main_loop(bool **pairlist_elem)
Workhorse function.
Definition: colvarcomp_coordnums.cpp:195
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:900
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_coordnums.cpp:288
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:906
Colvar component (base class for collective variables)
Definition: colvarcomp.h:78
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:452
virtual int init_total_force_params(std::string const &conf)
Parse options pertaining to total force calculation.
Definition: colvarcomp.cpp:126
virtual void wrap(colvarvalue &x_unwrapped) const
Wrap value (for periodic/symmetric cvcs)
Definition: colvarcomp.cpp:658
void set_value(colvarvalue const &new_value)
Definition: colvarcomp.h:280
std::string function_type
Description of the type of collective variable.
Definition: colvarcomp.h:93
int sup_np
Exponent in the polynomial combination (default: 1)
Definition: colvarcomp.h:101
int set_function_type(std::string const &type)
Set the value of function_type and its dependencies.
Definition: colvarcomp.cpp:46
cvm::real sup_coeff
Coefficient in the polynomial combination (default: 1.0)
Definition: colvarcomp.h:99
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp.cpp:494
colvarvalue jd
Calculated Jacobian derivative (divergence of the inverse gradients): serves to calculate the phase s...
Definition: colvarcomp.h:303
std::vector< std::string > function_types
Record the type of this class as well as those it is derived from.
Definition: colvarcomp.h:287
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:651
virtual int init(std::string const &conf)
Definition: colvarcomp.cpp:65
virtual void debug_gradients()
Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component.
Definition: colvarcomp.cpp:518
virtual ~cvc()
Destructor.
Definition: colvarcomp.cpp:322
colvarvalue const & Jacobian_derivative() const
Return the previously calculated divergence of the inverse atomic gradients.
Definition: colvarcomp.h:340
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp.h:175
cvm::real width
CVC-specific default colvar width.
Definition: colvarcomp.h:324
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:644
virtual colvarvalue const * get_param_grad(std::string const &param_name)
Pointer to the gradient of parameter param_name.
Definition: colvarcomp.cpp:378
int setup()
After construction, set data related to dependency handling.
Definition: colvarcomp.cpp:315
virtual int set_param(std::string const &param_name, void const *new_value)
Set the named parameter to the given value.
Definition: colvarcomp.cpp:386
colvarvalue const & value() const
Return the previously calculated value.
Definition: colvarcomp.h:328
static std::vector< feature * > cvc_features
Implementation of the feature list for colvar.
Definition: colvarcomp.h:146
virtual int init_dependencies()
Initialize dependency tree.
Definition: colvarcomp.cpp:209
colvarvalue ft
Calculated total force (Note: this is calculated from the total atomic forces read from the program,...
Definition: colvarcomp.h:299
std::string name
The name of the object (helps to identify this cvc instance when debugging)
Definition: colvarcomp.h:83
bool b_try_scalable
Whether or not this CVC will be computed in parallel whenever possible.
Definition: colvarcomp.h:276
cvm::real wrap_center
If the component is periodic, wrap around this value (default: 0.0)
Definition: colvarcomp.h:107
virtual void calc_value()=0
Calculate the variable.
virtual void read_data()
Obtain data needed for the calculation for the backend.
Definition: colvarcomp.cpp:412
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp.cpp:637
colvarvalue x
Cached value.
Definition: colvarcomp.h:290
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp.cpp:502
void calc_fit_gradients()
Calculate the atomic fit gradients.
Definition: colvarcomp.cpp:510
void init_as_periodic_angle()
Set data types for a periodic angle (-180° to 180°)
Definition: colvarcomp.cpp:349
virtual std::vector< std::vector< int > > get_atom_lists()
Get vector of vectors of atom IDs for all atom groups.
Definition: colvarcomp.cpp:434
cvc()
Default constructor (used when colvar::cvc objects are declared within other ones)
Definition: colvarcomp.cpp:19
void register_atom_group(cvm::atom_group *ag)
Store a pointer to new atom group, and list as child for dependencies.
Definition: colvarcomp.cpp:371
void init_as_angle()
Set data types for a bounded angle (0° to 180°)
Definition: colvarcomp.cpp:342
void init_as_distance()
Set data types for a scalar distance (convenience function)
Definition: colvarcomp.cpp:332
colvarvalue const & total_force() const
Return the previously calculated total force.
Definition: colvarcomp.h:334
virtual void apply_force(colvarvalue const &cvforce)=0
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
colvarvalue x_old
Value at the previous step.
Definition: colvarcomp.h:293
colvarvalue upper_boundary
Location of the upper boundary (not defined by user choice)
Definition: colvarcomp.h:321
colvarvalue lower_boundary
Location of the lower boundary (not defined by user choice)
Definition: colvarcomp.h:318
void init_scalar_boundaries(cvm::real lb, cvm::real ub)
Set two scalar boundaries (convenience function)
Definition: colvarcomp.cpp:358
std::vector< cvm::atom_group * > atom_groups
Pointers to all atom groups, to let colvars collect info e.g. atomic gradients.
Definition: colvarcomp.h:264
std::string config_key
Keyword used in the input to denote this CVC.
Definition: colvarcomp.h:96
virtual const std::vector< feature * > & features() const
Implementation of the feature list accessor for colvar.
Definition: colvarcomp.h:149
cvm::atom_group * parse_group(std::string const &conf, char const *group_key, bool optional=false)
Within the constructor, make a group parse its own options from the provided configuration string Ret...
Definition: colvarcomp.cpp:156
cvm::real period
Period of the values of this CVC (default: 0.0, non periodic)
Definition: colvarcomp.h:104
Colvar component: dihedPC Projection of the config onto a dihedral principal component See e....
Definition: colvarcomp.h:1178
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...
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:460
void calc_value()
Calculate the variable.
Definition: colvarcomp_protein.cpp:440
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_protein.cpp:452
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:483
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...
Colvar component: dihedral between the centers of mass of four groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:846
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:330
cvm::atom_group * group4
Atom group.
Definition: colvarcomp.h:856
cvm::rvector r12
Inter site vectors.
Definition: colvarcomp.h:858
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:404
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_angles.cpp:435
cvm::atom_group * group1
Atom group.
Definition: colvarcomp.h:850
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:854
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:478
bool b_1site_force
Compute total force on first site only to avoid unwanted coupling to other colvars (see e....
Definition: colvarcomp.h:862
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:487
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:460
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:852
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:469
dihedral(std::string const &conf)
Initialize by parsing the configuration.
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:301
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_angles.cpp:442
Colvar component: angle between the dipole of a molecule and an axis formed by two groups of atoms(co...
Definition: colvarcomp.h:800
bool b_1site_force
Definition: colvarcomp.h:820
cvm::rvector r21
Inter site vectors.
Definition: colvarcomp.h:811
cvm::real r21l
Inter site vector norms.
Definition: colvarcomp.h:813
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:177
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_angles.cpp:232
cvm::rvector dxdr1
Derivatives wrt group centers of mass.
Definition: colvarcomp.h:815
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...
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
cvm::atom_group * group1
Dipole atom group.
Definition: colvarcomp.h:804
cvm::atom_group * group3
Atom group.
Definition: colvarcomp.h:808
dipole_angle(std::string const &conf)
Initialize by parsing the configuration.
cvm::atom_group * group2
Atom group.
Definition: colvarcomp.h:806
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...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:201
Colvar component: dipole magnitude of a molecule.
Definition: colvarcomp.h:609
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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:790
cvm::atom_group * atoms
Dipole atom group.
Definition: colvarcomp.h:612
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:770
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:779
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...
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...
Colvar component: distance unit vector (direction) between centers of mass of two groups (colvarvalue...
Definition: colvarcomp.h:410
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
Definition: colvarcomp_distances.cpp:545
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:524
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:514
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
Definition: colvarcomp_distances.cpp:538
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:502
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
Definition: colvarcomp_distances.cpp:552
Colvar component: average distance between two groups of atoms, weighted as the sixth power,...
Definition: colvarcomp.h:561
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:566
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...
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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:645
int exponent
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:568
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:564
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:596
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...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:640
Colvar component: N1xN2 vector of pairwise distances (colvarvalue::type_vector type,...
Definition: colvarcomp.h:589
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:594
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:681
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:718
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:592
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:712
Definition: colvarcomp.h:384
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the box periodicity.
Definition: colvarcomp_distances.cpp:163
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the box periodicity.
Definition: colvarcomp_distances.cpp:156
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:121
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the box periodicity.
Definition: colvarcomp_distances.cpp:149
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:132
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:139
Colvar component: projection of the distance vector on a plane (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:476
cvm::rvector dist_v_ortho
Components of the distance vector orthogonal to the axis.
Definition: colvarcomp.h:479
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:417
cvm::rvector v12
Vector distances.
Definition: colvarcomp.h:481
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...
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:465
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:393
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:446
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:459
Colvar component: projection of the distance vector along an axis(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:435
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:261
cvm::rvector dist_v
Vector distance, cached to be recycled.
Definition: colvarcomp.h:448
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_distances.cpp:344
cvm::atom_group * main
Main atom group.
Definition: colvarcomp.h:438
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to make use of the user-provided period.
Definition: colvarcomp_distances.cpp:356
bool fixed_axis
Flag: using a fixed axis vector?
Definition: colvarcomp.h:450
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_distances.cpp:332
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:287
cvm::real axis_norm
Norm of the axis.
Definition: colvarcomp.h:446
cvm::atom_group * ref1
Reference atom group.
Definition: colvarcomp.h:440
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp_distances.cpp:320
cvm::atom_group * ref2
Optional, second ref atom group.
Definition: colvarcomp.h:442
cvm::rvector axis
Vector on which the distance vector is projected.
Definition: colvarcomp.h:444
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:231
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:306
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:300
Colvar component: distance between the centers of mass of two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:352
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:87
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...
cvm::atom_group * group2
Second atom group.
Definition: colvarcomp.h:357
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:81
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:49
cvm::rvector dist_v
Vector distance, cached to be recycled.
Definition: colvarcomp.h:359
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:69
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:61
cvm::atom_group * group1
First atom group.
Definition: colvarcomp.h:355
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Colvar component: projection of 3N coordinates onto an eigenvector(colvarvalue::type_scalar type,...
Definition: colvarcomp.h:714
std::vector< cvm::atom_pos > ref_pos
Reference coordinates.
Definition: colvarcomp.h:721
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:1439
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...
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1458
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1422
eigenvector(std::string const &conf)
Constructor.
std::vector< cvm::rvector > eigenvec
Eigenvector (of a normal or essential mode): will always have zero center.
Definition: colvarcomp.h:724
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:718
cvm::real eigenvec_invnorm2
Inverse square norm of the eigenvector.
Definition: colvarcomp.h:727
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1431
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...
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1446
Definition: colvarcomp.h:1357
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:491
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_rotations.cpp:529
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_rotations.cpp:538
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp_rotations.cpp:520
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:547
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:475
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:467
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:511
Definition: colvarcomp.h:1379
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_rotations.cpp:644
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:582
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:606
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:662
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:626
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:590
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_rotations.cpp:653
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp_rotations.cpp:635
Definition: colvarcomp.h:1401
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:719
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp_rotations.cpp:748
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:697
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:739
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_rotations.cpp:764
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_rotations.cpp:756
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:705
Colvar component: coordination number between two groups (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:1020
cvm::rvector r0_vec
"Cutoff vector" for anisotropic calculation
Definition: colvarcomp.h:1025
bool b_anisotropic
Wheter dist/r0 or \vec{dist}*\vec{1/r0_vec} should ne be used.
Definition: colvarcomp.h:1028
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:1030
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:1032
groupcoordnum(std::string const &conf)
Constructor.
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:596
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...
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:1023
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_coordnums.cpp:645
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:619
Definition: colvarcomp.h:1803
Definition: colvarcomp.h:1789
Colvar component: Radius of gyration of an atom group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:639
cvm::atom_group * atoms
Atoms involved.
Definition: colvarcomp.h:642
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:822
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:841
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...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:832
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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...
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:854
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:860
Definition: colvarcomp.h:1810
Definition: colvarcomp.h:1796
Colvar component: hydrogen bond, defined as the product of a colvar::coordnum and 1/2*(1-cos((180-ang...
Definition: colvarcomp.h:1056
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:1063
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...
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_coordnums.cpp:388
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:365
cvm::real r0
"Cutoff" distance between acceptor and donor
Definition: colvarcomp.h:1059
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...
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:1061
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:377
Colvar component: moment of inertia of an atom group around a user-defined axis (colvarvalue::type_sc...
Definition: colvarcomp.h:688
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
inertia_z(std::string const &conf)
Constructor.
cvm::rvector axis
Vector on which the inertia tensor is projected.
Definition: colvarcomp.h:691
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:943
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:925
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...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:935
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...
Colvar component: moment of inertia of an atom group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:665
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:879
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:896
inertia(std::string const &conf)
Constructor.
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:888
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...
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.h:1768
Definition: colvarcomp.h:1843
std::string volmap_name
String identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1857
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_volmaps.cpp:104
int volmap_index
Index of the map objet in the proxy arrays.
Definition: colvarcomp.h:1863
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:134
cvm::atom_group * atoms
Group of atoms selected internally (optional)
Definition: colvarcomp.h:1866
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_volmaps.cpp:128
virtual int init(std::string const &conf)
Definition: colvarcomp_volmaps.cpp:41
std::vector< cvm::real > atom_weights
Weights assigned to each atom (default: uniform weights)
Definition: colvarcomp.h:1869
int volmap_id
Numeric identifier of the map object (as used by the simulation engine)
Definition: colvarcomp.h:1860
Definition: colvarcomp.h:1831
Colvar component: angle of rotation with respect to a set of reference coordinates (colvarvalue::type...
Definition: colvarcomp.h:1252
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:175
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:181
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:195
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:208
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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...
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...
Colvar component: cosine of the angle of rotation with respect to a set of reference coordinates (col...
Definition: colvarcomp.h:1276
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...
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:232
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:255
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:238
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
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...
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:246
Colvar component: orientation in space of an atom group, with respect to a set of reference coordinat...
Definition: colvarcomp.h:1210
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:129
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
Definition: colvarcomp_rotations.cpp:143
cvm::rotation rot
Rotation object.
Definition: colvarcomp.h:1222
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:105
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:120
cvm::atom_pos atoms_cog
Center of geometry of the group.
Definition: colvarcomp.h:1216
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_rotations.cpp:157
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_rotations.cpp:150
std::vector< cvm::atom_pos > ref_pos
Reference coordinates.
Definition: colvarcomp.h:1219
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:1226
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:28
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1214
Colvar component: polar coordinate phi of a group (colvarvalue::type_scalar type, range [-180:180])
Definition: colvarcomp.h:504
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:601
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_angles.cpp:592
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:572
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:619
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:610
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_angles.cpp:628
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:583
Colvar component: polar coordinate theta of a group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:534
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to override the distance ones.
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_angles.cpp:543
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_angles.cpp:520
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_angles.cpp:531
Colvar component: root mean square deviation (RMSD) of a group with respect to a set of reference coo...
Definition: colvarcomp.h:1427
size_t best_perm_index
Index of the permutation yielding the smallest RMSD (0 for identity)
Definition: colvarcomp.h:1441
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_distances.cpp:1121
virtual void calc_Jacobian_derivative()
Calculate the divergence of the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1156
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...
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:1135
std::vector< cvm::atom_pos > ref_pos
Definition: colvarcomp.h:1435
cvm::atom_group * atoms
Atom group.
Definition: colvarcomp.h:1431
size_t n_permutations
Number of permutations of symmetry-related atoms.
Definition: colvarcomp.h:1438
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
virtual void calc_force_invgrads()
Calculate the total force from the system using the inverse atomic gradients.
Definition: colvarcomp_distances.cpp:1142
rmsd(std::string const &conf)
Constructor.
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...
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_distances.cpp:1094
Colvar component: self-coordination number within a group (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:980
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
cvm::atom_group * group1
Selected atoms.
Definition: colvarcomp.h:984
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_coordnums.cpp:524
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...
virtual void apply_force(colvarvalue const &force)
Apply the collective variable force, by communicating the atomic forces to the simulation program (No...
Definition: colvarcomp_coordnums.cpp:530
int compute_selfcoordnum()
Main workhorse function.
Definition: colvarcomp_coordnums.cpp:451
int ed
Integer exponent of the function denominator.
Definition: colvarcomp.h:990
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_coordnums.cpp:513
cvm::real r0
"Cutoff" for isotropic calculation (default)
Definition: colvarcomp.h:986
int en
Integer exponent of the function numerator.
Definition: colvarcomp.h:988
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...
Colvar component: angle of rotation around a predefined axis (colvarvalue::type_scalar type,...
Definition: colvarcomp.h:1327
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:405
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:395
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:371
virtual colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:414
virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:423
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:344
virtual void wrap(colvarvalue &x_unwrapped) const
Redefined to handle the 2*PI periodicity.
Definition: colvarcomp_rotations.cpp:432
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:382
Colvar component: projection of the orientation vector onto a predefined axis (colvarvalue::type_scal...
Definition: colvarcomp.h:1300
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:319
virtual void calc_gradients()
Calculate the atomic gradients, to be reused later in order to apply forces.
Definition: colvarcomp_rotations.cpp:306
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...
virtual int init(std::string const &conf)
Definition: colvarcomp_rotations.cpp:280
virtual void calc_value()
Calculate the variable.
Definition: colvarcomp_rotations.cpp:296
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...
virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const
Square distance between x1 and x2 (can be redefined to transparently implement constraints,...
std::vector< cvm::rvector > atomic_gradients
Array of atomic gradients collected from all cvcs with appropriate components, rotations etc....
Definition: colvar.h:690
colvarvalue ft
Total force, as derived from the atomic trajectory; should equal the system force plus f.
Definition: colvar.h:224
std::vector< int > atom_ids
Sorted array of (zero-based) IDs for all atoms involved.
Definition: colvar.h:685
Parent class for a member object of a bias, cv or cvc etc. containing features and their dependencies...
Definition: colvardeps.h:34
Group of atom objects, mostly used by a colvar::cvc object to gather all atomic data.
Definition: colvaratoms.h:156
Stores numeric id, mass and all mutable data for an atom, mostly used by a colvar::cvc.
Definition: colvaratoms.h:28
1-dimensional vector of real numbers with four components and a quaternion algebra
Definition: colvartypes.h:937
A rotation between two sets of coordinates (for the moment a wrapper for colvarmodule::quaternion)
Definition: colvartypes.h:1285
vector of real numbers with three components
Definition: colvartypes.h:703
double real
Defining an abstract real number allows to switch precision.
Definition: colvarmodule.h:100
static int error(std::string const &message, int code=COLVARS_ERROR)
Print a message to the main log and set global error code.
Definition: colvarmodule.cpp:1811
Base class containing parsing functions; all objects which need to parse input inherit from this.
Definition: colvarparse.h:26
Value of a collective variable: this is a metatype which can be set at runtime. By default it is set ...
Definition: colvarvalue.h:41
Collective variables main module.