  We study how well topological quantum codes can tolerate coherent noise
caused by systematic unitary errors such as unwanted $Z$-rotations. Our main
result is an efficient algorithm for simulating quantum error correction
protocols based on the 2D surface code in the presence of coherent errors. The
algorithm has runtime $O(n^2)$, where $n$ is the number of physical qubits. It
allows us to simulate systems with more than one thousand qubits and obtain the
first error threshold estimates for several toy models of coherent noise.
Numerical results are reported for storage of logical states subject to
$Z$-rotation errors and for logical state preparation with general $SU(2)$
errors. We observe that for large code distances the effective logical-level
noise is well-approximated by random Pauli errors even though the
physical-level noise is coherent. Our algorithm works by mapping the surface
code to a system of Majorana fermions.
