Source code for berny.optimize

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
__version__ = '0.2.0'


[docs]def optimize(optimizer, solver, trajectory=None): """Optimize a geometry with respect to a solver. Args: optimizer (:class:`~collections.abc.Generator`): Optimizer object with the same generator interface as :class:`~berny.Berny` solver (:class:`~collections.abc.Generator`): unprimed generator that receives geometry as a 2-tuple of a list of 2-tuples of the atom symbol and coordinate (as a 3-tuple), and of a list of lattice vectors (or :data:`None` if molecule), and yields the energy and gradients (as a :math:`N`-by-3 matrix or :math:`(N+3)`-by-3 matrix in case of a crystal geometry). See :class:`~berny.solvers.MopacSolver` for an example. trajectory (str): filename for the XYZ trajectory Returns: The optimized geometry. The function is equivalent to:: next(solver) for geom in optimizer: energy, gradients = solver.send((list(geom), geom.lattice)) optimizer.send((energy, gradients)) """ if trajectory: trajectory = open(trajectory, 'w') try: next(solver) for geom in optimizer: energy, gradients = solver.send((list(geom), geom.lattice)) if trajectory: geom.dump(trajectory, 'xyz') optimizer.send((energy, gradients)) finally: if trajectory: trajectory.close() return geom