Create AWS Palace FEM Models from GDSII layout files
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
11 November-2026
gds2palace 0.10.2
Changes
Faster Palace runs without adaptive mesh refinement: the error estimate, which is then only reported, is computed with EstimatorTol 1e-2 instead of Palace's default 1e-6. S-parameters are unchanged. Example: a Butler matrix with 8 ports at one frequency took 254 s instead of 507 s.
New features
settings['wall_extension']: per side, e.g. {'xmax': 2000}, continues the layout's cross-section at that edge outward to the wall, for a side that is not a port wall. setupEM writes it for the pieces of a split region.
Port walls with several lines: D (span of the lines + 2 x distance to ground, which sets the length of the standards) is now that of the largest group of coupled lines, not of the whole span of the lines on the wall. This gives shorter standards and a calibration valid to higher frequency.
Fix
A via port in the plane of a PEC wall was shorted by the wall, with no message. The model is no longer written, and the error names the port and the side.
Port walls: next to a wall with a port_wall_extension, the metal in the standards ended at the layout edge. It now continues to the extended wall, as in the model.
10 November-2026
gds2palace 0.10.0
New features
Calibrated de-embedding of ports at a port wall: a box side set to 'PORTWALL' in settings['boundary'] is a PEC wall at the layout edge, and the ports on that edge are removed by calibration with two thru-line standards per wall. run_sim solves the standards before the model, and combine_extend_snp.py writes the _deembedded file. New settings reference_plane_shift, deembedding_length, port_wall_extension and deembedding = 'none'. Without a port wall, models are unchanged. See "Calibrated de-embedding at port walls" in the user guide.
Every model's _data folder now holds its own combine_extend_snp.py, and combine_snp runs that copy. Update your combine_snp once from scripts/.
First automated tests of gds2palace: python -m pytest tests.
settings['margin'] can be set per side, as a list [margin_xmin, margin_xmax, margin_ymin, margin_ymax]. A negative margin now stops with an error. A conductor, via or sheet layer that reaches an absorbing boundary gives a warning.
Stackups (XML_stackup/latest/IHP): two target layers for heat sources, HEAT_TRANSISTOR (the top 40 nm of Activ) and HEAT_RESISTOR (polysilicon on the field oxide). With Activ as the target, heat sources were too thick and came out too cool. EM models are unchanged. See "Heat source targets" in XML_stackup/latest/IHP/README.md.
Fix
A conductor that reaches the simulation boundary, with margin and air_around both 0 on that side, stopped Palace with an MFEM abort when using the surface conductor model. See "Conductors at the simulation boundary" in the user guide.
Elmer thermal: a heat source that partly overlaps another volume lost its mesh refinement.
A model whose metals are all sheets (zero thickness) stopped with the gmsh error "Difference failed - BOPAlgo_AlertTooFewArguments".
5 November-2026
gds2palace 0.9.4
New features
util_thermal_map: puts powers from a circuit simulation onto the heat sources of a thermal export from the KLayout EM Export plug-in, by instance name, and reports names that do not match. Command line: python -m gds2palace.util_thermal_map <name>_thermalmap.json powers.csv <name>.tsimcfg. setupThermal's Load powers... uses it.
Elmer thermal: refined_cellsize_override now works for thermal models. A heat source (source_<GDS layer>, e.g. ['source_205', 0.25]) or a metal layer in the list gets its own mesh size.
Elmer thermal: the mesh around a heat source now grows at a fixed rate, 0.3 µm per µm of distance. Before, it grew too fast for small mesh sizes, and the temperature rise came out too low. Models whose maximum size is more than 10 times the mesh size at the sources get more elements.
Fix
Elmer thermal: a temperature-dependent thermal conductivity (ThermalConductivityTable, e.g. silicon) was taken at 0 K, so temperatures came out too low. The model now iterates until converged. The thermal example gives a temperature rise of 48.0 K instead of 39.7 K. Models with constant thermal conductivities are unchanged.
Stackups (XML_stackup/latest/IHP): Activ's thermal conductivity is now the silicon table Si_vs_T_IHP instead of a constant 50 W/m·K. Thermal models of devices come out cooler; EM models are unchanged.
Elmer thermal: a heat source inside a conductor of its target layer (e.g. an npn emitter in Activ) stopped the model with "Polygon on conductor layer source_... touches another conductor layer".
Mesh check: elements of zero or negative volume are reported after meshing. For Elmer models this is an error with the hint to use a finer mesh; for Palace a warning.
ElmerGrid check: a failed mesh conversion now stops with an error, instead of ElmerSolver reporting a missing mesh folder later.
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.)
Metadata
Release files for gds2palace 0.10.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gds2palace-0.10.2.tar.gz | 165.7 kB | Without provenance | Details for gds2palace-0.10.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gds2palace-0.10.2-py3-none-any.whl | Python 3 | none | any | Details for gds2palace-0.10.2-py3-none-any.whl |
Total release size: 324.1 kB
Release files / gds2palace-0.10.2.tar.gz
| Download URL | gds2palace-0.10.2.tar.gz |
|---|---|
| Size | 165.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b2ba36241cf6a9483f63b0c02a4def8e474e69deafe1025e4dd7225e191bfac7
|
|
BLAKE2b-256 checksum How to use checksums |
cc3335c58d3bc95d7d5bf9d6b73001c8f990643480abb44607f8eb9e495c6a4d
|
| 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.10.2-py3-none-any.whl
| Download URL | gds2palace-0.10.2-py3-none-any.whl |
|---|---|
| Size | 158.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a726f1ef285ab64a2328f678f1986f28ffea6329716bf42bc10506091d7b2e1
|
|
BLAKE2b-256 checksum How to use checksums |
ed8b5b67763e97692346d66bc4759b018866d65366f25d77d20a8899f5f5de71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for gds2palace 0.10.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.