Skip to content

Commit ba93b74

Browse files
[FXC-4139] Fixed steady BETDisk translation (#1595)
* [FXC-4139] Fixed steady BETDisk translation * Fixed unit test
1 parent c598ef1 commit ba93b74

File tree

2 files changed

+84
-4
lines changed

2 files changed

+84
-4
lines changed

flow360/component/simulation/translator/solver_translator.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,7 @@ def bet_disk_entity_info_serializer(volume):
10501050
}
10511051

10521052

1053-
def bet_disk_translator(model: BETDisk):
1053+
def bet_disk_translator(model: BETDisk, is_unsteady: bool):
10541054
"""BET disk translator"""
10551055
model_dict = convert_tuples_to_lists(remove_units_in_dict(dump_dict(model)))
10561056
model_dict["alphas"] = [alpha.to("degree").value.item() for alpha in model.alphas]
@@ -1067,7 +1067,6 @@ def bet_disk_translator(model: BETDisk):
10671067
"omega": model_dict["omega"],
10681068
"chordRef": model_dict["chordRef"],
10691069
"nLoadingNodes": model_dict["nLoadingNodes"],
1070-
"bladeLineChord": model_dict["bladeLineChord"],
10711070
"twists": model_dict["twists"],
10721071
"chords": model_dict["chords"],
10731072
"sectionalPolars": model_dict["sectionalPolars"],
@@ -1077,8 +1076,16 @@ def bet_disk_translator(model: BETDisk):
10771076
"ReynoldsNumbers": model_dict["reynoldsNumbers"],
10781077
"tipGap": model_dict["tipGap"],
10791078
}
1080-
if "initialBladeDirection" in model_dict:
1081-
disk_param["initialBladeDirection"] = model_dict["initialBladeDirection"]
1079+
1080+
if is_unsteady:
1081+
# Unsteady BET Line
1082+
disk_param["bladeLineChord"] = model_dict["bladeLineChord"]
1083+
if "initialBladeDirection" in model_dict:
1084+
disk_param["initialBladeDirection"] = model_dict["initialBladeDirection"]
1085+
else:
1086+
# Steady BET Disk
1087+
disk_param["bladeLineChord"] = 0
1088+
10821089
return disk_param
10831090

10841091

@@ -1655,6 +1662,7 @@ def get_solver_json(
16551662
bet_disk_translator,
16561663
to_list=True,
16571664
entity_injection_func=bet_disk_entity_info_serializer,
1665+
translation_func_is_unsteady=isinstance(input_params.time_stepping, Unsteady),
16581666
)
16591667

16601668
if has_instance_in_list(input_params.models, ActuatorDisk):
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import pytest
2+
3+
import flow360.component.simulation.units as u
4+
from flow360.component.simulation.primitives import Cylinder
5+
from flow360.component.simulation.services import clear_context
6+
from flow360.component.simulation.translator.solver_translator import get_solver_json
7+
from flow360.component.simulation.unit_system import imperial_unit_system
8+
from tests.simulation.translator.utils.xv15_bet_disk_helper import (
9+
createBETDiskSteady,
10+
createBETDiskUnsteady,
11+
createSteadyTimeStepping,
12+
)
13+
from tests.simulation.translator.utils.xv15BETDisk_param_generator import (
14+
create_param_base,
15+
createUnsteadyTimeStepping,
16+
)
17+
18+
19+
@pytest.fixture(autouse=True)
20+
def reset_context():
21+
"""Clear user variables from the context."""
22+
clear_context()
23+
24+
25+
def _create_test_cylinder():
26+
return Cylinder(
27+
name="bet_zone",
28+
center=(0, 0, 0) * u.inch,
29+
axis=[0, 0, 1],
30+
outer_radius=150 * u.inch,
31+
height=15 * u.inch,
32+
)
33+
34+
35+
def test_betdisk_unsteady_excludes_internal_fields():
36+
rpm = 588.50450
37+
params = create_param_base()
38+
bet_disk = createBETDiskUnsteady(
39+
cylinder_entity=_create_test_cylinder(), pitch_in_degree=10, rpm=rpm
40+
)
41+
params.models.append(bet_disk)
42+
params.time_stepping = createUnsteadyTimeStepping(rpm)
43+
44+
translated = get_solver_json(params, mesh_unit=1 * u.inch)
45+
assert "BETDisks" in translated and len(translated["BETDisks"]) > 0
46+
bet_item = translated["BETDisks"][0]
47+
48+
assert "initialBladeDirection" in bet_item
49+
assert "bladeLineChord" in bet_item
50+
51+
52+
def test_betdisk_steady_excludes_internal_fields():
53+
rpm = 588.50450
54+
params = create_param_base()
55+
bet_disk = createBETDiskSteady(
56+
cylinder_entity=_create_test_cylinder(), pitch_in_degree=10, rpm=rpm
57+
)
58+
bet_disk = bet_disk.model_copy(
59+
update={
60+
"blade_line_chord": 25 * u.inch,
61+
"initial_blade_direction": (1, 0, 0),
62+
}
63+
)
64+
params.models.append(bet_disk)
65+
params.time_stepping = createSteadyTimeStepping()
66+
67+
translated = get_solver_json(params, mesh_unit=1 * u.inch)
68+
assert "BETDisks" in translated and len(translated["BETDisks"]) > 0
69+
bet_item = translated["BETDisks"][0]
70+
71+
assert "initialBladeDirection" not in bet_item
72+
assert "bladeLineChord" in bet_item and bet_item["bladeLineChord"] == 0

0 commit comments

Comments
 (0)