Metadata-Version: 2.4
Name: gsim
Version: 0.0.2
Author-email: flaport <floris.laporte@gmail.com>
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Requires-Python: <3.14,>=3.12
Description-Content-Type: text/markdown
Requires-Dist: gdsfactory>=9.32.0
Requires-Dist: gdsfactoryplus>=1.3.7
Requires-Dist: gmsh
Requires-Dist: meshio>=5.0.0
Requires-Dist: plotly
Requires-Dist: pydantic>=2.10.6
Requires-Dist: pyvista>=0.43.0
Provides-Extra: dev
Requires-Dist: altair>=5.5.0; extra == "dev"
Requires-Dist: build>=1.2.0; extra == "dev"
Requires-Dist: griffe>=1.5.6; extra == "dev"
Requires-Dist: ipykernel>=6.29.5; extra == "dev"
Requires-Dist: matplotlib>=3.10.0; extra == "dev"
Requires-Dist: mkautodoc>=0.2.0; extra == "dev"
Requires-Dist: mkdocs-autorefs>=1.3.0; extra == "dev"
Requires-Dist: mkdocs-material>=9.6.0; extra == "dev"
Requires-Dist: mkdocs-shadcn>=0.2; extra == "dev"
Requires-Dist: mkdocs>=1.6.1; extra == "dev"
Requires-Dist: mkdocstrings[python]>=0.27.0; extra == "dev"
Requires-Dist: mkinit>=1.1.0; extra == "dev"
Requires-Dist: mypy>=1.15.0; extra == "dev"
Requires-Dist: nb-clean>=4.0.1; extra == "dev"
Requires-Dist: nbconvert>=7.16.6; extra == "dev"
Requires-Dist: papermill>=2.6.0; extra == "dev"
Requires-Dist: plotly>=6.0.0; extra == "dev"
Requires-Dist: pre-commit>=4.1.0; extra == "dev"
Requires-Dist: pyright>=1.1.0; extra == "dev"
Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
Requires-Dist: pytest-randomly>=3.16.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.6.0; extra == "dev"
Requires-Dist: pytest>=8.3.0; extra == "dev"
Requires-Dist: ruff>=0.9.0; extra == "dev"
Requires-Dist: towncrier>=24.0.0; extra == "dev"
Requires-Dist: vega-datasets>=0.9.0; extra == "dev"
Requires-Dist: nbstripout>=0.8.1; extra == "dev"
Requires-Dist: ty>=0.0.13; extra == "dev"
Provides-Extra: docs
Requires-Dist: ihp-gdsfactory>=0.1.4; extra == "docs"

# Gsim 0.0.2

> a GDSFactory Simulation Plugin

![gsim-logo](./docs/assets/img/gsim-small.png)

## Overview

Gsim bridges the gap between circuit layout design (using [GDSFactory](https://gdsfactory.github.io/gdsfactory/)) and electromagnetic simulation (using [Palace](https://awslabs.github.io/palace/)). It automates the conversion of IC component layouts into simulation-ready mesh files and configuration.

## Features

- **Layer Stack Extraction**: Extract layer stacks from PDK definitions with a comprehensive material properties database
- **Port Configuration**: Convert GDSFactory ports into Palace-compatible port definitions (inplane, via, and CPW ports)
- **Mesh Generation**: Generate GMSH-compatible finite element meshes with configurable quality presets

## Installation

```bash
pip install gsim
```

For development:

```bash
git clone https://github.com/doplaydo/gsim
cd gsim
pip install -e .[dev]
```

## Quick Start

```python
from gsim.palace import (
    get_stack,
    configure_inplane_port,
    extract_ports,
    generate_mesh,
    MeshConfig,
)

# Get layer stack from active PDK
stack = get_stack()

# Configure ports on your component
configure_inplane_port(c.ports["o1"], layer="topmetal2", length=5.0)
configure_inplane_port(c.ports["o2"], layer="topmetal2", length=5.0)

# Extract configured ports
ports = extract_ports(c, stack)

# Generate mesh
result = generate_mesh(
    component=c,
    stack=stack,
    ports=ports,
    output_dir="./simulation",
    config=MeshConfig.default(),
)
```

## Mesh Presets

| Preset  | Refined Size | Max Size | Use Case                          |
| ------- | ------------ | -------- | --------------------------------- |
| Coarse  | 10.0 µm      | 600.0 µm | Fast iteration (~2.5 elements/λ)  |
| Default | 5.0 µm       | 300.0 µm | Balanced accuracy (~5 elements/λ) |
| Fine    | 2.0 µm       | 70.0 µm  | High accuracy (~10 elements/λ)    |

## Port Types

- **Inplane ports**: Horizontal ports on single metal layer for CPW gaps
- **Via ports**: Vertical ports between two metal layers for microstrip structures
- **CPW ports**: Multi-element ports for proper Coplanar Waveguide excitation

## Documentation

See the [documentation](https://doplaydo.github.io/gsim/) for detailed API reference and examples.

## License

Copyright 2026 GDSFactory
