00001 #ifndef COLVARBIAS_H
00002 #define COLVARBIAS_H
00003
00004 #include "colvar.h"
00005 #include "colvarparse.h"
00006
00007
00009 class colvarbias : public colvarparse {
00010 public:
00011
00013 int id;
00014
00016 std::string name;
00017
00019 void add_colvar (std::string const &cv_name);
00020
00022 virtual void update() = 0;
00023
00025 virtual inline void analyse() {}
00026
00028 void communicate_forces();
00029
00034 colvarbias (std::string const &conf, char const *key);
00035
00037 virtual inline ~colvarbias() {}
00038
00040 virtual std::istream & read_restart (std::istream &is) = 0;
00041
00043 virtual std::ostream & write_restart (std::ostream &os) = 0;
00044
00045 protected:
00046
00050 std::vector<colvar *> colvars;
00051
00053 std::vector<colvarvalue> colvar_forces;
00054
00057 cvm::real colvar_energy;
00058
00059 };
00060
00061
00064 class colvarbias_harmonic : public colvarbias {
00065
00066 public:
00067
00069 virtual void update();
00070
00072 virtual std::istream & read_restart (std::istream &is);
00073
00075 virtual std::ostream & write_restart (std::ostream &os);
00076
00078 colvarbias_harmonic (std::string const &conf, char const *key);
00079
00081 virtual inline ~colvarbias_harmonic() {}
00082
00083
00084 protected:
00085
00087 std::vector<colvarvalue> colvar_centers;
00088
00090 cvm::real force_k;
00091
00093 cvm::real force_k_target;
00094
00096 size_t force_k_target_nsteps;
00097
00099 std::vector<colvarvalue> colvar_targets;
00100
00103 size_t targets_nsteps;
00104
00107 std::vector<cvm::real> target_steps;
00108 };
00109
00110
00111 #endif
00112
00113
00114
00115
00116
00117
00118