Skip to content

v1.4.0 — results correctness, a material library, and ITU-R reachable

Choose a tag to compare

@king-aj3 king-aj3 released this 22 Aug 12:26
· 40 commits to master since this release

Read this first — results correctness

Four defects were found together and fixed. Every one of them made numbers optimistic. If you have quoted an EMStudio figure anywhere, check it against this list.

openEMS reported DIRECTIVITY as GAIN. The pattern column headed gain_dbi was built from openEMS's Dmax, and the results layer documented that column as gain. They are equal only for a lossless antenna, and EMStudio emits lossy dielectrics — so the figure overstated gain by the radiation efficiency.

Measured on the shipped 2.4 GHz patch template: directivity 6.6350 dBi, radiation efficiency 96.24 %, true gain 6.4686 dBi. The published number was 0.166 dB high. Gain is now D x eta, with eta = P_radiated / P_accepted — both were already produced by the run and nothing read them. Directivity, efficiency and the power budget are now reported alongside the pattern.

NEC2 silently discarded "Conductor" geometry. The wire builder skipped every material category that did not begin with "Metal", so choosing Conductor and entering a conductivity produced a deck with no wires from that material at all — not a lossless answer, an absent structure, reported as a result.

NEC2 reported 100.00 % efficiency for every antenna, because no LD card was ever emitted. Finite-conductivity materials now emit LD 5, so ohmic loss is real. This matters most where it is largest: small loops and short verticals can sit tens of dB below their lossless directivity.

openEMS discarded the conductivity you typed, folding Conductor into AddMetal (PEC). It now emits AddConductingSheet.

PEC-only models are unaffected. A perfect conductor emits no LD card and no conducting sheet, so decks are byte-identical and every previous PEC result stands. Confirmed by the dipole, monopole, LPDA and array gates passing unchanged.

All four are pinned by tests/validation/material_loss.py, which runs in the fast battery with no solver and no FreeCAD required.

Added

A named material library, 31 entries, in the spirit of CST/HFSS/FEKO — pick a material by name and its properties and category come with it. Copper, silver, gold, aluminium, brass, bronze, zinc, tin, solder, tungsten, titanium, nickel, mild steel, stainless 304, graphite, seawater; PTFE, PE, PS, RT/duroid 5880, RO4003C, FR-4, polycarbonate, ABS, nylon, glass, alumina. Conductors carry conductivity, temperature coefficient and relative permeability, with ferromagnetics flagged because a high mu_r collapses skin depth.

Perfect conductor (PEC) leads the list and remains the default for an unspecified material — an idealised lossless metal is a legitimate and often correct modelling choice, not a placeholder.

Library values are nominal at 20 C. FR-4 is a class of laminates rather than a material; for anything you will build, use the vendor's number and Custom.

ITU-R P.452-18 and P.2001-6 are reachable from the GUI for the first time. Both engines shipped validated — 595 and 4,430 official ITU validation cases replayed, worst basic-transmission-loss deviation 5.0e-09 dB and 1.2e-12 dB — but nothing in the product could call them. Point-to-Point Link Budget now offers both, with time percentage, terminal coordinates and a radio-zone picker that maps to each Recommendation's own (different) zone numbering.

Four new tutorials: LPDA over NEC2, LF/MF ground-wave coverage, P.452 and P.2001.

Fixed — macOS

A keg-only Homebrew library read as "provably missing", blocking guided source builds behind prerequisites already installed. _lib_present() globbed only <prefix>/lib; Homebrew keeps openblas and lapack keg-only under <prefix>/opt/<name>/lib. Verified on an arm64 host.

Verified

Pro battery 45/0, free battery 36/0, smoke under python and freecadcmd, offscreen gui_smoke, export drift 0.