File: colvarbias_histogram_reweight_amd.h

package info (click to toggle)
lammps 20250204%2Bdfsg.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 474,368 kB
  • sloc: cpp: 1,060,070; python: 27,785; ansic: 8,956; f90: 7,254; sh: 6,044; perl: 4,171; fortran: 2,442; xml: 1,714; makefile: 1,352; objc: 238; lisp: 188; yacc: 58; csh: 16; awk: 14; tcl: 6; javascript: 2
file content (99 lines) | stat: -rw-r--r-- 4,044 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// -*- c++ -*-

// This file is part of the Collective Variables module (Colvars).
// The original version of Colvars and its updates are located at:
// https://github.com/Colvars/colvars
// Please update all Colvars source files before making any changes.
// If you wish to distribute your changes, please submit them to the
// Colvars repository at GitHub.

#ifndef COLVARBIAS_HISTOGRAM_REWEIGHT_AMD
#define COLVARBIAS_HISTOGRAM_REWEIGHT_AMD

#include "colvarbias_histogram.h"

/// Reweighted histogram for accelerated molecular dynamics (aMD) or
/// Gaussian aMD (GaMD)
class colvarbias_reweightaMD : public colvarbias_histogram {
public:
  colvarbias_reweightaMD(char const *key);
  virtual ~colvarbias_reweightaMD();
  virtual int init(std::string const &conf) override;
  virtual int update() override;
  virtual int write_output_files() override;

  /// @brief convert histogram to PMF by taking logarithm and multiplying
  ///        it with -1/beta
  /// @param[in,out] hist the origin histogram and also the output PMF
  /// @param[in] hist_count the sampling or biased histogram
  void hist_to_pmf(
    colvar_grid_scalar* hist,
    const colvar_grid_scalar* hist_count) const;

  /// @brief calculate the cumulant expansion to second order
  /// @param[in] hist_dV the histogram of the boosting potential, ΔV(ξ)
  /// @param[in] hist_dV_square the histogram of the square of boosting
  ///                           potential
  /// @param[in] hist_count the sampling or biased histogram
  /// @param[out] cumulant_expansion_factor the factor of the cumulant
  ///                                       expansion to second order
  void compute_cumulant_expansion_factor(
    const colvar_grid_scalar* hist_dV,
    const colvar_grid_scalar* hist_dV_square,
    const colvar_grid_scalar* hist_count,
    colvar_grid_scalar* cumulant_expansion_factor) const;

  /// @brief output the PMF by the exponential average estimator
  /// @param[in] p_output_prefix the prefix of the output file
  /// @param[in] keep_open Allow writing the history of the PMF
  virtual int write_exponential_reweighted_pmf(
    const std::string& p_output_prefix, bool keep_open = false);

  /// @brief output the PMF by the cumulant expansion estimator
  /// @param[in] p_output_prefix the prefix of the output file
  /// @param[in] keep_open Allow writing the history of the expansion
  virtual int write_cumulant_expansion_pmf(
    const std::string& p_output_prefix, bool keep_open = false);

  /// @brief output the biased sampling
  /// @param[in] p_output_prefix the prefix of the output file
  /// @param[in] keep_open Allow writing the history of the samples
  virtual int write_count(
    const std::string& p_output_prefix, bool keep_open = false);
protected:
  /// Current accelMD factor is the from previous frame
  std::vector<int> previous_bin;
  /// Start collecting samples after N steps
  colvarmodule::step_number start_after_steps;

  /// Use cumulant expansion to second order?
  bool b_use_cumulant_expansion;
  colvar_grid_scalar* grid_count;
  colvar_grid_scalar* grid_dV;
  colvar_grid_scalar* grid_dV_square;

  /// Number of timesteps between recording data in history files (if non-zero)
  size_t history_freq;
  bool b_history_files;

  /// Write gradients of the PMF?
  bool b_write_gradients;

  template <typename OST> OST & write_state_data_template_(OST& os);
  template <typename IST> IST & read_state_data_template_(IST& is);

  /// save and restore
  virtual std::istream & read_state_data(std::istream &is) override;
  virtual cvm::memory_stream & read_state_data(cvm::memory_stream &is) override;
  virtual std::ostream & write_state_data(std::ostream &os) override;
  virtual cvm::memory_stream & write_state_data(cvm::memory_stream &os) override;

private:
  /// temporary grids for evaluating PMFs
  colvar_grid_scalar  *pmf_grid_exp_avg;
  colvar_grid_scalar  *pmf_grid_cumulant;
  colvar_grid_gradient *grad_grid_exp_avg;
  colvar_grid_gradient *grad_grid_cumulant;
};

#endif // COLVARBIAS_HISTOGRAM_REWEIGHT_AMD