# Fault Types and Their Boundary Conditions
Four fault situations are distinguished, and they differ from each other only in what is
constrained at the faulted bus. Everything else — the network, the sources, the voltage factor —
is identical. This page is about those constraints and how to read the result.
## The four types
| Three-phase | all | rare | no (balanced) |
| Single-phase-to-ground | one | the large majority | yes |
| Two-phase | two, clear of ground | uncommon | **no** |
| Two-phase-to-ground | two, plus ground | uncommon | yes |
The three-phase fault is the balanced one and usually — though not always — gives the largest
current, which is why it is the default sizing case. The single-phase-to-ground fault is by a wide
margin the most *common* in real systems, and it is the one whose magnitude depends most on
transformer winding configuration, because its current has to return through the zero-sequence
network.
## Default phases
A fault may name its phases explicitly (`a`, `b`, `c`, `ab`, `ac`, `bc`) or leave it to the type:
| Three-phase | `abc` |
| Single-phase-to-ground | `a` |
| Two-phase | **`bc`** |
| Two-phase-to-ground | **`bc`** |
The two two-phase types default to `bc`, not `ab`. This follows power-grid-model, and it is worth
stating loudly because getting it wrong produces an entirely plausible magnitude on the wrong pair
of conductors — the kind of error that survives a casual review.
## Bolted versus impedance faults
A **bolted** fault is a dead short: zero impedance, therefore infinite admittance. An **impedance**
fault goes through some finite \\(Z_f\\) — an arc, a tree, a resistive earth path.
The two are not the same formula evaluated at a limit, and gridoxide does not treat them that way.
An impedance fault *adds* an admittance to the faulted bus's diagonal. A bolted fault **replaces**
that bus's equations: its voltage is known to be zero, so the unknown in that position becomes the
injected current instead. Letting an infinity into the matrix would produce `NaN`, not a large
current.
The practical consequence for input data: **`r_f = x_f = 0` means bolted**, and that is the
default when a `fault` omits them. A fault that draws no current is not something the component can
express, because it would not be a fault.
## Reading the symmetrical components
Every result carries the symmetrical-component view alongside the phase quantities, and it is the
fastest way to tell whether an answer is sane:
- **Three-phase** — positive sequence only. Zero and negative should be numerical noise. If they
are not, either the network is genuinely unbalanced or something is wrong.
- **Single-phase-to-ground** — all three components present, comparable in size.
- **Two-phase** (clear of ground) — **no zero-sequence component at all.** With no ground return
there is nowhere for zero-sequence current to go. This is the single sharpest check available on
a short-circuit result.
- **Two-phase-to-ground** — all three present.
A second useful check: a delta winding blocks zero-sequence current. If a node sits behind one and
still shows zero-sequence voltage, the transformer's zero-sequence branch is wrong.
Both properties are asserted directly in `python/tests/test_short_circuit.py`.
## Multiple simultaneous faults
Several faults may be declared at once, on the same bus or on different ones, subject to one
restriction: **they must all share a fault type and phase.** The boundary conditions of different
types rewrite the same matrix entries in incompatible ways, so "one of each, at once" is not a
well-posed linear system. Mixing them returns `ShortCircuitError::MixedFaultTypes` rather than a
plausible-looking answer.
Two faults on one bus divide the current between them. A bolted fault short-circuits its bus
outright, so any other fault sharing that bus — bolted or not — is bypassed and carries nothing.