Skip to content

Commit f0a10a6

Browse files
author
m-baumgarten
committed
moved files to adhere to addons infrastructure
1 parent 2ef4fb8 commit f0a10a6

File tree

14 files changed

+77
-93
lines changed

14 files changed

+77
-93
lines changed

examples/13-1d_holstein/run_afqmc.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import numpy as np
2-
2+
np.random.seed(125)
33
from mpi4py import MPI
44

55
from ipie.qmc.afqmc import AFQMC
66
from ipie.estimators.energy import EnergyEstimator
77
from ipie.systems import Generic
8-
from ipie.hamiltonians.elph.holstein import HolsteinModel
9-
from ipie.trial_wavefunction.holstein.toyozawa import ToyozawaTrial
10-
from ipie.trial_wavefunction.holstein.variational.toyozawa_variational import variational_trial_toyozawa
11-
from ipie.walkers.eph_walkers import EphWalkers
12-
from ipie.propagation.holstein import HolsteinPropagatorImportance
8+
from ipie.addons.ephqmc.hamiltonians.holstein import HolsteinModel
9+
from ipie.addons.ephqmc.trial_wavefunction.toyozawa import ToyozawaTrial
10+
from ipie.addons.ephqmc.trial_wavefunction.variational.toyozawa_variational import variational_trial_toyozawa
11+
from ipie.addons.ephqmc.walkers.eph_walkers import EphWalkers
12+
from ipie.addons.ephqmc.propagation.holstein import HolsteinPropagatorImportance
1313
from ipie.qmc.options import QMCParams
1414

1515
#System Parameters
@@ -41,7 +41,6 @@
4141
etrial, beta_shift, el_trial = variational_trial_toyozawa(
4242
initial_phonons, initial_electron, ham, system
4343
)
44-
4544
wavefunction = np.column_stack([beta_shift, el_trial])
4645

4746
#Setup trial
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import numpy as np
2+
3+
from ipie.addons.ephqmc.hamiltonians.holstein import HolsteinModel
4+
from ipie.addons.ephqmc.trial_wavefunction.eph_trial_base import EphTrialWavefunctionBase
5+
from ipie.addons.ephqmc.walkers.eph_walkers import EphWalkers
6+
from ipie.systems.generic import Generic
7+
from ipie.utils.backend import arraylib as xp
8+
9+
10+
def local_energy_holstein(
11+
system: Generic,
12+
hamiltonian: HolsteinModel,
13+
walkers: EphWalkers,
14+
trial: EphTrialWavefunctionBase
15+
):
16+
"""Computes the local energy for the Holstein model."""
17+
# energy = xp.zeros((walkers.nwalkers, 5), dtype=xp.complex128)
18+
19+
# gf = trial.calc_greens_function(walkers)
20+
21+
# energy[:, 1] = np.sum(hamiltonian.T[0] * gf[0], axis=(1,2))
22+
# if system.ndown > 0:
23+
# energy[:, 1] += np.sum(hamiltonian.T[1] * gf[1], axis=(1,2))
24+
25+
# energy[:, 2] = np.sum(np.diagonal(gf[0], axis1=1, axis2=2) * walkers.x, axis=1)
26+
# if system.ndown > 0:
27+
# energy[:, 2] += np.sum(np.diagonal(gf[1], axis1=1, axis2=2) * walkers.x, axis=1)
28+
# energy[:, 2] *= hamiltonian.const
29+
30+
# energy[:, 3] = 0.5 * hamiltonian.m * hamiltonian.w0**2 * np.sum(walkers.x**2, axis=1)
31+
# energy[:, 3] -= 0.5 * hamiltonian.nsites * hamiltonian.w0
32+
# energy[:, 4] = -0.5 * trial.calc_phonon_laplacian_locenergy(walkers) / hamiltonian.m
33+
34+
# energy[:, 0] = np.sum(energy[:,1:], axis=1)
35+
##
36+
energy = xp.zeros((walkers.nwalkers, 5), dtype=xp.complex128)
37+
38+
#get greens_function from estimators
39+
gf = trial.calc_greens_function(walkers)
40+
41+
#TODO make this nicer
42+
for n in range(walkers.nwalkers):
43+
energy[n, 1] = np.einsum('ij->', hamiltonian.T[0] * gf[0][n] + hamiltonian.T[1] * gf[1][n])
44+
45+
#TODO this performs too many summations
46+
energy[:, 2] = hamiltonian.const * np.einsum('nii,ni->n', gf[0] + gf[1], walkers.x)
47+
48+
energy[:, 3] = 0.5 * hamiltonian.m * hamiltonian.w0**2 * np.einsum('ni->n', walkers.x**2)
49+
energy[:, 3] -= 0.5 * hamiltonian.nsites * hamiltonian.w0
50+
energy[:, 4] = -0.5 * trial.calc_phonon_laplacian_locenergy(walkers) / hamiltonian.m
51+
energy[:, 0] = np.sum(energy[:,1:], axis=1)
52+
53+
return energy
54+
55+
56+

