class WindowExponential : public feasst::Window

Determine windows based on an expontential factor, \(\alpha\). The macrostate of the windows, \(m_i\), is given by

\(m_{i+1} = \left( m_i^{\alpha} + \frac{m_{n+1}^{\alpha} - m_0^{\alpha}}{n} \right)^{1/\alpha}\)

where \(i\) is the index of the window, ranging from \(0\) to \(n+1\) and \(n\) is the number of windows. Thus, \(m_{n+1}\) is the maximum macrostate over the entire range, while \(m_0\) is the minimum macrostate over the entire range. For \(\alpha=1\), the widths of all windows are the same. For \(\alpha>1\), the widths of the windows decrease exponentially. For \(\alpha<1\), the widths of the windows increase exponentially.

The given formula is continuous and not rounded. Instead, use Window::boundaries for handling rounding and overlap. For example, 4 windows over a macrostate range of [0, 200], \(\alpha=2\), results in the following segments: [0, 100.00, 141.42, 173.21, 200].

The choice of alpha can affect the efficiency of the simulation, depending on the relative speed of the convergence of the low macrostates compared to the higher macrostates. If the lower macrostate windows are converging slower, then alpha should be decreased. If the higher macrostate simulations are converging slower, then alpha may need to be increased. The choice of alpha is dependent on the system, conditions and convergence criteria.

Public Functions

WindowExponential(argtype args = argtype())


  • alpha: exponential factor (default: 1.5).

  • min[i]: minimum macrostate value of the i-th window (default: None), The “[i]” is to be substituted for an integer 0, 1, 2, … This allows the user to override alpha at the smaller windows.

std::vector<double> segment() const

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