# HVDC learning laboratory — engineering model and validation

Defined before implementation, 1 October 2026. This is an original educational model, not an installation design, validated electromagnetic-transient simulation, standard-compliance assessment or independently peer-reviewed engineering study.

## Electrical architecture

The new `/how-it-works/hvdc` lesson preserves React 19, TypeScript, Vite, static prerendering, Atlas typography and the existing ten Three.js plant experiences. It is a transmission lesson, not an eleventh generation technology.

Mode A: balanced three-phase sending grid → AC switchyard → ideal converter transformer → half-bridge modular multilevel converter (MMC) → two-conductor overhead DC line → receiving MMC → ideal transformer and switchyard → receiving grid/loads. Each MMC has three phase legs, each with an upper and lower arm; series half-bridge submodules contain a capacitor and two controlled switches with antiparallel diodes. Arm inductors and cooling are shown. No diode-bridge ripple is used as an MMC waveform.

Arrangement: **symmetrical monopole**, one converter at each end and two fully insulated conductors at nominal opposite polarity. DC voltage means **pole-to-pole**, not pole-to-ground. The default 320 kV sending value is nominally +160/−160 kV relative to a balanced common-mode reference. Structural protective earthing is separate from the power circuit: no earth electrode, third return conductor or independent redundant bipoles. Common-mode regulation/ground-reference apparatus is not modelled; no DC rail is shown solidly bonded to earth. Current flows out on + and back on −. Net energy moves sending → receiving; gold teaching pulses depict that energy direction, not electron speed or instantaneous AC current.

Mode B: insert a **four-terminal isolated DC/DC** interface between the line end and the receiving MMC. There is no simultaneous bypass connection; both input conductors enter its input port and both output conductors leave an electrically separate output port. The aggregate MW/kV calculation assumes a voltage ratio and efficiency. It does **not** propose that one bench converter handles HVDC voltage/power. A separate dual-active-bridge (DAB) cutaway/schematic explains two active full bridges, a high-frequency transformer and coupling inductance at invented 48→96 V teaching parameters. The input/output negative terminals are not shorted together. A transmission installation would need separately engineered modular insulation, protection, balancing and cooling; this page does not specify that design. DC/DC is an advanced extension, not required in every HVDC link.

## Single documented steady-state model

All interactive transmission values derive from one function. Controls: sending-grid real power P_sent in MW (50–1,000), sending pole-to-pole DC voltage V_s in kV (200–800), one-way line length L in km (0–1,200). Default: 500 MW, 320 kV, 300 km. Invented fixed assumptions: each conductor's resistance r=0.020 Ω/km at a fixed unspecified teaching temperature; sending and receiving converter efficiencies η_s=η_r=0.99; optional DC/DC efficiency η_d=0.98 and output/input voltage ratio k=0.75. These are neither source-derived efficiencies nor specifications of a real station. Transformers are ideal; converter loss factors lump semiconductor/reactor losses, not separately simulated thermal losses. Auxiliary, transformer, corona, capacitance, dynamics, protection, reactive power and thermal constraints are omitted.

Using SI units internally:

1. P_s,DC=η_s P_sent; sending-converter loss=(1−η_s)P_sent.
2. I_DC=P_s,DC/V_s.
3. R_loop=2rL: resistance of **both** equal full-length power conductors; neither earth nor shield-wire resistance is included.
4. ΔV=I_DC R_loop; V_r=V_s−ΔV; P_line_loss=I_DC²R_loop.
5. P_r,DC=V_r I_DC=P_s,DC−P_line_loss.
6. Mode A: V_i=V_r, I_i=I_DC, P_i=P_r,DC. Mode B: V_i=kV_r, P_i=η_dP_r,DC, I_i=P_i/V_i; optional loss=(1−η_d)P_r,DC. Voltage/current measurements identify their port.
7. P_received=η_rP_i; receiving-converter loss=(1−η_r)P_i; η=P_received/P_sent. Check P_sent=P_received+all separately reported losses before rounding.

Reject non-finite/out-of-control-domain values and points with nonpositive receiving voltage or more than 30% DC voltage drop. The 30% restriction is a teaching-model validity guard, **not** a thermal rating or an operating limit established by a standard.

