Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
56 changes: 37 additions & 19 deletions flow360/component/simulation/translator/solver_translator.py
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ def translate_volume_output(

def translate_imported_surface_output(
output_params: list,
surface_output_class: Union[SurfaceOutput, TimeAverageSurfaceOutput],
surface_output_class: Union[Type[SurfaceOutput], Type[TimeAverageSurfaceOutput]],
coordinate_system_manager=None,
):
"""Translate imported surface output settings."""
Comment thread
NasserFlexCompute marked this conversation as resolved.
Expand All @@ -570,22 +570,23 @@ def translate_imported_surface_output(
return imported_surface_output
Comment thread
NasserFlexCompute marked this conversation as resolved.


def translate_surface_output(
output_params: list,
surface_output_class: Union[SurfaceOutput, TimeAverageSurfaceOutput],
translated: dict,
def _translate_single_surface_output(
output_instance,
surface_output_class: Union[Type[SurfaceOutput], Type[TimeAverageSurfaceOutput]],
):
"""Translate surface output settings."""

assert "boundaries" in translated # "Boundaries must be translated before surface output"
"""Translate a single SurfaceOutput instance to solver config dict."""
is_average = surface_output_class is TimeAverageSurfaceOutput
# Wrap in a list because init_output_base and translate_setting_and_apply_to_all_entities
Comment thread
NasserFlexCompute marked this conversation as resolved.
# expect a list of outputs to iterate over.
single_list = [output_instance]

surface_output = init_output_base(
output_params,
single_list,
surface_output_class,
is_average=surface_output_class is TimeAverageSurfaceOutput,
is_average=is_average,
)
surface_output["surfaces"] = translate_setting_and_apply_to_all_entities(
output_params,
single_list,
surface_output_class,
translation_func=translate_output_fields,
to_list=False,
Expand All @@ -597,14 +598,31 @@ def translate_surface_output(
MirroredSurface,
),
)
surface_output["writeSingleFile"] = get_global_setting_from_first_instance(
output_params,
surface_output_class,
"write_single_file",
)
surface_output["writeSingleFile"] = output_instance.write_single_file
surface_output["name"] = "" if output_instance.has_default_name else output_instance.name
return surface_output
Comment thread
NasserFlexCompute marked this conversation as resolved.


def translate_surface_output(
output_params: list,
surface_output_class: Union[Type[SurfaceOutput], Type[TimeAverageSurfaceOutput]],
translated: dict,
):
"""Translate surface output settings.

Returns a list of per-instance solver config dicts (one per SurfaceOutput instance).
``translated`` is required only as a precondition guard: boundaries must already
be translated before surface outputs so downstream lookups resolve correctly.
"""
assert "boundaries" in translated, "Boundaries must be translated before surface output"

return [
_translate_single_surface_output(obj, surface_output_class)
for obj in output_params
if is_exact_instance(obj, surface_output_class)
]


def translate_slice_output(
output_params: list,
output_class: Union[SliceOutput, TimeAverageSliceOutput],
Expand Down Expand Up @@ -1162,9 +1180,9 @@ def translate_output(input_params: SimulationParams, translated: dict):
]
for output_class, output_key in surface_output_configs:
if has_instance_in_list(outputs, output_class):
surface_output = translate_surface_output(outputs, output_class, translated)
if surface_output:
translated[output_key] = add_unused_output_settings_for_comparison(surface_output)
configs = translate_surface_output(outputs, output_class, translated)
configs.sort(key=lambda c: c["name"])
Comment thread
cursor[bot] marked this conversation as resolved.
translated[output_key] = [add_unused_output_settings_for_comparison(c) for c in configs]
Comment thread
NasserFlexCompute marked this conversation as resolved.
Comment thread
NasserFlexCompute marked this conversation as resolved.
Comment thread
NasserFlexCompute marked this conversation as resolved.
Comment thread
cursor[bot] marked this conversation as resolved.
Comment thread
cursor[bot] marked this conversation as resolved.
Comment thread
NasserFlexCompute marked this conversation as resolved.
Comment thread
NasserFlexCompute marked this conversation as resolved.
Comment thread
NasserFlexCompute marked this conversation as resolved.

##:: Step3: Get translated["sliceOutput"]
slice_output_configs = [
Expand Down
2 changes: 1 addition & 1 deletion tests/simulation/service/test_integration_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,5 +217,5 @@ def test_update_zone_info_from_geometry_with_missing_symmetric():
translated = get_solver_json(param, mesh_unit="m")
assert BOUNDARY_FULL_NAME_WHEN_NOT_FOUND not in translated["boundaries"] # Silently removed
assert (
BOUNDARY_FULL_NAME_WHEN_NOT_FOUND not in translated["surfaceOutput"]["surfaces"]
BOUNDARY_FULL_NAME_WHEN_NOT_FOUND not in translated["surfaceOutput"][0]["surfaces"]
) # Silently removed
120 changes: 68 additions & 52 deletions tests/simulation/translator/ref/Flow360_CHT_three_cylinders.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,60 +91,76 @@
"runControl": {
"externalProcessMonitorOutput": false
},
"surfaceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"fluid/Interface_solid-1": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
},
"fluid/Interface_solid-2": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
},
"fluid/Interface_solid-3": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
"surfaceOutput": [
{
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"name": "",
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"fluid/Interface_solid-1": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
},
"fluid/Interface_solid-2": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
},
"fluid/Interface_solid-3": {
"outputFields": [
"Cp",
"primitiveVars",
"T",
"heatFlux",
"lowMachPreconditionerSensor"
]
}
},
"solid-1/Interface_fluid": {
"outputFields": [
"T"
]
},
"solid-2/Interface_fluid": {
"outputFields": [
"T"
]
},
"solid-3/Interface_fluid": {
"outputFields": [
"T"
]
}
"writeSingleFile": false
},
"writeSingleFile": false
},
{
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"name": "",
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"solid-1/Interface_fluid": {
"outputFields": [
"T"
]
},
"solid-2/Interface_fluid": {
"outputFields": [
"T"
]
},
"solid-3/Interface_fluid": {
"outputFields": [
"T"
]
}
},
"writeSingleFile": false
}
],
"thermallyPerfectGasModel": {
"temperatureRanges": [
{
Expand Down
57 changes: 30 additions & 27 deletions tests/simulation/translator/ref/Flow360_NestedCylindersSRF.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,34 +63,37 @@
"runControl": {
"externalProcessMonitorOutput": false
},
"surfaceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"blk-1/Cylinder": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
"surfaceOutput": [
{
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"name": "",
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"blk-1/Cylinder": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
},
"blk-1/OuterWall": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
}
},
"blk-1/OuterWall": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
}
},
"writeSingleFile": false
},
"writeSingleFile": false
}
],
"thermallyPerfectGasModel": {
"temperatureRanges": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,23 +72,26 @@
"runControl": {
"externalProcessMonitorOutput": false
},
"surfaceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"6": {
"outputFields": [
"Cf"
]
}
},
"writeSingleFile": false
},
"surfaceOutput": [
{
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"name": "",
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"6": {
"outputFields": [
"Cf"
]
}
},
"writeSingleFile": false
}
],
"thermallyPerfectGasModel": {
"temperatureRanges": [
{
Expand Down
43 changes: 23 additions & 20 deletions tests/simulation/translator/ref/Flow360_XV15HoverMRF.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,26 +54,29 @@
"runControl": {
"externalProcessMonitorOutput": false
},
"surfaceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"innerRotating/blade": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
}
},
"writeSingleFile": false
},
"surfaceOutput": [
{
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"name": "",
"outputFields": [],
"outputFormat": "paraview",
"startAverageIntegrationStep": -1,
"surfaces": {
"innerRotating/blade": {
"outputFields": [
"primitiveVars",
"Cp",
"Cf",
"yPlus"
]
}
},
"writeSingleFile": false
}
],
"thermallyPerfectGasModel": {
"temperatureRanges": [
{
Expand Down
Loading
Loading