ipie/propagation/holstein.py renamed to ipie/addons/ephqmc/propagation/holstein.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import time
33
import scipy.linalg
44

5-
from ipie.hamiltonians.elph.holstein import HolsteinModel
5+
from ipie.addons.ephqmc.hamiltonians.holstein import HolsteinModel
66
from ipie.propagation.operations import propagate_one_body
77
from ipie.utils.backend import synchronize, cast_to_device
88
from ipie.propagation.continuous_base import PropagatorTimer

ipie/trial_wavefunction/holstein/coherent_state.py renamed to ipie/addons/ephqmc/trial_wavefunction/coherent_state.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import numpy as np
22
import scipy.linalg
33

4-
#TODO add greens_function_coherent_state in estimators
5-
from ipie.estimators.greens_function_single_det import greens_function_single_det
6-
from ipie.trial_wavefunction.holstein.eph_trial_base import EphTrialWavefunctionBase
4+
from ipie.addons.ephqmc.trial_wavefunction.eph_trial_base import EphTrialWavefunctionBase
75
from ipie.utils.backend import arraylib as xp
86

97
#TODO greensfunctions are in estimators

ipie/trial_wavefunction/holstein/eph_trial_base.py renamed to ipie/addons/ephqmc/trial_wavefunction/eph_trial_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import numpy as np
22
from ipie.trial_wavefunction.wavefunction_base import TrialWavefunctionBase
33

4+
#NOTE could inherit from TrialWavefunctionBase, but would need to redefine abstract methods..
45
class EphTrialWavefunctionBase():
56
def __init__(self, wavefunction, num_elec, num_basis, verbose=False):
6-
#super().__init__(wavefunction, num_elec, num_basis, verbose=verbose)
77
self.nelec = num_elec
88
self.nbasis = num_basis
99
self.nalpha, self.nbeta = self.nelec

ipie/trial_wavefunction/holstein/toyozawa.py renamed to ipie/addons/ephqmc/trial_wavefunction/toyozawa.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,9 @@
11
import numpy as np
22
import scipy.linalg
33

4-
#TODO add greens_function_coherent_state in estimators
5-
#NOTE can use single_det for now
6-
from ipie.estimators.greens_function_single_det import greens_function_single_det
7-
from ipie.trial_wavefunction.holstein.eph_trial_base import EphTrialWavefunctionBase
8-
from ipie.trial_wavefunction.holstein.coherent_state import CoherentStateTrial
9-
4+
from ipie.addons.ephqmc.trial_wavefunction.coherent_state import CoherentStateTrial
105
from ipie.utils.backend import arraylib as xp
11-
from ipie.propagation.overlap import calc_overlap_single_det_uhf
12-
from ipie.estimators.greens_function_single_det import greens_function_single_det
13-
from ipie.config import CommType, config, MPI
14-
15-
#TODO greensfunctions are in estimators
16-
17-
def circ_perm(lst):
18-
""""""
19-
cpy = lst[:] # take a copy because a list is a mutable object
20-
yield cpy
21-
for i in range(len(lst) - 1):
22-
cpy = cpy[1:] + [cpy[0]]
23-
yield cpy
6+
from ipie.addons.ephqmc.trial_wavefunction.variational.toyozawa_variational import circ_perm
247

258
class ToyozawaTrial(CoherentStateTrial):
269
""""""
@@ -34,7 +17,6 @@ def calculate_energy(self, system, hamiltonian):
3417
pass
3518

