本文整理汇总了Python中ase.neb.NEB.__init__方法的典型用法代码示例。如果您正苦于以下问题:Python NEB.__init__方法的具体用法?Python NEB.__init__怎么用?Python NEB.__init__使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ase.neb.NEB
的用法示例。
在下文中一共展示了NEB.__init__方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from ase.neb import NEB [as 别名]
# 或者: from ase.neb.NEB import __init__ [as 别名]
def __init__(self, images, control, k=1.0, climb=False, parallel=False, minmodes=None, decouple_modes=False):
self.control = control
NEB.__init__(self, images, k, climb, parallel)
self.spring_force = 'full'
# Set up MinModeAtoms objects for each image and make individual logfiles for each
# NB: Shouldn't there be a ERM_Control class that takes care of this crap?
self.images = []
for i in range(self.nimages):
min_control = control.copy()
i_num = ('%0' + str(len(str(self.nimages))) + 'i') % i
d_logfile_old = self.control.get_logfile()
m_logfile_old = self.control.get_eigenmode_logfile()
if d_logfile_old not in ['-', None]:
if type(d_logfile_old) == str:
d_logfile_old = d_logfile_old.split('.')
else:
d_logfile_old = d_logfile_old.name.split('.')
d_logfile_old.insert(-1, i_num)
d_logfile_new = '-'.join(['.'.join(d_logfile_old[:-2]), '.'.join(d_logfile_old[-2:])])
else:
d_logfile_new = d_logfile_old
if m_logfile_old not in ['-', None]:
if type(m_logfile_old) == str:
m_logfile_old = m_logfile_old.split('.')
else:
m_logfile_old = m_logfile_old.name.split('.')
m_logfile_old.insert(-1, i_num)
m_logfile_new = '-'.join(['.'.join(m_logfile_old[:-2]), '.'.join(m_logfile_old[-2:])])
else:
m_logfile_new = m_logfile_old
if i in [0, self.nimages - 1]:
write_rank = 0
else:
write_rank = (i - 1) * size // (self.nimages - 2)
min_control.set_write_rank(write_rank)
min_control.initialize_logfiles(logfile = d_logfile_new, eigenmode_logfile = m_logfile_new)
if minmodes is None:
minmode = None
else:
minmodes = np.array(minmodes)
if minmodes.shape == (self.nimages, self.natoms, 3):
# Assume one minmode for each image
raise NotImplementedError()
elif minmodes.shape == (2, self.natoms, 3):
# Assume end images minmodes and interpolate
raise NotImplementedError()
elif minmodes.shape == (self.natoms, 3):
minmode = [minmodes.copy()]
else:
raise ValueError('ERM did not understand the minmodes given to it.')
image = MinModeAtoms(images[i], min_control, eigenmodes = minmode)
self.images.append(image)
self.forces['dimer'] = np.zeros((self.nimages, self.natoms, 3))
# Populate the tangents
for i in range(1, self.nimages - 1):
p_m = self.images[i - 1].get_positions()
p_p = self.images[i + 1].get_positions()
t = (p_p - p_m) / 2.0
if 0.0 in t:
# Assume a linear interpolation
# HACK/BUG: Currently the last or first "free" image will yield p[-1] - p[0]
t = self.images[-1].get_positions() - self.images[0].get_positions()
t /= (self.nimages - 1.0)
self.tangents[i] = t
self.tangents[0] = t
self.tangents[-1] = -t
# Save user variables
self.decouple_modes = decouple_modes # Release the orthogonality constraint of the minmode and tanget.
# Development stuff
self.plot_devplot = False
self.plot_subplot = False
self.plot_animate = 0
self.plot_x = None
self.plot_y = None
self.plot_e = None
self.xrange = None
self.yrange = None