//! Phase-0 benchmark: dense LU solve on an assembled Jacobian. //! //! The Jacobian is taken from the deterministic mock refrigeration cycle so the //! benchmark is independent of the heavy CoolProp backend and measures only the //! linear algebra path used by the Newton solver (Ruiz equilibration + LU). use criterion::{black_box, criterion_group, criterion_main, Criterion}; mod common; fn bench_lu_solve(c: &mut Criterion) { let (system, state) = common::build_mock_system(); let jacobian = common::assemble_jacobian(&system, &state); // Residual vector at the analytical solution is non-zero for the mock // components because they read from fixed ports, not from the state slice. // We therefore benchmark the LU solve with a representative RHS. let residuals: Vec = (0..jacobian.nrows()) .map(|i| state[i].sin() * 1e-3) .collect(); c.bench_function("lu_solve_mock_9x9", |b| { b.iter(|| { black_box(jacobian.solve(&residuals)); }); }); } criterion_group!(benches, bench_lu_solve); criterion_main!(benches);