Skip to content

Commit 8bc45aa

Browse files
authored
fixed validation issue (#1606)
1 parent c6efb5f commit 8bc45aa

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

flow360/component/simulation/validation/validation_simulation_params.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
TimeAverageSurfaceOutput,
3434
VolumeOutput,
3535
)
36-
from flow360.component.simulation.primitives import SeedpointVolume
36+
from flow360.component.simulation.primitives import CustomVolume, SeedpointVolume
3737
from flow360.component.simulation.time_stepping.time_stepping import Steady, Unsteady
3838
from flow360.component.simulation.utils import is_exact_instance
3939
from flow360.component.simulation.validation.validation_context import (
@@ -385,15 +385,20 @@ def _check_complete_boundary_condition_and_unknown_surface(
385385
if item.name == "symmetric"
386386
]
387387

388+
snappy_multizone = False
388389
potential_zone_zone_interfaces = set()
389390
if validation_info.farfield_method == "user-defined":
390391
for zones in volume_zones:
391392
# Support new CustomZones container
392393
if not isinstance(zones, CustomZones):
393394
continue
394395
for custom_volume in zones.entities.stored_entities:
395-
for boundary in custom_volume.boundaries.stored_entities:
396-
potential_zone_zone_interfaces.add(boundary.name)
396+
if isinstance(custom_volume, CustomVolume):
397+
for boundary in custom_volume.boundaries.stored_entities:
398+
potential_zone_zone_interfaces.add(boundary.name)
399+
if isinstance(custom_volume, SeedpointVolume):
400+
## disable missing boundaries with snappy multizone
401+
snappy_multizone = True
397402

398403
if asset_boundary_entities is None or asset_boundary_entities == []:
399404
raise ValueError("[Internal] Failed to retrieve asset boundaries")
@@ -427,13 +432,6 @@ def _check_complete_boundary_condition_and_unknown_surface(
427432
missing_boundaries = asset_boundaries - used_boundaries - potential_zone_zone_interfaces
428433
unknown_boundaries = used_boundaries - asset_boundaries
429434

430-
## disable missing boundaries with snappy multizone
431-
snappy_multizone = False
432-
for zone in volume_zones:
433-
if isinstance(zone, SeedpointVolume):
434-
snappy_multizone = True
435-
break
436-
437435
if missing_boundaries and not snappy_multizone:
438436
missing_list = ", ".join(sorted(missing_boundaries))
439437
raise ValueError(

tests/simulation/params/test_validators_params.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2390,3 +2390,60 @@ def test_ghost_surface_pair_requires_quasi_3d_periodic_farfield():
23902390
# Case 4: Farfield method IS "quasi-3d-periodic" → should pass
23912391
with SI_unit_system, ValidationContext(CASE, quasi_3d_periodic_farfield_context):
23922392
Periodic(surface_pairs=(periodic_1, periodic_2), spec=Translational())
2393+
2394+
2395+
def test_seedpoint_zone_based_params():
2396+
from flow360.component.simulation.meshing_param.volume_params import CustomZones
2397+
2398+
with SI_unit_system:
2399+
far_field_zone = SeedpointVolume(
2400+
point_in_mesh=[32.5231, 112.35123, 32.342] * u.mm, name="fluid"
2401+
)
2402+
radiator_zone = SeedpointVolume(
2403+
point_in_mesh=[3.2341, -1.324535, 23.345211] * u.mm,
2404+
name="radiator",
2405+
axes=[(1, 0, 0), (0, 1, 0)],
2406+
)
2407+
2408+
params = SimulationParams(
2409+
meshing=ModularMeshingWorkflow(
2410+
surface_meshing=snappy.SurfaceMeshingParams(
2411+
defaults=snappy.SurfaceMeshingDefaults(
2412+
min_spacing=1 * u.mm, max_spacing=100 * u.mm, gap_resolution=0.01 * u.mm
2413+
),
2414+
smooth_controls=snappy.SmoothControls(
2415+
lambda_factor=0.7, mu_factor=0, iterations=3
2416+
),
2417+
),
2418+
volume_meshing=VolumeMeshingParams(
2419+
defaults=VolumeMeshingDefaults(
2420+
boundary_layer_growth_rate=1.2,
2421+
boundary_layer_first_layer_thickness=0.01 * u.mm,
2422+
),
2423+
),
2424+
zones=[CustomZones(entities=[far_field_zone, radiator_zone])],
2425+
),
2426+
operating_condition=AerospaceCondition(
2427+
velocity_magnitude=40 * u.m / u.s,
2428+
),
2429+
time_stepping=Steady(),
2430+
models=[Wall(surfaces=[Surface(name="face1")])],
2431+
private_attribute_asset_cache=AssetCache(
2432+
use_inhouse_mesher=True,
2433+
project_entity_info=SurfaceMeshEntityInfo(
2434+
boundaries=[
2435+
Surface(name="face1"),
2436+
Surface(name="face2"),
2437+
]
2438+
),
2439+
),
2440+
)
2441+
2442+
params, errors, _ = validate_model(
2443+
params_as_dict=params.model_dump(mode="json"),
2444+
validated_by=ValidationCalledBy.LOCAL,
2445+
root_item_type="Geometry",
2446+
validation_level="All",
2447+
)
2448+
2449+
assert errors is None

0 commit comments

Comments
 (0)