This is a research project that is not meant for general usage.
The non-trivial phase structure of the eigenstates of many-body quantum systems severely limits the applicability of quantum Monte Carlo, variational, and machine learning methods. Here, we study real-valued signful ground-state wave functions of frustrated quantum spin systems and, assuming that the tasks of finding wave function amplitudes and signs can be separated, show that the signs can be easily bootstrapped from the amplitudes. We map the problem of finding the sign structure to an auxiliary classical Ising model defined on a subset of the Hilbert space basis. We show that the Ising model does not exhibit significant frustrations even for highly frustrated parental quantum systems, and is solvable with a fully deterministic O(K log K)-time combinatorial algorithm (where K is the Ising model size). Given the ground state amplitudes, we reconstruct the signs of the ground states of several frustrated quantum models, thereby revealing the hidden simplicity of many-body sign structures. |
If either this code base or the paper has benefited your research, consider citing it:
@article{westerhout2022unveiling,
title={Unveiling ground state sign structures of frustrated quantum systems via non-glassy Ising models},
author={Westerhout, Tom and Katsnelson, Mikhail I and Bagrov, Andrey A},
journal={arXiv preprint arXiv:2207.10675},
year={2022}
}
Our analysis consists of multiple stages.
The first stage is running the exact diagonalization for all studied models. We used SpinED version 4c3305a to perform the diagonalization.
The commands are of the form
OMP_NUM_THREADS=`nproc` /path/to/SpinED-4c3305a /path/to/input.yaml
Both the input files and the output files are located in the physical_systems/
folder:
physical_systems
βββ data-small
βΒ Β βββ heisenberg_kagome_16.h5
βΒ Β βββ heisenberg_kagome_18.h5
βΒ Β βββ j1j2_square_4x4.h5
βΒ Β βββ sk_16_1.h5
βΒ Β βββ sk_16_2.h5
βΒ Β βββ sk_16_3.h5
βββ data-large
βΒ Β βββ heisenberg_kagome_36.h5
βΒ Β βββ heisenberg_pyrochlore_2x2x2.h5
βΒ Β βββ sk_32_1.h5
βββ generate_sk.py
βββ heisenberg_kagome_16.yaml
βββ heisenberg_kagome_18.yaml
βββ heisenberg_kagome_36.yaml
βββ heisenberg_pyrochlore_2x2x2.yaml
βββ j1j2_square_4x4.yaml
βββ sk_16_1.yaml
βββ sk_16_2.yaml
βββ sk_16_3.yaml
βββ sk_32_1.yaml
All the HDF5 (.h5
) files are available for download from
Zenodo
To generate the data, we used make small
, for plotting, we used this
script. Raw data can be found
on Surfdrive:
experiments
βββ ...
βββ heisenberg_kagome_16.csv
βββ heisenberg_kagome_18.csv
βββ j1j2_square_4x4.csv
βββ sk_16_1.csv
βββ sk_16_2.csv
βββ sk_16_3.csv
To generate the data, we used make experiments/couplings/%.csv
where %
is
heisenberg_kagome_16
, heisenberg_kagome_18
, or sk_16_3
. For plotting,
this script was used. Raw data can be found on Surfdrive:
experiments/couplings
βββ heisenberg_kagome_16.csv
βββ heisenberg_kagome_18.csv
βββ j1j2_square_4x4.csv
βββ sk_16_1.csv
βββ sk_16_2.csv
βββ sk_16_3.csv
To generate the data, we used make is_frustrated
. For plotting, this
script was used. Raw data can be
found on Surfdrive:
experiments/is_frustrated
βββ heisenberg_kagome_16.csv
βββ heisenberg_kagome_18.csv
βββ j1j2_square_4x4.csv
βββ sk_16_1.csv
βββ sk_16_2.csv
βββ sk_16_3.csv
The data was generated using make quality_check
.
To generate the data, we used make experiments/noise/%.csv
where %
is
heisenberg_kagome_16
, heisenberg_kagome_18
, or sk_16_3
. For
post-processing, we used the
annealing_sign_problem.common.postprocess_influence_of_noise
function. For
plotting, this script was used.
Raw data can be found on Surfdrive:
experiments/lilo/noise/
βββ heisenberg_kagome_16.csv
βββ heisenberg_kagome_16_stats.csv
βββ heisenberg_kagome_18.csv
βββ heisenberg_kagome_18_stats.csv
βββ j1j2_square_4x4.csv
βββ j1j2_square_4x4_stats.csv
βββ sk_16_1.csv
βββ sk_16_1_stats.csv
βββ sk_16_2.csv
βββ sk_16_2_stats.csv
βββ sk_16_3.csv
βββ sk_16_3_stats.csv
The data was generated using make pyrochlore_32
, make kagome_36
, or make sk_32_1
. The Makefile also accepts the NOISE
and CUTOFF
arguments that can
be used to analyze the influence of noise in the amplitudes and to tune the
cutoff rate for cluster extensions, respectively. The jobs generate files that look like:
...
βββ noise_7.9e-01
βββ cutoff_2e-6
βββ kagome_36.csv7665204
...
the number appended to the file name indicates the job id. In this way, one can
start multiple independent jobs to gather more statistical data. The raw data
that we generated that way can be found in the experiments/lilo
and
experiments/snellius
directories on Surfdrive. Keep in mind, that not all
of the data was used for plotting.
The data was the pre-processed using this script to generate various probability distributions. We then used plot_greedy_overlap_density.gnu, plot_overlap_integrated.gnu, and plot_size_density.gnu for plotting.
The data from Figure 6 was reused. The plotting was done with this script.
Data for the figures in the Supplemental Information were be generated similarly to those in the main text.