fork download
  1. #include <iostream>
  2. #include <array>
  3. using namespace std;
  4. template<int32_t num_ghosts,int32_t num_cells,int32_t grid_res>
  5. constexpr std::array<int32_t,num_ghosts> initialize_ghost_to_cell() {
  6. std::array<int32_t,num_ghosts> r{};
  7. int32_t j{0};
  8. for(int32_t i = 0;i < grid_res;++i) r[j++] = i;
  9. for(int32_t i = grid_res;i < num_cells-grid_res;i+=grid_res) {
  10. r[j++] = i;
  11. r[j++] = i+grid_res-1;
  12. }
  13. for(int32_t i = num_cells-grid_res;i < num_cells;++i) r[j++] = i;
  14.  
  15. return r;
  16. }
  17. template<int32_t num_ghosts,int32_t num_cells,int32_t grid_res>
  18. constexpr std::array<int32_t,num_ghosts> initialize_ghost_to_neighbour() {
  19. std::array<int32_t,num_ghosts> r{};
  20. int32_t j{0};
  21. r[j++] = 0;
  22. for(;j < grid_res-1;++j) r[j] = 1;
  23. r[j++] = 2;
  24. for(int32_t i = grid_res;i < num_cells-grid_res;i+=grid_res) {
  25. r[j++] = 7;
  26. r[j++] = 3;
  27. }
  28. r[j++] = 6;
  29. for(int32_t i = num_cells-grid_res+1;i < num_cells-1;++i) r[j++] = 5;
  30. r[j++] = 4;
  31. return r;
  32. }
  33. // 10 9 10 9 6 5 10 9 6 5 6 5
  34. template<int32_t num_ghosts,int32_t num_cells,int32_t grid_res>
  35. constexpr std::array<int32_t,num_ghosts> initialize_ghost_to_neighbour_cell() {
  36. std::array<int32_t,num_ghosts> r{};
  37. int32_t j{0};
  38. r[j++] = num_cells-grid_res-2;
  39. for(int32_t i = num_cells-(2*grid_res)+1;i < num_cells-grid_res-1; ++i) r[j++] = i;
  40. r[j++] = num_cells-(2*grid_res)+1;
  41. for(int32_t i = grid_res;i < num_cells-grid_res;i+=grid_res) {
  42. r[j++] = i + grid_res - 2;
  43. r[j++] = i + 1;
  44. }
  45. r[j++] = 2*grid_res - 2;
  46. for(int32_t i = grid_res + 1;i < 2 * grid_res - 1;++i) r[j++] = i;
  47. r[j++] = grid_res + 1;
  48. return r;
  49. }
  50. int main() {
  51. std::array<int32_t,12> test{initialize_ghost_to_neighbour_cell<12,16,4>()};
  52. for(auto v:test) std::cout << v << " ";std::cout << std::endl;
  53. std::array<int32_t,8> test0{initialize_ghost_to_neighbour_cell<8,9,3>()};
  54. for(auto v:test0) std::cout << v << " ";std::cout << std::endl;
  55. return 0;
  56. }
Success #stdin #stdout 0s 4528KB
stdin
Standard input is empty
stdout
10 9 10 9 6 5 10 9 6 5 6 5 
4 4 4 4 4 4 4 4