#!/usr/bin/env amspython from __future__ import annotations import numpy as np from scm.base import ChemicalSystem, InputParser from scm.plams import AMSJob, Settings, finish, init def main() -> None: init(folder="01-run_workdir") system = ChemicalSystem.from_smiles("CC") coordinates_before = np.asarray(system.coords, dtype=float).copy() system.perturb_coordinates(0.1, unit="angstrom") maximum_component_change = float( np.max(np.abs(np.asarray(system.coords, dtype=float) - coordinates_before)) ) if maximum_component_change > 0.1 + 1.0e-12: raise RuntimeError("Coordinate perturbation exceeded 0.1 angstrom") settings = Settings() settings.input.ams.Task = "GeometryOptimization" settings.input.ForceField.Type = "UFF" job = AMSJob(molecule=system, settings=settings, name="ethane_uff_optimization") InputParser().to_dict("ams", job.get_input()) print( "Maximum absolute Cartesian perturbation: " "{:.6f} angstrom".format(maximum_component_change) ) job.run() finish() if __name__ == "__main__": main()