src/sliding_pdps.rs

changeset 97
f91f382ba4ae
parent 96
5ba25d740dfc
child 98
b9818eb24b47
--- a/src/sliding_pdps.rs	Thu Aug 06 14:33:17 2026 -0500
+++ b/src/sliding_pdps.rs	Fri Aug 14 10:38:27 2026 -0500
@@ -255,13 +255,13 @@
 
         // Solve finite-dimensional subproblem several times until the dual variable for the
         // regularisation term conforms to the assumptions made for the transport above.
-        let (mut τv̆, z_new, μ̆) = 'adapt_transport: loop {
+        let (mut τv̆, mut z̆, μ̆) = 'adapt_transport: loop {
             // Set initial guess for μ=μ^{k+1}.
             γ.μ̆_into(&mut μ);
             let μ̆ = μ.clone();
 
             // Calculate τv̆ = τA_*(A[μ_transported + μ_transported_base]-b)
-            let Pair(v̆, mut z̆) = f.differential(Pair(&μ̆, &z));
+            let Pair(v̆, z̆) = f.differential(Pair(&μ̆, &z));
             let mut τv̆ = v̆ * τ;
             // opKμ.preadjoint().gemv(&mut τv̆, τ, y, 1.0);
 
@@ -277,12 +277,6 @@
                 &mut stats,
             )?;
 
-            // Do z variable primal update here to able to estimate B_{v̆^k-v^{k+1}}
-            opKz_adj.apply_add(&mut z̆, &y);
-            z̆.axpy(1.0, &z, -σ_p);
-            let z_new = fnR.prox(σ_p, z̆);
-            //let z_new = fnR.prox(σ_p, z̆ * (-σ_p) + &z);
-
             // A posteriori transport adaptation.
             if prox_penalty.aposteriori_transport(
                 &mut γ,
@@ -299,12 +293,17 @@
                 &config.insertion.refinement,
                 &mut attempts,
             ) {
-                break 'adapt_transport (τv̆, z_new, μ̆);
+                break 'adapt_transport (τv̆, z̆, μ̆);
             }
         };
 
         γ.get_transport_stats(&mut stats, &μ);
 
+        // Do z variable primal update
+        opKz_adj.apply_add(&mut z̆, &y);
+        z̆.axpy(1.0, &z, -σ_p);
+        let z_new = fnR.prox(σ_p, z̆);
+        //let z_new = fnR.prox(σ_p, z̆ * (-σ_p) + &z);
         // Do dual update
         // opKμ.gemv(&mut y, σ_d*(1.0 + ω), &μ, 1.0);    // y = y + σ_d K[(1+ω)(μ,z)^{k+1}]
         z.axpy(1.0 + ω, &z_new, -ω);

mercurial