diff --git a/.config/release-please/.manifest.json b/.config/release-please/.manifest.json index 8663d400..8926173b 100644 --- a/.config/release-please/.manifest.json +++ b/.config/release-please/.manifest.json @@ -1 +1 @@ -{".":"0.7.0"} +{ ".": "0.8.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 5af340bd..875486c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,37 @@ All notable changes to this project will be documented in this file. The format is based on [Conventional Changelog](https://github.com/conventional-changelog/conventional-changelog-config-spec/blob/master/versions/2.2.0/README.md), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.7.0](https://github.com/liblaf/apple/releases/tag/v0.7.0) - 2025-12-06 +## [0.8.0](https://github.com/liblaf/apple/releases/tag/v0.8.0) - 2026-03-31 + +### 💥 BREAKING CHANGES + +- Refactored warp elastic energy module structure - [100c251](https://github.com/liblaf/apple/commit/100c2513fb39071e8eabe355aa4148964fdbd121) by [@liblaf](https://github.com/liblaf) + +### ✨ Features + +- **apple:** improve inverse simulation with coarse-to-fine transfer and enhanced solvers - [61d530e](https://github.com/liblaf/apple/commit/61d530e5230b07c38db367a13fc5a6deb59e48e2) by [@liblaf](https://github.com/liblaf) +- **apple:** implement hybrid JAX/Warp model framework and WarpPhaceV2 - [315b58e](https://github.com/liblaf/apple/commit/315b58e1a5ac8ce1f058a44944c688a5f7f713b1) by [@liblaf](https://github.com/liblaf) +- **apple:** add SMAS support and volume fraction for elastic energies - [0710f9c](https://github.com/liblaf/apple/commit/0710f9cf2d9ebe6a7b5ad3d081be3c5f0266e2dd) by [@liblaf](https://github.com/liblaf) +- **exp:** update inverse-toy simulation and add Newton solver - [cee4852](https://github.com/liblaf/apple/commit/cee4852cc9ecf957995331dc796da4ac2e6cdf88) by [@liblaf](https://github.com/liblaf) +- **exp:** add SMAS forward simulation experiments - [e27c9da](https://github.com/liblaf/apple/commit/e27c9daf35ccf2355572decee3c1e3595bfcc508) by [@liblaf](https://github.com/liblaf) +- **inverse:** enhance inverse solver with constraint support and improved adjoint solver - [892dbfd](https://github.com/liblaf/apple/commit/892dbfd616dd801f1d642ffb1620f55b86942530) by [@liblaf](https://github.com/liblaf) +- add inverse toy experiments for forward simulation and muscle activation - [19c2c46](https://github.com/liblaf/apple/commit/19c2c46438b85770d7dc4a11971b2d3a05672777) by [@liblaf](https://github.com/liblaf) +- refactor elastic energies and add inverse physics module - [100c251](https://github.com/liblaf/apple/commit/100c2513fb39071e8eabe355aa4148964fdbd121) by [@liblaf](https://github.com/liblaf) +- add Neo-Hookean Warp energies and line-search PNCG - [0dbe70c](https://github.com/liblaf/apple/commit/0dbe70ccb422cac1de519f9cd34bc00fb46bc652) by [@liblaf](https://github.com/liblaf) + +### 🐛 Bug Fixes + +- **warp:** correct ARAP muscle energy implementation and kernel function names - [d734e9b](https://github.com/liblaf/apple/commit/d734e9bf3909551158ae800dead9611c2c6e1175) by [@liblaf](https://github.com/liblaf) + +### 📝 Documentation + +- **smas:** update inverse-unreachable clipped figures - [ed3b81a](https://github.com/liblaf/apple/commit/ed3b81a01add8157d7afb9444c554c947a8303e7) by [@liblaf](https://github.com/liblaf) + +### ❤️ Contributors + +- [@liblaf](https://github.com/liblaf) + +## [0.7.0](https://github.com/liblaf/apple/releases/tag/v0.7.0) - 2025-12-07 ### 💥 BREAKING CHANGES @@ -40,7 +70,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### ❤️ Contributors -- [@liblaf](https://github.com/liblaf) made their first contribution +- [@liblaf[bot]](https://github.com/apps/liblaf) +- [@liblaf](https://github.com/liblaf) ## [0.6.1](https://github.com/liblaf/apple/releases/tag/v0.6.1) - 2025-11-29 diff --git a/exp/2026/01/28/smas/src/30-inverse-stable-neo-hookean.py b/exp/2026/01/28/smas/src/30-inverse-stable-neo-hookean.py index 0bbe228c..2f0358a5 100644 --- a/exp/2026/01/28/smas/src/30-inverse-stable-neo-hookean.py +++ b/exp/2026/01/28/smas/src/30-inverse-stable-neo-hookean.py @@ -87,7 +87,9 @@ def build_phace_v3(mesh: pv.UnstructuredGrid) -> Model: return builder.finalize() -def build_inverse(cfg: Config, mesh: pv.UnstructuredGrid, forward: Forward) -> MyInverse: +def build_inverse( + cfg: Config, mesh: pv.UnstructuredGrid, forward: Forward +) -> MyInverse: surface_indices: Integer[Array, " surface_points"] = mesh.surface_indices() muscle_indices: Integer[Array, " muscle_cells"] = jnp.flatnonzero( mesh.cell_data["MuscleFraction"] > 1e-3 diff --git a/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean.py b/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean.py index ac027530..f5e5be13 100644 --- a/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean.py +++ b/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean.py @@ -70,9 +70,7 @@ def _stable_neo_hookean_hess_diag_func( h3_diag = func.h3_diag(dhdX, func.g3(F)) h5_diag = func.h5_diag(dhdX) h6_diag = func.h6_diag(dhdX, F) - return fraction * ( - lambda_ * h3_diag + F.dtype(0.5) * mu * h5_diag + c * h6_diag - ) + return fraction * (lambda_ * h3_diag + F.dtype(0.5) * mu * h5_diag + c * h6_diag) @wp.func @@ -94,9 +92,7 @@ def _stable_neo_hookean_hess_prod_func( h3_prod = func.h3_prod(v, dhdX, func.g3(F)) h5_prod = func.h5_prod(v, dhdX) h6_prod = func.h6_prod(v, dhdX, F) - return fraction * ( - lambda_ * h3_prod + F.dtype(0.5) * mu * h5_prod + c * h6_prod - ) + return fraction * (lambda_ * h3_prod + F.dtype(0.5) * mu * h5_prod + c * h6_prod) @wp.func @@ -118,9 +114,7 @@ def _stable_neo_hookean_hess_quad_func( h3_quad = func.h3_quad(v, dhdX, func.g3(F)) h5_quad = func.h5_quad(v, dhdX) h6_quad = func.h6_quad(v, dhdX, F) - return fraction * ( - lambda_ * h3_quad + F.dtype(0.5) * mu * h5_quad + c * h6_quad - ) + return fraction * (lambda_ * h3_quad + F.dtype(0.5) * mu * h5_quad + c * h6_quad) @jarp.frozen_static diff --git a/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean_muscle.py b/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean_muscle.py index e730f053..6435ea71 100644 --- a/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean_muscle.py +++ b/src/liblaf/apple/warp/energies/elastic/_stable_neo_hookean_muscle.py @@ -77,9 +77,7 @@ def _stable_neo_hookean_muscle_hess_diag_func( h3_diag = func.h3_diag(dhdX_A, func.g3(G)) h5_diag = func.h5_diag(dhdX_A) h6_diag = func.h6_diag(dhdX_A, G) - return fraction * ( - lambda_ * h3_diag + F.dtype(0.5) * mu * h5_diag + c * h6_diag - ) + return fraction * (lambda_ * h3_diag + F.dtype(0.5) * mu * h5_diag + c * h6_diag) @wp.func @@ -104,9 +102,7 @@ def _stable_neo_hookean_muscle_hess_prod_func( h3_prod = func.h3_prod(v, dhdX_A, func.g3(G)) h5_prod = func.h5_prod(v, dhdX_A) h6_prod = func.h6_prod(v, dhdX_A, G) - return fraction * ( - lambda_ * h3_prod + F.dtype(0.5) * mu * h5_prod + c * h6_prod - ) + return fraction * (lambda_ * h3_prod + F.dtype(0.5) * mu * h5_prod + c * h6_prod) @wp.func @@ -131,9 +127,7 @@ def _stable_neo_hookean_muscle_hess_quad_func( h3_quad = func.h3_quad(v, dhdX_A, func.g3(G)) h5_quad = func.h5_quad(v, dhdX_A) h6_quad = func.h6_quad(v, dhdX_A, G) - return fraction * ( - lambda_ * h3_quad + F.dtype(0.5) * mu * h5_quad + c * h6_quad - ) + return fraction * (lambda_ * h3_quad + F.dtype(0.5) * mu * h5_quad + c * h6_quad) @jarp.frozen_static