Skip to main content

Frequency-domain electromagnetic FEM solver in Rust, with a Python API and an optional local web UI.

Project description

RapidFEM

Frequency-domain electromagnetic FEM solver written in Rust, distributed as a Python package on PyPI. Second-kind Nedelec edge elements, complex-symmetric sparse linear algebra, optional Flask-based local UI with a code editor and live geometry viewer.

Install

pip install rapidfem            # solver only
pip install rapidfem[ui]        # solver + local UI

Wheels for Windows, Linux, and macOS are built via CI. The Rust core is compiled ahead of time — no Rust toolchain required on the user's machine.

Gmsh (Python wheel gmsh) is pulled in automatically as a dependency and provides the OpenCASCADE-based geometry + mesher used by rapidfem.Geometry.

Quick start (Python API)

import numpy as np
import rapidfem as rf

# Build geometry; attach materials + physics directly to entities
g = rf.Geometry(maxh=rf.lambda_maxh(f_max=12e9))
air = g.box(22.86e-3, 10.16e-3, 30e-3, position=(-11.43e-3, -5.08e-3, 0),
            material=rf.Air())

rf.RectWaveguidePort(air.faces.min(axis="z"))
rf.RectWaveguidePort(air.faces.max(axis="z"))
rf.PEC(*air.faces.unassigned)

g.mesh()

# Define the problem once, run any number of analyses on it
prob = rf.Problem(g)
result = prob.sweep(np.linspace(8e9, 12e9, 21))
print(result.frequencies.shape, result.sparams.shape)

# Same Problem can also drive an eigenmode solve or a far-field pattern:
# modes  = prob.eigenmode(target_frequency=10e9, n_modes=6)
# pattern = prob.farfield(result, freq_idx=10, port_idx=0)

See python_src/rapidfem/examples/ for end-to-end runs of microstrip lines, patch antennas (with PML enclosure + far-field), pyramidal horns, iris filters, dielectric resonators, and more.

Local UI

rapidfem serve ./my_project/

Opens a browser window with:

  • a CodeMirror Python editor on the left,
  • a 3D geometry / mesh / field viewer on the right (raw WebGL2, viridis colormap for scalar fields),
  • S-parameter plots in a separate tab,
  • a Generate Mesh button (gmsh) and a Run Simulation button (FEM sweep).

The geometry view updates automatically every time you save the file (Ctrl+S). Mesh and solver runs are explicit.

Use rapidfem.show(g) at the bottom of your script to send a geometry to the viewer.

Features

  • Nedelec-2 elements — 20 DOFs per tetrahedron, vector edge basis for the curl–curl form of Maxwell's equations
  • Excitations — rectangular waveguide ports (arbitrary TE modes), lumped ports (TEM, multi-line voltage integral), and absorbing boundary conditions of order 1 and 2 (selectable coefficient types A–E)
  • PML — anisotropic stretched-coordinate perfectly matched layer
  • Lossy materials — complex permittivity with loss tangent + conductivity; frequency-independent caching speeds up sweeps
  • Sparse solvers — pure-Rust faer LU as a no-dependency baseline; optional MKL PARDISO (complex-symmetric LDLᵀ) on Windows / Linux; Apple Accelerate Bunch-Kaufman on macOS (~3× faster than faer)
  • Frequency sweep — assembles E/B once, refactors only the frequency- dependent K per point, reuses the symbolic LU pattern
  • Eigenmode solver — shift-invert Lanczos on the complex-symmetric system
  • Adaptive refinement — residual error estimator (volume residual + face jumps) with Dörfler marking, exports a size field for gmsh re-meshing
  • Output — Touchstone (.s1p/.s2p/.snp), VTK field export, far-field NFFT
  • Parallel assembly — rayon-based element matrix evaluation

Solver backends

Solver Type Notes
faer General sparse LU Pure Rust, no native dependencies — always available
MKL PARDISO Complex-symmetric LDLᵀ Fastest path on Windows / Linux; opt-in, requires mkl_rt on PATH
Apple Accelerate Sparse Bunch-Kaufman LDLᵀ macOS only; ~3× faster than faer, no extra install (ships with macOS)