3619
def calc_overlap(self, walkers) -> np.ndarray:
37-
#TODO this will be a concoction of phonon and electronic overlap
3820
_ = self.calc_phonon_overlap(walkers)
3921
_ = self.calc_electronic_overlap(walkers)
4022
walkers.total_ovlp = walkers.el_ovlp * walkers.ph_ovlp
@@ -80,8 +62,6 @@ def calc_phonon_laplacian_locenergy(self, walkers) -> np.ndarray:
8062
def calc_electronic_overlap(self, walkers) -> np.ndarray:
8163
""""""
8264
for ip,perm in enumerate(self.perms):
83-
# print('psia shape: ', self.psia.shape)
84-
# print('walkers shape: ', walkers.phia.shape)
8565
ovlp_a = xp.einsum("wmi,mj->wij", walkers.phia, self.psia[perm, :].conj(), optimize=True)
8666
sign_a, log_ovlp_a = xp.linalg.slogdet(ovlp_a)
8767

@@ -94,35 +74,24 @@ def calc_electronic_overlap(self, walkers) -> np.ndarray:
9474

9575
walkers.el_ovlp[:, ip] = ot
9676

97-
el_ovlp = np.sum(walkers.el_ovlp, axis=1) #NOTE this was ph before??
98-
99-
# if verbose:
100-
# print('el_ovlp: ', el_ovlp[0])
77+
el_ovlp = np.sum(walkers.el_ovlp, axis=1)
10178

10279
return el_ovlp
10380

10481
def calc_greens_function(self, walkers, build_full=True) -> np.ndarray:
10582
""""""
106-
107-
# greensfct = np.zeros((walkers.nwalkers, self.nsites, self.nsites), dtype=np.complex128)
10883
walkers.Ga = np.zeros((walkers.nwalkers, self.nsites, self.nsites), dtype=np.complex128)
10984
walkers.Gb = np.zeros_like(walkers.Ga)
11085

11186
for ovlp, perm in zip(walkers.total_ovlp.T, self.perms):
112-
#TODO adjust this by just calling gab from exisiting extimators rubric TODO
113-
#overlap_inv = 1 / np.einsum('i,nie->n', self.psia[perm].conj(), walkers.phia) #NOTE psi currently hacked
114-
#greensfct += np.einsum('nie,n,j,n->nji', walkers.phia, overlap_inv,
115-
# self.psia[perm].conj(), ovlp)
11687

11788
inv_Oa = xp.linalg.inv(xp.einsum('ie,nif->nef', self.psia[perm,:], walkers.phia.conj()))
11889
walkers.Ga += xp.einsum('nie,nef,jf,n->nji', walkers.phia, inv_Oa, self.psia[perm].conj(), ovlp)
11990

12091
if self.ndown > 0:
12192
inv_Ob = xp.linalg.inv(xp.einsum('ie,nif->nef', self.psib[perm,:], walkers.phib.conj()))
12293
walkers.Gb += xp.einsum('nie,nef,jf,n->nji', walkers.phib, inv_Ob, self.psib[perm].conj(), ovlp)
123-
#greensfct += greens_function_single_det(walkers, self, build_full=build_full) * ovlp
12494

125-
# greensfct = np.einsum('nij,n->nij', greensfct, 1 / np.sum(walkers.total_ovlp, axis=1)) #these sums can be replaced by walkers.ovlp calls
12695
walkers.Ga = np.einsum('nij,n->nij', walkers.Ga, 1 / np.sum(walkers.total_ovlp, axis=1))
12796
walkers.Gb = np.einsum('nij,n->nij', walkers.Gb, 1 / np.sum(walkers.total_ovlp, axis=1))
12897

ipie/trial_wavefunction/holstein/variational/coherent_state_variational.py renamed to ipie/addons/ephqmc/trial_wavefunction/variational/coherent_state_variational.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from ipie.legacy.trial_wavefunction.harmonic_oscillator import HarmonicOscillator
55
from ipie.systems.generic import Generic
6-
from ipie.hamiltonians.elph.holstein import HolsteinModel
6+
from ipie.addons.ephqmc.hamiltonians.holstein import HolsteinModel
77

88
import jax
99

ipie/trial_wavefunction/holstein/variational/toyozawa_variational.py renamed to ipie/addons/ephqmc/trial_wavefunction/variational/toyozawa_variational.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import numpy as np
22
from scipy.optimize import minimize, basinhopping
33
from ipie.systems import Generic
4-
from ipie.hamiltonians.elph.holstein import HolsteinModel
4+
from ipie.addons.ephqmc.hamiltonians.holstein import HolsteinModel
55

66
from jax.config import config
77
config.update("jax_enable_x64", True)

0 commit comments

Comments
 (0)