Skip to content

momwire

A method-of-moments antenna engine you can read — the solver behind the antennaknobs workbench, and a drop-in for the tools you already run. Every deck either serves or refuses by name.

antennaknobs is momwire’s largest consumer and the reason most of this engine exists: a design workbench where antennas are Python objects you optimize, sweep and plot, with momwire answering every solve underneath. Everything on this site runs when you drag a knob in its browser simulator.

momwire also stands behind the external-engine mechanisms of two tools — no new interface to learn, no files to convert. The host writes its deck, momwire answers in the host’s own printout format, and any deck asking for something it does not serve gets a sentence naming the card, the wire, or the missing capability. Nothing is ever served silently wrong.

What answers underneath is one engine with eight selectable formulations over six solver families — B-splines, sinusoids point-matched and tested variationally, and the razor-blade-tested tent basis of NEC-5’s own class — sharing one kernel, so any deck can be cross-checked across bases with one command. (A pulse basis is in the library too, as the primer’s Act I builds one, but it is not on the roster and no front end can select it.) On the models where we hold licensed references, the default engine agrees at the sub-percent level, and the in-house NEC-5 formulation twin rides the licensed engine’s own convergence path at the 0.01 % level. Where it disagrees or cannot answer, it says so by name: the refusal sentences are part of the product.

A voltage in a gap: you put 1 volt across a tiny gap in a wire — what current flows, and what does it radiate? A five-act method-of-moments primer keyed line-by-line to this engine. Most MoM explanations stop at the blackboard, and most MoM codebases never explain themselves; the primer does both at once — every chapter first builds the idea in ~20 lines of Python you can run, then shows the production version in momwire and explains exactly what the engineering added.

Act I — From a wire to a matrix

Why the answer is an integral equation, how a basis turns it into Z I = V, and what the delta-gap feed supplies. You leave with a dipole solver you wrote yourself. Start here →

Act II — Bases and accuracy

Sinusoids (NEC’s bet), B-splines and junctions, quadrature done honestly, and how you know any of it is right. Start here →

Act III — The ground

Mirror images, cheap real dirt via reflection coefficients, and paying full price with Sommerfeld integrals. Start here →

Act IV — Scale

N² is the enemy: batched frequency sweeps, ACA / H-matrices, arrays that know their own symmetry, and a compiled mirror of the Python spec. Start here →

Act V — Attribution

When two solvers disagree, which ingredient do you blame? Building the missing basis × testing cell turned disagreement into attribution. Start here →

  • The idea in 20 lines, the real thing in momwire. Naive runnable code first, production code second, and an honest account of the gap between them.
  • One antenna, all the way down. A half-wave dipole carries the first three acts; it graduates to a yagi and a bowtie array when the story needs scale.
  • Nothing typed from memory. Figures regenerate from scripts in the repo; source permalinks are pinned to a tag and checked at build time.