Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
[Benchmark] Add benchmarks for triangle-line intersection and point-i…
…n-triangle utilities
  • Loading branch information
loumalouomega committed Mar 3, 2026
commit f5a7f6d6829ddad582e6ba0a3396d2cbbe9a03fd
68 changes: 68 additions & 0 deletions kratos/benchmarks/intersection_utilities_benchmark.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// | / |
// ' / __| _` | __| _ \ __|
// . \ | ( | | ( |\__ `
// _|\_\_| \__,_|\__|\___/ ____/
// Multi-Physics
//
// License: BSD License
// Kratos default license: kratos/license.txt
//
// Main authors: Vicente Mataix Ferrandiz
//

// System includes

// External includes
#include <benchmark/benchmark.h>

// Project includes
#include "geometries/point.h"
#include "geometries/triangle_3d_3.h"
#include "utilities/intersection_utilities.h"

namespace Kratos
{

// Sample data for benchmarking
Point::Pointer p_point_1(make_shared<Point>( 0.0, 0.0, 0.0));
Point::Pointer p_point_2(make_shared<Point>( 1.0, 0.0, 0.0));
Point::Pointer p_point_3(make_shared<Point>( 0.0, 1.0, 0.0));

Triangle3D3<Point> triangle(p_point_1, p_point_3, p_point_2);
Point line_point_1(1.0, 0.25, 0.25);
Point line_point_2(-1.0, 0.25, 0.25);
Point intersection_point(0.0, 0.0, 0.0);
Point triangle_test_point(0.2, 0.2, 0.0);

static void BM_ComputeTriangleLineIntersection(benchmark::State& state) {
for (auto _ : state) {
const int intersection_id = IntersectionUtilities::ComputeTriangleLineIntersection<Triangle3D3<Point>>(
triangle,
line_point_1.Coordinates(),
line_point_2.Coordinates(),
intersection_point.Coordinates());

benchmark::DoNotOptimize(intersection_id);
benchmark::DoNotOptimize(intersection_point);
}
}

static void BM_PointInTriangle(benchmark::State& state) {
for (auto _ : state) {
const bool is_inside = IntersectionUtilities::PointInTriangle(
triangle[0].Coordinates(),
triangle[1].Coordinates(),
triangle[2].Coordinates(),
triangle_test_point.Coordinates());

benchmark::DoNotOptimize(is_inside);
}
}

// Register the function as a benchmark
BENCHMARK(BM_ComputeTriangleLineIntersection);
BENCHMARK(BM_PointInTriangle);

} // namespace Kratos

BENCHMARK_MAIN();
Loading