Skip to content

Commit d7d2371

Browse files
committed
Fix envelope so that the exact one can also be used for the original TetWild.
1 parent 5504630 commit d7d2371

File tree

6 files changed

+15
-33
lines changed

6 files changed

+15
-33
lines changed

components/tetwild/wmtk/components/tetwild/Smooth.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ bool TetWildMesh::smooth_after(const Tuple& t)
174174
{
175175
auto project = Eigen::Vector3d();
176176

177-
if (triangles_tree.initialized())
178-
triangles_tree.nearest_point(m_vertex_attribute[vid].m_posf, project);
177+
if (m_envelope.initialized())
178+
m_envelope.nearest_point(m_vertex_attribute[vid].m_posf, project);
179179
else
180180
project = wmtk::try_project(m_vertex_attribute[vid].m_posf, surface_assemble);
181181

components/tetwild/wmtk/components/tetwild/TetWildMesh.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,15 @@ class TetWildMesh : public wmtk::TetMesh
9797
const double MAX_ENERGY = 1e50;
9898

9999
Parameters& m_params;
100-
wmtk::Envelope& m_envelope;
101-
// for surface projection
102-
SampleEnvelope& triangles_tree;
100+
SampleEnvelope& m_envelope;
103101

104102
// for open boundary
105103
wmtk::Envelope m_open_boundary_envelope; // todo: add sample envelope option
106104
SampleEnvelope boundaries_tree;
107105

108-
TetWildMesh(
109-
Parameters& _m_params,
110-
wmtk::Envelope& _m_envelope,
111-
SampleEnvelope& _triangles_tree,
112-
int _num_threads = 1)
106+
TetWildMesh(Parameters& _m_params, SampleEnvelope& _m_envelope, int _num_threads = 1)
113107
: m_params(_m_params)
114108
, m_envelope(_m_envelope)
115-
, triangles_tree(_triangles_tree)
116109
{
117110
NUM_THREADS = _num_threads;
118111
p_vertex_attrs = &m_vertex_attribute;

components/tetwild/wmtk/components/tetwild/TriangleInsertion.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void TetWildMesh::init_from_delaunay_box_mesh(const std::vector<Eigen::Vector3d>
7979
const Vector3d p(ds[0][i], ds[1][j], ds[2][k]);
8080

8181
Eigen::Vector3d n;
82-
const double sqd = triangles_tree.nearest_point(p, n);
82+
const double sqd = m_envelope.nearest_point(p, n);
8383

8484
if (sqd < min_dis) {
8585
continue;

components/tetwild/wmtk/components/tetwild/orig/MeshRefinement.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,23 +295,27 @@ void MeshRefinement::refine(
295295
// check and mark is_bad_element
296296
double avg_energy, max_energy;
297297
localOperation.getAvgMaxEnergy(avg_energy, max_energy);
298+
logger().info("Energy: avg = {} | max = {}", avg_energy, max_energy);
298299
if (pass > 0 && pass < old_pass + args.max_num_passes - 1 &&
299300
avg_energy0 - avg_energy < args.delta_energy_thres &&
300301
max_energy0 - max_energy < args.delta_energy_thres) {
301302
if (update_cnt == 1) {
302303
if (is_hit_min) {
303304
update_buget--;
304-
} else
305+
} else {
305306
continue;
307+
}
306308
}
307309
if (update_buget == 0) {
308310
if (state.sub_stage > 1 && state.sub_stage < args.stage) {
309311
state.eps += state.eps_delta;
310312
state.eps_2 = state.eps * state.eps;
311313
state.sub_stage++;
312314
update_buget = 2;
313-
} else
315+
} else {
316+
logger().warn(">>>>>>>>>> update_budget = 0 -> break in pass {}", pass);
314317
break;
318+
}
315319
}
316320
update_cnt = 0;
317321

@@ -331,7 +335,6 @@ void MeshRefinement::refine(
331335
}
332336
avg_energy0 = avg_energy;
333337
max_energy0 = max_energy;
334-
logger().info("Energy: avg = {} | max = {}", avg_energy, max_energy);
335338
}
336339

337340
old_pass = old_pass + args.max_num_passes;

components/tetwild/wmtk/components/tetwild/tetwild.cpp

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ void tetwild(nlohmann::json json_params)
162162

163163
double diag = (box_minmax.first - box_minmax.second).norm();
164164
const double envelope_size = params.epsr * diag;
165-
app::sec::ShortestEdgeCollapse surf_mesh(verts, NUM_THREADS, false);
165+
app::sec::ShortestEdgeCollapse surf_mesh(verts, NUM_THREADS, !use_sample_envelope);
166166
surf_mesh.create_mesh(verts.size(), tris, modified_nonmanifold_v, envelope_size / 2);
167167
assert(surf_mesh.check_mesh_connectivity_validity());
168168

@@ -200,21 +200,7 @@ void tetwild(nlohmann::json json_params)
200200
params.init(box_minmax.first, box_minmax.second);
201201
wmtk::remove_duplicates(vsimp, fsimp, 1e-10 * params.diag_l);
202202

203-
wmtk::ExactEnvelope exact_envelope;
204-
{
205-
std::vector<Eigen::Vector3i> tempF(fsimp.size());
206-
for (auto i = 0; i < tempF.size(); i++) tempF[i] << fsimp[i][0], fsimp[i][1], fsimp[i][2];
207-
exact_envelope.init(vsimp, tempF, envelope_size / 2);
208-
}
209-
210-
// initiate the tetwild mesh using the original envelop
211-
wmtk::Envelope* ptr_env;
212-
if (use_sample_envelope) {
213-
ptr_env = &(surf_mesh.m_envelope);
214-
} else {
215-
ptr_env = &(exact_envelope);
216-
}
217-
tetwild::TetWildMesh mesh(params, *ptr_env, surf_mesh.m_envelope, NUM_THREADS);
203+
tetwild::TetWildMesh mesh(params, surf_mesh.m_envelope, NUM_THREADS);
218204

219205
/////////////////////////////////////////////////////
220206

@@ -255,7 +241,7 @@ void tetwild(nlohmann::json json_params)
255241
tet_face_on_input_surface);
256242

257243
// generate new mesh
258-
tetwild::TetWildMesh mesh_new(params, *ptr_env, surf_mesh.m_envelope, NUM_THREADS);
244+
tetwild::TetWildMesh mesh_new(params, surf_mesh.m_envelope, NUM_THREADS);
259245

260246
mesh_new.init_from_Volumeremesher(
261247
v_rational,

src/wmtk/envelope/Envelope.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ void SampleEnvelope::init(
9595
const std::vector<Eigen::Vector3i>& F,
9696
const double _eps)
9797
{
98-
if (use_exact) return exact_envelope.init(V, F, _eps);
98+
exact_envelope.init(V, F, _eps);
9999

100100
eps2 = _eps * _eps;
101101
sampling_dist = std::sqrt(eps2);

0 commit comments

Comments
 (0)