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))