Metadata-Version: 2.4
Name: stellarmesh
Version: 1.1.0
Summary: Meshing library for nuclear workflows.
Author: Alex Koen
Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pymmg
Requires-Dist: meshio[all]
Provides-Extra: dev
Requires-Dist: cadquery-ocp-stubs==7.8.1.1.post1; extra == "dev"
Requires-Dist: ocp-vscode>=2.9.0; extra == "dev"
Requires-Dist: pip>=25.2; extra == "dev"
Requires-Dist: pytest>=8.4.1; extra == "dev"
Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
Requires-Dist: pytest-benchmark>=5.1.0; extra == "dev"
Requires-Dist: ruff>=0.12.8; extra == "dev"
Dynamic: license-file

.. figure:: https://github.com/Thea-Energy/stellarmesh/raw/main/docs/logo.png
   :width: 100%
   :align: center

|tests| |pypi_version| |conda_version|

Stellarmesh is a meshing library for nuclear workflows. Principally, it
supports the creation of DAGMC geometry from CAD models.

**Features**:

* ✅ Import of `CadQuery <https://github.com/CadQuery/cadquery>`__,
  `build123d <https://github.com/gumyr/build123d>`__, STEP and BREP
  geometry
* ✅ Surface and volume meshing
* ✅ Gmsh and OpenCASCADE meshing backends
* ✅ Linear and angular mesh tolerances
* ✅ Surface boundary conditions
* ✅ Imprinting and merging of conformal geometry
* ✅ Mesh refinement
* ✅ Programmatic manipulation of .h5m tags
* ✅ Automated testing and integration

---------------
Getting Started
---------------

* `Installation <https://stellarmesh.readthedocs.io/en/latest/install.html>`__
* `Tutorials <https://stellarmesh.readthedocs.io/en/latest/tutorials.html>`__
* `API <https://stellarmesh.readthedocs.io/en/latest/api>`__

-------
Example
-------

.. code:: python

   import build123d as bd
   import stellarmesh as sm

   solids = [bd.Solid.make_torus(1000, 100)]
   for _ in range(3):
       solids.append(bd.Solid.thicken(solids[-1].faces()[0], 100))
   solids = solids[1:]

   geometry = sm.Geometry(solids[::-1], material_names=["a", "a", "c"])
   mesh = sm.SurfaceMesh.from_geometry(
       geometry, sm.GmshSurfaceOptions(min_mesh_size=50, max_mesh_size=200)
   )
   mesh.write("test.msh")
   mesh.render("docs/torus-mesh-reversed.png", rotation_xyz=(90, 0, -90), normals=15)

   h5m = sm.DAGMCModel.from_mesh(mesh)
   h5m.write("dagmc.h5m")
   h5m.write("dagmc.vtk")


.. figure:: https://github.com/Thea-Energy/stellarmesh/raw/main/docs/torus-mesh.png
   :width: 100%
   :align: center
   :alt: Rendered mesh with normals.

----------------
Acknowledgements
----------------

Stellarmesh is originally a project of Thea Energy, who are building the
world’s first planar coil stellarator.

.. figure:: https://github.com/user-attachments/assets/37b9ba1c-b22c-4837-b226-a6212854127e
   :width: 200px

.. |tests| image:: https://img.shields.io/github/actions/workflow/status/stellarmesh/stellarmesh/.github%2Fworkflows%2Ftest.yml?label=Tests
   :target: https://github.com/stellarmesh/stellarmesh/actions/workflows/test.yml
   :alt: Tests

.. |pypi_version| image:: https://img.shields.io/pypi/v/stellarmesh
   :target: https://pypi.org/project/stellarmesh
   :alt: PyPI Version

.. |conda_version| image:: https://img.shields.io/conda/vn/conda-forge/stellarmesh
   :target: https://anaconda.org/conda-forge/stellarmesh
   :alt: Conda Version