Both grids are illustrative 220 kV line-to-line RMS (root mean square), 50 Hz, balanced sinusoidal fundamentals with displacement power factor cos(φ)=1. Thus P_AC=√3 V_LL,rms I_line,rms cos(φ), and phase voltage amplitude is √(2/3)V_LL,rms. This does not compute switching-waveform apparent power, harmonics, AC current transients or grid control. Converter transformers are scenario-matched abstractions, not fixed winding/tap specifications across the voltage slider range; no converter AC-side numerical rating is inferred.

Waveforms: actual calculated steady-state DC voltages/currents are flat; AC grid fundamentals are three sine waves separated by 120°. A separately labelled ideal reduced-cell MMC staircase illustrates insertion/bypass (six illustrative cells per arm, modulation index 0.9), not capacitor balancing or a time-domain solution. DAB teaching waveforms use 48 V input, 96 V output, N_primary/N_secondary=0.5, 20 kHz and coupling inductance 20 μH, with a selectable phase shift δ. Its ideal single-phase-shift relation is P=V_1(nV_2)/(2πf_s L_k) δ(1−δ/π) for 0≤δ≤π/2. At 30°, P=400 W. The secondary bridge is plotted referred to the primary, ±48 V. This standalone illustrative calculation is **not** the MW transmission-stage loss model; frequency is slowed only for viewing and never replaced in the power equation.

### Independently recomputable default power balance

R_loop=12 Ω; I_DC=1,546.875 A; ΔV=18.5625 kV; V_r=301.4375 kV; sending DC power=495 MW; line loss=28.7138671875 MW; line-end power=466.2861328125 MW.

Mode A: converter losses 5 MW and 4.662861328125 MW; received power=461.623271484375 MW; efficiency=92.324654296875%.

Mode B: DC/DC output=226.078125 kV, 2,021.25 A and 456.96041015625 MW; DC/DC loss=9.32572265625 MW; receiving converter loss=4.5696041015625 MW; received power=452.3908060546875 MW; efficiency=90.4781612109375%. This is an invented example, not a benchmark.

## Original mechanical scene and asset contracts

Three.js Y-up coordinates; Blender Z-up export converts (x,y,z) to (x,z,−y). Use existing Blender primitive/material helpers, no third-party art. Groups: `grid_send`, `transformer_send`, `converter_send`, `line`, `dc_dc`, `converter_receive`, `transformer_receive`, `grid_receive`; separate `bypass_connector` and `dc_dc_links` visibility. Detailed asset groups `mmc_detail` and `dab_detail` are independent teaching enlargements.

Layout in arbitrary scene units: sending grid x=−47, transformer −38, hall −27; line between −20 and +16 with conductors z=±3.5; DC/DC x=22; receiving hall29, transformer39, grid48. Four towers x=−16,−5,6,17; tapered legs, crossarms, diagonal bracing, four concrete footings, vertical suspension-disc strings. Conductor attachment height9.5; illustrative sag1.1 between suspension points. Terminal routing remains outside tower steel and connected to actual equipment bushings. Protective ground bonds support frames separately. Transformers have radiators, conservators and distinct three-phase bushing banks; halls have valve/cooling functions and accessible space. No insulation distance, sag/tension load, soil/foundation capacity or heat-rejection sizing is certified. Equipment visibility is enlarged and spans/station spacing radically compressed; changing electrical km does not rescale this schematic landscape.

`scripts/blender/hvdc.py` generates an editable `public/downloads/hvdc-learning.blend` before browser merging. `scripts/build-hvdc.mjs` runs installed Blender 5.2.1 LTS headlessly with Python errors propagated, then existing glTF Transform dedup/weld/quantize. Outputs: `public/models/hvdc-overview.glb` and on-demand `hvdc-converter.glb`; native KHR_mesh_quantization, no new decoder/CSP/dependency. All eight selectable groups and mutually exclusive mode paths are retained. Original-asset provenance, scene assumptions, file/geometry/material metrics and SHA-256 fingerprints are in `public/models/hvdc-manifest.json`. The existing ten assets are unchanged.

