Skip to content

Commit 9f45485

Browse files
[snappy] added quality controls for snap and smooth (#1675)
1 parent 7aef0eb commit 9f45485

File tree

11 files changed

+56
-1
lines changed

11 files changed

+56
-1
lines changed

flow360/component/simulation/meshing_param/snappy/snappy_specs.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,22 @@ class QualityMetrics(Flow360BaseModel):
9999
le=1,
100100
description="Error reduction factor. Used in combination with n_smooth_scale. Must be between 0 and 1.",
101101
)
102+
zmetric_threshold: Union[pd.NonNegativeFloat, Literal[False]] = pd.Field(
103+
alias="zfactor_threshold",
104+
default=0.8,
105+
le=2,
106+
description=(
107+
"Threshold for z-factor limiting during mesh quality checks and smoothing. "
108+
"Set to False to disable this metric."
109+
),
110+
)
111+
feature_edge_deduplication_tolerance: Union[pd.NonNegativeFloat, Literal[False]] = pd.Field(
112+
default=0.2,
113+
description=(
114+
"Relative tolerance to deduplicate feature edges when snapping and smoothing. "
115+
"Set to False to disable this metric."
116+
),
117+
)
102118
min_volume_collapse_ratio: Union[float, Literal[False]] = pd.Field(
103119
default=0,
104120
alias="min_vol_collapse_ratio",

flow360/component/simulation/translator/surface_meshing_translator.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,16 @@ def snappy_mesher_json(input_params: SimulationParams):
447447
"errorReduction": (
448448
quality_settings.error_reduction if quality_settings.error_reduction else 0
449449
),
450+
"zMetricThreshold": (
451+
0
452+
if quality_settings.zmetric_threshold is False
453+
else quality_settings.zmetric_threshold
454+
),
455+
"featureEdgeDeduplicationTolerance": (
456+
0
457+
if quality_settings.feature_edge_deduplication_tolerance is False
458+
else quality_settings.feature_edge_deduplication_tolerance
459+
),
450460
"minVolCollapseRatio": (
451461
quality_settings.min_volume_collapse_ratio
452462
if quality_settings.min_volume_collapse_ratio

tests/simulation/params/meshing_validation/test_meshing_param_validation.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,18 @@ def test_snappy_quality_metrics_validation():
983983
with SI_unit_system, pytest.raises(pd.ValidationError):
984984
snappy.QualityMetrics(max_internal_skewness=-2 * u.deg)
985985

986-
snappy.QualityMetrics(max_boundary_skewness=23 * u.deg, max_internal_skewness=89 * u.deg)
986+
snappy.QualityMetrics(
987+
max_boundary_skewness=23 * u.deg,
988+
max_internal_skewness=89 * u.deg,
989+
zmetric_threshold=0.9,
990+
feature_edge_deduplication_tolerance=0.1,
991+
)
992+
with pytest.raises(pd.ValidationError):
993+
snappy.QualityMetrics(zmetric_threshold=-0.1)
994+
with pytest.raises(pd.ValidationError):
995+
snappy.QualityMetrics(feature_edge_deduplication_tolerance=-0.1)
996+
997+
snappy.QualityMetrics(zmetric_threshold=False, feature_edge_deduplication_tolerance=False)
987998

988999

9891000
def test_modular_workflow_zones_validation():

tests/simulation/translator/ref/surface_meshing/default_snappy.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@
9696
"minTriangleTwist": -1,
9797
"nSmoothScale": 4,
9898
"errorReduction": 0.75,
99+
"zMetricThreshold": 0.8,
100+
"featureEdgeDeduplicationTolerance": 0.2,
99101
"minVolCollapseRatio": 0
100102
}
101103
},

tests/simulation/translator/ref/surface_meshing/snappy_basic_refinements.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@
189189
"minTriangleTwist": -1,
190190
"nSmoothScale": 4,
191191
"errorReduction": 0.75,
192+
"zMetricThreshold": 0.8,
193+
"featureEdgeDeduplicationTolerance": 0.2,
192194
"minVolCollapseRatio": 0
193195
}
194196
},

tests/simulation/translator/ref/surface_meshing/snappy_coupled_refinements.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@
113113
"minTriangleTwist": -1,
114114
"nSmoothScale": 4,
115115
"errorReduction": 0.75,
116+
"zMetricThreshold": 0.8,
117+
"featureEdgeDeduplicationTolerance": 0.2,
116118
"minVolCollapseRatio": 0
117119
}
118120
},

tests/simulation/translator/ref/surface_meshing/snappy_no_regions.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@
6969
"minTriangleTwist": -1,
7070
"nSmoothScale": 4,
7171
"errorReduction": 0.75,
72+
"zMetricThreshold": 0.8,
73+
"featureEdgeDeduplicationTolerance": 0.2,
7274
"minVolCollapseRatio": 0
7375
}
7476
},

tests/simulation/translator/ref/surface_meshing/snappy_refinements_multiple_regions.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@
139139
"minTriangleTwist": -1,
140140
"nSmoothScale": 4,
141141
"errorReduction": 0.75,
142+
"zMetricThreshold": 0.8,
143+
"featureEdgeDeduplicationTolerance": 0.2,
142144
"minVolCollapseRatio": 0
143145
}
144146
},

tests/simulation/translator/ref/surface_meshing/snappy_settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@
9696
"minTriangleTwist": 0.1,
9797
"nSmoothScale": 6,
9898
"errorReduction": 0.4,
99+
"zMetricThreshold": 0.9,
100+
"featureEdgeDeduplicationTolerance": 0.25,
99101
"minVolCollapseRatio": 0.5
100102
}
101103
},

tests/simulation/translator/ref/surface_meshing/snappy_settings_off_pos.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@
9696
"minTriangleTwist": -1,
9797
"nSmoothScale": 4,
9898
"errorReduction": 0.75,
99+
"zMetricThreshold": 0,
100+
"featureEdgeDeduplicationTolerance": 0,
99101
"minVolCollapseRatio": 0
100102
}
101103
},

0 commit comments

Comments
 (0)