gds2openEMS: FDTD simulation workflow for RFIC
The files provided here enable openEMS EM simulation with layouts created for the IHP SG13G2 RFIC technology.
Install
pip install gds2openEMS
Full documentation, installation guide, and usage walkthrough: https://github.com/VolkerMuehlhaus/gds2openEMS
Recent changes
03-Sep-2026
Added a graphical Stackup XML Editor (pip install gds2openEMS now also installs a stackupEditor console command). Covers Variables, Materials, the Dielectric stack, drawn Layers, Reference-relative positioning, Derived Layers, and Thermal Tables, with a live cross-section preview, undo, and an "Import from ADS Momentum" option (*.subst/*.ltd). PySide6 is now a dependency of gds2openEMS.
This is a port of the equivalent editor from the sibling gds2palace_ihp_sg13g2/setupEM project, re-pointed at this repo's own util_stackup_reader.py (identical XML schema, independently-maintained reader) - a new top-level stackup_editor/ package, not shared/symlinked with setupEM's original per this workspace's usual convention for these sibling repos.
02-Sep-2026
New user's guide, v3
Migrated all 10 workflow/run_*.py examples to the settings{} dictionary syntax and the gds2openEMS PyPI package (from gds2openEMS import *), instead of loose top-level variables and a local modules/ copy. Behavior is unchanged.
This was really two separate things that had gotten tangled together: which code you use (a local modules/ copy vs. pip install gds2openEMS) and which coding style you use (loose variables vs. settings{}). They're independent. README.md now documents them as two separate choices.
Removed the postprocess_only switch from all example model scripts. It's no longer needed: runSimulation() already skips the FDTD solve automatically via a content hash of the model. If the model hasn't changed since the last run, it just reuses the existing result.
Added more_examples/local_modules_copy/, a fully self-contained example (its own modules/ copy, GDSII layout, and XML stackup) demonstrating the local-copy distribution method on its own.
util_simulation_setup.py module load import shapely now fails with a clear error message if shapely module is missing.
voltage=0 ports are now actually skipped in scripts that build their excitation list from simulation_ports.all_active_excitations(), saving simulation time instead of wasting it. Referencing a never-excited port's S-parameters now fails with a clear error instead of crashing.
Added scripts/sync_local_modules_copy.py, so more_examples/local_modules_copy/modules/ (used to demonstrate the local modules folder method) doesn't silently drift out of sync with the canonical source. Run it whenever workflow/modules/ changes.
01-Sep-2026
Fixed a crash in resolve_derived_layers(): gdspy.boolean() raises IndexError when called with an empty operand (e.g. a resistor recognition layer with no polygons in the current cell), which previously aborted the whole GDSII read. The boolean fold now short-circuits using the OR/AND/NOT identity instead whenever either operand is empty. Same fix applied to gds2palace_ihp_sg13g2's independent copy of this reader.
Added a new example, more_examples/parameterized_XML_stackup, showing how to override stackup <Variable>s (total_thickness, air_thickness) from a model script via read_substrate(variable_overrides=...), in both the loose top-level variable style and the settings{} dictionary style.
Full history: CHANGES.md
Note: the gds2openEMS PyPI package itself only requires:
- gdspy>1.6.0
- CSXCAD
- openEMS
- numpy
- shapely
- PySide6
(Other Python modules mentioned above are only needed to run the example/model scripts in this repository, not to use the installed package.)
Release files for gds2openEMS 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gds2openems-0.4.0.tar.gz | 147.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gds2openems-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 297.2 kB
Release files / gds2openems-0.4.0.tar.gz
| Download URL | gds2openems-0.4.0.tar.gz |
|---|---|
| Size | 147.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc1295a4310b9180a639eea4be1440253b1e334e2daa0178cef908ddc50acc18
|
|
BLAKE2b-256 checksum How to use checksums |
0a43ec4721349c04cb23e4588e6b3e7eccc8194e0334a7019c0898f38be72495
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / gds2openems-0.4.0-py3-none-any.whl
| Download URL | gds2openems-0.4.0-py3-none-any.whl |
|---|---|
| Size | 150.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c52ccfc4d1625edaa6c375f0befbf855a6b9e0988c030bd7ddd662a2d5c54f7d
|
|
BLAKE2b-256 checksum How to use checksums |
0639d0298121ad748566b71b12816879b51cc4c9a1ee0a974eeb5afb6095683e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|