Run `npm ci` then `npm run models:hvdc` from the repository. The standalone public source ZIP includes seven explicitly whitelisted source/helper/instruction files and its own minimal dependency manifest: extract it, run `npm install`, then `npm run models:hvdc`. Node 22.12+ and Blender 5.x are required. On Windows, if discovery fails, use `$env:BLENDER='C:/Program Files/Blender Foundation/Blender 5.2/blender.exe'`. The generation command is `blender -b --factory-startup --python-exit-code 1 --python scripts/blender/hvdc.py`; use the npm wrapper for optimized exports, metrics and the source bundle. Exact instructions are also in the public bundle's README. No private deployment configuration, environment files, inventory or credentials are bundled.

## Frontend and visual plan

Use the existing Atlas Sans reading/control type and Atlas Serif page-title treatment. Palette inherits ink #14263f, white #ffffff, canvas #f4f7fc and navy #0e2035; blue #2563eb marks active selection, gold #9a6400 energy transfer, grounded supports a distinct neutral/green dashed convention. AC A/B/C phases and DC +/− require text, distinct line patterns and signs as well as colour.

Layout: a wide original two-conductor schematic beneath the title, an equipment viewer plus selected-stage explanation, followed by a compact measurement/power-balance workbench and readable stage lessons. All prose and default worked values are prerendered semantic HTML. Native controls select equipment in the 3D view and schematic together. A stage selector provides keyboard-equivalent access, follow-power tour, orbit/zoom/reset/guided viewpoints, pause/speed/labels, whole-system/cutaway and two modes. 3D loads only on activation; the detailed GLB only on cutaway. Non-WebGL failures show retry and keep the schematic/text/calculation usable. No essential lesson is canvas-only. This subject-specific connected circuit, not decorative dashboard tiles, is the main visual.

Animation starts paused; reduced-motion preference also suppresses camera transitions/tour autoplay. Render on demand when paused, suspend offscreen/hidden animation, cap pixel ratio, reuse materials/geometry and dispose listeners/frames/GPU assets after unmount/failure. A visible measurement action records actual frame intervals and renderer draw/triangle counts, with viewport/browser conditions. No Lighthouse, Core Web Vitals, mobile-device or thermal/GPU benchmark is claimed without measurement; available tooling lacks a DevTools trace connector.

## Supporting sources and bibliography

Primary accessible technical sources checked 1 October 2026:

