Skip to content

Commit 84fee44

Browse files
committed
allow setting random seed for almost all meshes
1 parent 46c18e9 commit 84fee44

14 files changed

Lines changed: 78 additions & 26 deletions

pygalmesh/main.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def generate_mesh(
2929
cell_radius_edge_ratio=0.0,
3030
cell_size=0.0,
3131
verbose=True,
32+
seed=0
3233
):
3334
feature_edges = [] if feature_edges is None else feature_edges
3435

@@ -51,6 +52,7 @@ def generate_mesh(
5152
cell_radius_edge_ratio=cell_radius_edge_ratio,
5253
cell_size=cell_size,
5354
verbose=verbose,
55+
seed=seed
5456
)
5557

5658
mesh = meshio.read(outfile)
@@ -73,6 +75,7 @@ def generate_with_sizing_field(
7375
cell_radius_edge_ratio=0.0,
7476
cell_size=None,
7577
verbose=True,
78+
seed=0,
7679
):
7780
feature_edges = [] if feature_edges is None else feature_edges
7881

@@ -95,6 +98,7 @@ def generate_with_sizing_field(
9598
cell_radius_edge_ratio=cell_radius_edge_ratio,
9699
cell_size=cell_size,
97100
verbose=verbose,
101+
seed=seed,
98102
)
99103

100104
mesh = meshio.read(outfile)
@@ -117,6 +121,7 @@ def generate_periodic_mesh(
117121
cell_size=0.0,
118122
number_of_copies_in_output=1,
119123
verbose=True,
124+
seed=0,
120125
):
121126
fh, outfile = tempfile.mkstemp(suffix=".mesh")
122127
os.close(fh)
@@ -139,6 +144,7 @@ def generate_periodic_mesh(
139144
cell_size=cell_size,
140145
number_of_copies_in_output=number_of_copies_in_output,
141146
verbose=verbose,
147+
seed=seed,
142148
)
143149

144150
mesh = meshio.read(outfile)
@@ -153,6 +159,7 @@ def generate_surface_mesh(
153159
radius_bound=0.0,
154160
distance_bound=0.0,
155161
verbose=True,
162+
seed=0,
156163
):
157164
fh, outfile = tempfile.mkstemp(suffix=".off")
158165
os.close(fh)
@@ -165,6 +172,7 @@ def generate_surface_mesh(
165172
radius_bound=radius_bound,
166173
distance_bound=distance_bound,
167174
verbose=verbose,
175+
seed=seed,
168176
)
169177

170178
mesh = meshio.read(outfile)
@@ -185,6 +193,7 @@ def generate_volume_mesh_from_surface_mesh(
185193
cell_radius_edge_ratio=0.0,
186194
cell_size=0.0,
187195
verbose=True,
196+
seed=0,
188197
):
189198
mesh = meshio.read(filename)
190199

@@ -209,6 +218,7 @@ def generate_volume_mesh_from_surface_mesh(
209218
cell_radius_edge_ratio=cell_radius_edge_ratio,
210219
cell_size=cell_size,
211220
verbose=verbose,
221+
seed=seed,
212222
)
213223

214224
mesh = meshio.read(outfile)
@@ -230,6 +240,7 @@ def generate_from_inr(
230240
cell_radius_edge_ratio=0.0,
231241
cell_size=0.0,
232242
verbose=True,
243+
seed=0,
233244
):
234245
fh, outfile = tempfile.mkstemp(suffix=".mesh")
235246
os.close(fh)
@@ -248,6 +259,7 @@ def generate_from_inr(
248259
cell_radius_edge_ratio=cell_radius_edge_ratio,
249260
cell_size=cell_size,
250261
verbose=verbose,
262+
seed=seed,
251263
)
252264

