Window

class Window

Macrostate ranges are often broken into separate windows for parallelization. The relative size of these windows can be optimized depending upon the system. Each window must share atleast one macrostate with its neighbors in order to recover the free energy of the entire range.

A segment is a countinuous, theoretical formula for analytically spacing macrostate ranges. This line segment includes both the minimum, maximum, and intermediate values. Thus, a 4 window segment would contain 5 values.

Boundaries are integer macrostate minimums and maximums utilized by each window. Thus, 4 window boundaries would contain 4 min and max values. Boundaries use the given line segment, either from formula or user input, and then account for rounding and extra overlap between windows.

For example, 4 windows with segments given by [0, 100.00, 141.42, 173.21, 200] with 4 extra overlap and rounding would result in the following boundaries: [[0, 100], [96, 141], [137, 173], [169, 200]] where each of the 4 window is expressed as a [min, max] pair.

Subclassed by feasst::WindowCustom, feasst::WindowExponential

Public Functions

Window(const argtype &args = argtype())

args:

  • minimum: minimum in macrostate range (default: 0).

  • maximum: maximum in macrostate range.

  • num: number of windows.

  • num_from_omp: obtain num from OMP threads (default: false).

  • extra_overlap: additional overlap of the windows in addition to the one macrostate that they must share (default: 0).

virtual int minimum() const

Return the minimum.

virtual int maximum() const

Return the maximum.

virtual int num() const

Return the number of windows.

int extra_overlap() const

Return the extra overlap.

virtual std::vector<double> segment() const = 0

Return the continuous, segmented boundaries of the range. This should be return num + 1 boundaries, to include global min and max.

std::vector<std::vector<int>> boundaries() const

Return the boundaries as a vector of vectors.