Ejemplo n.º 1
0
    def __init__(self,
                 mol,
                 nsteps=20,
                 force_tolerance=data.DEFAULT_FORCE_TOLERANCE,
                 frame_interval=None,
                 _restart_from=0,
                 _restart_energy=None):
        self.mol = mol
        self.nsteps = nsteps - _restart_from
        self.force_tolerance = force_tolerance
        self.frame_interval = mdt.utils.if_not_none(frame_interval,
                                                    max(nsteps / 10, 1))
        self._restart_from = _restart_from

        # Set up the trajectory to track the minimization
        self.traj = mdt.Trajectory(mol)
        self.current_step = _restart_from
        if _restart_energy is None:
            self.traj.new_frame(
                minimization_step=0,
                annotation='minimization steps:%d (energy=%s)' %
                (0, mol.calc_potential_energy()))
        self._initial_energy = _restart_energy
        self._last_energy = None
        self._last_grad = None

        # Figure out whether we'll use gradients
        self.request_list = ['potential_energy']
        if 'forces' in mol.energy_model.ALL_PROPERTIES:
            self.gradtype = 'analytical'
            self.request_list.append('forces')
        else:
            self.gradtype = 'approximate'
            assert len(mol.constraints) == 0, \
                'Constrained minimization only available with analytical gradients'
 def __init__(self, mol, report_interval):
     self.mol = mol
     self.report_interval = report_interval
     self.trajectory = mdt.Trajectory(mol)
     self.annotation = None
     self.last_report_time = None
     self.logger = mdt.helpers.DynamicsLog()
Ejemplo n.º 3
0
 def __init__(self, mol, report_interval):
     self.mol = mol
     self.report_interval = report_interval
     self.trajectory = mdt.Trajectory(mol)
     self.annotation = None
     self._row_format = ("{:<%d}" % 10) + 3 * ("{:>%d}" % self.LEN)
     self._printed_header = False
     self.last_report_time = None
Ejemplo n.º 4
0
 def finish_min(self, job):
     # TODO: parse more data than just the final minimization state
     properties = self.finish(job)
     traj = mdt.Trajectory(self.mol)
     traj.new_frame()
     self.mol.positions = properties.positions
     self.mol.properties = properties
     traj.new_frame()
     return traj
Ejemplo n.º 5
0
def h2_wfn_traj(h2):
    mol = h2.copy()
    mol.set_energy_model(mdt.models.RHF, basis='sto-3g')

    traj = mdt.Trajectory(mol)
    for i in range(3):
        mol.calculate()
        traj.new_frame()
        mol.atoms[0].x += 0.2 * u.angstrom

    return traj
    def finish_min(self, job):
        # TODO: parse more data than just the final minimization state
        traj = mdt.Trajectory(self.mol)
        traj.new_frame()

        results = json.loads(job.get_output('results.json').read())
        new_state = self._json_to_quantities(results['states'][0])

        self.mol.positions = new_state['positions']
        self.mol.properties = self._process_results(results)
        traj.new_frame()
        return traj
    def finish_min(self, job):
        traj = mdt.Trajectory(self.mol)
        traj.new_frame()

        results = json.loads(job.get_output('results.json').read())
        new_state = self._json_to_quantities(results['states'][0])

        for iatom in sorted(self.params.qm_indices):
            for position in new_state['positions']:
                self.mol.atoms[iatom].position = position

        properties = self._process_results(results)
        properties.positions = self.mol.positions
        self.mol.properties = properties
        traj.new_frame()
        return traj
Ejemplo n.º 8
0
def precanned_trajectory():
    a1 = mdt.Atom(6)
    a2 = mdt.Atom(1)
    a3 = mdt.Atom(7)
    mol = mdt.Molecule([a1, a2, a3])
    traj = mdt.Trajectory(mol)

    a1.x = 1.0 * u.angstrom
    a3.y = 1.0 * u.angstrom
    traj.new_frame(somenumber=1, someletter='a')

    mol.time = 1.0 * u.fs
    a1.x = 2.0 * u.angstrom
    traj.new_frame(somenumber=2, someletter='b')

    mol.time = 2.0 * u.fs
    a2.x = -1.0 * u.angstrom
    a3.x = -1.0 * u.angstrom
    traj.new_frame(somenumber=3, someletter='c')

    return traj