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
# Build geometry with named, tracked entities
g = rapidfem.Geometry()
sub = g.box(60e-3, 60e-3, 1.6e-3, position=(-30e-3, -30e-3, 0))
patch = g.xy_plate(38e-3, 29e-3, position=(-19e-3, -14.5e-3, 1.6e-3))
g.fragment(sub, patch)
sub.faces.min(axis="z").name = "ground"
patch.name = "patch_pec"
sub.material = "fr4"
# Mesh + simulate
mesh_bytes, name_to_tag = g.mesh(maxh=5e-3)
sim = (
rapidfem.SimulationBuilder()
.mesh(mesh_bytes, name_to_tag)
.frequencies(np.linspace(2.3e9, 2.5e9, 21))
.pec("ground", "patch_pec")
.lumped_port("feed", direction=(0, 0, 1), z0=50.0)
.material("fr4", er=4.4)
.material("air", er=1.0)
.build()
)
result = sim.run_sweep()
print(result.frequencies.shape, result.sparams.shape)
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 Meshbutton (gmsh) and aRun Simulationbutton (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
faerLU as the default in the PyPI wheel; optional MKL PARDISO (complex-symmetric LDLᵀ) for the fastest path - 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 — the default in the PyPI wheel |
| MKL PARDISO | Complex-symmetric LDLᵀ | Fastest path; opt-in, requires mkl_rt on PATH |
Choose at simulation time via the builder or with the RAPIDFEM_SOLVER
environment variable.
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rapidfem-0.3.0.tar.gz.
File metadata
- Download URL: rapidfem-0.3.0.tar.gz
- Upload date:
- Size: 20.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc597e9bdc8e156c3414b75807f61e23e3055818d7cda61b247a14340d868605
|
|
| MD5 |
373e1522ce4e112fe61e656d98eed642
|
|
| BLAKE2b-256 |
7ed1644a226057282ed28cc0dec3a63fdc6e29abf9dea3c0ad72c83d822a4d40
|
Provenance
The following attestation bundles were made for rapidfem-0.3.0.tar.gz:
Publisher:
wheels.yml on milanofthe/rapidfem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapidfem-0.3.0.tar.gz -
Subject digest:
bc597e9bdc8e156c3414b75807f61e23e3055818d7cda61b247a14340d868605 - Sigstore transparency entry: 1519307349
- Sigstore integration time:
-
Permalink:
milanofthe/rapidfem@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/milanofthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Trigger Event:
release
-
Statement type:
File details
Details for the file rapidfem-0.3.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: rapidfem-0.3.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 15.9 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32a4ce58637cb26affd008ae73e96ebf38e6ad1160cca1d8e11b235310b4819b
|
|
| MD5 |
f0f93a7be28b1d23b1037ae623fb8c04
|
|
| BLAKE2b-256 |
ea2637961a110e9504bcfb293db97273c7212aae4ba9c7fcfd1cb7b72682703d
|
Provenance
The following attestation bundles were made for rapidfem-0.3.0-cp310-abi3-win_amd64.whl:
Publisher:
wheels.yml on milanofthe/rapidfem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapidfem-0.3.0-cp310-abi3-win_amd64.whl -
Subject digest:
32a4ce58637cb26affd008ae73e96ebf38e6ad1160cca1d8e11b235310b4819b - Sigstore transparency entry: 1519307477
- Sigstore integration time:
-
Permalink:
milanofthe/rapidfem@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/milanofthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Trigger Event:
release
-
Statement type:
File details
Details for the file rapidfem-0.3.0-cp310-abi3-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: rapidfem-0.3.0-cp310-abi3-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 16.1 MB
- Tags: CPython 3.10+, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3bcdc38f4f23a9a2d60e3914ff406016eb12508923c87e7db1a53467783060e
|
|
| MD5 |
e9474f5726316d64b11eefa7b6d80fa8
|
|
| BLAKE2b-256 |
6d01326fd08c9506fe4433f1f84cd38f19810b62ba0fc1209bfe1ed0d6734470
|
Provenance
The following attestation bundles were made for rapidfem-0.3.0-cp310-abi3-manylinux_2_39_x86_64.whl:
Publisher:
wheels.yml on milanofthe/rapidfem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapidfem-0.3.0-cp310-abi3-manylinux_2_39_x86_64.whl -
Subject digest:
a3bcdc38f4f23a9a2d60e3914ff406016eb12508923c87e7db1a53467783060e - Sigstore transparency entry: 1519307442
- Sigstore integration time:
-
Permalink:
milanofthe/rapidfem@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/milanofthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Trigger Event:
release
-
Statement type:
File details
Details for the file rapidfem-0.3.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: rapidfem-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 15.6 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29ff1d51ef6ba7e0ee201375d031453e970a5ebfe733a00c035f72df80ce9d1b
|
|
| MD5 |
1582013d101b8b8885723417ad9b6be0
|
|
| BLAKE2b-256 |
00872a89b65853185c721e46702f01ba1d3e0c7a8ba353753756064c7a61bdb4
|
Provenance
The following attestation bundles were made for rapidfem-0.3.0-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
wheels.yml on milanofthe/rapidfem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rapidfem-0.3.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
29ff1d51ef6ba7e0ee201375d031453e970a5ebfe733a00c035f72df80ce9d1b - Sigstore transparency entry: 1519307402
- Sigstore integration time:
-
Permalink:
milanofthe/rapidfem@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/milanofthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@be64c4256a9f16eebf8b85b37e2bffa6f532573e -
Trigger Event:
release
-
Statement type: