https://github.com/kevin-tofu/scikit-topt
Scikit Topology Optimization with Scipy Family
https://github.com/kevin-tofu/scikit-topt
fem finite-element-analysis mesh mesh-based scikit scikit-fem topology-optimization unstructured unstructured-meshes
Last synced: about 1 month ago
JSON representation
Scikit Topology Optimization with Scipy Family
- Host: GitHub
- URL: https://github.com/kevin-tofu/scikit-topt
- Owner: kevin-tofu
- License: apache-2.0
- Created: 2025-03-30T23:16:39.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2026-01-24T13:53:15.000Z (4 months ago)
- Last Synced: 2026-03-28T10:52:28.096Z (about 2 months ago)
- Topics: fem, finite-element-analysis, mesh, mesh-based, scikit, scikit-fem, topology-optimization, unstructured, unstructured-meshes
- Language: Python
- Homepage: https://scikit-topt.readthedocs.io/en/latest/
- Size: 18.4 MB
- Stars: 8
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
- awesome-pyvista - scikit-topt
README
[](https://pypi.org/project/scikit-topt/)
[](https://opensource.org/licenses/Apache-2.0)
[](https://doi.org/10.5281/zenodo.15441499)
[](https://joss.theoj.org/papers/25f8f5cdc6533084cf84d3b8583c96aa)
[](https://pypi.org/project/scikit-topt/)
[](https://pepy.tech/projects/scikit-topt)


# 🧠Scikit Topt
**A lightweight, flexible Python library for topology optimization built on top of Scikit Libraries**
- [scipy](https://scipy.org/)
- [scikit-fem](https://github.com/kinnala/scikit-fem)
## Documentation
[Scikit-Topt Documentation](https://scikit-topt.readthedocs.io/en/latest/)
## Examples and Features
### Example 1 : Single Load Condition
### Example 2 : Multiple Load Condition
### Example 3 : Heat Conduction
### Progress Report
## Features
To contribute to the open-source community and education—which I’ve always benefited from—I decided to start this project.
The currently supported features are as follows:
- Coding with Python
- easy installation with pip/poetry
- Implement FEA on unstructured mesh using scikit-fem
- Structural Analysis / Heat Conduction Analysis
- Topology optimization using the density method and its optimization algorithm
- Optimality Criteria (OC) Method
- (Log-Space) Modified OC Method
- able to handle multiple force condition
- High-performance computation using sparse matrices with Scipy and PyAMG
- has a function to monitor the transition of parameters.
## SetUp
You can install **Scikit-Topt** either via **pip** or **Poetry**.
#### Supported Python Versions
Scikit-Topt supports **Python 3.10–3.13**:
- **3.10–3.12** — fully supported and tested
- **3.13** — core topology optimization works normally,
but **VTK-based features** (VTU export & image rendering using PyVista)
are temporarily unavailable because VTK/PyVista do not yet provide wheels
for Python 3.13.
You can still run the full optimization workflow on Python 3.13;
only visualization-related features are restricted.
**Choose one of the following methods:**
### Using pip
```bash
pip install scikit-topt
```
### Using poetry
```bash
poetry add scikit-topt
```
### Optional: Enable off-screen rendering
If you want to visualize the optimized density distribution with mesh as an image,
you need to enable off-screen rendering using a virtual display.
On Debian/Ubuntu:
```bash
sudo apt install xvfb libgl1-mesa-glx
```
CentOS / RHL
```bash
sudo yum install xvfb libgl1-mesa-glx
```
## Usage
See examples in example directory and README.md.
[README for Usage](https://github.com/kevin-tofu/scikit-topt/blob/joss-review/examples/README.md)
[Examples](https://github.com/kevin-tofu/scikit-topt/tree/joss-review/examples/tutorial)
## Algorithm for Optimization
Optimization Algorithms and Techniques are briefly summarized here.
[Optimization Algorithms and Techniques](https://kevin-tofu.github.io/scikit-topt/optimization.html)
## Contributing
We are happy to welcome any contributions to the library.
You can contribute in various ways:
- Reporting bugs, opening pull requests, or starting discussions via [GitHub Issues](https://github.com/kevin-tofu/scikit-topt/issues)
- Writing new [examples](https://github.com/kevin-tofu/scikit-topt/tree/joss-review/examples)
- Improving the [tests](https://github.com/kevin-tofu/scikit-topt/tree/joss-review/tests)
- Enhancing the documentation or code readability [doc](https://scikit-topt.readthedocs.io/en/latest/)
By contributing code to **Scikit-Topt**, you agree to release it under the [Apache 2.0 License](https://github.com/kevin-tofu/scikit-topt/tree/master/LICENSE).
## Acknowledgements
### Standing on the shoulders of proverbial giants
This software does not exist in a vacuum.
Scikit-Topt is standing on the shoulders of proverbial giants. In particular, I want to thank the following projects for constituting the technical backbone of the project:
- Scipy
- Scikit-fem
- PyAMG
- Numba
- MeshIO
- Matplotlib
- PyVista
- Topology Optimization Community
## 📖 Citation
If you use Scikit Topt in your research or software, please cite it as:
```bibtex
@article{Watanabe_Scikit-Topt_A_Python_2025,
author = {Watanabe, Kohei},
doi = {10.21105/joss.09092},
journal = {Journal of Open Source Software},
number = {116},
title = {{Scikit-Topt: A Python Library for Algorithm Development in Topology Optimization}},
volume = {10},
year = {2025}
}
```
## ToDo
- Set break point from the optimization loop
- Add A feature to assign tags to nodes and cells
- Add Level Set
- Add other optimizers
- Evolutionary Algorithms
- MMA
- Add Multiple BC Conditions
- Add Unit Test