Using multiple types of solvers for DMET fragments¶
This notebook demonstrates how to use a different electronic structure solver for each framgent that is produced by the DMET problem decomposition. For details and theory about DMET, see the other examples provided with the documentation.
We set up the molecule that we use in this example.
import py3Dmol
H8_He2 = """
HE 1.6180339887 0.0000000000 0.0000000000
HE 1.3090169944 0.9510565163 0.0000000000
H 0.5000000000 1.5388417686 0.0000000000
H -0.5000000000 1.5388417686 0.0000000000
H -1.3090169944 0.9510565163 0.0000000000
H -1.6180339887 0.0000000000 0.0000000000
H -1.3090169944 -0.9510565163 0.0000000000
H -0.5000000000 -1.5388417686 0.0000000000
H 0.5000000000 -1.5388417686 0.0000000000
H 1.3090169944 -0.9510565163 0.0000000000
"""
view = py3Dmol.view(width=400,height=400)
view.addModel("10\n" + H8_He2,'xyz',{'keepH': True})
view.setStyle({'sphere':{}})
view.setStyle({'model':0},{'sphere':{'colorscheme':'cyanCarbon','scale':'0.2'}})
view.zoomTo()
view.show()
from pyscf import gto
mol = gto.Mole() # Instantiate the molecule class in PySCF
mol.atom = H8_He2 # The coordinates of the atoms of the 10-hydrogen-atom ring are defined above
mol.basis = "3-21g" # Use "minao" as the basis set
mol.charge = 0 # Assign the charge of the molecule
mol.spin = 0 # Assign the spin of the molecule
mol.build() # Build the molecule object
You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol
<pyscf.gto.mole.Mole at 0x7fcaf7d8d198>
As usual, we begin with importing the modules from OpenQEMIST.
from openqemist import electronic_structure_solvers as ess
from openqemist import problem_decomposition as pd
The DMET object can be used in two ways. The default behaviour of the solver is to use an instance of an electronic structure solver to solve all the fragments that are produced by the decomposition. This is shown below:
dmet = pd.DMETProblemDecomposition()
dmet.electronic_structure_solver = ess.CCSDSolver()
energy = dmet.simulate(mol, [2,2,2,2,2])
print("DMET energy with CCSD is ", energy)
DMET energy with CCSD is -9.759969890236498
The DMET object can also use a different electronic structure solver to
solve each fragment. This is done with the optional fragment_solvers
parameter. The value passed here should be a list of
ElectronicStructureSolver
instances that has as many elements as
there are fragments. This is shown below.
# Create instances of the solvers that we want to use
fci = ess.FCISolver()
from openqemist import quantum_solvers as qs
vqe = ess.VQESolver()
vqe.hardware_backend_type = qs.MicrosoftQSharpParametricSolver
vqe.ansatz_type = qs.MicrosoftQSharpParametricSolver.Ansatze.UCCSD
# Use the VQE sovler to solve two helium fragments and the FCI solver for the hydrogen
solvers = [vqe, vqe] + [fci for i in range(8)]
energy = dmet.simulate(mol, [1,1,1,1,1,1,1,1,1,1], fragment_solvers=solvers)
print("Mixed solver energy is ", energy)
VQE : initial amplitudes
[2e-05, 2e-05, 0.008336404499183074, 0.01731333728608542, -0.015990523785525974]
Optimal UCCSD Singlet Energy: -3.1643666897843596
Optimal UCCSD Singlet Amplitudes: [-0.00430023 -0.00066218 0.00965449 0.02171837 -0.02179854]
Number of Function Evaluations : 88
VQE : initial amplitudes
[2e-05, 2e-05, 0.008336404498097656, 0.017313337286374863, -0.015990523784726086]
Optimal UCCSD Singlet Energy: -3.1643666904553904
Optimal UCCSD Singlet Amplitudes: [-0.00427418 -0.00065326 0.00964003 0.02173165 -0.02180745]
Number of Function Evaluations : 85
VQE : initial amplitudes
[2e-05, 2e-05, 0.00833478236891564, 0.017313593028937303, -0.01598928337740948]
Optimal UCCSD Singlet Energy: -3.1645570854987706
Optimal UCCSD Singlet Amplitudes: [-0.00433078 -0.00063696 0.00964952 0.0217214 -0.02181834]
Number of Function Evaluations : 79
VQE : initial amplitudes
[2e-05, 2e-05, 0.008334782367830496, 0.017313593029226616, -0.015989283376609684]
Optimal UCCSD Singlet Energy: -3.164557084483473
Optimal UCCSD Singlet Amplitudes: [-0.00435145 -0.00065564 0.00964747 0.02172714 -0.02181109]
Number of Function Evaluations : 87
VQE : initial amplitudes
[2e-05, 2e-05, 0.008331805035645306, 0.01731406248067778, -0.015987006134357218]
Optimal UCCSD Singlet Energy: -3.1649040972985785
Optimal UCCSD Singlet Amplitudes: [-0.00432664 -0.0006375 0.00964491 0.02173269 -0.02180754]
Number of Function Evaluations : 78
VQE : initial amplitudes
[2e-05, 2e-05, 0.008331805034560592, 0.017314062480967073, -0.01598700613355758]
Optimal UCCSD Singlet Energy: -3.16490409774925
Optimal UCCSD Singlet Amplitudes: [-0.00429697 -0.00064323 0.00963988 0.0217343 -0.0218027 ]
Number of Function Evaluations : 84
VQE : initial amplitudes
[2e-05, 2e-05, 0.008332267250790905, 0.017313989596596194, -0.01598735971010735]
Optimal UCCSD Singlet Energy: -3.1648492991218578
Optimal UCCSD Singlet Amplitudes: [-0.00429425 -0.00065077 0.00965251 0.02172731 -0.02180487]
Number of Function Evaluations : 91
VQE : initial amplitudes
[2e-05, 2e-05, 0.008332267249706118, 0.01731398959688549, -0.015987359709307668]
Optimal UCCSD Singlet Energy: -3.164849297647699
Optimal UCCSD Singlet Amplitudes: [-0.00433949 -0.000644 0.00965045 0.02172857 -0.02180613]
Number of Function Evaluations : 76
Mixed solver energy is -9.76142175612128