Skip to main content

Magnelio

CI License: LGPL v3

Magnelio is a Python library for full-wave 3D electromagnetic field simulation. Its standard workflow is broadband S-parameter extraction over waveguide ports on arbitrary 3D geometry; the workhorse solver is a time-domain Finite Integration Technique (FIT-TD) engine.

Electric field vectors in a two-pole dielectric resonator filter: two ceramic pucks stand in a metal housing, separated by a wall with a coupling window, with a probe pin at each end

Performance is a design goal, not an afterthought: no field update ever loops over cells in Python. The time-stepping kernels are fused and fully vectorised on three tiers — custom CUDA kernels on the GPU, Numba-compiled multi-threaded kernels on the CPU, and pure array stencils as the portable fallback — so a step runs at compiled-C speed, and models with hundreds of geometric primitives and correspondingly large grids stay tractable.

Features

  • FIT time-domain leapfrog solver on a structured non-uniform hexahedral grid, with conformal (sub-cell) material matrices
  • NumPy (CPU) and CuPy (CUDA GPU) backends — backend="auto" uses the GPU when available, with CUDA-graph stepping
  • Waveguide ports with exact discrete transparent boundaries (DTBC): TEM / QTEM / TE / TM / hybrid modes, multi-mode, declared on the model before meshing; lumped (RLC-backed) ports
  • Boundary conditions: PEC, PMC, CPML, periodic, and symmetry planes — declared once on the model, carried by the mesh
  • Materials: isotropic and diagonal-anisotropic, pole-residue dispersion for ε(ω)/μ(ω) with built-in vector fitting, conductor losses (perturbative or SIBC wall model), surface roughness (Hammerstad, Huray)
  • Geometry: CSG primitives + Boolean operators (a - b, a + b, a & b), chainable transforms, and profile-based construction (loft, sweep, revolve, shell) via pythonocc-core
  • Circuit elements embedded in the field solution: thin wires and lumped RLC networks
  • Field monitors (time/frequency domain, flux, wall loss), plane-wave source (TF/SF), 3D eigenmode solver
  • Antennas: near-to-far-field transform recorded on a Huygens box the monitor places by itself, with image theory for ground planes and symmetry planes — directivity, gain, realized gain, radiated power and efficiency, drawn as polar cuts or a 3D pattern surface
  • Project store on disk: streamed results, bit-exact resume, post-processing on the stored data (HDF5 + ParaView/XDMF); every run generates a ready-to-open ParaView session (coloured per-solid geometry, slice planes, normalised field glyphs)
  • Interop: Touchstone (.sNp) export and scikit-rf adapter

Installation

Due to the dependency on pythonocc-core (Python bindings to OpenCASCADE Technology), installation uses conda-forge; the most convenient way is miniforge3.

In the magnelio directory, run:

mamba env create -f environment.yml
mamba activate mio
pip install -e .

A conda-forge package is planned as the primary channel, plus a pip-only PyPI package covering everything except the CAD geometry stack (the geo primitives and Boolean operators need pythonocc-core, which exists only on conda-forge).

Quick Start

S-parameters of a WR-90 rectangular waveguide section:

import magnelio as mio
from magnelio import geo, ports

a, b, L = 22.86e-3, 10.16e-3, 40.0e-3   # WR-90 cross-section, length
f_max = 25.0e9

air = mio.Material.air()
model = mio.GeometryModel(background=air)   # walls: PEC by default
model.add(geo.Brick(origin=(0, 0, 0), size=(a, b, L), material=air))
model.add_port(ports.PortWaveguide(name="port1", plane="zmin", n_modes=3))
model.add_port(ports.PortWaveguide(name="port2", plane="zmax", n_modes=3))

mesh = mio.Mesh.from_geometry(
    model, mio.MeshControl(min_nodes_per_wavelength=15), f_max=f_max,
)

analysis = mio.AnalysisScatteringTD(mesh=mesh, f_max=f_max)
print(analysis.solve_ports()["port1"])   # mode table before the run

result = analysis.run(
    excited=[(p, m) for p in ("port1", "port2") for m in range(3)],
)
result.plot_s(("port2", "port1"), ("port1", "port1"))   # |S| over frequency
s21 = result.S("port2", "port1")         # complex S21 on result.f_axis
result.to_touchstone("wr90.s6p")         # 6 channels = 2 ports × 3 modes

Fourteen executable tutorials — from a first parallel-plate line to a dielectric-resonator filter — live in examples/tutorials/; they are the source of the documentation's tutorial series.

Documentation

docs/ holds the Sphinx documentation: the tutorial series, an API reference for the public surface (the core namespace and the domain namespaces, generated from the docstrings) and the technical method chapters — every numerical method with its literature source. Build it locally with:

pip install -e .[docs]
sphinx-build -b html docs docs/_build/html

Development

Magnelio is being built in an AI-assisted workflow ("vibe coding"): the code is written in collaboration with LLM coding agents, with method selection, validation targets and reviews set by the author. Every numerical method is anchored to published literature in the documentation's method chapters, and the test and validation suite — not the authoring process — is the arbiter of correctness.

License

Magnelio is free software, released under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later) — see COPYING and COPYING.LESSER. You may use it from proprietary code; changes to magnelio itself must be published under the same license when distributed.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

magnelio-0.3.0.tar.gz (2.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

magnelio-0.3.0-py3-none-any.whl (752.9 kB view details)

Uploaded Python 3

File details

Details for the file magnelio-0.3.0.tar.gz.

File metadata

  • Download URL: magnelio-0.3.0.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for magnelio-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8b3c65d8418eb176031d02f3eeccde4ba4fc99ec3aaa946cfca9d5f76c825dac
MD5 87e2255062200e6db511be55bb7d3e48
BLAKE2b-256 748dca22b2f88376ce98a500f84e9c15011f830485ce2b436befad8c7a07aec6

See more details on using hashes here.

Provenance

The following attestation bundles were made for magnelio-0.3.0.tar.gz:

Publisher: release.yml on brtkrtz/magnelio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file magnelio-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: magnelio-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 752.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for magnelio-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24d3f9b152ccc544cf155c440708feb3c59d90f6ffcdf589dc0f4b7c6d62941d
MD5 bb62f8cda4bf5f8d8990ece6e166e949
BLAKE2b-256 df6abecef6bb7d2a3e3599f72f95a3eb0a84cc4ba72c9d63493b57001a4bc2e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for magnelio-0.3.0-py3-none-any.whl:

Publisher: release.yml on brtkrtz/magnelio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page