def CalculateTotalEnergies(systems, functionals, pval): systems_names = [] for key in systems: system = systems[key] systems_names.append(key) systems_energies = [] # ar_es: array of total energies ar_es = np.ndarray((len(systems_names), len(functionals)), dtype=object) ar_es[:, 0] = systems_names kskernel = kernel.KSKernel() for key in systems: system = systems[key] print( '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' ) print(system) mol = gto.Mole() print(MakeMoleculePositions(system['symbol'], system['positions'])) mol.atom = MakeMoleculePositions(system['symbol'], system['positions']) mol.basis = '../basis/6-311+g2dp.nw' mol.cart = True mol.spin = system['spin'] mol.charge = 0 mol.build() kskernel.CalculateKSKernel(mol) print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( kskernel.mf.e_tot, 0.0, 0.0, kskernel.mf.get_veff().exc)) # exks = ExKS(mol, kskernel, 'exks,') # Ex = exks.CalculateTotalX() # Ec = exks.CalculateTotalC() # Exc = exks.CalculateTotalXC() # E = exks.CalculateTotalEnergy() # print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format(E, Ex, Ec, Exc)) # lsd = DFA(mol, kskernel, 'LDA,PW_MOD') # x = lsd.CalculateTotalX() # c = lsd.CalculateTotalC() # xc = lsd.CalculateTotalXC() # e = lsd.CalculateTotalEnergy() # print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format(e, x, c, xc)) pbe = DFA(mol, kskernel, 'PBE,PBE') Ex = pbe.CalculateTotalX() Ec = pbe.CalculateTotalC() Exc = pbe.CalculateTotalXC() E = pbe.CalculateTotalEnergy() print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( E, Ex, Ec, Exc)) # cfx = CF('cfx', mol, kernel) # cfx_xc = cfx.CalculateEpsilonXC() system['energy'] = E systems_energies.append(E) ar_es[:, 1] = systems_energies return ar_es
def main(): functionals = ['LDA,PW_MOD', 'PBE,PBE'] systems = { "H": { 'name': 'Hydrogen', 'symbol': 'H', 'spin': 1, 'positions': [[0., 0., 0.]] }, "Li": { 'name': 'Lithium', 'symbol': 'Li', 'spin': 1, 'positions': [[0., 0., 0.]] }, "O": { 'name': 'Oxygen', 'symbol': 'O', 'spin': 2, 'positions': [[0., 0., 0.]] }, "Ar": { 'name': 'Argon', 'symbol': 'Ar', 'spin': 0, 'positions': [[0., 0., 0.]] } } kskernel = kernel.KSKernel() for key in systems: system = systems[key] print( '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' ) print(system['name'] + ' 0.0 0.0 0.0') coords = system['symbol'] + ' 0.0 0.0 0.0' mol = gto.Mole() mol.atom = coords mol.basis = '../basis/6-311+g2dp.nw' mol.cart = True mol.spin = system['spin'] mol.charge = 0 mol.build() kskernel.CalculateKSKernel(mol) print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( kskernel.mf.e_tot, 0.0, 0.0, kskernel.mf.get_veff().exc)) exks = ExKS(mol, kskernel, 'exks,') x = exks.CalculateTotalX() c = exks.CalculateTotalC() xc = exks.CalculateTotalXC() e = exks.CalculateTotalEnergy() print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( e, x, c, xc)) lsd = DFA(mol, kskernel, 'LDA,PW_MOD') x = lsd.CalculateTotalX() c = lsd.CalculateTotalC() xc = lsd.CalculateTotalXC() e = lsd.CalculateTotalEnergy() print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( e, x, c, xc)) pbe = DFA(mol, kskernel, 'PBE,PBE') x = pbe.CalculateTotalX() c = pbe.CalculateTotalC() xc = pbe.CalculateTotalXC() e = pbe.CalculateTotalEnergy() print('E = {:.12e}\tX = {:.12e}\tC = {:.12e}\tXC = {:.12e}'.format( e, x, c, xc))