//! Phase-0 benchmark: residual + Jacobian assembly pass over the full system. //! //! Measures the cost of evaluating all component residuals and analytical //! Jacobian entries once — the per-Newton-iteration work that dominates solver //! runtime for real cycles. use criterion::{black_box, criterion_group, criterion_main, Criterion}; use entropyk_components::JacobianBuilder; use entropyk_components::ResidualVector; mod common; fn bench_residual_assembly(c: &mut Criterion) { let (system, state) = common::build_mock_system(); let mut residuals = ResidualVector::with_capacity(system.full_state_vector_len()); c.bench_function("residual_assembly_mock", |b| { b.iter(|| { residuals.clear(); residuals.resize(system.full_state_vector_len(), 0.0); let _: () = system.compute_residuals(&state, &mut residuals).unwrap(); black_box(()); }); }); } fn bench_jacobian_assembly(c: &mut Criterion) { let (system, state) = common::build_mock_system(); c.bench_function("jacobian_assembly_mock", |b| { b.iter(|| { let mut builder = JacobianBuilder::new(); let _: () = system.assemble_jacobian(&state, &mut builder).unwrap(); black_box(()); }); }); } criterion_group!(benches, bench_residual_assembly, bench_jacobian_assembly); criterion_main!(benches);