Skip to content

Commit a633243

Browse files
benflexcomputeflow360-auto-hotfix-bot
authored andcommitted
[FXC-4139] Fixed steady BETDisk translation (#1595)
* [FXC-4139] Fixed steady BETDisk translation * Fixed unit test
1 parent 61bfd7f commit a633243

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
@@ -1056,7 +1056,7 @@ def bet_disk_entity_info_serializer(volume):
10561056
}
10571057

10581058

1059-
def bet_disk_translator(model: BETDisk):
1059+
def bet_disk_translator(model: BETDisk, is_unsteady: bool):
10601060
"""BET disk translator"""
10611061
model_dict = convert_tuples_to_lists(remove_units_in_dict(dump_dict(model)))
10621062
model_dict["alphas"] = [alpha.to("degree").value.item() for alpha in model.alphas]
@@ -1073,7 +1073,6 @@ def bet_disk_translator(model: BETDisk):
10731073
"omega": model_dict["omega"],
10741074
"chordRef": model_dict["chordRef"],
10751075
"nLoadingNodes": model_dict["nLoadingNodes"],
1076-
"bladeLineChord": model_dict["bladeLineChord"],
10771076
"twists": model_dict["twists"],
10781077
"chords": model_dict["chords"],
10791078
"sectionalPolars": model_dict["sectionalPolars"],
@@ -1083,8 +1082,16 @@ def bet_disk_translator(model: BETDisk):
10831082
"ReynoldsNumbers": model_dict["reynoldsNumbers"],
10841083
"tipGap": model_dict["tipGap"],
10851084
}
1086-
if "initialBladeDirection" in model_dict:
1087-
disk_param["initialBladeDirection"] = model_dict["initialBladeDirection"]
1085+
1086+
if is_unsteady:
1087+
# Unsteady BET Line
1088+
disk_param["bladeLineChord"] = model_dict["bladeLineChord"]
1089+
if "initialBladeDirection" in model_dict:
1090+
disk_param["initialBladeDirection"] = model_dict["initialBladeDirection"]
1091+
else:
1092+
# Steady BET Disk
1093+
disk_param["bladeLineChord"] = 0
1094+
10881095
return disk_param
10891096

10901097

@@ -1662,6 +1669,7 @@ def get_solver_json(
16621669
bet_disk_translator,
16631670
to_list=True,
16641671
entity_injection_func=bet_disk_entity_info_serializer,
1672+
translation_func_is_unsteady=isinstance(input_params.time_stepping, Unsteady),
16651673
)
16661674

16671675
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)