@@ -290,28 +290,52 @@ void Fluid<Phys>::CoarsenMagField(IdefixArray4D<real> &Vsin) {
290290 // We reconstruct the parrallel field component with divB=0
291291
292292 int factor = 1 << (coarsening-1 );
293+
294+
293295 if ( (index-begDir)%factor == 0 ) {
296+ real qt = 0 ;
297+ real qb = 0 ;
298+
299+ // Loop forward
294300 for (int shift = 0 ; shift < factor-1 ; shift++) {
295- real qt = Vsin (BXt,k+kt+shift*koffset, j+jt+shift*joffset, i+it+shift*ioffset)
301+ qt + = Vsin (BXt,k+kt+shift*koffset, j+jt+shift*joffset, i+it+shift*ioffset)
296302 * At (k+kt+shift*koffset, j+jt+shift*joffset, i+it+shift*ioffset)
297303 - Vsin (BXt,k+shift*koffset, j+shift*joffset, i+shift*ioffset)
298304 * At (k+shift*koffset, j+shift*joffset, i+shift*ioffset);
299305 #if DIMENSIONS == 3
300- real qb = Vsin (BXb,k+kb+shift*koffset, j+jb+shift*joffset, i+ib+shift*ioffset)
306+ qb + = Vsin (BXb,k+kb+shift*koffset, j+jb+shift*joffset, i+ib+shift*ioffset)
301307 * Ab (k+kb+shift*koffset, j+jb+shift*joffset, i+ib+shift*ioffset)
302308 - Vsin (BXb,k+shift*koffset, j+shift*joffset, i+shift*ioffset)
303309 * Ab (k+shift*koffset, j+shift*joffset, i+shift*ioffset);
304- #else
305- real qb = 0.0 ;
306310 #endif
307311
308312 Vsin (BXn, k+(shift+1 )*koffset, j+(shift+1 )*joffset, i+(shift+1 )*ioffset) =
313+ ((real) (factor-(shift+1 ))) / ((real)factor) *
309314 1.0 /An (k+(shift+1 )*koffset, j+(shift+1 )*joffset, i+(shift+1 )*ioffset) *
310- (
311- Vsin (BXn, k+shift*koffset, j+shift*joffset, i+shift*ioffset) *
312- An (k+shift*koffset, j+shift*joffset, i+shift*ioffset)
313- - qt - qb
314- );
315+ (Vsin (BXn, k, j, i) * An (k, j, i) - qt - qb);
316+ }
317+ // Loop backward
318+ qt = 0 ;
319+ qb = 0 ;
320+
321+ // Loop forward
322+ for (int shift = factor-1 ; shift >=1 ; shift--) {
323+ qt += Vsin (BXt,k+kt+shift*koffset, j+jt+shift*joffset, i+it+shift*ioffset)
324+ * At (k+kt+shift*koffset, j+jt+shift*joffset, i+it+shift*ioffset)
325+ - Vsin (BXt,k+shift*koffset, j+shift*joffset, i+shift*ioffset)
326+ * At (k+shift*koffset, j+shift*joffset, i+shift*ioffset);
327+ #if DIMENSIONS == 3
328+ qb += Vsin (BXb,k+kb+shift*koffset, j+jb+shift*joffset, i+ib+shift*ioffset)
329+ * Ab (k+kb+shift*koffset, j+jb+shift*joffset, i+ib+shift*ioffset)
330+ - Vsin (BXb,k+shift*koffset, j+shift*joffset, i+shift*ioffset)
331+ * Ab (k+shift*koffset, j+shift*joffset, i+shift*ioffset);
332+ #endif
333+
334+ Vsin (BXn, k+shift*koffset, j+shift*joffset, i+shift*ioffset) +=
335+ ((real) shift) / ((real)factor) *
336+ 1.0 /An (k+shift*koffset, j+shift*joffset, i+shift*ioffset) *
337+ (Vsin (BXn, k+factor*koffset, j+factor*joffset, i+factor*ioffset)
338+ * An ( k+factor*koffset, j+factor*joffset, i+factor*ioffset) + qt + qb);
315339 }
316340 }
317341 }
0 commit comments