The Worldline Formulation
We can find an exact rewriting of the constrained Villain
model by first ‘integrating’ by parts,
and applying link-by-link the Poisson summation formula
with \(\theta \rightarrow\; d\phi\) and \(\tilde{\theta} \rightarrow\; \delta (2\pi v / W + J)\) to find
‘Integrating’ by parts again transforms the action to
and we dropped the \(\delta^2\) term because \(\delta^2=0\). That leaves us with
However, we can now execute the integral over \(\phi\), which just sets \(\delta m=0\) everywhere,
where \([\delta m = 0]\) is the Iverson bracket and we picked up a \(2\pi\) for every site since \(\int d\phi\; e^{i o \phi} = 2\pi \delta(o)\). We can cast the dimensionless constants up into the action
which will make functional differentiation more straightforward.
We can repeat the whole calculation with W=∞.
Replacing the Lagrange multiplier in the Villain formulation with a real-valued multiplier as in the vortex-free model
and path integrating over \(\tilde{v}\) rather than path summing over \(v\) replaces Kronecker-δs with Dirac-δs, killing all vortices rather than restricing them to \(0\;(\text{mod }W)\). The \(W=\infty\) result is
Perhaps obviously, we could have just set \(v\rightarrow 0\) and integrated over \(J\rightarrow \tilde{v}\). We can make this dual look more like the original Villain formulation by multiplying by \(1 = (2\pi)^2 / (2\pi)^2\),
and comparing with the original Villain formulation we can find the self-dual radius by setting
The rule is that we can go to \(W=\infty\) by replacing
and integrating \(\tilde{v}\) over the real numbers.
- class supervillain.action.Worldline(lattice, kappa, W=1)[source]
The dual (worldline) action is
\[\begin{split}\begin{align} Z[J] &= \sum Dm\; Dv\; e^{-S_J[m, v]} \left[\delta m = 0\right] \\ S_J[m, v] &= \frac{1}{2\kappa} \sum_\ell \left(m - \delta\left(\frac{v}{W} + \frac{J}{2\pi} \right)\right)_\ell^2 + \frac{|\ell|}{2} \ln (2\pi \kappa) - |x| \ln 2\pi \end{align}\end{split}\]In other words, it is a sum over all configurations where \(\delta m\) vanishes on every site.
This formulation has no obvious sign problem when \(W\neq 1\), but maintaining the constraint \(\delta m = 0\) requires a nontrivial algorithm.
- Parameters
lattice (supervillain.Lattice2D) – The lattice on which \(m\) lives.
kappa (float) – The \(\kappa\) in the overall coefficient.
W (int) – The winding symmetry is \(\mathbb{Z}_W\). If \(W=1\) the vortices are completely unconstrained.
- valid(configuration)[source]
Returns true if the constraint \([\delta m = 0]\) is satisfied everywhere and false otherwise.
- Parameters
configuration (dict) – A dictionary that at least contains m.
- Returns
Is the constraint satisfied everywhere?
- Return type
bool
- __call__(m, v, **kwargs)[source]
- Parameters
m (np.ndarray) – An integer-valued 1-form.
v (np.ndarray) – An integer-valued 2-form, (real-valued when \(W=\infty\)).
- Returns
\(S_0[m]\)
- Return type
float
- Raises
ValueError – If \(m\) does not satisfy the constraint.
- configurations(count)[source]
- Parameters
count (int) – How many configurations to return.
- Returns
count
configurations of a zeroed 1-formm
a zeroed 2-formv
.- Return type
- equivalence_class_v(configuration)[source]
Assuming \(W<\infty\) the constrained model has a gauge symmetry \(v \rightarrow v \pm W\) with the gauge-invariant combination \(m-\delta v / W\).
We can take any configuration and send
\[\begin{align} v &\rightarrow v + \lambda W & m &\rightarrow m - \delta \lambda \end{align}\]for integer \(\lambda\). We fix \(\lambda\) on every plaquette so that after the transformation \(v\in[0,W)\).
See also
test/equivalence-class-v.py
- Parameters
configuration (dict) – A dictionary with a one-form
m
and two-formv
.- Returns
A dictionary with the equivalent fields but with \(v \in [0, W)\). When \(W=\infty\), just returns the configuration unmodified.
- Return type
dict