Source code for moha.property.multipole_moment

import numpy as np
from moha.io.log import log,timer
from moha.system.operator import MultipoleMomentOperator

[docs]class MultipoleMoment(object): """Multipole momnet solver. Attributes ---------- mol Chemical molecule. basis_set Basis set of the molecule wfn Hartree Fock wavefunction. Methods ------- __init__(self,mol,basis_set,ham,wfn) Initialize the solver. assign_molecule(self,mol) Assign chemical molecule to the solver. assign_basis_set(self,basis_set) Assign basis set to the solver. assign_wavefunction(self,wfn) Assign Hartree Fock wavefunction to the solver. """ def __init__(self,mol,basis_set,wfn): """Initialize the solver. Attributes ---------- mol Chemical molecule. basis_set Basis set of the molecule wfn Hartree Fock wavefunction. """ self.assign_molecule(mol) self.assign_basis_set(basis_set) self.assign_wavefunction(wfn)
[docs] def assign_molecule(self,mol): """Assign chemical molecule to the solver. Attributes ---------- mol Chemical molecule. """ self.mol = mol
[docs] def assign_basis_set(self,basis_set): """Assign basis set to the solver. Attributes ---------- basis_set Basis set of the molecule. """ self.basis_set = basis_set
[docs] def assign_wavefunction(self,wfn): """Assign Hartree Fock wavefunction to the solver. Attributes ---------- wfn Hartree Fock wavefunction. """ self.wfn = wfn
[docs] @timer.with_section('Multipole') def kernel(self,lmns,coordinate = np.array([0.,0.,0.])): """Kernel of the solver. Returns ------- results : dict Multipole moment results. """ log.hline() log('Multipole moment Section'.format()) log.hline() D = self.wfn.density_matrix mms = [] for lmn in lmns: mm_matrix = MultipoleMomentOperator.build(self.basis_set,lmn,coordinate) mm = np.dot(D,mm_matrix) mm = np.trace(mm,axis1=0,axis2=1) mms.append(mm) log.hline() log('Multipole Moment'.format()) log('{}'.format(mms)) log.hline() results = { "success": True, "mms": mms } return results