adjust a bunch of methods to work with a given configuration rather than just mc.conf
add reverse_build_stack because the best point to do a global update is at current_slice = 1; direction = 1 (because greens has just been built at this point)
add a torn-apart calculate_greens that yields a diagonal matrix usable for the determinant ratio calculation
add propose_global_from_conf and accept_global
det(G) is less stable than prod(mc.s.Dr) which appears during the calculation of G. Note that using just the diagonal matrices means ignoring a potential complex phase from unitary matrices. This phase factor should be 1 unless we have a sign problem, which we already check for in local updates. So I think it's fine to ignore.
It may be useful to have deny_global insteaddeny_global is more work than accept_global because both require a full stack rebuilt (either new or old) but deny also requires finishing the greens calculation.
add global_move
add update scheduler
the (original) point of these is to (1) be able to mix different global updates and (2) to dynamically phase out bad global updates. The AdaptiveScheduler can do both.
add various update structs
GlobalFlip suggests conf -> -conf
GlobalShuffle suggest conf -> shuffle(conf)
NoUpdate suggests doing nothing (needed as counterbalance for adaptive scheduler)
move global stats to updates update wrapper AcceptanceStatistics
remove global_rate
ReplicaExchange and ReplicaPull updates
split global.jl into multiple files - i.e. scheduler.jl, global_updates.jl, parallel_updates.jl (and eventually local_updates.jl)
compress scheduler prints
let the scheduler take care of all (i.e. also local) updates?
use LocalSweep() and LocalSweep(N) rather than LocalUpdate/LocalSpinFlip
generalize global_update to update, move temps to DQMC/stack
move temp conf to DQMC
Measurement changes
add ApplySymmetries to process symmetry calculations during the simulation
move greens and lattice iterator types to fields of DQMCMeasurement
General changes
split up DQMC.jl into a bunch of other files. DQMC.jl is now ~500 lines instead of 1000, the other files are typically 100-200 lines. Bit cleaner imo. Also cleanup comments/docstrings a little
fix parameters (linear system size -> total sites)
simplify DQMC construction (by making all concrete types known beforehand. There are some related changes here and there)
some QoL changes (DQMCParameters reconstruction, easier application of Sum wrappers)
update tests to Julia 1.5/1.6
Access d.diag instead d in vmul! methods for d::Diagonal
Global updates
mc.conf
reverse_build_stack
because the best point to do a global update is atcurrent_slice = 1; direction = 1
(because greens has just been built at this point)calculate_greens
that yields a diagonal matrix usable for the determinant ratio calculationpropose_global_from_conf
andaccept_global
det(G)
is less stable thanprod(mc.s.Dr)
which appears during the calculation of G. Note that using just the diagonal matrices means ignoring a potential complex phase from unitary matrices. This phase factor should be 1 unless we have a sign problem, which we already check for in local updates. So I think it's fine to ignore.It may be useful to havedeny_global
insteaddeny_global
is more work thanaccept_global
because both require a full stack rebuilt (either new or old) but deny also requires finishing the greens calculation.addglobal_move
AdaptiveScheduler
can do both.GlobalFlip
suggestsconf -> -conf
GlobalShuffle
suggestconf -> shuffle(conf)
NoUpdate
suggests doing nothing (needed as counterbalance for adaptive scheduler)updatesupdate wrapperAcceptanceStatistics
global_rate
ReplicaExchange
andReplicaPull
updatesglobal.jl
into multiple files - i.e. scheduler.jl, global_updates.jl, parallel_updates.jl (and eventually local_updates.jl)LocalSweep()
andLocalSweep(N)
rather thanLocalUpdate
/LocalSpinFlip
global_update
toupdate
, move temps to DQMC/stackMeasurement changes
ApplySymmetries
to process symmetry calculations during the simulationDQMCMeasurement
General changes
parameters
(linear system size -> total sites)Sum
wrappers)d.diag
insteadd
invmul!
methods ford::Diagonal