Source code for moha.system.hamiltonian.chemical_hamiltonian

from moha.symmetry.symmetry import SZ
from moha.system.operator import *
from moha.system.hamiltonian.base import BaseHamiltonian
from moha.io.iofcidump import FCIDUMP
from moha.io.log import timer

import numpy as np

__all__ = ['ChemicalHamiltonian']

[docs]class ChemicalHamiltonian(BaseHamiltonian): """Chemical Hamiltonian for a Schrodinger equation. Attributes ---------- nspatial : int Number of spatial orbitals. operators : dict Dictionary of operators for the Hamiltonian Property ------- npsin : int Number of spin orbitals Methods ------- __init__(self, nspatial,operators={}) Initialize the Hamiltonian. build(cls,molecule,basis_set) Build the Chemical Hamiltonian assign_nspatial(self, nspatial) Assigns number of spatial orbitals to the Hamiltonian. assign_operators(self, operator) Assigns operator integral to the Hamiltonian. basis_transformation(self,U) Transform the basis set for all the operator integral """ def __init__(self, nspatial,operators={}): """Initialize the Hamiltonian. Parameters ---------- nspatial : int Number of spatial orbitals. operators : dict Dictionary of operators for the Hamiltonian """ super().__init__(nspatial,operators)
[docs] @classmethod @timer.with_section('Integral') def build(cls,molecule,basis_set): """Build the chemical hamiltonian Parmeters --------- molecule : Molecule instance Instance of molecule class basis_set : Basis Set instance Instance of one electron basis set """ nspatial = len(basis_set) ham = cls(nspatial) #build operators Enuc = NuclearRepulsionOperator.build(molecule) S = OverlapOperator.build(basis_set) T = KineticOperator.build(basis_set) V = NuclearAttractionOperator.build(molecule,basis_set) Hcore = OneElectronOperator(T+V,OperatorNames.Hcore) Eri = ElectronRepulsionOperator.build(basis_set) #assign operators to chemical hamiltonian ham.assign_operator(Enuc) ham.assign_operator(S) ham.assign_operator(T) ham.assign_operator(V) ham.assign_operator(Hcore) ham.assign_operator(Eri) return ham
[docs] @classmethod @timer.with_section('Integral') def from_numpy(cls,Enuc,S,h1e,g2e): """Build the chemical hamiltonian Parmeters --------- molecule : Molecule instance Instance of molecule class basis_set : Basis Set instance Instance of one electron basis set """ nspatial = h1e.shape[0] ham = cls(nspatial) #build operators Enuc = NuclearRepulsionOperator(Enuc,OperatorNames.Enuc) S = OneElectronOperator(S,OperatorNames.S) Hcore = OneElectronOperator(h1e,OperatorNames.Hcore) Eri= ElectronRepulsionOperator(g2e,OperatorNames.Eri) #assign operators to chemical hamiltonian ham.assign_operator(Enuc) ham.assign_operator(S) ham.assign_operator(Hcore) ham.assign_operator(Eri) return ham
[docs] @classmethod @timer.with_section('Integral') def from_fcidump(cls,fcidump): """Build the chemical hamiltonian Parmeters --------- molecule : Molecule instance Instance of molecule class basis_set : Basis Set instance Instance of one electron basis set """ self.fcidump = fcidump self.orb_sym = fcidump.orb_sym self.n_syms = max(self.orb_sym) + 1 self.nspatial = fcidump.n_sites self.vacuum = SZ(0, 0, 0) self.target = SZ(fcidump.n_elec, fcidump.twos, fcidump.ipg) ham = cls(self.nspatial) #build operators Enuc = NuclearRepulsionOperator(fcidump.const_e,OperatorNames.Enuc) Hcore = OneElectronOperator(fcidump.h1e,OperatorNames.Hcore) Eri= ElectronRepulsionOperator(fcidump.g2e,OperatorNames.Eri) #assign operators to chemical hamiltonian ham.assign_operator(Enuc) ham.assign_operator(Hcore) ham.assign_operator(Eri) return ham