Skip to content

Commit

Permalink
Enable fixed edges to be defined by normal vertices
Browse files Browse the repository at this point in the history
  • Loading branch information
FloSewn committed Sep 21, 2024
1 parent 0da27d0 commit c8770ac
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 20 deletions.
8 changes: 0 additions & 8 deletions src/algorithm/MeshBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,15 +227,7 @@ class MeshBuilder
int color = e->color();

if ( e->is_fixed() )
{
ASSERT( v1.has_property( VertexProperty::is_fixed ),
"MeshBuilder::prepare_mesh(): "
"Missing vertex property \"is_fixed\".");
ASSERT( v2.has_property( VertexProperty::is_fixed ),
"MeshBuilder::prepare_mesh(): "
"Missing vertex property \"is_fixed\".");
continue;
}

Edge& e_new = mesh.boundary_edges().add_edge( v1, v2, color );
e_new.set_property( e->properties() );
Expand Down
92 changes: 80 additions & 12 deletions src/tests/tests_MeshGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -524,30 +524,98 @@ void fixed_interior_edges()

} // fixed_interior_edges() */


/*********************************************************************
* Test fixed edges
*********************************************************************/
void fixed_edges()
{
UserSizeFunction f = [](const Vec2d& p) { return 0.3; };

Domain domain { f };

// Vertices
Vertex& v0 = domain.add_vertex(0.0, 0.0 );
Vertex& v1 = domain.add_vertex(3.0, 0.0 );
Vertex& v2 = domain.add_vertex(6.0, 0.0 );
Vertex& v3 = domain.add_vertex(7.0, 5.0 );
Vertex& v4 = domain.add_vertex(0.0, 6.0 );

Boundary& b_ext = domain.add_exterior_boundary();
b_ext.add_edge( v0, v1, 1 );
b_ext.add_edge( v1, v2, 1 );
b_ext.add_edge( v2, v3, 2 );
b_ext.add_edge( v3, v4, 3 );
b_ext.add_edge( v4, v0, 4 );

Vertex& v5 = domain.add_vertex(2.0, 2.0 );
Vertex& v6 = domain.add_vertex(4.0, 4.0 );
Vertex& v7 = domain.add_vertex(4.0, 2.0 );

Boundary& b_int = domain.add_interior_boundary();
b_int.add_edge( v5, v6, 5 );
b_int.add_edge( v6, v7, 5 );
b_int.add_edge( v7, v5, 5 );

// Fixed vertices
Vertex& v8 = domain.add_fixed_vertex(1.5, 4, 0.05, 1.0);

// Define fixed edges
domain.add_fixed_edge( v0, v5 );
domain.add_fixed_edge( v1, v6 );
domain.add_fixed_edge( v5, v8 );
domain.add_fixed_edge( v6, v8 );

// Setup the generator
MeshGenerator generator {};
Mesh& mesh = generator.new_mesh( domain );
generator.triangulation(mesh).generate_elements();

generator.mixed_smoothing(mesh)
.epsilon(0.7)
.smooth(5);

// Check mesh
MeshChecker mesh_checker { mesh, domain };
CHECK( mesh_checker.check_completeness() );

// Export mesh
std::string source_dir { TQMESH_SOURCE_DIR };
std::string filename
{ source_dir + "/auxiliary/test_data/MeshGeneratorTests.fixed_edges" };

generator.write_mesh(mesh, filename, MeshExportType::TXT);

} // fixed_edges()


} // namespace MeshGeneratorTests

/*********************************************************************
* Run tests for: MeshGenerator.h
*********************************************************************/
void run_tests_MeshGenerator()
{
adjust_logging_output_stream("MeshGeneratorTests.initialization.log");
MeshGeneratorTests::initialization();
//adjust_logging_output_stream("MeshGeneratorTests.initialization.log");
//MeshGeneratorTests::initialization();

//adjust_logging_output_stream("MeshGeneratorTests.mesh_initializer.log");
//MeshGeneratorTests::mesh_initializer();

adjust_logging_output_stream("MeshGeneratorTests.mesh_initializer.log");
MeshGeneratorTests::mesh_initializer();
//adjust_logging_output_stream("MeshGeneratorTests.multiple_neighbors.log");
//MeshGeneratorTests::multiple_neighbors();

adjust_logging_output_stream("MeshGeneratorTests.multiple_neighbors.log");
MeshGeneratorTests::multiple_neighbors();
//adjust_logging_output_stream("MeshGeneratorTests.quad_layer_near_mesh_size.log");
//MeshGeneratorTests::quad_layer_near_mesh_size();

adjust_logging_output_stream("MeshGeneratorTests.quad_layer_near_mesh_size.log");
MeshGeneratorTests::quad_layer_near_mesh_size();
//adjust_logging_output_stream("MeshGeneratorTests.quad_refinement.log");
//MeshGeneratorTests::quad_refinement();

adjust_logging_output_stream("MeshGeneratorTests.quad_refinement.log");
MeshGeneratorTests::quad_refinement();
//adjust_logging_output_stream("MeshGeneratorTests.fixed_interior_edges.log");
//MeshGeneratorTests::fixed_interior_edges();

adjust_logging_output_stream("MeshGeneratorTests.fixed_interior_edges.log");
MeshGeneratorTests::fixed_interior_edges();
adjust_logging_output_stream("MeshGeneratorTests.fixed_edges.log");
MeshGeneratorTests::fixed_edges();

// Reset debug logging ostream
adjust_logging_output_stream("COUT");
Expand Down

0 comments on commit c8770ac

Please sign in to comment.