Geometry OptimizationΒΆ
We present here a complete example on how to use QMCTorch to optimize the geometry of a H2 molecule. As previously the firs task is to import all the modules needed
[1]:
from torch import optim
from torch.optim import Adam
from qmctorch.wavefunction import SlaterJastrow
from qmctorch.solver import Solver
from qmctorch.sampler import Metropolis
from qmctorch.scf import Molecule
from qmctorch.utils import plot_energy
from qmctorch.utils import set_torch_double_precision
set_torch_double_precision()
INFO:QMCTorch| ____ __ ______________ _
INFO:QMCTorch| / __ \ / |/ / ___/_ __/__ ________/ /
INFO:QMCTorch|/ /_/ / / /|_/ / /__ / / / _ \/ __/ __/ _ \
INFO:QMCTorch|\___\_\/_/ /_/\___/ /_/ \___/_/ \__/_//_/
We then define the molecule. We create a H2 molecule with a short atomic distance that we will then try to relax
[2]:
mol = Molecule(atom = 'H 0. 0. -0.5; H 0. 0. 0.5', unit='bohr',
calculator='pyscf', basis='sto-3g', redo_scf=True)
INFO:QMCTorch|
INFO:QMCTorch| SCF Calculation
INFO:QMCTorch| Removing H2_pyscf_sto-3g.hdf5 and redo SCF calculations
INFO:QMCTorch| Running scf calculation
converged SCF energy = -1.06599946214331
INFO:QMCTorch| Molecule name : H2
INFO:QMCTorch| Number of electrons : 2
INFO:QMCTorch| SCF calculator : pyscf
INFO:QMCTorch| Basis set : sto-3g
INFO:QMCTorch| SCF : HF
INFO:QMCTorch| Number of AOs : 2
INFO:QMCTorch| Number of MOs : 2
INFO:QMCTorch| SCF Energy : -1.066 Hartree
As for the wave function optimization example we need to define a wave function, a sampler an optimizer and a solver.
[3]:
# wave function with only the ground state determinant
wf = SlaterJastrow(mol, configs='single_double(2,2)').gto2sto()
# sampler
sampler = Metropolis(nwalkers=1000, nstep=200, step_size=0.5,
nelec=wf.nelec, ndim=wf.ndim,
ntherm=-1, ndecor=100,
init=mol.domain('normal'),
move={'type': 'all-elec', 'proba': 'normal'})
# optimizer
opt = Adam(wf.parameters(), lr=0.005)
# scheduler
scheduler = optim.lr_scheduler.StepLR(opt, step_size=20, gamma=0.75)
INFO:QMCTorch|
INFO:QMCTorch| Wave Function
INFO:QMCTorch| Jastrow factor : True
INFO:QMCTorch| Jastrow kernel : PadeJastrowKernel
INFO:QMCTorch| Highest MO included : 2
INFO:QMCTorch| Configurations : single_double(2,2)
INFO:QMCTorch| Number of confs : 4
INFO:QMCTorch| Kinetic energy : jacobi
INFO:QMCTorch| Number var param : 21
INFO:QMCTorch| Cuda support : False
INFO:QMCTorch| Fit GTOs to STOs :
INFO:QMCTorch|
INFO:QMCTorch| Wave Function
INFO:QMCTorch| Jastrow factor : True
INFO:QMCTorch| Jastrow kernel : PadeJastrowKernel
INFO:QMCTorch| Highest MO included : 2
INFO:QMCTorch| Configurations : single_double(2,2)
INFO:QMCTorch| Number of confs : 4
INFO:QMCTorch| Kinetic energy : jacobi
INFO:QMCTorch| Number var param : 17
INFO:QMCTorch| Cuda support : False
INFO:QMCTorch|
INFO:QMCTorch| Monte-Carlo Sampler
INFO:QMCTorch| Number of walkers : 1000
INFO:QMCTorch| Number of steps : 200
INFO:QMCTorch| Step size : 0.5
INFO:QMCTorch| Thermalization steps: -1
INFO:QMCTorch| Decorelation steps : 100
INFO:QMCTorch| Walkers init pos : normal
INFO:QMCTorch| Move type : all-elec
INFO:QMCTorch| Move proba : normal
[4]:
solver = Solver(wf=wf,
sampler=sampler,
optimizer=opt,
scheduler=None)
solver.configure(loss='energy', grad='auto', track=['local_energy','geometry'], freeze = ['ao'])
INFO:QMCTorch|
INFO:QMCTorch| Warning : dump to hdf5
INFO:QMCTorch| Object Solver already exists in H2_pyscf_sto-3g_QMCTorch.hdf5
INFO:QMCTorch| Object name changed to SolverSlaterJastrow_9
INFO:QMCTorch|
INFO:QMCTorch|
INFO:QMCTorch| QMC Solver
INFO:QMCTorch| WaveFunction : SlaterJastrow
INFO:QMCTorch| Sampler : Metropolis
INFO:QMCTorch| Optimizer : Adam
Note that we must set grad='auto'
to perform a geometry optimization. To optimize the geometry of the molecule we must use the set_params_requires_grad
method of the solver. We here set all the wave function parameters and all the atomic positions as variational parameters, leading to a simultaneous optimization of the wave function and of the atomic coordinates. We can then run the optimization here using 50 epochs
[5]:
solver.set_params_requires_grad(wf_params=False, geo_params=True)
obs = solver.run(50)
INFO:QMCTorch|
INFO:QMCTorch| Optimization
INFO:QMCTorch| Task :
INFO:QMCTorch| Number Parameters : 6
INFO:QMCTorch| Number of epoch : 50
INFO:QMCTorch| Batch size : 1000
INFO:QMCTorch| Loss function : energy
INFO:QMCTorch| Clip Loss : False
INFO:QMCTorch| Gradients : auto
INFO:QMCTorch| Resampling mode : update
INFO:QMCTorch| Resampling every : 1
INFO:QMCTorch| Resampling steps : 25
INFO:QMCTorch| Output file : H2_pyscf_sto-3g_QMCTorch.hdf5
INFO:QMCTorch| Checkpoint every : None
INFO:QMCTorch|
INFO:QMCTorch|
INFO:QMCTorch| epoch 0
INFO:QMCTorch| energy : -1.070846 +/- 0.012322
INFO:QMCTorch| variance : 0.389654
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 1
INFO:QMCTorch| energy : -1.093524 +/- 0.012193
INFO:QMCTorch| variance : 0.385562
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 2
INFO:QMCTorch| energy : -1.085855 +/- 0.011676
INFO:QMCTorch| variance : 0.369217
INFO:QMCTorch| epoch done in 0.12 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 3
INFO:QMCTorch| energy : -1.095264 +/- 0.011571
INFO:QMCTorch| variance : 0.365905
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 4
INFO:QMCTorch| energy : -1.078411 +/- 0.010946
INFO:QMCTorch| variance : 0.346155
INFO:QMCTorch| epoch done in 0.34 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 5
INFO:QMCTorch| energy : -1.073701 +/- 0.011750
INFO:QMCTorch| variance : 0.371554
INFO:QMCTorch| epoch done in 0.35 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 6
INFO:QMCTorch| energy : -1.083239 +/- 0.011441
INFO:QMCTorch| variance : 0.361785
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 7
INFO:QMCTorch| energy : -1.091864 +/- 0.011191
INFO:QMCTorch| variance : 0.353902
INFO:QMCTorch| epoch done in 0.13 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 8
INFO:QMCTorch| energy : -1.112321 +/- 0.010893
INFO:QMCTorch| variance : 0.344459
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 9
INFO:QMCTorch| energy : -1.101314 +/- 0.011203
INFO:QMCTorch| variance : 0.354284
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 10
INFO:QMCTorch| energy : -1.095483 +/- 0.011385
INFO:QMCTorch| variance : 0.360013
INFO:QMCTorch| epoch done in 0.12 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 11
INFO:QMCTorch| energy : -1.120974 +/- 0.010508
INFO:QMCTorch| variance : 0.332293
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 12
INFO:QMCTorch| energy : -1.116147 +/- 0.010295
INFO:QMCTorch| variance : 0.325555
INFO:QMCTorch| epoch done in 0.12 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 13
INFO:QMCTorch| energy : -1.090706 +/- 0.011097
INFO:QMCTorch| variance : 0.350910
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 14
INFO:QMCTorch| energy : -1.106975 +/- 0.010232
INFO:QMCTorch| variance : 0.323554
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 15
INFO:QMCTorch| energy : -1.114616 +/- 0.010598
INFO:QMCTorch| variance : 0.335125
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 16
INFO:QMCTorch| energy : -1.120063 +/- 0.009871
INFO:QMCTorch| variance : 0.312143
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 17
INFO:QMCTorch| energy : -1.126814 +/- 0.010350
INFO:QMCTorch| variance : 0.327289
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 18
INFO:QMCTorch| energy : -1.110957 +/- 0.009913
INFO:QMCTorch| variance : 0.313466
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 19
INFO:QMCTorch| energy : -1.135297 +/- 0.009999
INFO:QMCTorch| variance : 0.316206
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 20
INFO:QMCTorch| energy : -1.126248 +/- 0.010025
INFO:QMCTorch| variance : 0.317012
INFO:QMCTorch| epoch done in 0.13 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 21
INFO:QMCTorch| energy : -1.119559 +/- 0.010067
INFO:QMCTorch| variance : 0.318341
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 22
INFO:QMCTorch| energy : -1.114980 +/- 0.009557
INFO:QMCTorch| variance : 0.302212
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 23
INFO:QMCTorch| energy : -1.122430 +/- 0.010054
INFO:QMCTorch| variance : 0.317943
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 24
INFO:QMCTorch| energy : -1.122087 +/- 0.009651
INFO:QMCTorch| variance : 0.305191
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 25
INFO:QMCTorch| energy : -1.133653 +/- 0.009697
INFO:QMCTorch| variance : 0.306655
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 26
INFO:QMCTorch| energy : -1.153086 +/- 0.009464
INFO:QMCTorch| variance : 0.299277
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 27
INFO:QMCTorch| energy : -1.137196 +/- 0.009235
INFO:QMCTorch| variance : 0.292042
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 28
INFO:QMCTorch| energy : -1.134850 +/- 0.009741
INFO:QMCTorch| variance : 0.308045
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 29
INFO:QMCTorch| energy : -1.137292 +/- 0.008938
INFO:QMCTorch| variance : 0.282648
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 30
INFO:QMCTorch| energy : -1.129972 +/- 0.009542
INFO:QMCTorch| variance : 0.301736
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 31
INFO:QMCTorch| energy : -1.129879 +/- 0.008805
INFO:QMCTorch| variance : 0.278450
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 32
INFO:QMCTorch| energy : -1.120897 +/- 0.009573
INFO:QMCTorch| variance : 0.302713
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 33
INFO:QMCTorch| energy : -1.126543 +/- 0.008883
INFO:QMCTorch| variance : 0.280912
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 34
INFO:QMCTorch| energy : -1.125339 +/- 0.009391
INFO:QMCTorch| variance : 0.296973
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 35
INFO:QMCTorch| energy : -1.132248 +/- 0.009047
INFO:QMCTorch| variance : 0.286092
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 36
INFO:QMCTorch| energy : -1.143987 +/- 0.008693
INFO:QMCTorch| variance : 0.274895
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 37
INFO:QMCTorch| energy : -1.143939 +/- 0.009039
INFO:QMCTorch| variance : 0.285829
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 38
INFO:QMCTorch| energy : -1.132018 +/- 0.008930
INFO:QMCTorch| variance : 0.282378
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 39
INFO:QMCTorch| energy : -1.135228 +/- 0.008902
INFO:QMCTorch| variance : 0.281495
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 40
INFO:QMCTorch| energy : -1.146552 +/- 0.009092
INFO:QMCTorch| variance : 0.287503
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 41
INFO:QMCTorch| energy : -1.141178 +/- 0.008888
INFO:QMCTorch| variance : 0.281070
INFO:QMCTorch| epoch done in 0.10 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 42
INFO:QMCTorch| energy : -1.133022 +/- 0.009063
INFO:QMCTorch| variance : 0.286591
INFO:QMCTorch| epoch done in 0.11 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 43
INFO:QMCTorch| energy : -1.133298 +/- 0.008375
INFO:QMCTorch| variance : 0.264828
INFO:QMCTorch| epoch done in 0.23 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 44
INFO:QMCTorch| energy : -1.135157 +/- 0.008890
INFO:QMCTorch| variance : 0.281116
INFO:QMCTorch| epoch done in 0.38 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 45
INFO:QMCTorch| energy : -1.143128 +/- 0.008901
INFO:QMCTorch| variance : 0.281471
INFO:QMCTorch| epoch done in 0.09 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 46
INFO:QMCTorch| energy : -1.148810 +/- 0.008243
INFO:QMCTorch| variance : 0.260676
INFO:QMCTorch| epoch done in 0.12 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 47
INFO:QMCTorch| energy : -1.143023 +/- 0.008719
INFO:QMCTorch| variance : 0.275712
INFO:QMCTorch| epoch done in 0.28 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 48
INFO:QMCTorch| energy : -1.154847 +/- 0.008289
INFO:QMCTorch| variance : 0.262111
INFO:QMCTorch| epoch done in 0.33 sec.
INFO:QMCTorch|
INFO:QMCTorch| epoch 49
INFO:QMCTorch| energy : -1.140911 +/- 0.008209
INFO:QMCTorch| variance : 0.259583
INFO:QMCTorch| epoch done in 0.24 sec.
INFO:QMCTorch|
INFO:QMCTorch| Warning : dump to hdf5
INFO:QMCTorch| Object wf_opt already exists in H2_pyscf_sto-3g_QMCTorch.hdf5
INFO:QMCTorch| Object name changed to wf_opt_5
INFO:QMCTorch|
[6]:
solver.save_traj('h2_traj.xyz', obs)
[8]:
plot_energy(obs.local_energy)
[ ]: