caustic 0.0.12

A General-Purpose 6D Collisionless Gravitational Dynamics Solver
Documentation
[package]
name = "caustic"
version = "0.0.12"
edition = "2024"
description = "A General-Purpose 6D Collisionless Gravitational Dynamics Solver"
authors = ["Albin <albin@sjoegren.se>"]
license = "GPL-3.0"
repository = "https://github.com/resonant-jovian/caustic"
documentation = "https://docs.rs/caustic"
keywords = ["vlasov", "poisson", "simulation", "physics"]
categories = ["science", "simulation"]

[dependencies]
rust_decimal = "1.40.0" # High accuracy float handling
anyhow = "1.0.102"  # Error handling
thiserror = "2.0.18" # Error handling
rustfft = "6.4.1"   # FFT Poisson solver
rayon = "1.11.0"     # data-parallel loops over 6D grid
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
realfft = "3.5.0"    # Real-to-complex FFT (Hermitian symmetry)
tracing = "0.1.44"   # Zero-cost instrumentation spans
faer = "0.24.0"      # SVD, QR, LU — pure Rust, SIMD-accelerated
hdf5-metno = { version = "0.12.4", optional = true }
mpi = { version = "0.8.1", optional = true }

# Optional allocator / profiling deps behind feature flags
dhat = { version = "0.3.3", optional = true }
tikv-jemallocator = { version = "0.6.1", optional = true }
mimalloc = { version = "0.1.48", optional = true }
tracing-tracy = { version = "0.11.4", optional = true }

[dev-dependencies]
criterion = { version = "0.8.2", features = ["html_reports"] }

[features]
default = []
hdf5 = ["dep:hdf5-metno"]
mpi = ["dep:mpi"]
jemalloc = ["dep:tikv-jemallocator"]
mimalloc-alloc = ["dep:mimalloc"]
dhat-heap = ["dep:dhat"]
tracy = ["dep:tracing-tracy"]

[[bench]]
name = "solver_kernels"
harness = false

[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"

[profile.profiling]
inherits = "release"
debug = true
strip = "none"

[lints.rust]
unsafe_code = "deny"
warnings = "forbid"
non_ascii_idents = "allow"
non_snake_case = "allow"
dead_code = "allow"
unused_variables = "allow"
unused_imports = "allow"
deprecated = "allow"
non_upper_case_globals = "allow"
non_camel_case_types = "allow"
unused_attributes = "allow"

[lints.clippy]
unwrap_used = "deny"
expect_used = "deny"
unwrap_in_result = "deny"
get_unwrap = "deny"
panic = "deny"
needless_range_loop = "allow"
too_many_arguments = "allow"
excessive_precision = "allow"