Exemplo n.º 1
0
    def test_minimize(self):
        calculator = Sparrow('PM6')

        calculator.set_elements(list(self.atoms.symbols))
        calculator.set_positions(self.atoms.positions)
        calculator.set_settings({
            'molecular_charge': self.charge,
            'spin_multiplicity': self.spin_multiplicity
        })
        energy1 = calculator.calculate_energy()
        gradients1 = calculator.calculate_gradients()

        opt_atoms, success = minimize(calculator=calculator,
                                      atoms=self.atoms,
                                      charge=self.charge,
                                      spin_multiplicity=self.spin_multiplicity)

        calculator.set_positions(opt_atoms.positions)
        energy2 = calculator.calculate_energy()
        gradients2 = calculator.calculate_gradients()

        self.assertTrue(energy1 > energy2)
        self.assertTrue(
            np.sum(np.square(gradients1)) > np.sum(np.square(gradients2)))
        self.assertTrue(np.all(gradients2 < 1E-3))
Exemplo n.º 2
0
    def test_minimize_fail(self):
        calculator = Sparrow('PM6')
        calculator.set_elements(list(self.atoms.symbols))
        calculator.set_positions(self.atoms.positions)
        calculator.set_settings({
            'molecular_charge': self.charge,
            'spin_multiplicity': self.spin_multiplicity
        })

        opt_atoms, success = minimize(
            calculator=calculator,
            atoms=self.atoms,
            charge=self.charge,
            spin_multiplicity=self.spin_multiplicity,
            max_iter=1,
        )

        self.assertFalse(success)
Exemplo n.º 3
0
    def test_minimize_fixed(self):
        calculator = Sparrow('PM6')

        calculator.set_elements(list(self.atoms.symbols))
        calculator.set_positions(self.atoms.positions)
        calculator.set_settings({
            'molecular_charge': self.charge,
            'spin_multiplicity': self.spin_multiplicity
        })

        fixed_index = 2
        opt_atoms, success = minimize(
            calculator=calculator,
            atoms=self.atoms,
            charge=self.charge,
            spin_multiplicity=self.spin_multiplicity,
            fixed_indices=[fixed_index],
        )

        self.assertTrue(
            np.all((self.atoms.positions -
                    opt_atoms.positions)[fixed_index] < 1E-6))