Credits & Dependencies
======================
The ``ggp`` framework relies on a number of high-quality open-source packages. We gratefully acknowledge their developers and communities.
Core Scientific Libraries
--------------------------
.. list-table::
:header-rows: 1
:widths: 20 15 65
* - Package
- License
- Role
* - `FEniCS `_ (``dolfin``)
- LGPL-3.0
- Finite Element framework providing mesh generation, function spaces, variational forms (UFL), and PDE solvers. Used for all geometry projections and the linear elasticity solver.
* - `dolfin-adjoint `_
- LGPL-3.0
- High-level automated differentiation framework for FEniCS. Originally used for shape derivatives, listed for legacy environment compatibility.
* - `PETSc `_ (``petsc4py``)
- BSD-2-Clause
- High-performance sparse linear algebra backend. Used for fast global stiffness matrix assembly in CSR format.
* - `GEMSEO `_
- LGPL-3.0
- Multidisciplinary Design Analysis and Optimization (MDAO) framework. Provides the discipline abstraction, design space management, and scenario orchestration.
* - `gemseo-mma `_
- LGPL-3.0
- GEMSEO plugin providing the Method of Moving Asymptotes (MMA) optimizer used for all topology optimization runs.
* - `NumPy `_
- BSD-3-Clause
- Fundamental array computing library. Used for vectorized geometry mapping, analytic Jacobians, and all numerical computations.
* - `SciPy `_
- BSD-3-Clause
- Sparse matrix utilities (CSR format) used for stiffness assembly and linear system solving.
* - `AMJax `_ (Boussange, V.)
- MIT
- JAX library bringing algebraic multigrid (AMG) methods to sparse FEM solves. The ``amjax`` FEM solver backend (:mod:`ggp.physics.amjax_solver`) implements its AMG-preconditioned CG approach using PyAMG smoothed-aggregation hierarchies and SciPy CG.
Meshing
-------
.. list-table::
:header-rows: 1
:widths: 20 15 65
* - Package
- License
- Role
* - `mshr `_
- LGPL-3.0
- FEniCS mesh generation component. Used for creating structured and unstructured meshes from CSG geometries.
Development & Documentation
----------------------------
.. list-table::
:header-rows: 1
:widths: 20 15 65
* - Package
- License
- Role
* - `pytest `_
- MIT
- Testing framework used for the unit and regression test suite.
* - `pytest-cov `_
- MIT
- Code coverage plugin for pytest, used in CI to generate coverage reports.
* - `Sphinx `_
- BSD-2-Clause
- Documentation generator used to build this documentation site.
* - `sphinx-book-theme `_
- BSD-3-Clause
- Modern Sphinx theme providing the documentation layout.
* - `nbsphinx `_
- MIT
- Sphinx extension for rendering Jupyter notebooks as documentation pages.
* - `JupyterLab `_
- BSD-3-Clause
- Interactive notebook environment used for example tutorials.
* - `Matplotlib `_
- PSF-based
- 2D plotting library used for density and component visualization in examples and post-processing.
* - `NLopt `_
- MIT
- Nonlinear optimization library, available as an alternative optimizer backend.
Academic References
-------------------
This implementation is based on the following publications:
1. **GGP Framework:** Coniglio, S., Morlier, J., Gogu, C. et al. *Generalized Geometry Projection: A Unified Approach for Geometric Feature Based Topology Optimization*. Arch Computat Methods Eng 27, 1573–1610 (2020). `DOI:10.1007/s11831-019-09362-8 `_
2. **ALM Extension:** Bhat, K.V., Capasso, G., Coniglio, S., Morlier, J., Gogu, C. *On some applications of Generalized Geometric Projection to optimal 3D printing*. Computers & Graphics (2021).
3. **Original MATLAB Code:** `GGP-Matlab `_ repository.