282 operator()(
const int local_subdomain_id,
const int x_fine,
const int y_fine,
const int r_fine )
const
284 for (
int dim = 0; dim < 3; ++dim )
287 (void) fine_hex_fine;
289 if ( x_fine % 2 == 0 && y_fine % 2 == 0 && r_fine % 2 == 0 )
291 const auto x_coarse = x_fine / 2;
292 const auto y_coarse = y_fine / 2;
293 const auto r_coarse = r_fine / 2;
295 dst_( local_subdomain_id, x_fine, y_fine, r_fine, dim ) +=
296 src_( local_subdomain_id, x_coarse, y_coarse, r_coarse, dim );
301 const auto r_coarse_bot = r_fine < dst_.
extent( 3 ) - 1 ? r_fine / 2 : r_fine / 2 - 1;
302 const auto r_coarse_top = r_coarse_bot + 1;
304 if ( x_fine % 2 == 0 && y_fine % 2 == 0 )
306 const auto x_coarse = x_fine / 2;
307 const auto y_coarse = y_fine / 2;
315 dst_( local_subdomain_id, x_fine, y_fine, r_fine, dim ) +=
316 weights( 0 ) * src_( local_subdomain_id, x_coarse, y_coarse, r_coarse_bot, dim ) +
317 weights( 1 ) * src_( local_subdomain_id, x_coarse, y_coarse, r_coarse_top, dim );
328 if ( x_fine % 2 == 0 )
331 x_coarse_0 = x_fine / 2;
332 x_coarse_1 = x_fine / 2;
334 y_coarse_0 = y_fine / 2;
335 y_coarse_1 = y_fine / 2 + 1;
337 else if ( y_fine % 2 == 0 )
340 x_coarse_0 = x_fine / 2;
341 x_coarse_1 = x_fine / 2 + 1;
343 y_coarse_0 = y_fine / 2;
344 y_coarse_1 = y_fine / 2;
349 x_coarse_0 = x_fine / 2 + 1;
350 x_coarse_1 = x_fine / 2;
352 y_coarse_0 = y_fine / 2;
353 y_coarse_1 = y_fine / 2 + 1;
363 dst_( local_subdomain_id, x_fine, y_fine, r_fine, dim ) +=
364 weights( 0 ) * src_( local_subdomain_id, x_coarse_0, y_coarse_0, r_coarse_bot, dim ) +
365 weights( 0 ) * src_( local_subdomain_id, x_coarse_1, y_coarse_1, r_coarse_bot, dim ) +
366 weights( 1 ) * src_( local_subdomain_id, x_coarse_0, y_coarse_0, r_coarse_top, dim ) +
367 weights( 1 ) * src_( local_subdomain_id, x_coarse_1, y_coarse_1, r_coarse_top, dim );