Choose at simulation time with the RAPIDFEM_SOLVER environment variable ("auto", "pardiso", "accelerate", "faer") — set before import rapidfem. The default "auto" tries PARDISO → Accelerate → faer in that order, picking the first one that loads.

Installing MKL (optional)

  • conda: conda install mkl
  • pip: pip install mkl
  • Intel oneAPI: download

Ensure mkl_rt.dll (or mkl_rt.2.dll) is on the system PATH.

Performance

WR-90 iris waveguide driven sweep, 10 GHz, 2-port:

Mesh DOFs PARDISO faer
693 tets 5 512 0.14 s 0.22 s
1 096 tets 8 382 0.06 s 0.45 s
2 595 tets 19 196 0.17 s 1.39 s
3 284 tets 23 968 0.21 s 1.98 s

Larger problems:

  • 327 k DOFs driven sweep (PARDISO): ~5 s per frequency
  • 905 k DOFs eigenmode (3-turn spiral, shift-invert Lanczos): ~54 s

Verification

Element-level functions (curl–curl integrals, Robin BC, second-order ABC, mode-power normalization, surface integrals) are checked to machine precision (1e-12 – 1e-16) by cargo test --release.

End-to-end S-parameter accuracy is tracked in tests/validation/ against analytical solutions and external reference solvers.

cargo test --release

License

GNU Affero General Public License v3.0 or later. If you run a modified version of rapidfem as a network service (e.g. SaaS), the AGPL requires that you make the modified source available to the users of that service. For commercial use under different terms, get in touch.

Project details


Download files

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

Source Distribution

rapidfem-0.7.1.tar.gz (69.6 MB view details)

Uploaded Source

Built Distributions

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

rapidfem-0.7.1-cp310-abi3-win_amd64.whl (65.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

rapidfem-0.7.1-cp310-abi3-manylinux_2_39_x86_64.whl (65.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.39+ x86-64

rapidfem-0.7.1-cp310-abi3-macosx_11_0_arm64.whl (65.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file rapidfem-0.7.1.tar.gz.

File metadata

  • Download URL: rapidfem-0.7.1.tar.gz
  • Upload date:
  • Size: 69.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rapidfem-0.7.1.tar.gz
Algorithm Hash digest
SHA256 a4381e272fededc93fa23f246c3e599b4fbb2b6418d39c9cb894e61f94804e49
MD5 2c4e4569ec41905147f68eeec37a464b
BLAKE2b-256 117c572ffb7feff5ed86500be4dded912d19e90292e2cc806a5db2e532fd8263

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidfem-0.7.1.tar.gz:

Publisher: wheels.yml on milanofthe/rapidfem

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

File details

Details for the file rapidfem-0.7.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rapidfem-0.7.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 65.5 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rapidfem-0.7.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 15649b49483e1e4120126754b8d40df54873f477e8f2857588ad7bb779dfc81e
MD5 7943e5d8b73a96a4ef7d89c5dee0cb87
BLAKE2b-256 233b19df3c23e95911cd2529b9a13c49283933a37317a5437e9ce0d51268094b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidfem-0.7.1-cp310-abi3-win_amd64.whl:

Publisher: wheels.yml on milanofthe/rapidfem

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

File details

Details for the file rapidfem-0.7.1-cp310-abi3-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rapidfem-0.7.1-cp310-abi3-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 99c23e0dcc20f43329d596c392da4e36056d0a61fae71fad877a87847fbb882f
MD5 a44e0269810145cbfd8dfd89fdef356b
BLAKE2b-256 50d6acf2922e0d0622ee4adef43729861ef5849124e15091d9a7e661b48f49ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidfem-0.7.1-cp310-abi3-manylinux_2_39_x86_64.whl:

Publisher: wheels.yml on milanofthe/rapidfem

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

File details

Details for the file rapidfem-0.7.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapidfem-0.7.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2322d39e724efa24bed64407c46c29dbbb8e0e0623f4c5289b41c9395b43e550
MD5 d3e8ff7d042f9549050158a1a534aaf3
BLAKE2b-256 30ceefa5dd7534ed1f705103a7de657c1f284ce32d3a45fc6d71a5581d406ea0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rapidfem-0.7.1-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: wheels.yml on milanofthe/rapidfem

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page