10#include "gtest/gtest.h"
23classify(
const bool all_nodes_in_domain,
24 const bool all_nodes_outside_domain,
25 const Real fraction_of_element_in_domain,
27 const bool mark_intercepted)
30 all_nodes_in_domain, all_nodes_outside_domain, fraction_of_element_in_domain};
33 occupancy, subdomain_id_settings, mark_intercepted, lambda);
40TEST(ClassifySubdomainFromOccupancyTest, FullyInsideOrOutside)
42 EXPECT_EQ(classify(
true,
false, 1.0, 0.5,
true), INSIDE);
43 EXPECT_EQ(classify(
true,
false, 1.0, 0.0,
false), INSIDE);
44 EXPECT_EQ(classify(
true,
false, 1.0, 1.0,
false), INSIDE);
46 EXPECT_EQ(classify(
false,
true, 0.0, 0.5,
true), OUTSIDE);
47 EXPECT_EQ(classify(
false,
true, 0.0, 1.0,
false), OUTSIDE);
48 EXPECT_EQ(classify(
false,
true, 0.0, 0.0,
false), OUTSIDE);
53TEST(ClassifySubdomainFromOccupancyTest, MarkIntercepted)
55 EXPECT_EQ(classify(
false,
false, 0.5, 0.0,
true), INTERCEPTED);
56 EXPECT_EQ(classify(
false,
false, 0.5, 1.0,
true), INTERCEPTED);
61TEST(ClassifySubdomainFromOccupancyTest, LambdaThreshold)
63 EXPECT_EQ(classify(
false,
false, 0.2, 0.5,
false), OUTSIDE);
64 EXPECT_EQ(classify(
false,
false, 0.8, 0.5,
false), INSIDE);
70TEST(ClassifySubdomainFromOccupancyTest, EnclosedSurfaceEndpoints)
72 EXPECT_EQ(classify(
true,
false, 0.5, 0.5,
false), INSIDE);
73 EXPECT_EQ(classify(
true,
false, 0.5, 0.3,
false), OUTSIDE);
74 EXPECT_EQ(classify(
true,
false, 0.5, 0.5,
true), INTERCEPTED);
79TEST(ClassifySubdomainFromOccupancyTest, IsInactive)
87TEST(SelectSubdomainFromOccupanciesTest, FullyOccupiedTakesPrecedence)
89 const std::vector<SBMUtils::SubdomainOccupancy> candidates{
90 {4, {
false,
false, 0.9}}, {7, {
true,
false, 1.0}}, {3, {
true,
false, 1.0}}};
95TEST(SelectSubdomainFromOccupanciesTest, PartialSelection)
98 const std::vector<SBMUtils::SubdomainOccupancy> candidates{
99 {7, {
false,
false, 0.8 + 1e-14}}, {3, {
false,
false, 0.8}}, {4, {
false,
false, 0.6}}};
108TEST(SelectSubdomainFromOccupanciesTest, NoOccupiedCandidate)
110 const std::vector<SBMUtils::SubdomainOccupancy> candidates{{3, {
false,
true, 0.0}},
111 {7, {
false,
true, 0.0}}};
subdomain_id_type SubdomainID
TEST(ClassifySubdomainFromOccupancyTest, FullyInsideOrOutside)
std::optional< SubdomainID > selectSubdomainFromOccupancies(const std::vector< SubdomainOccupancy > &candidate_occupancies, const InterceptedSubdomainPolicy &intercepted_policy, Real lambda)
Select a subdomain based on how multiple candidate domains occupy an element.
SubdomainID classifySubdomainFromOccupancy(const ElementDomainOccupancy &occupancy, const ClassificationSubdomains &subdomain_id_settings, bool mark_intercepted, Real lambda)
Classify an element from its retained-domain occupancy measurements.
bool isInactive(Real active_fraction, Real lambda)
Return whether a partial element is inactive, i.e.
The subdomain IDs a (possibly partial) element can be labeled with.
Results of testing an element against a domain.
Policy for assigning partial elements to a dedicated intercepted subdomain.