diff -r e2953ffd4e0b -r e9a460a0e638 src/forward_model/sensor_grid.rs --- a/src/forward_model/sensor_grid.rs Fri May 15 14:40:02 2026 -0500 +++ b/src/forward_model/sensor_grid.rs Sun Jul 19 07:34:39 2026 +0200 @@ -118,14 +118,7 @@ ) -> Self { let base_sensor = Convolution(sensor.clone(), spread.clone()); let bt = BT::new(domain, depth); - let mut sensorgrid = SensorGrid { - domain, - sensor_count, - sensor, - spread, - base_sensor, - bt, - }; + let mut sensorgrid = SensorGrid { domain, sensor_count, sensor, spread, base_sensor, bt }; for (x, id) in sensorgrid.grid().into_iter().zip(0usize..) { let s = sensorgrid.shifted_sensor(x); @@ -173,7 +166,7 @@ }); w.iter() .zip(d.iter()) - .map(|(&wi, &di)| (wi / di).ceil()) + .map(|(&wi, &di)| (wi / di).ceil() + F::ONE) .reduce(F::mul) .unwrap() } @@ -349,14 +342,15 @@ for<'b> as DifferentiableMapping>>::Differential<'b>: Lipschitz, { - fn basic_curvature_bound_components(&self) -> (DynResult, DynResult) { + fn basic_curvature_bound_components(&self) -> (DynResult, DynResult, DynResult) { let n_ψ = self.max_overlapping(); let ψ_diff_lip = self.base_sensor.diff_ref().lipschitz_factor(L2); let ψ_lip = self.base_sensor.lipschitz_factor(L2); - let ℓ_F0 = ψ_diff_lip.map(|l| (2.0 * n_ψ).sqrt() * l); + let ℓ_gradv_0 = ψ_diff_lip.map(|l| n_ψ * l); let Θ2 = ψ_lip.map(|l| 4.0 * n_ψ * l.powi(2)); + let ℓ_F = Ok(0.0); // convex problem - (ℓ_F0, Θ2) + (ℓ_F, ℓ_gradv_0, Θ2) } }