4 #define BOOST_TEST_DYN_LINK 6 #include <boost/test/unit_test.hpp> 13 #include "Draw/DrawSphere.hpp" 17 BOOST_AUTO_TEST_SUITE(RedistancingSussmanTestSuite)
19 BOOST_AUTO_TEST_CASE(RedistancingSussman_unit_sphere)
21 typedef double phi_type;
22 typedef double space_type;
23 const phi_type EPSILON = std::numeric_limits<phi_type>::epsilon();
24 const size_t grid_dim = 3;
30 const size_t Phi_0_grid = 0;
31 const size_t SDF_sussman_grid = 1;
32 const size_t SDF_exact_grid = 2;
33 const size_t Error_grid = 3;
36 const space_type dt = 0.000165334;
37 const size_t sz[grid_dim] = {N, N, N};
38 const space_type radius = 1.0;
39 const space_type box_lower = -2.0;
40 const space_type box_upper = 2.0;
45 grid_in_type g_dist(sz, box, ghost);
46 g_dist.setPropNames({
"Phi_0",
"SDF_sussman",
"SDF_exact",
"Relative error"});
48 const space_type center[grid_dim] = {0.5*(box_upper+box_lower),
49 0.5*(box_upper+box_lower),
50 0.5*(box_upper+box_lower)};
51 init_grid_with_sphere<Phi_0_grid>(g_dist, radius, center[x], center[y], center[z]);
55 redist_options.min_iter = 1e4;
56 redist_options.max_iter = 1e4;
58 redist_options.convTolChange.check =
false;
59 redist_options.convTolResidual.check =
false;
61 redist_options.interval_check_convergence = 1e3;
62 redist_options.width_NB_in_grid_points = 8;
63 redist_options.print_current_iterChangeResidual =
true;
64 redist_options.print_steadyState_iter =
true;
68 std::cout <<
"New CFL timestep = " << redist_obj.get_time_step() << std::endl;
72 redist_obj.run_redistancing<Phi_0_grid, SDF_sussman_grid>();
75 init_analytic_sdf_sphere<SDF_exact_grid>(g_dist, radius, center[x], center[y], center[z]);
78 get_absolute_error<SDF_sussman_grid, SDF_exact_grid, Error_grid>(g_dist);
84 size_t bc[grid_dim] = {NON_PERIODIC, NON_PERIODIC, NON_PERIODIC};
88 vd_type vd_narrow_band(0, box, bc, ghost_vd);
89 vd_narrow_band.setPropNames({
"error"});
90 size_t narrow_band_width = 8;
92 const size_t Error_vd = 0;
93 narrowBand.get_narrow_band_copy_specific_property<SDF_sussman_grid, Error_grid, Error_vd>(g_dist,
98 std::cout << lNorms_vd.l2 <<
", " << lNorms_vd.linf << std::endl;
109 BOOST_CHECK(lNorms_vd.l2 < 0.03369 + EPSILON);
110 BOOST_CHECK(lNorms_vd.linf < 0.06307 + EPSILON);
115 BOOST_AUTO_TEST_SUITE_END()
Class for getting the narrow band around the interface.
Class for reinitializing a level-set function into a signed distance function using Sussman redistanc...
Header file containing functions for computing the error and the L_2 / L_infinity norm.
Structure to bundle options for redistancing.
Class for reinitializing a level-set function into a signed distance function using Sussman redistanc...
This is a distributed grid.
This class represent an N-dimensional box.
void get_l_norms_vector(vectortype &vd)
Computes the L_2 and L_infinity norm on the basis of the precomputed error on a particle vector.
Header file containing functions for creating files and folders.
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...
Class for getting the narrow band around the interface.
Header file containing functions that compute the analytical solution of the signed distance function...
Class for computing the l2/l_infinity norm for distributed grids and vectors based on given errors.