12 vector<double> coords;
13 std::vector<unsigned> neighbors_indices;
15 bool on_border =
false;
20 inline vector<MESH_ITEM>
grid2(
double length,
double width,
double mesh_length,
bool share){
21 auto calculate_mesh_index = [](
unsigned i,
unsigned j,
unsigned x_n) {
24 auto find_neighborhood=[&](
unsigned i,
unsigned j,
unsigned x_n,
unsigned y_n){
25 vector<unsigned> neighbor_indices;
26 unsigned neighbor_numbers = 8;
27 int* x_index =
new int [neighbor_numbers];
28 int* y_index =
new int [neighbor_numbers];
31 for (
int ii = -1; ii <= 1; ii++){
32 for (
int jj = -1; jj <= 1; jj++ ){
33 if (ii == 0 & jj == 0)
continue;
34 x_index[counter] =
i + ii;
35 y_index[counter] = j + jj;
40 for (
unsigned iter = 0;
iter < neighbor_numbers;
iter++) {
42 if (x_index[
iter] < 0){
44 x_index[
iter] = x_n - 1;
47 if (y_index[
iter] < 0){
49 y_index[
iter] = y_n -1;
52 if (x_index[
iter] >= x_n){
57 if (y_index[
iter] >= y_n){
62 auto neighbor_index = calculate_mesh_index(x_index[
iter],y_index[
iter],x_n);
64 neighbor_indices.push_back(neighbor_index);
67 return neighbor_indices;
70 vector<MESH_ITEM> meshes;
71 unsigned x_n = length/mesh_length;
72 unsigned y_n = width/mesh_length;
73 unsigned mesh_count =0;
74 for (
unsigned j=0; j<y_n; j++){
75 for (
unsigned i=0;
i<x_n;
i++){
77 auto x = (mesh_length/2)+
i*mesh_length;
78 auto y = (mesh_length/2)+j*mesh_length;
80 vector<double> coords = {
x,y,z};
81 auto mesh_index = calculate_mesh_index(
i,j,x_n);
82 auto neighbor_indices = find_neighborhood(
i,j,x_n,y_n);
83 MESH_ITEM mesh_item = {mesh_index,coords,neighbor_indices,0};
84 if (
i==0 or
i == x_n -1 or j ==0 or j == y_n-1){
87 meshes.push_back(mesh_item);
92 auto message = to_string(mesh_count) +
" mesh generated";
96 inline vector<MESH_ITEM>
grid3(
double length,
double width,
double height,
double mesh_length,
bool share){
97 auto calculate_mesh_index = [](
unsigned i,
unsigned j,
unsigned k,
unsigned x_n,
unsigned y_n) {
98 return (k*y_n*x_n + j*x_n +
i);
100 auto find_neighborhood=[&](
unsigned i,
unsigned j,
unsigned z,
unsigned x_n,
unsigned y_n,
unsigned z_n){
101 vector<unsigned> neighbor_indices;
102 unsigned neighbor_numbers = 26;
103 int* x_index =
new int [neighbor_numbers];
104 int* y_index =
new int [neighbor_numbers];
105 int* z_index =
new int [neighbor_numbers];
108 for (
int ii = -1; ii <= 1; ii++){
109 for (
int jj = -1; jj <= 1; jj++ ){
110 for (
int kk = -1; kk <= 1; kk++ ){
111 if (ii == 0 & jj == 0 & kk == 0)
continue;
112 x_index[counter] =
i + ii;
113 y_index[counter] = j + jj;
114 z_index[counter] = z + kk;
120 for (
unsigned iter = 0;
iter < neighbor_numbers;
iter++) {
122 if (x_index[
iter] < 0){
124 x_index[
iter] = x_n - 1;
127 if (y_index[
iter] < 0){
129 y_index[
iter] = y_n -1;
132 if (x_index[
iter] >= x_n){
137 if (y_index[
iter] >= y_n){
142 if (z_index[
iter] < 0){
144 z_index[
iter] = x_n - 1;
147 if (z_index[
iter] >= z_n){
155 auto neighbor_index = calculate_mesh_index(x_index[
iter],y_index[
iter],z_index[
iter],x_n,y_n);
157 neighbor_indices.push_back(neighbor_index);
160 return neighbor_indices;
163 vector<MESH_ITEM> meshes;
166 unsigned x_n = length/mesh_length;
167 unsigned y_n = width/mesh_length;
168 unsigned z_n = height/mesh_length;
169 unsigned mesh_count =0;
172 for (
unsigned k=0; k<z_n; k++){
173 for (
unsigned j=0; j<y_n; j++){
174 for (
unsigned i=0;
i<x_n;
i++){
175 auto x = (mesh_length/2)+
i*mesh_length;
176 auto y = (mesh_length/2)+j*mesh_length;
177 auto z = (mesh_length/2)+k*mesh_length;
178 vector<double> coords = {
x,y,z};
179 auto mesh_index = calculate_mesh_index(
i,j,k,x_n,y_n);
180 auto neighbor_indices = find_neighborhood(
i,j,k,x_n,y_n,z_n);
181 MESH_ITEM mesh_item = {mesh_index,coords,neighbor_indices,k};
182 meshes.push_back(mesh_item);
188 auto message = to_string(mesh_count) +
" mesh generated";