Monte Carlo moves
In CTSEG, a configuration (state of the Markov chain) is a set of time-ordered list of segments (one for every color), and possibly a list of \(J_{\perp}\) lines (see Implementation Notes for more details). Below is a list of all possible steps (or “moves”) of the random walk in configuration space.
Insert segment
Randomly choose a color. Randomly choose a segment within that color. Try to insert a randomly chosen new segment in the interval to the right of that segment. If the color is empty, try to insert a random segment. If the color contains a full line, no insertion is possible.
This move is enabled if there is a non-zero hybridization \(\Delta(\tau)\).
Remove segment
Randomly choose a color. Try to remove a randomly chosen segment within that color.
This move is enabled if there is a non-zero hybridization \(\Delta(\tau)\).
Split segment
Randomly choose a color and a segment \([\tau, \tau']\) within that color. Choose two random (but ordered) times \([\tau_1, \tau_1']\) inside that segment and try replacing \([\tau, \tau']\) with \([\tau, \tau_1]\) and \([\tau_1', \tau']\).
This move is enabled if there is a non-zero hybridization \(\Delta(\tau)\).
Regroup segment
Randomly choose a color and a pair of adjacent segments \([\tau, \tau_1]\) and \([\tau_1', \tau']\) within that color. Try replacing this pair of segments with the “regrouped” segment \([\tau, \tau']\).
This move is enabled if there is a non-zero hybridization \(\Delta(\tau)\).
Move segment
Randomly choose a color and either a segment or an antisegment within that color (an antisegment is an interval between two segments). Randomly choose another color and try to insert the chosen segment or antisegment within that color.
This move is enabled if there is a non-zero hybridization \(\Delta(\tau)\).
Note
The antisegment version of the move is implemented as the segment version applied to a “flipped” configuration, where all the occupied time intervals become unoccupied, and vice-versa.
Note
The origin color and the destination color must be within the same block of the hybridization matrix.
Insert spin segment
Randomly choose a color \(i\) (spin up or spin down) and a segment \([\tau, \tau']\) within that color. The other color is denoted \(j\). Choose two random (but ordered) times \(\tau_1\) and \(\tau_1'\) within that segment. Try replacing \([\tau, \tau']\) with \([\tau, \tau_1]\) and \([\tau_1', \tau']\) in color \(i\), inserting \([\tau_1, \tau_1']\) in color \(j\), and inserting a \(J_{\perp}\) line between \(\tau_1\) and \(\tau_1'\).
This move is enabled if there is a non-zero \(J_{\perp}(\tau)\).
Note
This and the following “spin moves” (that explore the configurations resulting from the \(J_{\perp}\) expansion) are only implemented for the case where the configuration has two colors, spin up and spin down.
Remove spin segment
Randomly choose a \(J_{\perp}\) line. If its two endpoints are connected by a segment \([\tau_1, \tau_1']\) in color \(i\), find the segments \([\tau, \tau_1]\) and \([\tau_1', \tau']\) that it connects in color \(j\). Try removing the \(J_{\perp}\) line and segment \([\tau_1, \tau_1']\) in color \(i\), and replacing \([\tau, \tau_1]\) and \([\tau_1', \tau']\) in color \(j\) with a single segment \([\tau, \tau']\).
This move is enabled if there is a non-zero \(J_{\perp}(\tau)\).
Swap spin lines
Randomly choose two \(J_{\perp}\) lines \([\tau_+, \tau_-]\) and \([\tau'_+, \tau'_-]\). Try replacing them with the swapped lines \([\tau'_+, \tau_-]\) and \([\tau_+, \tau'_-]\).
This move is enabled if there is a non-zero \(J_{\perp}(\tau)\).
Split spin segment
Randomly choose a \(J_{\perp}\) line. Try to remove the \(J_{\perp}\) line, and shift the \(c\) operators at its end points in each of the colors by independent random amounts.
This move is enabled if there is a non-zero \(J_{\perp}(\tau)\) and a non-zero \(\Delta(\tau)\).
Regroup spin segment
Randomly choose a \(c\) operator in color 0 (spin up) and determine the window \([\tau_0, \tau_0']\) in which this \(c\) operator can be moved. In color 1 (spin down), find the \(c^{\dagger}\) operators in \([\tau_0, \tau_0']\) and choose one of them at random (denote its time \(\tau_1''\)). Randomly choose a \(c\) operator in color 1 (spin down) and determine the window \([\tau_1, \tau_1']\) in which this \(c\) operator can be moved. In color 0 (spin up), find the \(c^{\dagger}\) operators in \([\tau_1, \tau_1']\) and choose one of them at random (denote its time \(\tau_0''\)). Try to shift the \(c\) operator in color 0 to \(\tau_1''\), the \(c\) operator in color 1 to \(\tau_0''\), and create a \(J_{\perp}\) line between \(\tau_0''\) and \(\tau_1''\).
This move is enabled if there is a non-zero \(J_{\perp}(\tau)\) and a non-zero \(\Delta(\tau)\).