def check_wfs():
  newdf=check_singularity(
      wf=ExponentSlaterWF(1.0),
      ham=Hamiltonian(Z=2)
    )
  newdf['wf']='slater unopt.'
  resdf=newdf

  resdf['electron-nucleus']

  newdf=check_singularity(
      wf=ExponentSlaterWF(2.0),
      ham=Hamiltonian(Z=2)
    )
  newdf['wf']='slater opt.'
  resdf=pd.concat([resdf,newdf])

  newdf=check_singularity(
      wf=MultiplyWF(ExponentSlaterWF(2.0),JastrowWF(0.5)),
      ham=Hamiltonian(Z=2)
    )
  newdf['wf']='slater-jastrow'
  resdf=pd.concat([resdf,newdf])

  return resdf
Esempio n. 2
0
def compare_optimal():
    wf = ExponentSlaterWF(1.7)
    slater_dist = pair_distribution(wf)

    wf = MultiplyWF(ExponentSlaterWF(1.9), JastrowWF(0.3))
    slaterjastrow_dist = pair_distribution(wf)

    print("Slater", slater_dist)
    print("Slater-Jastrow", slaterjastrow_dist)
Esempio n. 3
0
def compare_samealpha():
    wf = ExponentSlaterWF(2.0)
    slater_dist = pair_distribution(wf)

    wf = MultiplyWF(ExponentSlaterWF(2.0), JastrowWF(0.5))
    slaterjastrow_dist = pair_distribution(wf)

    print("Slater", slater_dist)
    print("Slater-Jastrow", slaterjastrow_dist)
    vion = []
    vele = []
    potential = []
    eloc = []
    acc = []
    virial = []
    vele = []
    venu = []
    alph = []
    bet = []
    # Best Slater-Jastrow.
    for alpha in alphas:
        for beta in betas:
            alph.append(alpha)
            bet.append(beta)
            wf = MultiplyWF(ExponentSlaterWF(alpha), JastrowWF(beta))
            pos = np.random.randn(nelec, ndim, nconfig)
            pos, _ = metropolis_sample(pos=pos, wf=wf, tau=tau, nstep=nstep)
            acc.append(_)
            ke.append(np.mean(-0.5 * np.sum(wf.laplacian(pos), axis=0)))
            vele.append(np.mean(ham.pot_ee(pos)))
            venu.append(np.mean(ham.pot_en(pos)))
            potential.append(np.mean(ham.pot(pos)))
            eloc.append(ke[-1] + potential[-1])
            virial.append(potential[-1] / ke[-1])

    df = pd.DataFrame.from_dict({
        'kinetic': ke,
        'electron-electron': vele,
        'electron-nucleus': venu,
        'potential': potential,
Esempio n. 5
0
              "acceptance", acc_ratio)
        df['step'].append(istep)
        df['elocal'].append(np.mean(eloc))
        df['weight'].append(np.mean(weight))
        df['elocalvar'].append(np.std(eloc))
        df['weightvar'].append(np.std(weight))
        df['eref'].append(eref)
        df['tau'].append(tau)
        weight.fill(wavg)

    return pd.DataFrame(df)


#####################################

if __name__ == '__main__':
    from slaterwf import ExponentSlaterWF
    from wavefunction import MultiplyWF, JastrowWF
    from hamiltonian import Hamiltonian
    nconfig = 50000
    dfs = []
    for tau in [.01, .005, .0025]:
        dfs.append(
            simple_dmc(MultiplyWF(ExponentSlaterWF(2.0), JastrowWF(0.5)),
                       Hamiltonian(),
                       pos=np.random.randn(2, 3, nconfig),
                       tau=tau,
                       nstep=10000))
    df = pd.concat(dfs)
    df.to_csv("dmc.csv", index=False)
import numpy as np
from slaterwf import ExponentSlaterWF
from wavefunction import MultiplyWF, JastrowWF
from metropolis import metropolis_sample


def pair_distribution(wf):

    nelec = 2
    ndim = 3
    nconfig = 1000
    nstep = 100
    tau = 0.2
    sample, acc = metropolis_sample(np.random.randn(nelec, ndim, nconfig),
                                    wf,
                                    tau=tau,
                                    nstep=nstep)
    dist = np.mean((sample[0] - sample[1])**2)**0.5
    print(dist)


if __name__ == '__main__':
    wf = ExponentSlaterWF(1.0)
    pair_distribution(wf)

    wf = MultiplyWF(ExponentSlaterWF(1.0), JastrowWF(0.5))
    pair_distribution(wf)
Esempio n. 7
0
        ke = -0.5 * np.sum(wf.laplacian(sample), axis=0)
        vion = ham.pot_en(sample)
        vee = ham.pot_ee(sample)

        for i in range(nconfig):
            for nm, quant in zip(quantities, [ke, vion, vee]):
                df[nm].append(quant[i])
            df['alpha'].append(alpha)
            df['beta'].append(beta)
            df['acceptance'].append(acc)

    # Best Slater-Jastrow.
    alpha = 2.0
    for beta in np.linspace(-0.5, 1.5, 11):
        wf = MultiplyWF(ExponentSlaterWF(alpha=alpha), JastrowWF(a_ee=beta))
        sample, acc = metropolis_sample(np.random.randn(nelec, ndim, nconfig),
                                        wf,
                                        tau=tau,
                                        nstep=nstep)

        ke = -0.5 * np.sum(wf.laplacian(sample), axis=0)
        vion = ham.pot_en(sample)
        vee = ham.pot_ee(sample)

        for i in range(nconfig):
            for nm, quant in zip(quantities, [ke, vion, vee]):
                df[nm].append(quant[i])
            df['alpha'].append(alpha)
            df['beta'].append(beta)
            df['acceptance'].append(acc)