Skip to main content

cartan_dec/
lib.rs

1// ~/cartan/cartan-dec/src/lib.rs
2
3//! # cartan-dec
4//!
5//! Discrete exterior calculus (DEC) on Riemannian manifolds.
6//!
7//! Bridges continuous geometry (`cartan-core`) to discrete operators for PDE
8//! solvers on simplicial meshes. All metric information flows through the
9//! Hodge star; topology is encoded in the metric-free exterior derivative.
10//!
11//! ## Modules
12//!
13//! | Module | Contents |
14//! |--------|----------|
15//! | [`mesh`] | `Mesh<M,K,B>` generic simplicial complex; `FlatMesh` = flat 2D triangular mesh |
16//! | [`exterior`] | `ExteriorDerivative` — d₀ (0-forms to 1-forms) and d₁ (1-forms to 2-forms) |
17//! | [`hodge`] | `HodgeStar` — diagonal ⋆₀, ⋆₁, ⋆₂ from primal/dual volumes |
18//! | [`laplace`] | `Operators` — Laplace-Beltrami, Bochner, and Lichnerowicz Laplacians |
19//! | [`advection`] | Upwind covariant advection for scalar and vector fields |
20//! | [`divergence`] | Discrete covariant divergence of vector and tensor fields |
21//! | [`error`] | `DecError` — error type for DEC operations |
22//!
23//! ## Quick start
24//!
25//! ```rust,no_run
26//! use cartan_dec::{FlatMesh, Operators};
27//! use cartan_manifolds::euclidean::Euclidean;
28//! use nalgebra::DVector;
29//!
30//! // Build a 4x4 uniform grid on [0,1]^2.
31//! let mesh = FlatMesh::unit_square_grid(4);
32//! let ops = Operators::from_mesh(&mesh, &Euclidean::<2>);
33//!
34//! // Apply the scalar Laplacian to a vertex field.
35//! let f = DVector::from_element(mesh.n_vertices(), 1.0);
36//! let lf = ops.apply_laplace_beltrami(&f);
37//! ```
38//!
39//! ## References
40//!
41//! - Desbrun et al. "Discrete Exterior Calculus." arXiv:math/0508341, 2005.
42//! - Hirani. "Discrete Exterior Calculus." Caltech PhD thesis, 2003.
43
44pub mod advection;
45pub mod divergence;
46pub mod error;
47pub mod exterior;
48pub mod hodge;
49pub mod laplace;
50pub mod mesh;
51
52pub use advection::{apply_scalar_advection, apply_vector_advection};
53pub use divergence::{apply_divergence, apply_tensor_divergence};
54pub use error::DecError;
55pub use exterior::ExteriorDerivative;
56pub use hodge::HodgeStar;
57pub use laplace::Operators;
58pub use mesh::{FlatMesh, Mesh};