The Villain Model

We are interested in studying the Villain model with partition function \(Z\) and action \(S\) given by

(1)\[\begin{align} Z[J] &= \sum\hspace{-1.33em}\int D\phi\; Dn\; e^{-S_J[\phi, n]} & S_J[\phi, n] &= \frac{\kappa}{2} \sum_{\ell} (d\phi - 2\pi n)_\ell^2 + i \sum_p J_p (dn)_p \end{align}\]

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

(2)\[\begin{split}\phi &\rightarrow\; \phi + 2\pi k \\ n &\rightarrow\; n + dk\end{split}\]

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

(3)\[\begin{align} \int DJ\; e^{i \sum_p J_p (dn)_p} = \prod_p 2\pi \delta(dn_p) \end{align}\]

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\),

(4)\[\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 (v/W + J/2\pi)_p (dn)_p, \end{align}\end{split}\]

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

\[e^{2\pi i \sum_p v_p (dn)_p / W}\]

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

\[\begin{align} v &\rightarrow v + z & (z&\in\mathbb{Z}) \end{align}\]

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,

(5)\[ \sum Dv\; e^{2\pi i \sum_p v_p (dn)_p / W} = \prod_p [dn_p \equiv 0 \text{ mod }W]\]

(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 and n, holding count 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