The Villain Model
We are interested in studying the Villain model with partition function \(Z\) and action \(S\) given by
where \(\phi\) is a real-valued 0-form that lives on sites \(x\), \(n\) is an integer-valued one-form that lives on links \(\ell\), and \(J\) is a two-form external source that lives on plaquettes \(p\). The model has a gauge symmetry
for an integer-valued 0-form \(k\).
If we integrate over particular values of \(J_p\) we can project out values of the winding \(dn\). For example, if we integrate \(J\) over the reals the simplicity of the action allows us to find a constraint
which kills all vortices, because every plaquette must have 0 vorticity. We may also set \(J = 2\pi v / W\) for any positive integer \(W\) and sum over integer-valued plaquette variables \(v\),
keeping the external \(J\) for functional differentiation. The constrained model has a gauge symmetry \(v \rightarrow v \pm W\) because with integer-valued \(dn\) the phase
and the path integral are invariant under that transformation. When \(W=1\) the …constraint… does not constrain \(dn\). We may think of of the \(U(1)_W\)-maintaining vortex-free model as \(W=\infty\).
The constrained model has a \(\mathbb{Z}_W\) global winding symmetry
which is harmless under the path integral of \(v\) over the integers.
But for the unconstrained \(W=1\), the obvious reading of this model has a horrible sign problem. However, the sign problem can be traded for a constraint,
(where \([dn_p \equiv 0 \text{ mod } W]\) is the Iverson bracket). This constraint might be implemented with careful Monte Carlo updates. And we can sample configurations with \(W=\infty\) if we can find an ergodic set of updates which never change \(dn\) anywhere, assuming we start from a vortex-free configuration.
Remarkably, we will see that the worldline formulation is naturally sign-problem free.
Computationally we can study this model in a variety of formulations. The most straightforwardly obvious is the literal one.
- class supervillain.action.Villain(lattice, kappa, W=1)[source]
‘The’ Villain action is just the straightforward
\[\begin{split}\begin{align} Z[J] &= \sum\hspace{-1.33em}\int D\phi\; Dn\; Dv\; e^{-S_J[\phi, n, v]} \\ S_J[\phi, n, v] &= \frac{\kappa}{2} \sum_{\ell} (d\phi - 2\pi n)_\ell^2 + 2\pi i \sum_p \left(v/W + J/2\pi \right)_p (dn)_p \end{align}\end{split}\]with \(\phi\) a real-valued 0-form that lives on sites, \(n\) an integer-valued one form that lives on links \(l\), and \(J\) a two-form that lives on plaquettes \(p\).
In this formulation, if \(J\) is real and nonzero we expect a sign problem because the action is complex. However, we can think of \(J\) as an external source, take functional derivatives to get observables, and then set \(J\) to zero so that we only need sample according to the first term.
Warning
Because \(W\neq1\) suffers from a sign problem if we try to sample \(v\), we assume an ensemble will be generated with a clever algorithm that that maintains the winding constraint, so that \(v\) need not be included in the field content.
- Parameters
lattice (supervillain.lattice.Lattice2D) – The lattice on which \(\phi\) and \(n\) live.
kappa (float) – The \(\kappa\) in the overall coefficient.
W (int) – The constraint integer \(W\). When \(W>1\) we must integrate out \(v\) to avoid a horrible sign problem and sample carefully to maintain the winding constraint.
- __call__(phi, n, **kwargs)[source]
- Parameters
phi (np.ndarray) – A real-valued 0-form.
n (np.ndarray) – An integer-valued 1-form.
- Returns
\(S_0[\phi, n]\). We assume the path integration over \(v\) implements the winding constraint in some clever way, so the action does not depend on \(v\).
- Return type
float
- configurations(count)[source]
- Parameters
count (int)
- Returns
A dictionary of zeroed arrays at keys
phi
andn
, holdingcount
0- and 1-forms respectively.- Return type
dict
- gauge_transform(configuration, k)[source]
The Villain formulation has the gauge symmetry
\[\begin{split}\phi &\rightarrow\; \phi + 2\pi k \\ n &\rightarrow\; n + dk\end{split}\]with the gauge-invariant combination \((d\phi - 2\pi n)\).
- Parameters
configuration (dict) – A dictionary with the fields.
k (np.array) – The gauge transformation parameter \(k\) which must be of integer dtype.
- Returns
A dictionary with the fields transformed by \(k\).
- Return type
dict
- valid(configuration)[source]
Returns true if the constraint \([dn \equiv 0 \text{ mod } W]\) is satisfied everywhere.
When \(W=\infty\), check that \(dn = 0\) everywhere.
- Parameters
configuration (dict) – A dictionary that at least contains n.
- Returns
Is the constraint satisfied everywhere?
- Return type
bool