8#ifndef OPENFPM_DATA_SRC_SPARSEGRID_SPARSEGRIDUTIL_HPP_
9#define OPENFPM_DATA_SRC_SPARSEGRID_SPARSEGRIDUTIL_HPP_
11const static int cnk_pos = 0;
12const static int cnk_nele = 1;
13const static int cnk_mask = 2;
15#include "util/sparsegrid_util_common.hpp"
21#define FLUSH_REMOVE 1024
30template <
typename n_ele,
typename T>
37template <
typename n_ele,
typename T,
int N1>
44template<
unsigned int dim>
47 static const int nNN = 2*dim;
49 static const int is_cross =
false;
62template<
unsigned int dim,
unsigned int stencil_size,
typename vector_blocks_ext,
typename vector_ext>
81 sz_tot[T::value] = boost::mpl::at<typename vector_blocks_ext::type,boost::mpl::int_<T::value>>::type::value * boost::mpl::at<vector_ext,boost::mpl::int_<T::value>>::type::value + 2*stencil_size;
82 sz_ext[T::value] = boost::mpl::at<vector_ext,boost::mpl::int_<T::value>>::type::value;
83 sz_ext_b[T::value] = boost::mpl::at<vector_ext,boost::mpl::int_<T::value>>::type::value + 2*stencil_size;
84 sz_block[T::value] = boost::mpl::at<typename vector_blocks_ext::type,boost::mpl::int_<T::value>>::type::value;
88template<
unsigned int dim>
99 typedef boost::mpl::vector<boost::mpl::int_<128>> type;
101 typedef boost::mpl::vector<boost::mpl::int_<7>>
shift;
103 typedef boost::mpl::vector<boost::mpl::int_<7>> shift_c;
105 typedef boost::mpl::int_<128> size;
111 typedef boost::mpl::vector<boost::mpl::int_<32>,
112 boost::mpl::int_<32>> type;
114 typedef boost::mpl::vector<boost::mpl::int_<5>,
115 boost::mpl::int_<5>>
shift;
117 typedef boost::mpl::vector<boost::mpl::int_<5>,
118 boost::mpl::int_<10>> shift_c;
120 typedef boost::mpl::int_<1024> size;
126 typedef boost::mpl::vector<boost::mpl::int_<16>,
127 boost::mpl::int_<16>,
128 boost::mpl::int_<16>> type;
130 typedef boost::mpl::vector<boost::mpl::int_<4>,
132 boost::mpl::int_<4>>
shift;
134 typedef boost::mpl::vector<boost::mpl::int_<4>,
136 boost::mpl::int_<12>> shift_c;
138 typedef boost::mpl::int_<4096> size;
140 typedef boost::mpl::int_<1736> bord_size;
146 typedef boost::mpl::vector<boost::mpl::int_<8>,
149 boost::mpl::int_<8>> type;
151 typedef boost::mpl::vector<boost::mpl::int_<3>,
154 boost::mpl::int_<3>>
shift;
156 typedef boost::mpl::vector<boost::mpl::int_<3>,
159 boost::mpl::int_<12>> shift_c;
161 typedef boost::mpl::int_<4096> size;
167 typedef boost::mpl::vector<boost::mpl::int_<4>,
171 boost::mpl::int_<4>> type;
173 typedef boost::mpl::vector<boost::mpl::int_<2>,
177 boost::mpl::int_<2>>
shift;
179 typedef boost::mpl::vector<boost::mpl::int_<2>,
183 boost::mpl::int_<10>> shift_c;
185 typedef boost::mpl::int_<1024> size;
192 typedef boost::mpl::vector<boost::mpl::int_<4>,
197 boost::mpl::int_<4>> type;
199 typedef boost::mpl::vector<boost::mpl::int_<2>,
204 boost::mpl::int_<2>> shift_c;
206 typedef boost::mpl::vector<boost::mpl::int_<2>,
210 boost::mpl::int_<10>,
211 boost::mpl::int_<12>>
shift;
213 typedef boost::mpl::int_<4096> size;
220 typedef boost::mpl::vector<boost::mpl::int_<64>,
226 boost::mpl::int_<1>> type;
228 typedef boost::mpl::vector<boost::mpl::int_<6>,
234 boost::mpl::int_<0>>
shift;
236 typedef boost::mpl::vector<boost::mpl::int_<6>,
238 boost::mpl::int_<10>,
239 boost::mpl::int_<10>,
240 boost::mpl::int_<10>,
241 boost::mpl::int_<10>,
242 boost::mpl::int_<10>> shift_c;
244 typedef boost::mpl::int_<1024> size;
251 typedef boost::mpl::vector<boost::mpl::int_<64>,
258 boost::mpl::int_<1>> type;
260 typedef boost::mpl::vector<boost::mpl::int_<6>,
267 boost::mpl::int_<0>>
shift;
269 typedef boost::mpl::vector<boost::mpl::int_<6>,
271 boost::mpl::int_<10>,
272 boost::mpl::int_<10>,
273 boost::mpl::int_<10>,
274 boost::mpl::int_<10>,
275 boost::mpl::int_<10>,
276 boost::mpl::int_<10>> shift_c;
278 typedef boost::mpl::int_<1024> size;
281template<
unsigned int dim,
291template<
unsigned int dim,
typename chunk>
296 std::cerr << __FILE__ <<
":" << __LINE__ <<
" error dimensionality " << dim <<
" is not implemented" << std::endl;
300template<
unsigned int dim,
typename chunk>
305 std::cerr << __FILE__ <<
":" << __LINE__ <<
" error dimensionality " << dim <<
" is not implemented" << std::endl;
311template<
typename chunk>
316 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<0>>::type::value -1));
317 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
322 kh.
set_d(0,kh.
get(0) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
326template<
typename chunk>
335template<
typename chunk>
340 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<0>>::type::value-1));
341 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
342 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<1>>::type::value-1));
343 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<1>>::type::value);
348 kh.
set_d(0,kh.
get(0) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
349 kh.
set_d(1,kh.
get(1) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<1>>::type::value);
353template<
typename chunk>
358 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
362template<
typename chunk>
367 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<0>>::type::value - 1));
368 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
369 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<1>>::type::value - 1));
370 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<1>>::type::value);
371 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<
typename chunk::type,boost::mpl::int_<2>>::type::value - 1));
372 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<
typename chunk::shift,boost::mpl::int_<2>>::type::value);
377 kh.
set_d(0,kh.
get(0) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<0>>::type::value);
378 kh.
set_d(1,kh.
get(1) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<1>>::type::value);
379 kh.
set_d(2,kh.
get(2) << boost::mpl::at<
typename chunk::shift,boost::mpl::int_<2>>::type::value);
383template<
typename chunk>
388 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
389 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
393template<
typename chunk>
398 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value - 1));
399 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
400 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value - 1));
401 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
402 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value - 1));
403 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
404 kl.
set_d(3,kh.
get(3) & (boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value - 1));
405 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
410 kh.
set_d(0,kh.
get(0) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
411 kh.
set_d(1,kh.
get(1) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
412 kh.
set_d(2,kh.
get(2) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
413 kh.
set_d(3,kh.
get(3) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
418template<
typename chunk>
423 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
424 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value) +
425 (k.get(3) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
429template<
typename chunk>
434 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value - 1));
435 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
436 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value - 1));
437 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
438 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value - 1));
439 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
440 kl.
set_d(3,kh.
get(3) & (boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value - 1));
441 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
442 kl.
set_d(4,kh.
get(4) & (boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value - 1));
443 kh.
set_d(4,kh.
get(4) >> boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
448 kh.
set_d(0,kh.
get(0) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
449 kh.
set_d(1,kh.
get(1) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
450 kh.
set_d(2,kh.
get(2) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
451 kh.
set_d(3,kh.
get(3) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
452 kh.
set_d(4,kh.
get(4) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
457template<
typename chunk>
462 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
463 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value) +
464 (k.get(3) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value) +
465 (k.get(4) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
469template<
typename chunk>
474 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value - 1));
475 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
476 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value - 1));
477 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
478 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value - 1));
479 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
480 kl.
set_d(3,kh.
get(3) & (boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value - 1));
481 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
482 kl.
set_d(4,kh.
get(4) & (boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value - 1));
483 kh.
set_d(4,kh.
get(4) >> boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
484 kl.
set_d(5,kh.
get(5) & (boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value - 1));
485 kh.
set_d(5,kh.
get(5) >> boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
490 kh.
set_d(0,kh.
get(0) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
491 kh.
set_d(1,kh.
get(1) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
492 kh.
set_d(2,kh.
get(2) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
493 kh.
set_d(3,kh.
get(3) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
494 kh.
set_d(4,kh.
get(4) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
495 kh.
set_d(5,kh.
get(5) << boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
499template<
typename chunk>
504 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
505 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value) +
506 (k.get(3) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value) +
507 (k.get(4) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value) +
508 (k.get(5) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
514template<
typename chunk>
519 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value - 1));
520 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
521 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value - 1));
522 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
523 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value - 1));
524 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
525 kl.
set_d(3,kh.
get(3) & (boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value - 1));
526 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
527 kl.
set_d(4,kh.
get(4) & (boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value - 1));
528 kh.
set_d(4,kh.
get(4) >> boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
529 kl.
set_d(5,kh.
get(5) & (boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value - 1));
530 kh.
set_d(5,kh.
get(5) >> boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
531 kl.
set_d(6,kh.
get(6) & (boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value - 1));
532 kh.
set_d(6,kh.
get(6) >> boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value);
537 kh.
set_d(0,kh.
get(0) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
538 kh.
set_d(1,kh.
get(1) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
539 kh.
set_d(2,kh.
get(2) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
540 kh.
set_d(3,kh.
get(3) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
541 kh.
set_d(4,kh.
get(4) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
542 kh.
set_d(5,kh.
get(5) << boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
543 kh.
set_d(6,kh.
get(6) << boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value);
547template<
typename chunk>
552 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
553 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value) +
554 (k.get(3) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value) +
555 (k.get(4) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value) +
556 (k.get(5) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value) +
557 (k.get(6) << boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
561template<
typename chunk>
566 kl.
set_d(0,kh.
get(0) & (boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value - 1));
567 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
568 kl.
set_d(1,kh.
get(1) & (boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value - 1));
569 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
570 kl.
set_d(2,kh.
get(2) & (boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value - 1));
571 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
572 kl.
set_d(3,kh.
get(3) & (boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value - 1));
573 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
574 kl.
set_d(4,kh.
get(4) & (boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value - 1));
575 kh.
set_d(4,kh.
get(4) >> boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
576 kl.
set_d(5,kh.
get(5) & (boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value - 1));
577 kh.
set_d(5,kh.
get(5) >> boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
578 kl.
set_d(6,kh.
get(6) & (boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value - 1));
579 kh.
set_d(6,kh.
get(6) >> boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value);
580 kl.
set_d(7,kh.
get(7) & (boost::mpl::at<chunk,boost::mpl::int_<7>>::type::value - 1));
581 kh.
set_d(7,kh.
get(7) >> boost::mpl::at<chunk,boost::mpl::int_<7>>::type::value);
586 kh.
set_d(0,kh.
get(0) >> boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value);
587 kh.
set_d(1,kh.
get(1) >> boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value);
588 kh.
set_d(2,kh.
get(2) >> boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value);
589 kh.
set_d(3,kh.
get(3) >> boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value);
590 kh.
set_d(4,kh.
get(4) >> boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value);
591 kh.
set_d(5,kh.
get(5) >> boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value);
592 kh.
set_d(6,kh.
get(6) >> boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value);
593 kh.
set_d(7,kh.
get(7) >> boost::mpl::at<chunk,boost::mpl::int_<7>>::type::value);
597template<
typename chunk>
602 return k.get(0) + (k.get(1) << boost::mpl::at<chunk,boost::mpl::int_<0>>::type::value) +
603 (k.get(2) << boost::mpl::at<chunk,boost::mpl::int_<1>>::type::value) +
604 (k.get(3) << boost::mpl::at<chunk,boost::mpl::int_<2>>::type::value) +
605 (k.get(4) << boost::mpl::at<chunk,boost::mpl::int_<3>>::type::value) +
606 (k.get(5) << boost::mpl::at<chunk,boost::mpl::int_<4>>::type::value) +
607 (k.get(6) << boost::mpl::at<chunk,boost::mpl::int_<5>>::type::value) +
608 (k.get(7) << boost::mpl::at<chunk,boost::mpl::int_<6>>::type::value);
617 template<
unsigned int p,
typename chunks_vector_type>
618 static T & get(chunks_vector_type & chunks,
size_t active_cnk,
int ele_id)
620 return chunks.template get<p>(active_cnk)[ele_id];
623 template<
unsigned int p,
typename chunks_vector_type>
624 static const T & get_const(chunks_vector_type & chunks,
size_t active_cnk,
int ele_id)
626 return chunks.template get<p>(active_cnk)[ele_id];
630template<
typename T,
unsigned int N1>
633 template<
unsigned int p,
typename chunks_vector_type>
636 return std_array_vector_view<
decltype(chunks.template get<p>(active_cnk))>(ele_id,chunks.template get<p>(active_cnk));
639 template<
unsigned int p,
typename chunks_vector_type>
642 return std_array_vector_view<
decltype(chunks.template get<p>(active_cnk))>(ele_id,chunks.template get<p>(active_cnk));
grid_key_dx is the key to access any element in the grid
__device__ __host__ void set_d(index_type i, index_type id)
Set the i index.
__device__ __host__ index_type get(index_type i) const
Get the i index.
transform T=aggregate<float,double,int> into aggregate<std::array<float,n_ele>,std::array<double,...
this class is a functor for "for_each" algorithm
size_t sz_block[dim]
sizes
size_t sz_tot[dim]
sizes in point with border
void operator()(T &val)
It call the copy function for each property.
size_t sz_ext_b[dim]
sizes with border block
size_t sz_ext[dim]
sizes blocks
Transform the boost::fusion::vector into memory specification (memory_traits)