def run(self, ff): from yaff import CartesianDOF, QNOptimizer, OptScreenLog #prevpos = ff.system.pos[:].copy() #energy0 = ff.compute() #ff.system.pos[:] = self.refpos #energy1 = ff.compute() #if energy1 > energy0: ff.system.pos[:] = self.refpos#*np.random.uniform(0.99, 1.01, ff.system.pos.shape) dof = CartesianDOF(ff, gpos_rms=1e-8) sl = OptScreenLog(step=20) self.opt = QNOptimizer(dof, hooks=[sl], hessian0=self.hessian0) self.opt.run(5000) return { 'energy': ff.energy, 'pos': ff.system.pos.copy(), 'gpos': ff.gpos.copy(), }
class GeoOptSimulation(Simulation): def __init__(self, name, system, **kwargs): self.refpos = system.pos.copy() self.hessian0 = kwargs.pop('hessian0', None) Simulation.__init__(self, name, system, **kwargs) def run(self, ff): from yaff import CartesianDOF, QNOptimizer, OptScreenLog #prevpos = ff.system.pos[:].copy() #energy0 = ff.compute() #ff.system.pos[:] = self.refpos #energy1 = ff.compute() #if energy1 > energy0: ff.system.pos[:] = self.refpos#*np.random.uniform(0.99, 1.01, ff.system.pos.shape) dof = CartesianDOF(ff, gpos_rms=1e-8) sl = OptScreenLog(step=20) self.opt = QNOptimizer(dof, hooks=[sl], hessian0=self.hessian0) self.opt.run(5000) return { 'energy': ff.energy, 'pos': ff.system.pos.copy(), 'gpos': ff.gpos.copy(), }