- [Siemens Energy HVDC PLUS](https://www.siemens-energy.com/global/en/home/products-services/product-offerings/high-voltage-direct-current-transmission-solutions.html): MMC platform, symmetrical-monopole two-conductor arrangement and point-to-point applications.
- [MathWorks three-phase MMC documentation](https://www.mathworks.com/help/simscape-electrical/ref/modularmultilevelconverterthreephase.html): three legs/six arms, series half-bridge cells/capacitors and arm inductance. We do not run this software/model or claim its fidelity.
- [TI TIDA-010054 design guide](https://www.ti.com/lit/pdf/tidues0), Rev F April2026: two active bridges, high-frequency transformer/coupling inductance, phase-shift DC/DC principle. Its10kW application is not HVDC; no efficiency number is imported because the document contains differing reported values.
- [Schneider Electric three-phase power](https://www.electrical-installation.org/enwiki/Installed_apparent_power_(kVA)): balanced sinusoidal grid line-voltage/current and power-factor relationship, not switching-waveform RMS calculations.
- [Virginia Tech CPES half-bridge fault-path summary](https://cpes.vt.edu/library/view_nugget/496): half-bridge MMC DC-fault limitation; this lesson does not design fault blocking or protection.
- [National Grid hot-weather advice](https://powercuts.nationalgrid.co.uk/power-cut-advice/hot-weather-advice) and [National Grid conductor/fittings](https://www.nationalgrid.com/document/332516/download): thermal expansion/sag, support and insulation functions; not this model's structural approval.
- [EIA-commissioned HVDC study](https://www.eia.gov/analysis/studies/electricity/hvdctransmission/pdf/transmission.pdf): controllability/asynchronous connections and line-versus-station economic tradeoffs, not a universal break-even distance.
- [Hitachi Energy cooling systems](https://www.hitachienergy.com/products-and-solutions/cooling-systems): semiconductor liquid-cooling/heat-exchanger principle, not equipment sizing.

Starting bibliography, **further reading**: publisher metadata/contents verified; full book passages not consulted. No page/chapter claims or copied diagrams.

R1 Dragan Jovcic, *High Voltage Direct Current Transmission: Converters, Systems and DC Grids*,2ndedition,Wiley,2019. DOI[10.1002/9781119566632](https://onlinelibrary.wiley.com/doi/book/10.1002/9781119566632).

R2 Robert W. Erickson and Dragan Maksimović, *Fundamentals of Power Electronics*,3rdedition,Springer,2020. DOI[10.1007/978-3-030-43881-4](https://link.springer.com/book/10.1007/978-3-030-43881-4).

R3 Friedrich Kiessling, Peter Nefzger, João Felix Nolasco and Ulf Kaintzyk, *Overhead Power Lines: Planning, Design, Construction*,Springer,2003. DOI[10.1007/978-3-642-97879-1](https://link.springer.com/book/10.1007/978-3-642-97879-1). Springer eBook availability2014 is not the original publication year.

## Implementation and acceptance checks

1. Pure electrical/DAB functions: independent numeric point, zero length, parameter bounds, finite quantities, separate-mode current/voltage ports, full conservation and guard failures.
2. GLB node/material/geometry budget, finite transforms, actual conductor endpoints, minimum visual support separation/sag, MMC six-arm and DAB isolation contracts; preserve original .blend and script.
3. Static page/sitemap/canonical/source/fragment checks; native controls and retained readable default example before JavaScript.
4. Integrated-browser mode switching, 3D load/click→schematic/explanation synchronization, tour/pause/speed/labels, cameras/cutaway, calculators/waveforms, keyboard and phone sizes; reduced-motion and non-WebGL fallbacks checked where tooling permits.
5. Separate electrical, mechanical, education/accessibility and browser/performance reviews, with actual results and limitations recorded below/on page. Software/agent reviews are not qualified independent engineering approval.

## Validation results

### Electrical and educational reviews performed

Software-agent electrical review checked the shared steady-state model, independent operating-point recomputation, both mode power balances, different DC/DC output current, voltage references, assumptions, guards and the independent DAB equation. A separate read-only educational review checked beginner/engineering explanations, optional-stage distinction, conceptual plots versus actual calculations, sources and disclosures. Neither review was a qualified independent engineering peer review. Accessible primary documentation supports its stated scope; the three books are further reading based on checked metadata/contents only.

The reviews caught and corrected initially bypassed diagram reactors, unconnected/reversed diode branches, ambiguous DAB line crossovers, unequal amplitudes in referred DAB waveforms and missing first-use acronym definitions. Final diagrams use series reactors, joined diode branches, node dots and non-connecting crossover arches. The DAB traces have equal referred amplitudes; staircases and square waves use actual horizontal/vertical transitions. These checks establish the intended teaching topology, not electrical-transient fidelity.

### Mechanical/asset review performed

Blender 5.2.1 LTS successfully generated and reopened the editable scene: 2,587 named objects, 1,715 meshes, 545 editable curves and 80 switching-device packages. It is 12,375,879 bytes. After the final optimization pass removed redundant accessors, the browser overview is 607,200 bytes, 43,036 triangles and 114 draw primitives; the optional detail is 323,116 bytes, 27,732 triangles and 88 draw primitives. Combined GLBs are 930,316 bytes. These are asset totals; a rendered mode can show fewer triangles because incompatible paths/details are hidden, and teaching overlays add draw calls. No textures or external compression decoder are required.

Both final GLBs passed Khronos validation with zero errors, warnings or hints; informational unused-UV/retained-marker notices remain. Seven asset regressions inspect actual exported geometry and byte fingerprints, not only manifest assertions: conductor endpoints reach terminals, two rails remain separate, mode paths are exclusive, tower attachments/support separation and visible sag are coherent, six MMC arms have their cell/reactor connections, and DAB windings/ports remain isolated. The DAB model visibly has two primary and four secondary turns, consistent with its illustrative 0.5 turns ratio. A converted-curve parent-transform error was fixed before export; the final export no longer has long stray pipes to the origin. Original helpers and ten existing models were preserved.

The final source ZIP is 31,729 bytes and has seven whitelisted files. Packaged UTF-8 text is canonical LF, regardless of Windows source checkout line endings; exact-copy regressions compare ZIP entries, generated public copies and normalized originals. A directory-scoped Git attribute preserves LF only in generated public copies. This avoids a cross-platform CI failure without editing the original Blender helpers. Latest file fingerprints are in the manifest, not inferred from previous optimizer passes.

A separate release-hygiene review found a local home-folder path in the factory Blender workspace's saved file-browser metadata, not embedded private files. Every saved FILE_BROWSER directory is now neutralized to `//` before authoring save. The existing scene was reopened and resaved with this metadata-only change: its saved directory is exactly `//`, object/curve counts and byte length are unchanged, and binary regressions reject local home-path prefixes. No linked/packed private files, scripts or backup .blend1 files are published. The driver's documented `--refresh-metadata` mode updates fingerprints and the safe source bundle without modifying GLBs; both final browser-asset hashes remained byte-identical.

This is a visual plausibility and software-contract review. It is not rated clearance/insulation coordination, sag-tension calculation, finite-element analysis, wind/ice/seismic loading, foundation/soil assessment, cooling sizing or standards compliance.

### Frontend/accessibility review performed

Modern-web, frontend-design, React and web-interface guidance informed existing Atlas styling, semantic HTML, native keyboard controls, initial paused state, text/sign/dash legends, focus-visible outlines, at-least-44-pixel action targets and scrollable detailed diagrams. Small phase text contrast was strengthened; number fields have labels, names, decimal input hints and autocomplete disabled. The integrated-browser desktop and narrow-screen checks, automated regression results and measured rendering runs are recorded below. Reduced-motion and hidden/offscreen cleanup paths have source/structural regression checks; no OS-preference emulation, screen-reader study, complete WCAG certification or genuine GPU-failure test is claimed.

The 3D engine is activated on demand; detail is loaded only on cutaway. A source/SSR fallback preserves complete lesson text, schematic, sources and default worked values before activation. A visible unit glossary and first-use MMC/DAB definitions avoid requiring beginners to open details. Rendering measurements use actual animation-frame timestamps and CPU submission durations, not a time-domain electrical solver, Lighthouse or GPU timer.

### Browser operation and measured performance

Integrated-browser checks exercised actual equipment activation, 3D receiving-converter selection synchronized with the diagram/explanation, both architecture modes, static MMC/DAB cutaways, orbit/zoom/reset and equipment framing, automatic tour progression at 2× followed by pause/manual final-stage navigation, labels, reading-level changes, input guards and DAB phase-shift controls. Fresh production loads and scroll-away/return checks displayed the correct selected cutaway; an earlier dev hot-reload/resize observation was not treated as a proven persistent mount defect. Foreground render-on-demand and cleanup behavior additionally have structural regressions.

At 390×844 and 320×780 viewport overrides, the document had no horizontal overflow (client/scroll widths 375/375 and 305/305 respectively, excluding the scrollbar). Complete cutaways fit after camera transitions settle. Native Enter equipment selection, canvas arrow-key orbit/Home reset, a visible 3-pixel focus outline, keyboard sideways scrolling of a 620-pixel diagram inside a 268-pixel container, and slider End→45°→540.0 W were exercised. Final stage-specific A/B/C, + DC/− DC and PE labels were checked at 320 px and in the final production build at 390 px. Tags and callout leaders disappear with the label toggle; grey dashed annotation leaders are explicitly not electrical conductors. Automated projections additionally check label framing/non-overlap at three guided viewport sizes. These are viewport tests in a Windows browser, not physical touch-device or screen-reader tests.

Mode B with 600 MW, 400 kV and zero length displayed zero line loss, 11.880 MW DC/DC loss, 576.299 MW received and 96.05% efficiency. The invalid 1,000 MW/200 kV/1,200 km point showed a specific error and removed transmission results; restoring the example recovered them. A controlled localhost proxy returned HTTP 503 only for the first model request: semantic lessons and the calculator remained usable, 600 MW was retained, and native Retry successfully rendered the original scene. This tests an asset-loading failure, not genuine WebGL context loss or a disabled GPU. Its expected 503 is excluded from normal-flow console-error claims.

Measured on 1 October 2026 in the Codex integrated Chromium 154 browser, Windows 10 user-agent, device pixel ratio 1; no artificial network/CPU throttling. Production files came from localhost; fetch/parse timings do not represent public/mobile-network load times. The first three samples used the release candidate before final accessor pruning and signed callouts, with a concurrent prerender running. The fourth used the final clean production build, selected DC line and signed callouts, after build completion. GPU/CPU model, driver, thermal state and physical-device performance were not retrieved. Each run used the page's five-second foreground viewer measurement, not an external performance trace.

| Run | Rendered cadence | Frame interval median / p95 | CPU submission median / p95 | Peak calls / triangles | Canvas / buffer |
|---|---|---|---|---|---|
| Desktop standard overview, play 1×, labels on | 502 frames / 5.01 s, 100.1 frames/s | 10.00 / 10.10 ms | 0.70 / 1.00 ms | 118 / 40,414 | 809×478 / 809×478 |
| 390×844 standard overview, play 1×, labels on | 502 / 5.01 s, 100.0 frames/s | 10.00 / 10.20 ms | 0.60 / 0.90 ms | 118 / 40,414 | 328×358 / 328×358 |
| 390×844 static MMC cutaway, measurement requests redraws, labels on | 502 / 5.01 s, 100.0 frames/s | 10.00 / 10.10 ms | 0.60 / 0.80 ms | 62 / 23,476 | 328×358 / 328×358 |
| Final desktop standard overview, DC line selected, play 1×, signed labels on | 502 / 5.01 s, 100.0 frames/s | 10.00 / 10.10 ms | 0.90 / 1.50 ms | 121 / 40,414 | 809×478 / 809×478 |

Overview fetch+parse was 19 ms for desktop and 20 ms for portrait; detailed fetch+parse was 15 ms in the cutaway run. Reduced motion was off in these measured runs. The static cutaway ordinarily renders on demand; the measurement deliberately requests repeated redraws. These observations support this browser/scene configuration only. No GPU execution, Lighthouse score, Core Web Vitals, validated electrical simulation or universal frame-rate claim is made. Raw metrics and screenshots are kept in the ignored `artifacts/hvdc-2026-10-01/` folder.

### Automated verification and delivery

The clean production build and TypeScript check passed: 1,384 HTML documents, including the custom error page, and 1,383 public routes. The new route retains a unique self-canonical, sitemap entry, static sharing image, native hub discovery link and educational LearningResource/BreadcrumbList structured data with the nine actual primary source URLs. Inventory content, dated Dataset observations and the ten existing generation GLBs are unchanged; no new dependency, permission, database migration or search-engine submission is needed.

All 225 tests passed in the clean final production run. The 34 HVDC regressions cover nine numerical-model checks, eight electrical/page checks, seven geometry/asset checks, six viewer/actual-bounds camera/annotation checks and four accessible delivery checks. These are pure, source/SSR, geometry or generated-output regressions, not automated end-to-end browser assertions. The integrated-browser actions above are separate actual interaction checks. Full localhost HTTP verification passed: all 1,383 public pages, 63 exact sharing assets, 12 exact model assets, 235 genuine Dataset dates, 12 actual 404s, 51,483 source records and revision/metadata/cache/security checks. Added HTTP assertions also compare the Blender/source ZIP/manifest/instructions/report bytes against their release sources.

Initial validation caught a missing sharing-card treatment, missing route-specific JSON-LD, guessed historical model filenames and attribute-order-sensitive native-input assertions; all were corrected, preserving the original requirements. A standalone rerun of the prerender script mistakenly reused an already-rendered index as its template; the documented full `npm run build` regenerated the clean template and all route content, after which the full suite and HTTP checks passed. Do not rerun prerender against an already-prerendered `dist/index.html`; use the documented build command.

Reproduce software verification: `npm ci`, `npm run build`, `npm test`, `npm run preview`, and in another terminal `npm run verify:http`. Regenerate the original scene separately with `npm run models:hvdc`. `git diff --check` and scoped review are included in the release workflow. Publishing uses the existing GitHub/main → Vercel integration, not new deployment credentials. Live release observations are recorded separately in the repository's `VALIDATION.md`; a local pass alone is not a production-deployment claim.
