# Voltage Drop Calculator

Implemented 2026-09-19 at `calculators/voltage-drop.html`. Static classic scripts,
no server or dependencies. Supersedes the disabled layout proposal.

## Scope and inputs

One two-wire copper cable supplies one end load, with equal outgoing/return
conductors. Select DC or sinusoidal single-phase AC; supply voltage; current A,
DC rated W or AC rated VA; one-way distance in m/ft; operating conductor °C;
and ideal copper AWG/mm² estimates or custom single-conductor resistance at 20°C.
Custom resistance supports Ω/km, Ω/1,000 ft and Ω/m. Unit changes preserve the
physical input. Inactive inputs do not participate in validation.

W/VA ratings must correspond to the entered source voltage: I = W/Vs (DC) or
VA/Vs (AC). Current is then held fixed. This is **not a constant-power solution**.
Changing load input units preserves inferred current; switching DC W to AC VA
keeps the same inferred current, not the same real power. AC PF is a lagging
displacement factor (0 < PF ≤ 1); 1 is the explicit unity example.

## Calculation contract

At 20°C, ideal copper resistivity ρ = 1/58 Ω·mm²/m. Area A gives
R20 = 1000ρ/A in Ω/km. AWG n uses d = 0.127 × 92^((36−n)/39) mm and A = πd²/4.
These are ideal geometry/material estimates, not manufacturer cable ratings.
Custom data should include the actual construction's resistance; it must be a
copper single-conductor value at 20°C, not an already doubled loop value.

With one-way L in m and specified conductor T in °C:

- R(T) = R20 [1 + 0.00393(T−20)] in Ω/km.
- Rloop = R(T) × 2L / 1000 in Ω.
- DC: Vload = Vs − I Rloop.
- AC with X = 0: Vs² = (Vload + I Rloop PF)² + [I Rloop √(1−PF²)]².
  Thus Vload = √(Vs² − (I Rloop)²(1−PF²)) − I Rloop PF.
  This is our derivation for the declared resistive-line model, not a general
  cable AC formula. Code rationalizes the difference to retain tiny drops.
- Vdrop = Vs − Vload; percent = 100 Vdrop/Vs; cable loss = I² Rloop.

AC results describe RMS magnitudes. The displayed drop is not the magnitude of
the line's voltage phasor except at unity PF. Reject a negative square-root
argument or nonpositive device voltage. Do not clamp these to zero or display
a plausible result for an impossible fixed-current operating point.

No automatic acceptable-drop threshold is used. Compare the displayed device
voltage with that device's specified range. Zero distance/current is permitted.
Numerical tool bounds: 0 < Vs ≤ 600 V, 0 ≤ I ≤ 100 A, 0 ≤ L ≤ 10,000 m,
0 < R20 ≤ 10,000 Ω/km, −40 ≤ T ≤ 120°C. These are tool limits, not wire
ampacity, insulation ratings, design recommendations or calibration limits.
AWG choices: 24, 22, 20, 18, 16, 14, 12, 10. Metric choices: 0.25, 0.5, 0.75,
1, 1.5, 2.5, 4, 6, 10 mm². Constants and bounds live in `voltage-drop.js`.

Exclude cable reactance/skin effect, waveform distortion, regulation/source
impedance, connectors, inrush, self-heating, distributed/shared loads and
voltage-dependent device current. Copper linear temperature correction is an
estimate. Ampacity, protection, transformer sizing and code compliance are
outside scope. The Transformer VA Calculator remains **skip for now, deleted**.

## Sources

- [NBS/NIST Handbook 100, Copper Wire Tables](https://nvlpubs.nist.gov/nistpubs/Legacy/hb/nbshandbook100.pdf):
  §2.2 AWG geometry; Appendix I (printed p.40) annealed copper resistivity and
  resistance temperature coefficient. Material reference, not a code claim.
- [Cirris temperature coefficient of copper](https://cirris.com/temperature-coefficient-of-copper/):
  linear correction about 20°C and coefficient 0.00393/°C.

## Verification

`node tests/voltage-drop-tests.cjs` checks independent DC examples, AC phasor
closure, PF=1 equivalence, temperature and unit conversions, impossible loads,
invalid input, size estimates, and actual-page form wiring/clear-stale behavior.
`node tests/run-node.cjs` checks site references, landmarks, directory and FCU
regression coverage. Node's minimal DOM is not a browser. Actual rendering,
native controls and browser-console checks remain pending under the previously
observed browser file-URL policy restriction; no workaround was introduced.
