Crate amari_calculus

Crate amari_calculus 

Source
Expand description

§Amari Calculus

Geometric calculus - a unified framework for differential and integral calculus using geometric algebra.

§Overview

This crate provides geometric calculus operations that unify:

  • Vector calculus (gradient, divergence, curl)
  • Differential forms
  • Tensor calculus
  • Covariant derivatives on manifolds

§Mathematical Foundation

Geometric calculus is built on the vector derivative operator:

∇ = e^i ∂_i  (sum over basis vectors)

This operator combines:

  • Dot product → divergence (∇·F)
  • Wedge product → curl (∇∧F)
  • Full geometric product → complete derivative (∇F = ∇·F + ∇∧F)

§Key Features

  • Vector Derivative Operator: The fundamental ∇ operator
  • Classical Operators: Gradient, divergence, curl, Laplacian
  • Manifold Calculus: Covariant derivatives, connections, geodesics
  • Lie Derivatives: Derivatives along vector fields
  • Integration: Integration on manifolds using amari-measure
  • Fundamental Theorem: ∫V (∇F) dV = ∮∂V F dS

§Examples

§Gradient of a scalar field

use amari_calculus::{ScalarField, VectorDerivative, CoordinateSystem};
use amari_core::Multivector;

// Define scalar field f(x, y) = x² + y²
let f = ScalarField::<3, 0, 0>::new(|coords| {
    coords[0].powi(2) + coords[1].powi(2)
});

// Create vector derivative operator
let nabla = VectorDerivative::<3, 0, 0>::new(CoordinateSystem::Cartesian);

// Compute gradient at point (1, 2)
let grad_f = nabla.gradient(&f, &[1.0, 2.0, 0.0]);

// Gradient should be approximately (2, 4, 0)

§Divergence of a vector field

use amari_calculus::{VectorField, VectorDerivative, CoordinateSystem, vector_from_slice};

// Define vector field F(x, y, z) = (x, y, z)
let f = VectorField::<3, 0, 0>::new(|coords| {
    vector_from_slice(&[coords[0], coords[1], coords[2]])
});

let nabla = VectorDerivative::<3, 0, 0>::new(CoordinateSystem::Cartesian);

// Compute divergence (should be 3)
let div_f = nabla.divergence(&f, &[1.0, 1.0, 1.0]);

§Curl of a vector field

use amari_calculus::{VectorField, VectorDerivative, CoordinateSystem, vector_from_slice};

// Define vector field F(x, y, z) = (-y, x, 0) (rotation around z-axis)
let f = VectorField::<3, 0, 0>::new(|coords| {
    vector_from_slice(&[-coords[1], coords[0], 0.0])
});

let nabla = VectorDerivative::<3, 0, 0>::new(CoordinateSystem::Cartesian);

// Compute curl (should be (0, 0, 2) bivector representing rotation)
let curl_f = nabla.curl(&f, &[0.0, 0.0, 0.0]);

Re-exports§

pub use fields::MultivectorField;
pub use fields::ScalarField;
pub use fields::VectorField;
pub use operators::curl;
pub use operators::divergence;
pub use operators::gradient;
pub use operators::laplacian;
pub use manifold::RiemannianManifold;

Modules§

fields
Field types for geometric calculus
manifold
Manifold calculus - covariant derivatives and connections
operators
Classical differential operators (gradient, divergence, curl, Laplacian)
prelude
Prelude module for convenient imports

Structs§

LieDerivative
Lie derivative operator
ManifoldIntegrator
Integrator for scalar and multivector fields on manifolds
VectorDerivative
Vector derivative operator ∇

Enums§

CalculusError
Errors that can occur during calculus operations
CoordinateSystem
Coordinate systems for differential operators

Functions§

vector_from_slice
Utility function to create a vector multivector from a slice of components

Type Aliases§

CalculusResult
Result type for calculus operations