Skip to main content

Create AWS Palace FEM Models from GDSII layout files

Intro

The files provided here enable RFIC FEM simulation using AWS Palace from GDSII layouts created in IHP SG13G2 RFIC technology.

Palace, is an open-source, parallel finite element code for full-wave 3D electromagnetic simulations. It can be scaled from single computer to large high performance simulation clusters and cloud-based computing.
https://awslabs.github.io/palace/stable/

In addition to AWS Palace, gds2palace can also generate models for Elmer FEM, as an additional workflow option for EM (S-parameter) simulation as well as steady-state thermal simulation. See CHANGES.md for this and other recent additions.

The gds2palace workflow in this repository is pre-configured for GDSII layout files in the IHP SG13G2 Open PDK. Special thanks to IHP and the public funded German project FMD-QNC (16ME0831) https://www.elektronikforschung.de/projekte/fmd-qnc for financial support, which has contributed to this work.

Install

pip install gds2palace

Full documentation, installation guide, and usage walkthrough: https://github.com/VolkerMuehlhaus/gds2palace_ihp_sg13g2

Recent changes

22-23 September-2026

settings['filled_metals'] is a new option for Palace, used for volume meshing of conductors instead of placing a surface impedance onto the side walls. This gives more accurate conductor loss at low frequency, where the skin depth is no longer small compared to conductor cross section.

Note that the new volume meshing option is not the recommended default for Palace: volume meshing requires more RAM and simulation time, and will become inaccurate at higher frequencies, unless you really mesh into skin effect. See the new inductor_L6n2_filledmetals_passivation3D example for a comparison of conductor volume mesh against surface-impedance modeling at several mesh sizes, checked against measurement.

settings['adaptive_mesh_conformal'] is a new experimental option (default False) to use conformal AMR mesh refinement instead of Palace's default nonconformal (hanging-node) refinement. From the testcases tried so far, this gave good convergence behaviour, with agressive increase in mesh cell count. For the D-band balun mesh convergence testcase, with only 2 iterations, this reached a similar result as the default non-conformal AMR after 4 iterations, with simulation time cut in half.

Bugfixes
combine_extend_snp.py now handles a Palace run that was interrupted before finishing (e.g. terminated by setupEM's new memory-limit kill switch, or OOM-killed by the OS): a blank/truncated trailing CSV line, or Palace's own "NULL" placeholder for an excitation it never got to solve, previously either crashed with an IndexError or got silently written into the Touchstone output where it only surfaced later as an unhandled parse error in scikit-rf. Affected S-parameters are now written as 0.0 dB / 0 deg instead, with a stdout warning and a comment line in the output Touchstone file listing exactly which parameters are unreliable, so a partial run degrades visibly instead of crashing or silently producing bad data.

18-September-2026

Detect a multi-chiplet stackup (one shared interposer referenced by several chiplet dies) from the Reference graph via detect_chiplet_groups(), and scope metal/dielectric z-range checks to each chiplet so same-height elements from different chiplets no longer get cross-linked or wrongly registered into each other's dielectric.

Added find_z_overlap_pairs()/find_z_overlaps() (overlapping same-scope dielectrics) and find_missing_chiplet_boundaries()/find_missing_chiplet_boundary_warnings() (a chiplet branch point or chiplet root Dielectric missing an explicit Boundary=, required once a stackup branches into chiplets).

Bugfixes
Fixed a crash previewing a brand-new empty stackup, and a missing .sNp extension on _dc/_deembedded output when the model name itself contains a literal . (e.g. a dimension like do82.41).

Fixed a metal sitting exactly at its own reference dielectric's top edge (ReferenceEdge="Top" Zmin="0") falling into the wrong, often shared dielectric instead - also fixes Interposer_Backside being dropped from metals_inside.

12-14-September-2026

Added an example (more_examples/EM_temperature_coefficient) for temperature-dependent conductivity in the XML stackup, to simulate loss vs. temperature. The corresponding .py simulation model loops over temperature and must be run from command line (not setupEM).

Added two reserved stackup materials that need no <Materials> entry: PEC (ideal conductor, on conductor/via/sheet Layers) and AIR (built-in default dielectric, overridable).

Bugfixes
Fixed inductor synthesis spiral polygon vertices not landing exactly on the grid in the inductor synthesis example.

read_gds() now silently repairs self-intersecting GDSII "keyhole" polygons instead of failing much later with an opaque assert dielectric_tags_unchanged deep inside meshing.

Detect and fix overlap of lumped ports with metals on the same layer. Port wins now, this fixes the previous Palace/MFEM error ("a non-periodic face cannot have multiple boundary elements").

Full history: CHANGES.md


Note: the gds2palace PyPI package itself only requires:

  • gdspy>1.6.0
  • gmsh
  • numpy
  • shapely>=2.0

(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 gds2palace 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gds2palace 0.6.0
File Size Uploaded
gds2palace-0.6.0.tar.gz 93.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gds2palace 0.6.0
File Interpreter ABI Platform
gds2palace-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 183.2 kB

Release files / gds2palace-0.6.0.tar.gz

Download URL gds2palace-0.6.0.tar.gz
Size 93.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7d690696da74ab9a42936d59f1da4fed87fc3d7efc3b1f3e3cdb8cb9dce35bed
BLAKE2b-256 checksum
How to use checksums
57315919566269621b3e575a46a813419c989828f2f4360b45fc79f2b9c1ead7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / gds2palace-0.6.0-py3-none-any.whl

Download URL gds2palace-0.6.0-py3-none-any.whl
Size 89.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b59063897900b1eef553c0003bd6afaa562551bb7e54ec0982aff063622e01c
BLAKE2b-256 checksum
How to use checksums
8f64c7cd2fddeb449deb5d211d7e1bd1b0acce959449d40f0480e06e2dc251cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.2

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.19

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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