CLEASE修正:
montecarlo.montecarlo.py line 382
if call_observers:
改成:
if call_observers and move_accepted:
montecarlo.metadynamics_sampler.py line 210
x = np.linspace(xmin, xmax, 200)
改为
nbins = self.bias.nbins
x = np.linspace(xmin, xmax, nbins)
对metadynamcis收敛的修正:由于x范围可能有些达不到,修改收敛条件为忽视两端bin访问为0的点,但是限制至少要9成被访问。
montecarlo/metadynamics_sampler.py
def visit_is_flat(self):
"""Return True if the histogram of visits is flat."""
i_min = self.visit_hist.get_index(self.visit_hist.xmin)
i_max = self.visit_hist.get_index(self.visit_hist.xmax)
coeff = self.visit_hist.get_coeff()[i_min:i_max]
avg = np.mean(coeff)
minval = min(coeff.tolist())
self.progress_info["mean"] = avg
if avg > 0.0:
self.progress_info["minval"] = minval / avg
else:
self.progress_info["minval"] = 0.0
if np.max(avg) == 0:
return False
return minval > self.flat_limit * avg
改为:
def visit_is_flat(self):
"""Return True if the histogram of visits is flat."""
i_min = self.visit_hist.get_index(self.visit_hist.xmin)
i_max = self.visit_hist.get_index(self.visit_hist.xmax)
coeff = self.visit_hist.get_coeff()[i_min:i_max]
non_zero_indices = np.nonzero(coeff)[0]
start = non_zero_indices[0]
end = non_zero_indices[-1]
trimmed_coeff = coeff[start:end+1]
avg = np.mean(trimmed_coeff)
self.progress_info["mean"] = avg
if len(trimmed_coeff) < 0.9 * self.visit_hist.nbins:
self.progress_info["minval"] = 0.0
return False
minval = min(trimmed_coeff.tolist())
if avg > 0.0:
self.progress_info["minval"] = minval / avg
else:
self.progress_info["minval"] = 0.0
if np.max(avg) == 0:
return False
return minval > self.flat_limit * avg
还有一个字典问题报错,但是想不起来了。不影响计算,新安装运算之后出现报错再说。