git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@11447 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
94
tools/colvars/abf_data.h
Normal file
94
tools/colvars/abf_data.h
Normal file
@ -0,0 +1,94 @@
|
||||
/// \file integrate.h General headers for ABF_integrate
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#define MIN_SAMPLES 1
|
||||
|
||||
/// Free energy gradients class
|
||||
class ABFdata {
|
||||
|
||||
protected:
|
||||
/// Sizes of (i-1) dimension blocks
|
||||
/// computed as Prod_(j<i) sizes[j]
|
||||
int *blocksizes;
|
||||
/// Minimum values of each variable
|
||||
double *mins;
|
||||
|
||||
public:
|
||||
int Nvars;
|
||||
/// Free energy gradients (vector field)
|
||||
double *gradients;
|
||||
/// Sampling from the ABF calculation
|
||||
unsigned int *count;
|
||||
/// Bin widths
|
||||
double *widths;
|
||||
|
||||
unsigned int scalar_dim;
|
||||
unsigned int vec_dim;
|
||||
unsigned int *histogram;
|
||||
|
||||
/// History-dependent bias
|
||||
double *bias;
|
||||
|
||||
/// Estimate of the FE gradient computed
|
||||
/// from MtD bias or histogram in standard MC
|
||||
double *estimate;
|
||||
|
||||
/// Deviation between starting free energy gradient and
|
||||
/// estimated one
|
||||
double *deviation;
|
||||
|
||||
void write_histogram(const char *fileName);
|
||||
void write_bias(const char *fileName);
|
||||
void write_field(double *field, const char *fileName);
|
||||
|
||||
/// Grid sizes
|
||||
int *sizes;
|
||||
|
||||
/// Flag stating if each variable is periodic
|
||||
int *PBC;
|
||||
|
||||
/// Constructor: reads from a file
|
||||
ABFdata(const char *gradFileName);
|
||||
~ABFdata();
|
||||
|
||||
/// \brief Returns an offset for scalar fields based on a n-index.
|
||||
/// multiply by Nvars to get an offset in a Nvars-vector field
|
||||
unsigned int offset(const int *);
|
||||
|
||||
inline bool wrap(int &pos, int i);
|
||||
|
||||
/// Decides if an offset is outside the allowed region based on the ABF sampling
|
||||
inline bool allowed(unsigned int offset);
|
||||
};
|
||||
|
||||
|
||||
inline bool ABFdata::wrap(int &pos, int i)
|
||||
{
|
||||
if (PBC[i]) {
|
||||
if (pos == -1) {
|
||||
pos = sizes[i] - 1;
|
||||
return true;
|
||||
}
|
||||
if (pos == sizes[i]) {
|
||||
pos = 0;
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
// No PBC
|
||||
if (pos == -1) {
|
||||
pos = 0;
|
||||
return false;
|
||||
}
|
||||
if (pos == sizes[i]) {
|
||||
pos = sizes[i] - 1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool ABFdata::allowed(unsigned int offset) {
|
||||
return count[offset] > MIN_SAMPLES;
|
||||
}
|
||||
Reference in New Issue
Block a user