Software — mbems

EM Solver

Full-wave field solving, gated on whether the mesh deserves trust.

In development mbems — command line and desktop app

What it does

3-D FDTD solving of a PCB structure on an openEMS backend — trace impedance, effective permittivity and S-parameters against the closed form, with Touchstone export. Every solve is gated on a mesh quality check and states a convergence verdict.

  • Microstrip and trace structures on a real board stackup
  • S-parameters and Touchstone (.s1p/.s2p) export
  • Line impedance and effective permittivity, checked against the closed form
  • Mesh gate — cells per wavelength, grading, thirds rule, boundary and PML clearance
  • Runtime and memory estimate before the solve starts
Before it solves anything it checks the mesh, because - as the note under the heading says - openEMS returns a confident wrong answer on a bad one. Sixteen checks, each with the number it measured, the threshold it had to clear and where the worst case was: cells per wavelength on all three axes, how abruptly the cell size is allowed to change, the thirds rule at the metal edges, how far the structure sits from each boundary, and whether anything intrudes into the absorber. The banner at the top only says VALID once the gate has passed, the run has converged, and the answer agrees with the closed form.
Before it solves anything it checks the mesh, because - as the note under the heading says - openEMS returns a confident wrong answer on a bad one. Sixteen checks, each with the number it measured, the threshold it had to clear and where the worst case was: cells per wavelength on all three axes, how abruptly the cell size is allowed to change, the thirds rule at the metal edges, how far the structure sits from each boundary, and whether anything intrudes into the absorber. The banner at the top only says VALID once the gate has passed, the run has converged, and the answer agrees with the closed form.
The model it actually solved, and what it admits to. The hashes are how a stale solve is caught - change the geometry and the result no longer matches the board. The runtime row is candid about its own estimate: 25 seconds to 3 and a half minutes predicted, 6 minutes 39 actually taken. And then 'What was simplified away' - copper as a zero-thickness sheet with no conductor loss, the ground plane infinite, the FR-4 loss fitted at one frequency, the dielectric constant a fabricator's nominal rather than a measurement. The S-parameters underneath mean what they mean given that list. The name of the machine the runtime was calibrated on is blurred; nothing else in the picture is.
The model it actually solved, and what it admits to. The hashes are how a stale solve is caught - change the geometry and the result no longer matches the board. The runtime row is candid about its own estimate: 25 seconds to 3 and a half minutes predicted, 6 minutes 39 actually taken. And then 'What was simplified away' - copper as a zero-thickness sheet with no conductor loss, the ground plane infinite, the FR-4 loss fitted at one frequency, the dielectric constant a fabricator's nominal rather than a measurement. The S-parameters underneath mean what they mean given that list. The name of the machine the runtime was calibrated on is blurred; nothing else in the picture is.

Worth knowingopenEMS stops on a wall-clock interval, so two runs of the same model can end at slightly different points and give slightly different numbers. That is the solver's behaviour, not a bug here, but it is worth knowing before you quote a figure to four decimal places.

On video

One recording of it actually running.

A screenshot of a program that moves is only half of it, so here it is moving. A command line too. Recorded off the screen; the one line naming the machine that timed the earlier runs is blurred, and nothing else is altered. Nothing plays until you press it.

24 s Before it solves anything it checks the mesh, because openEMS returns a confident wrong answer on a bad one. Sixteen checks on a microstrip through-line, each with the number it measured: cells per wavelength on all three axes, how abruptly the cell size may change, the thirds rule at the metal edges, how far the structure sits from each boundary, whether anything intrudes into the absorber. Then the cost, before committing to it - 185 976 cells, a 0.134 ps timestep, about 48 MB, and 25 seconds to 16 minutes of runtime with 5 m 54 s the likely figure, estimated from runs it has actually timed.

Get in touch

EM Solver is still being built, so there is nothing to install yet. Tell me what you would need it to do - what it becomes is shaped partly by the answers to this.

Or email mblab.technology@gmail.com. Your details are used to answer you and to follow up — nothing else.

Requirements

  • Windows 10 or 11, 64-bit
  • About 200 MB of disk
  • No .NET install needed — the runtime is bundled
  • No Excel needed — workbooks are written directly

Also in the set