Skip to content
Snippets Groups Projects
Commit d1802f0d authored by Jonas Greitemann's avatar Jonas Greitemann
Browse files

Implement PT negotiation & enable for Ising model

Added a `parallel_tempering` update to the frustmag ising model. It
defines parameters to control the PT update frequency and interface with
the hamiltonian, but the actual PT logic and MPI communication is
delegated to `pt::negotiate_update` which is model-agnostic.

On the other side of the fence, the `pt_adapter` now spins up a thread
running its static `manage(comm)` function. This manager thread acts
like a central registry keeping track of pairs of processes (primary and
secondary) which are currently involved in a PT update. The primary one
is the process initiating the update and asking the manager for a
partner, while the secondary one is that chosen partner. The manager
makes sure both processes know their respective partner.

Processes have to message the manager to deregister *before* they they
can wrap up their simulation. The manager is free to reject
deregistration if the thread has been scheduled to take part in an
ongoing PT update as secondary partner. In this case, the process has to
carry out additional updates and retry until deregistration is confirmed
by the manager. This is done in `pt_adapter::run(...)`.
parent 3f1b2cde
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment