1
- #include <stdlib.h>
1
+ #include "3dparty/ini_parser/ini.h"
2
+ #include "3dparty/stb_ds.h"
2
3
#include "alg/cell/cell.h"
3
4
#include "alg/grid/grid.h"
4
- #include "3dparty/ini_parser/ini .h"
5
+ #include "config/config_parser .h"
5
6
#include "config/domain_config.h"
6
7
#include "eikonal/eikonal_solver.h"
7
- #include "3dparty/stb_ds.h"
8
8
#include "logger/logger.h"
9
- #include "config/config_parser .h"
10
-
9
+ #include "utils/file_utils .h"
10
+ #include <stdlib.h>
11
11
12
12
static int compare_coordinates (const void * a , const void * b ) {
13
13
14
14
struct cell_node * coord1 = * (struct cell_node * * ) a ;
15
15
struct cell_node * coord2 = * (struct cell_node * * ) b ;
16
16
17
17
if (coord1 -> center .y != coord2 -> center .y ) {
18
- return coord1 -> center .y - coord2 -> center .y ;
18
+ return ( int ) ( coord1 -> center .y - coord2 -> center .y ) ;
19
19
}
20
20
21
21
if (coord1 -> center .x != coord2 -> center .x ) {
22
- return coord1 -> center .x - coord2 -> center .x ;
22
+ return ( int ) ( coord1 -> center .x - coord2 -> center .x ) ;
23
23
}
24
24
25
25
26
- return coord1 -> center .z - coord2 -> center .z ;
26
+ return ( int ) ( coord1 -> center .z - coord2 -> center .z ) ;
27
27
28
28
}
29
29
@@ -59,10 +59,15 @@ int main(int argc, char *argv[]) {
59
59
60
60
}
61
61
62
+ //Translating to 0
62
63
for (int i = 0 ; i < grid -> num_active_cells ; i ++ ) {
63
- int new_pos_x = (grid -> active_cells [i ]-> center .x - grid -> active_cells [i ]-> discretization .x /2 )/grid -> active_cells [i ]-> discretization .x ;
64
- int new_pos_y = (grid -> active_cells [i ]-> center .y - grid -> active_cells [i ]-> discretization .y /2 )/grid -> active_cells [i ]-> discretization .y ;
65
- int new_pos_z = (grid -> active_cells [i ]-> center .z - grid -> active_cells [i ]-> discretization .z /2 )/grid -> active_cells [i ]-> discretization .z ;
64
+ double new_pos_x = (grid -> active_cells [i ]-> center .x - grid -> active_cells [i ]-> discretization .x /2.0 )/grid -> active_cells [i ]-> discretization .x ;
65
+ double new_pos_y = (grid -> active_cells [i ]-> center .y - grid -> active_cells [i ]-> discretization .y /2.0 )/grid -> active_cells [i ]-> discretization .y ;
66
+ double new_pos_z = (grid -> active_cells [i ]-> center .z - grid -> active_cells [i ]-> discretization .z /2.0 )/grid -> active_cells [i ]-> discretization .z ;
67
+
68
+ if (new_pos_x != floor (new_pos_x ) || new_pos_y != floor (new_pos_y ) || new_pos_z != floor (new_pos_z )) {
69
+ log_error_and_exit ("The current version only accepts integer coordinates\n" );
70
+ }
66
71
67
72
grid -> active_cells [i ]-> center .x = new_pos_x ;
68
73
grid -> active_cells [i ]-> center .y = new_pos_y ;
@@ -72,25 +77,46 @@ int main(int argc, char *argv[]) {
72
77
size_t itersPerBlock = 10 , type = 1 ;
73
78
74
79
struct eikonal_solver * solver = new_eikonal_solver (false);
75
- solver -> width = grid -> cube_side_length .x /grid -> active_cells [0 ]-> discretization .x ;
76
- solver -> height = grid -> cube_side_length .y /grid -> active_cells [0 ]-> discretization .y ;
77
- solver -> depth = grid -> cube_side_length .z /grid -> active_cells [0 ]-> discretization .z ;
80
+ solver -> width = ( int ) ( grid -> cube_side_length .x /grid -> active_cells [0 ]-> discretization .x ) ;
81
+ solver -> height = ( int ) ( grid -> cube_side_length .y /grid -> active_cells [0 ]-> discretization .y ) ;
82
+ solver -> depth = ( int ) ( grid -> cube_side_length .z /grid -> active_cells [0 ]-> discretization .z ) ;
78
83
79
84
solver -> solver_type = type ;
80
85
solver -> iters_per_block = itersPerBlock ;
81
86
82
87
size_t * initial_seed = calloc (sizeof (size_t ), 3 );
83
- initial_seed [0 ] = grid -> active_cells [ 0 ] -> center . x ;
84
- initial_seed [1 ] = grid -> active_cells [ 0 ] -> center . y ;
85
- initial_seed [2 ] = grid -> active_cells [ 0 ] -> center . z ;
88
+ initial_seed [0 ] = 128 ;
89
+ initial_seed [1 ] = 48 ;
90
+ initial_seed [2 ] = 63 ;
86
91
87
92
arrput (solver -> seeds , initial_seed );
88
93
solver -> active_cells = grid -> active_cells ;
89
94
solver -> num_active_cells = grid -> num_active_cells ;
90
95
91
96
solve_eikonal (solver );
92
- write_alg (solver , "test.alg" );
93
97
98
+ struct config * save_result_config = eikonal_options -> save_mesh_config ;
99
+
100
+ if (save_result_config ) {
101
+
102
+ init_config_functions (save_result_config , "./shared_libs/libdefault_save_mesh.so" , "save_result" );
103
+
104
+ print_save_mesh_config_values (save_result_config );
105
+ log_msg (LOG_LINE_SEPARATOR );
106
+
107
+ char * out_dir_name = NULL ;
108
+ GET_PARAMETER_STRING_VALUE_OR_USE_DEFAULT (out_dir_name , save_result_config , "output_dir" );
109
+ if (out_dir_name != NULL ) {
110
+ create_dir (out_dir_name );
111
+ struct time_info ti = ZERO_TIME_INFO ;
112
+ ((save_mesh_fn * )save_result_config -> main_function )(& ti , save_result_config , grid , NULL , NULL );
113
+ } else {
114
+ log_warn ("Not output dir provided. The result will not be saved!" );
115
+ }
116
+ }
117
+
118
+ free (initial_seed );
94
119
free_eikonal_solver (solver );
120
+ free_eikonal_options (eikonal_options );
95
121
96
122
}
0 commit comments