253265
mesh = meshio.read(outfile)
@@ -268,6 +280,7 @@ def generate_from_inr_with_subdomain_sizing(
268280
facet_distance=0.0,
269281
cell_radius_edge_ratio=0.0,
270282
verbose=True,
283+
seed=0,
271284
):
272285
fh, outfile = tempfile.mkstemp(suffix=".mesh")
273286
os.close(fh)
@@ -296,6 +309,7 @@ def generate_from_inr_with_subdomain_sizing(
296309
facet_distance=facet_distance,
297310
cell_radius_edge_ratio=cell_radius_edge_ratio,
298311
verbose=verbose,
312+
seed=seed,
299313
)
300314

301315
mesh = meshio.read(outfile)
@@ -310,6 +324,7 @@ def remesh_surface(
310324
facet_size=0.0,
311325
facet_distance=0.0,
312326
verbose=True,
327+
seed=0,
313328
):
314329
mesh = meshio.read(filename)
315330

@@ -328,6 +343,7 @@ def remesh_surface(
328343
facet_size=facet_size,
329344
facet_distance=facet_distance,
330345
verbose=verbose,
346+
seed=seed,
331347
)
332348

333349
mesh = meshio.read(outfile)

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ classifiers =
2727
packages = find:
2828
setup_requires = pybind11 >= 2.2
2929
install_requires =
30-
importlib_metadata
30+
importlib_metadata;python_version<"3.8"
3131
meshio >= 4.0.0, < 5.0.0
3232
numpy
3333
pybind11 >= 2.2

