@@ -90,14 +90,12 @@ MLCGSolverT<MF>::solve_bicgstab (MF& sol, const MF& rhs, RT eps_rel, RT eps_abs)
9090
9191 const int ncomp = sol.nComp ();
9292
93- MF ph = Lp.make (amrlev, mglev, sol.nGrowVect ());
94- MF sh = Lp.make (amrlev, mglev, sol.nGrowVect ());
95- ph .setVal (RT (0.0 ));
96- sh .setVal (RT (0.0 ));
93+ MF p = Lp.make (amrlev, mglev, sol.nGrowVect ());
94+ MF r = Lp.make (amrlev, mglev, sol.nGrowVect ());
95+ p .setVal (RT (0.0 )); // Make sure all entries are initialized to avoid errors
96+ r .setVal (RT (0.0 ));
9797
9898 MF sorig = Lp.make (amrlev, mglev, nghost);
99- MF p = Lp.make (amrlev, mglev, nghost);
100- MF r = Lp.make (amrlev, mglev, nghost);
10199 MF rh = Lp.make (amrlev, mglev, nghost);
102100 MF v = Lp.make (amrlev, mglev, nghost);
103101 MF t = Lp.make (amrlev, mglev, nghost);
@@ -151,8 +149,7 @@ MLCGSolverT<MF>::solve_bicgstab (MF& sol, const MF& rhs, RT eps_rel, RT eps_abs)
151149 MF::Saxpy (p, -omega, v, 0 , 0 , ncomp, nghost); // p += -omega*v
152150 MF::Xpay (p, beta, r, 0 , 0 , ncomp, nghost); // p = r + beta*p
153151 }
154- ph.LocalCopy (p,0 ,0 ,ncomp,nghost);
155- Lp.apply (amrlev, mglev, v, ph, MLLinOpT<MF>::BCMode::Homogeneous, MLLinOpT<MF>::StateMode::Correction);
152+ Lp.apply (amrlev, mglev, v, p, MLLinOpT<MF>::BCMode::Homogeneous, MLLinOpT<MF>::StateMode::Correction);
156153 Lp.normalize (amrlev, mglev, v);
157154
158155 RT rhTv = dotxy (rh,v);
@@ -164,9 +161,10 @@ MLCGSolverT<MF>::solve_bicgstab (MF& sol, const MF& rhs, RT eps_rel, RT eps_abs)
164161 {
165162 ret = 2 ; break ;
166163 }
167- MF::Saxpy (sol, alpha, ph , 0 , 0 , ncomp, nghost); // sol += alpha * ph
168- MF::Saxpy (r, -alpha, v, 0 , 0 , ncomp, nghost); // r += -alpha * v
164+ MF::Saxpy (sol, alpha, p , 0 , 0 , ncomp, nghost); // sol += alpha * p
165+ MF::Saxpy (r, -alpha, v, 0 , 0 , ncomp, nghost); // r += -alpha * v
169166
167+ rnorm = norm_inf (r);
170168 rnorm = norm_inf (r);
171169
172170 if ( verbose > 2 && ParallelDescriptor::IOProcessor () )
@@ -179,8 +177,7 @@ MLCGSolverT<MF>::solve_bicgstab (MF& sol, const MF& rhs, RT eps_rel, RT eps_abs)
179177
180178 if ( rnorm < eps_rel*rnorm0 || rnorm < eps_abs ) { break ; }
181179
182- sh.LocalCopy (r,0 ,0 ,ncomp,nghost);
183- Lp.apply (amrlev, mglev, t, sh, MLLinOpT<MF>::BCMode::Homogeneous, MLLinOpT<MF>::StateMode::Correction);
180+ Lp.apply (amrlev, mglev, t, r, MLLinOpT<MF>::BCMode::Homogeneous, MLLinOpT<MF>::StateMode::Correction);
184181 Lp.normalize (amrlev, mglev, t);
185182 //
186183 // This is a little funky. I want to elide one of the reductions
@@ -201,8 +198,8 @@ MLCGSolverT<MF>::solve_bicgstab (MF& sol, const MF& rhs, RT eps_rel, RT eps_abs)
201198 {
202199 ret = 3 ; break ;
203200 }
204- MF::Saxpy (sol, omega, sh , 0 , 0 , ncomp, nghost); // sol += omega * sh
205- MF::Saxpy (r, -omega, t, 0 , 0 , ncomp, nghost); // r += -omega * t
201+ MF::Saxpy (sol, omega, r , 0 , 0 , ncomp, nghost); // sol += omega * r
202+ MF::Saxpy (r, -omega, t, 0 , 0 , ncomp, nghost); // r += -omega * t
206203
207204 rnorm = norm_inf (r);
208205
0 commit comments