lsdo_geo
lsdo_geo is a Python library for geometry representation, implicit deformational parameterization, and analytic adjoint sensitivity analysis tailored for gradient-based Multidisciplinary Design Optimization (MDO).
Developed by the Large-Scale Design Optimization (LSDO) Lab at the University of California, San Diego.
Key Features
- Geometry-Centric MDO: Serves as a single, consistent geometric "source of truth", generating and updating discipline-specific meshes (CFD, FEA, acoustics) without manual re-meshing or geometric inconsistency.
- Implicit Parameterization Framework: Formulates geometry parameterization as an inner constrained optimization problem, solving the first-order Karush-Kuhn-Tucker (KKT) system with an exact Newton solver.
- Hierarchical Free-Form Deformation (FFD): Supports trivariate spline volume lattices with sectional deformation modes—twist, sweep, dihedral, spanwise stretching, and chord taper.
- Analytic Adjoint Sensitivities: Provides exact implicit derivatives $\frac{d\mathbf{x}}{d\mathbf{x}_g}$ through the converged KKT state, seamlessly propagating gradients across the CSDL computational graph.
- CAD & Mesh Interoperability: Direct import, fitting, and export across OpenVSP (
.vsp3), IGES (.iges), STEP (.stp), and surface/volume meshes (.msh,.stl).
Architecture Overview
| Subpackage | Key Classes | Description |
|---|---|---|
lsdo_geo.core.geometry |
Geometry, Mesh |
Central multi-component geometric model, CAD imports, rigid transformations, and discipline mesh projections. |
lsdo_geo.core.parameterization |
ParameterizationSolver, GeometricVariables, FFDBlock, SectionalParameterization |
Trivariate FFD lattices, sectional mode definitions, and exact Newton KKT solver. |
lsdo_geo.optimization |
Optimization, NewtonOptimizer |
Connects geometric states and constraints into CSDL graph models for analytic adjoint sensitivity analysis. |
Quickstart
import numpy as np
import csdl_alpha as csdl
import lsdo_geo as lg
# 1. Initialize CSDL graph recorder
recorder = csdl.Recorder(inline=True)
recorder.start()
# 2. Define or import geometry
geometry = lg.import_geometry("path/to/wing.stp")
# 3. Create a Free-Form Deformation (FFD) block around the geometry
ffd_block = lg.construct_ffd_block_around_entities(
geometry,
num_control_points=(4, 4, 2),
)
# 4. Apply geometric transformations (rotation, translation)
rotation_origin = np.array([0.0, 0.0, 0.0])
rotation_axis = np.array([0.0, 0.0, 1.0])
rotated_points = lg.rotate(
geometry.coefficients,
rotation_origin=rotation_origin,
axis_vector=rotation_axis,
angles=15.0,
units="degrees",
)
Installation
Prerequisites & Installation
lsdo_geo relies on CSDL_alpha and lsdo_function_spaces:
# 1. Install dependencies
pip install jax networkx
pip install git+https://github.com/LSDOlab/CSDL_alpha.git@dev_andrew
pip install git+https://github.com/LSDOlab/lsdo_function_spaces.git
# 2. Install lsdo_geo (User)
pip install lsdo_geo
# Or install development version directly from GitHub:
pip install git+https://github.com/LSDOlab/lsdo_geo.git
For Developers
Clone the repository and install in editable mode with testing and documentation extras:
git clone https://github.com/LSDOlab/lsdo_geo.git
cd lsdo_geo
pip install jax networkx
pip install git+https://github.com/LSDOlab/CSDL_alpha.git@dev_andrew
pip install git+https://github.com/LSDOlab/lsdo_function_spaces.git
pip install -e ".[test,docs]"
Testing
Run the test suite using pytest:
pytest
To run fast unit tests only:
pytest -m "not slow"
Documentation
Full documentation, theoretical background, tutorials, and API reference are hosted on Read the Docs: 👉 lsdo-geo.readthedocs.io
To build the documentation locally:
sphinx-build -b html docs docs/_build/html
License
lsdo_geo is distributed under the terms of the Apache License 2.0. See LICENSE.txt for details.
Release files for lsdo-geo 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lsdo_geo-1.0.0.tar.gz | 44.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lsdo_geo-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.0 kB
Release files / lsdo_geo-1.0.0.tar.gz
| Download URL | lsdo_geo-1.0.0.tar.gz |
|---|---|
| Size | 44.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
738570795277d84cc179a197aeb1dfcce5d557b116c97c22b3506ff770515ace
|
|
BLAKE2b-256 checksum How to use checksums |
62ea55c7c016ea9c536ceb9918c5cf495d6a028d1f4f00b0ad49003f8e643533
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / lsdo_geo-1.0.0-py3-none-any.whl
| Download URL | lsdo_geo-1.0.0-py3-none-any.whl |
|---|---|
| Size | 36.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f8656f50eceb0295cc22c193a9fcbad9d75c32ca72da6a4fbc27ea380c88e748
|
|
BLAKE2b-256 checksum How to use checksums |
b33622e7c97b786948d0718f483c078682fa2c3bc2bbc2c4a4f1c37e31eaad18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log