{"slug": "hertzon-open-source-3d-full-wave-fem-solver", "title": "Hertzon: Open-Source 3D Full-Wave FEM Solver", "summary": "Hertzon, an independent open-source 3D full-wave electromagnetic simulator, has been released with installers for Windows and Linux, built on Robert Fennis's GPL-licensed EMerge finite-element solver (2nd-order Nédélec FEM with gmsh/OpenCASCADE geometry). Hertzon adds a Qt + VTK desktop workflow with adaptive meshing, frequency sweeps, S-parameter, field and radiation-pattern post-processing, plus an MCP server that lets AI assistants such as Claude Code, Codex and VS Code build and run simulations. The project warns it is under active development and may still contain bugs, asking users to verify important results independently and report problems as GitHub issues.", "body_md": "**Hertzon is under active development. It can still contain bugs, which are being fixed step by step.\nPlease verify important results independently and report problems as GitHub issues.**\n\n⚠️ \n\nAn open-source 3D full-wave electromagnetic simulator with a **classic engineering workflow**:\ndraw the model, assign boundaries and excitations, add an analysis setup with\n**adaptive meshing**, add frequency sweeps, analyze, then look at S-parameters, fields\nand radiation patterns. The finite-element solver underneath is\n[EMerge](https://github.com/FennisRobert/EMerge) (2nd-order Nédélec FEM, gmsh/OpenCASCADE geometry).\n\n📘 **New to Hertzon? Start with the [step-by-step tutorial](https://github.com/c8501024/Hertzon/blob/main/docs/TUTORIAL.md):** a waveguide with wave\nports, a coaxial cable, a half-wave dipole and the RCS of a sphere, each from the empty window to the\nresult, plus how to let an AI assistant (Claude Code, Codex, VS Code) build and run simulations for you\nthrough Hertzon's **MCP server**.\n\n**Built on EMerge.** The finite-element core of Hertzon (Nédélec formulation, element matrices, ports,\nboundary conditions, solver interface) is [EMerge](https://github.com/FennisRobert/EMerge), the open-source\nFEM solver developed by **Robert Fennis**. Many thanks to Robert Fennis for making\nEMerge available under the GPL. Hertzon adds the graphical workflow and its own solver extensions on top:\nthe hzmesh mesher, adaptive refinement (local Delaunay, bisection, Mmg), a fast error estimator, faster\nassembly kernels, curved elements, far-field and RCS post-processing, and fixes for large models.\n\nHertzon is a desktop application (Qt + VTK) built for responsiveness with large models: geometry is tessellated incrementally per object, the solver runs in its own process, and results are streamed back into the GUI while it keeps working.\n\nHertzon is an independent open-source project. It is not affiliated with any vendor of commercial simulation software.\n\nDownload the installers from the [Releases page](https://github.com/c8501024/Hertzon/releases/latest).\n\n**Windows installer:** run **`Hertzon-Setup-<version>.exe`**. It installs Hertzon for your user\n(no administrator rights) into `%LOCALAPPDATA%\\Programs\\Hertzon`, adds it to the start menu, the\ndesktop and Settings > Apps (uninstall there), opens `.hzn` projects with Hertzon and sets up the\nPython environment (about 1 GB download) before it finishes.\n\n**Linux:** unpack `Hertzon-<version>-linux.tar.gz` and run `./install.sh`. It installs for your user\ninto `~/.local/share/hertzon`, adds Hertzon to the application menu, the command `hertzon` and the\n`.hzn` file type. Run `install.sh` of a newer package to update, `~/.local/share/hertzon/uninstall.sh`\nto remove it.\n\nBoth are built with `packaging/build_installer.sh` (needs NSIS for the Windows installer); GitHub Actions\nbuilds them and publishes a release for every version (`.github/workflows/release.yml`).\n\n**Windows, without installing:** unzip and double-click **`Hertzon.exe`**. On the first start it installs\neverything it needs into a `.venv` folder next to it (Python 3.13 via winget if missing, then\nEMerge, Qt and VTK, about 1 GB) and compiles the solver with a small test solve, then opens\nHertzon. Later starts open Hertzon directly, and the first simulation runs at full speed.\nYou can drag a `.hzn` file onto `Hertzon.exe` to open it. To reinstall, delete `.venv`.\n\n**Manually (any OS),** Python 3.10 or newer:\n\n```\npython -m venv .venv && source .venv/bin/activate      # Windows: .\\setup.ps1 then .\\run.ps1\npip install -e .                                        # installs emerge, PySide6, pyvista, pyvistaqt ...\npython -m hertzon examples/WaveguidePost.hzn             # or just: hertzon\n```\n\nThe first solve compiles EMerge's numba kernels, which takes a few minutes once; later solves start\nimmediately. On Linux without a desktop, run under `xvfb-run`.\n\n1. **Project > Insert Design** , then**Simulation > Solution Type** : Modal, Terminal or Eigenmode,\nwith**Auto Open** (radiation or PML chosen automatically) or**Auto Open - Filter** (air box with fixed margin and a radiation boundary, for filters and other closed-ish circuits).\n2. **Draw** boxes, cylinders, spheres, cones, tori, polyhedra, rectangles, circles, ellipses,\npolygons, polylines, region. Click on the grid (snaps to grid and vertices) or type coordinates\nin the status bar; every parameter accepts expressions with**variables** and units.**Modeler > Boolean** unite / subtract / intersect / split, arrange, duplicate, thicken, sweep, import STEP.\n3. Select faces (**F** ) or objects (**O** ) and assign**Boundaries** (Perfect E/H, Finite\nConductivity, Impedance, Lumped RLC, Radiation, PML, Symmetry) and**Excitations** (Wave Port,\nLumped Port, Floquet Port).\n4. **Analysis > Add Solution Setup** : solution frequency (single / multi / broadband), maximum\npasses, maximum Delta S, matrix convergence, minimum (converged) passes, percent refinement,\nmaximum refinement, lambda refinement, solver choice.**Add Frequency Sweep** : discrete or\ninterpolating, linear step / count / log / single points.\n5. **Validation Check** , then**Analyze All** (F5). The progress window shows each adaptive pass;**Solution Data** shows the convergence table and plot, matrix data and mesh statistics.\n6. **Results** : rectangular plots, Smith chart, data table, radiation pattern, 3D polar plot;**Fields** : magnitude, complex magnitude and vector plots of E, H and surface current on faces,\nobjects or cut planes, with phase animation. Export Touchstone, CSV, images.\n\nSee [docs/FEATURE_MATRIX.md](https://github.com/c8501024/Hertzon/blob/main/docs/FEATURE_MATRIX.md) for an overview of what is implemented and\nwhat is still missing.\n\nSee [docs/MESHER.md](https://github.com/c8501024/Hertzon/blob/main/docs/MESHER.md) for how the adaptive mesh refinement works: hzmesh, the local\nDelaunay mesher, curved elements and benchmark results.\n\n| File | What it shows | \n|---|---|\n| `examples/WaveguidePost.hzn` | WR-90 waveguide with an inductive PEC post, wave ports, interpolating sweep 8-12 GHz | \n| `examples/Microstrip.hzn` | 50 Ω microstrip on FR4, lumped ports, thin-conductor trace, **Auto Open - Filter** , sweep 1-6 GHz | \n| `examples/PatchAntenna.hzn` | 2.45 GHz inset-fed patch on FR4, **Auto Open** (radiation boundary), far field, gain pattern | \n| `examples/HairpinFilter.hzn` | Third-order hairpin band-pass filter at 2.45 GHz on RO4350B, copper losses, sweep 2-2.9 GHz and an optimization | \n| `examples/GPS_L1_RHCP.hzn` | 1.575 GHz GPS L1 ceramic patch (εr 20) with probe feed and stub on a feed board, circular polarization (RHCP) far field | \n| `examples/RotmanLens_24GHz.hzn` | 24 GHz Rotman lens beamformer on RO4350B in three designs: the lens with beam, array and dummy ports, the single array patch, and lens plus patch array with beam far fields | \n| `examples/PlaneWave.hzn` | Incident plane wave on a PEC sphere in a radiation box, and the same plane wave in an empty box | \n| `examples/NATO-Sphere.hzn` | RCS of a PEC sphere (radius 250 mm) at 1 GHz, plane wave, PML, curved second-order elements | \n| `examples/DroneRCS.hzn` | RCS of an imported drone STL model ( `Delta_Composites_Demo_3_Layers/` ) at 1 GHz, plane wave | \n| `examples/Coax.hzn` | 20 mm, 50 Ω PTFE coax with TEM wave ports, sweep 1-10 GHz ( [tutorial](https://github.com/c8501024/Hertzon/blob/main/docs/TUTORIAL.md#2-coaxial-cable-with-wave-ports) ) | \n| `examples/Dipole.hzn` | Half-wave dipole for 1 GHz with a lumped port, **Auto Open** , far field and gain ([tutorial](https://github.com/c8501024/Hertzon/blob/main/docs/TUTORIAL.md#3-half-wave-dipole) ) | \n| `examples/SphereRCS.hzn` | RCS of a 100 mm PEC sphere at 1 GHz, plane wave, PML, checked against the Mie series ( [tutorial](https://github.com/c8501024/Hertzon/blob/main/docs/TUTORIAL.md#4-radar-cross-section-of-a-sphere) ) | \n\n`examples/benchmark/` holds the validation and timing cases (patch antenna, waveguide post against a reference,\nsphere RCS against the Mie series, scaling from small to large models) with their scripts.\nThe first four examples are regenerated with `python examples/make_examples.py`.\n\n- **File > Export EMerge Python Script** writes a stand-alone script that rebuilds the same EMerge\nmodel (geometry, materials, boundaries, ports, initial mesh) and runs the setup, or stops after\nmeshing with`--prepare-only` so you can continue in plain EMerge.\n- Solve without the GUI: `python -m hertzon.solver.run Project.hzn DesignName Setup1 out_folder` .\n- Project files (`.hzn` ) are plain JSON; results go to`<project>.hznresults/<design>/<setup>/` (`sparams_*.npz` , Touchstone`*.sNp` ,`fields_*.npz` ,`farfield_*.npz` ,`convergence.json` ).\n\nThe [tutorial](https://github.com/c8501024/Hertzon/blob/main/docs/TUTORIAL.md#5-let-an-ai-assistant-build-and-run-it-mcp) shows the setup and example prompts.\n\nHertzon ships an MCP server, so Claude Code, Codex or VS Code (Copilot agent mode) can build and run simulations: \"build a 2.45 GHz patch on FR4 with a lumped port, solve it and give me S11 and the gain\".\n\n1. **Tools > AI Assistants (MCP)...** : press*Register* next to your assistant (Claude Code gets an\nentry in`~/.claude.json` , the Claude desktop app in`claude_desktop_config.json` , Codex in`~/.codex/config.toml` , VS Code in its user`mcp.json` ).\nWithout the GUI:`python -m hertzon.mcp --install claude` (or`desktop` ,`codex` ,`vscode` ,`all` );`python -m hertzon.mcp --config` prints the settings for other clients.\n2. Tick **Let AI assistants work in this window** . This also registers Hertzon with every installed\nClaude Code, Claude desktop app and Codex that does not list it yet. Changes then appear in the open window at once\n(Ctrl+Z undoes them) and analyses run in its solve queue. Without the live link the assistant works\non the`.hzn` files and runs the solver in the background.\n3. Start a new session of the assistant and ask for a simulation.\n\nThe server offers tools to create projects, set variables and design settings, draw and import geometry, list faces (index, centre, normal), assign boundaries, ports and mesh operations, define setups, sweeps and far-field spheres, validate, run, follow the adaptive passes, read S-parameters, gain or RCS, and render a picture of the model.\n\nThe Python package keeps its short name `hertzon`, and projects keep the `.hzn` extension.\n\n```\nhertzon/model    data model, expressions with units, materials, property schema, validation\nhertzon/kernel   OpenCASCADE (gmsh) geometry builder and display tessellation\nhertzon/solver   EMerge bridge: auto open, boundary mapping, adaptive passes, sweeps, far field\nhertzon/gui      main window, 3D modeler, project tree, property grids, reports, field overlays\nhertzon/mcp      MCP server for AI assistants, live link to the window, client registration\npip install pytest && python -m pytest tests\n```\n\nIf you use Hertzon in a publication, please cite it. GitHub shows a ready-made reference under\n**Cite this repository** on the repository page (from `CITATION.cff`), as APA or BibTeX. Every release\nis archived on Zenodo with its own DOI; the badge at the top links to the latest one. Please also cite\n[EMerge](https://github.com/FennisRobert/EMerge) by Robert Fennis, the solver Hertzon is\nbuilt on: DOI [10.5281/zenodo.17025518](https://doi.org/10.5281/zenodo.17025518).\n\nGPL-2.0-or-later, the same as EMerge, which Hertzon links against.\nAll Python packages Hertzon uses and their licences are listed in [docs/THIRD_PARTY.md](https://github.com/c8501024/Hertzon/blob/main/docs/THIRD_PARTY.md).\n\nHertzon is provided \"as is\", without any warranty and without liability for damages, as set out in sections 11 and 12 of the GPL. Simulation results can be wrong. Check them yourself (measurements, analytical estimates or a second tool) before you rely on them for a design, a product or a decision.", "url": "https://wpnews.pro/news/hertzon-open-source-3d-full-wave-fem-solver", "canonical_source": "https://github.com/c8501024/Hertzon", "published_at": "2026-10-21 17:32:40+00:00", "updated_at": "2026-10-21 17:42:13.599181+00:00", "lang": "en", "topics": ["developer-tools", "agent-protocols", "ai-tools"], "entities": ["Hertzon", "EMerge", "Robert Fennis", "Claude Code", "Codex", "VS Code", "GitHub", "Qt"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/hertzon-open-source-3d-full-wave-fem-solver", "markdown": "https://wpnews.pro/news/hertzon-open-source-3d-full-wave-fem-solver.md", "text": "https://wpnews.pro/news/hertzon-open-source-3d-full-wave-fem-solver.txt", "jsonld": "https://wpnews.pro/news/hertzon-open-source-3d-full-wave-fem-solver.jsonld"}}