Worked Example

Initialization

import numpy as np
import multiprocessing
from scm.plams.recipes.numgrad import NumGradJob
from scm.plams import config, JobRunner, AMSJob, Settings, AMSResults, Units, init

# this line is not required in AMS2025+
init()
PLAMS working folder: /path/plams/NumGrad/plams_workdir.003

Parallelization

config.default_jobrunner = JobRunner(parallel=True, maxjobs=multiprocessing.cpu_count())

Define molecule

mol = AMSJob.from_input(
    """
System
  Atoms
    C       0.000000000000       0.138569980000       0.355570700000
    O       0.000000000000       0.187935770000      -1.074466460000
    H       0.882876920000      -0.383123830000       0.697839450000
    H      -0.882876940000      -0.383123830000       0.697839450000
    H       0.000000000000       1.145042790000       0.750208830000
  End
End
"""
).molecule[""]

Setup and run jobs

s = Settings()
s.input.AMS.Task = "SinglePoint"
s.input.ForceField.Type = "UFF"
s.runscript.nproc = 1

j = NumGradJob(name="numgrad", molecule=mol, settings=s, jobtype=AMSJob)
r = j.run()
r.wait()

s_analytical = s.copy()
s_analytical.input.AMS.Properties.Gradients = "Yes"
analytical_job = AMSJob(name="analytical", molecule=mol, settings=s_analytical)
analytical_job.run()
[05.03|16:16:05] JOB numgrad STARTED
[05.03|16:16:05] Waiting for job numgrad to finish
[05.03|16:16:05] JOB numgrad RUNNING
[05.03|16:16:05] JOB numgrad/1_x_-1 STARTED
[05.03|16:16:05] JOB numgrad/1_x_1 STARTED
[05.03|16:16:05] JOB numgrad/1_y_-1 STARTED
[05.03|16:16:05] JOB numgrad/1_y_1 STARTED
[05.03|16:16:05] JOB numgrad/1_z_-1 STARTED
[05.03|16:16:05] JOB numgrad/1_z_1 STARTED
[05.03|16:16:05] JOB numgrad/2_x_-1 STARTED
[05.03|16:16:05] JOB numgrad/2_x_1 STARTED
... (PLAMS log lines truncated) ...




<scm.plams.interfaces.adfsuite.ams.AMSResults at 0x77d85d1da100>



[05.03|16:16:11] JOB analytical RUNNING
[05.03|16:16:11] JOB analytical FINISHED
[05.03|16:16:11] JOB analytical SUCCESSFUL