4#define BOOST_TEST_DYN_LINK
6#include <boost/test/unit_test.hpp>
13#include "Draw/DrawSphere.hpp"
17BOOST_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);
115BOOST_AUTO_TEST_SUITE_END()
Header file containing functions that compute the analytical solution of the signed distance function...
Header file containing functions for computing the error and the L_2 / L_infinity norm.
Class for getting the narrow band around the interface.
Header file containing functions for creating files and folders.
Class for reinitializing a level-set function into a signed distance function using Sussman redistanc...
This class represent an N-dimensional box.
Class for computing the l2/l_infinity norm for distributed grids and vectors based on given errors.
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.
Class for getting the narrow band around the interface.
Class for reinitializing a level-set function into a signed distance function using Sussman redistanc...
This is a distributed grid.
Structure to bundle options for redistancing.
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...