src/generate.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,12 @@ generate_mesh(
6060
const double facet_distance,
6161
const double cell_radius_edge_ratio,
6262
const double cell_size,
63-
const bool verbose
63+
const bool verbose,
64+
const int seed
6465
)
6566
{
67+
CGAL::get_default_random() = CGAL::Random(seed);
68+
6669
const double bounding_sphere_radius2 = bounding_sphere_radius > 0 ?
6770
bounding_sphere_radius*bounding_sphere_radius :
6871
// some wiggle room
@@ -134,9 +137,12 @@ generate_with_sizing_field(
134137
const double facet_distance,
135138
const double cell_radius_edge_ratio,
136139
const std::shared_ptr<pygalmesh::SizingFieldBase> & cell_size,
137-
const bool verbose
140+
const bool verbose,
141+
const int seed
138142
)
139143
{
144+
CGAL::get_default_random() = CGAL::Random(seed);
145+
140146
const double bounding_sphere_radius2 = bounding_sphere_radius > 0 ?
141147
bounding_sphere_radius*bounding_sphere_radius :
142148
// some wiggle room

src/generate.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ void generate_mesh(
2525
const double facet_distance = 0.0,
2626
const double cell_radius_edge_ratio = 0.0,
2727
const double cell_size = 0.0,
28-
const bool verbose = true
28+
const bool verbose = true,
29+
const int seed = 0
2930
);
3031

3132
void generate_with_sizing_field(
@@ -43,7 +44,8 @@ void generate_with_sizing_field(
4344
const double facet_distance = 0.0,
4445
const double cell_radius_edge_ratio = 0.0,
4546
const std::shared_ptr<pygalmesh::SizingFieldBase> & cell_size = nullptr,
46-
const bool verbose = true
47+
const bool verbose = true,
48+
const int seed = 0
4749
);
4850

4951
} // namespace pygalmesh

src/generate_from_inr.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ void
9595
generate_from_inr_with_subdomain_sizing(
9696
const std::string & inr_filename,
9797
const std::string & outfile,
98-
const double default_cell_size,
98+
const double default_cell_size,
9999
const std::vector<double> & cell_sizes,
100-
const std::vector<int> & cell_labels,
100+
const std::vector<int> & cell_labels,
101101
const bool lloyd,
102102
const bool odt,
103103
const bool perturb,
@@ -107,9 +107,12 @@ generate_from_inr_with_subdomain_sizing(
107107
const double facet_size,
108108
const double facet_distance,
109109
const double cell_radius_edge_ratio,
110-
const bool verbose
110+
const bool verbose,
111+
const int seed
111112
)
112113
{
114+
CGAL::get_default_random() = CGAL::Random(seed);
115+
113116
CGAL::Image_3 image;
114117
const bool success = image.read(inr_filename.c_str());
115118
if (!success) {
@@ -120,7 +123,7 @@ generate_from_inr_with_subdomain_sizing(
120123
Sizing_field_cell cell_size(default_cell_size);
121124
const int ndimensions = 3;
122125
for(std::vector<double>::size_type i(0); i < cell_sizes.size(); ++i)
123-
cell_size.set_size(cell_sizes[i], ndimensions, cgal_domain.index_from_subdomain_index(cell_labels[i]));
126+
cell_size.set_size(cell_sizes[i], ndimensions, cgal_domain.index_from_subdomain_index(cell_labels[i]));
124127

125128
Mesh_criteria criteria(
126129
CGAL::parameters::edge_size=edge_size,

src/generate_from_inr.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@ void generate_from_inr(
1919
const double facet_distance = 0.0,
2020
const double cell_radius_edge_ratio = 0.0,
2121
const double cell_size = 0.0,
22-
const bool verbose = true
22+
const bool verbose = true,
23+
const int seed = 0
2324
);
2425

2526
void
2627
generate_from_inr_with_subdomain_sizing(
2728
const std::string & inr_filename,
2829
const std::string & outfile,
29-
const double default_cell_size,
30+
const double default_cell_size,
3031
const std::vector<double> & cell_sizes,
31-
const std::vector<int> & cell_labels,
32+
const std::vector<int> & cell_labels,
3233
const bool lloyd = false,
3334
const bool odt = false,
3435
const bool perturb = true,

src/generate_from_off.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,24 @@ typedef CGAL::Mesh_criteria_3<Tr> Mesh_criteria;
2929
// To avoid verbose function and named parameters call
3030
using namespace CGAL::parameters;
3131

32-
void generate_from_off(const std::string& infile, const std::string& outfile,
33-
const bool lloyd, const bool odt, const bool perturb,
34-
const bool exude, const double edge_size,
35-
const double facet_angle, const double facet_size,
36-
const double facet_distance,
37-
const double cell_radius_edge_ratio,
38-
const double cell_size, const bool verbose) {
32+
void generate_from_off(
33+
const std::string& infile,
34+
const std::string& outfile,
35+
const bool lloyd,
36+
const bool odt,
37+
const bool perturb,
38+
const bool exude,
39+
const double edge_size,
40+
const double facet_angle,
41+
const double facet_size,
42+
const double facet_distance,
43+
const double cell_radius_edge_ratio,
44+
const double cell_size,
45+
const bool verbose,
46+
const int seed
47+
) {
48+
CGAL::get_default_random() = CGAL::Random(seed);
49+
3950
// Create input polyhedron
4051
Polyhedron polyhedron;
4152
std::ifstream input(infile);

src/generate_from_off.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ generate_from_off(
2020
const double facet_distance = 0.0,
2121
const double cell_radius_edge_ratio = 0.0,
2222
const double cell_size = 0.0,
23-
const bool verbose = true
23+
const bool verbose = true,
24+
const int seed = 0
2425
);
2526

2627
} // namespace pygalmesh

src/generate_periodic.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,12 @@ generate_periodic_mesh(
6464
const double cell_radius_edge_ratio,
6565
const double cell_size,
6666
const int number_of_copies_in_output,
67-
const bool verbose
67+
const bool verbose,
68+
const int seed
6869
)
6970
{
71+
CGAL::get_default_random() = CGAL::Random(seed);
72+
7073
K::Iso_cuboid_3 cuboid(
7174
bounding_cuboid[0],
7275
bounding_cuboid[1],

src/generate_periodic.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ void generate_periodic_mesh(
2424
const double cell_radius_edge_ratio = 0.0,
2525
const double cell_size = 0.0,
2626
const int number_of_copies_in_output = 1,
27-
const bool verbose = true
27+
const bool verbose = true,
28+
const int seed = 0
2829
);
2930

3031
} // namespace pygalmesh

0 commit comments

Comments
 (0)