ansys-fluent-core 0.27.dev1__py3-none-any.whl → 0.28.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ansys-fluent-core might be problematic. Click here for more details.
- ansys/fluent/core/__init__.py +22 -9
- ansys/fluent/core/_version.py +5 -2
- ansys/fluent/core/codegen/__init__.py +0 -3
- ansys/fluent/core/codegen/allapigen.py +1 -5
- ansys/fluent/core/codegen/builtin_settingsgen.py +44 -10
- ansys/fluent/core/codegen/datamodelgen.py +53 -12
- ansys/fluent/core/codegen/settingsgen.py +21 -12
- ansys/fluent/core/codegen/settingsgen_old.py +2 -2
- ansys/fluent/core/codegen/tuigen.py +1 -1
- ansys/fluent/core/codegen/write_settings_yaml.py +3 -4
- ansys/fluent/core/data_model_cache.py +132 -70
- ansys/fluent/core/docs/README.rst +2 -2
- ansys/fluent/core/examples/downloads.py +3 -5
- ansys/fluent/core/exceptions.py +1 -0
- ansys/fluent/core/file_session.py +59 -131
- ansys/fluent/core/filereader/case_file.py +17 -17
- ansys/fluent/core/filereader/casereader.py +2 -1
- ansys/fluent/core/filereader/data_file.py +7 -7
- ansys/fluent/core/filereader/lispy.py +6 -1
- ansys/fluent/core/fluent_connection.py +35 -7
- ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
- ansys/fluent/core/generated/datamodel_222/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_222/PartManagement.py +28 -28
- ansys/fluent/core/generated/datamodel_222/meshing.py +301 -301
- ansys/fluent/core/generated/datamodel_222/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_231/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_231/PartManagement.py +55 -55
- ansys/fluent/core/generated/datamodel_231/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_231/meshing.py +317 -317
- ansys/fluent/core/generated/datamodel_231/solverworkflow.py +51 -51
- ansys/fluent/core/generated/datamodel_231/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_232/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_232/PartManagement.py +55 -55
- ansys/fluent/core/generated/datamodel_232/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_232/meshing.py +335 -335
- ansys/fluent/core/generated/datamodel_232/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_232/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_241/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_241/PartManagement.py +57 -57
- ansys/fluent/core/generated/datamodel_241/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_241/meshing.py +361 -361
- ansys/fluent/core/generated/datamodel_241/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_241/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_242/MeshingUtilities.py +240 -240
- ansys/fluent/core/generated/datamodel_242/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_242/PartManagement.py +60 -60
- ansys/fluent/core/generated/datamodel_242/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_242/meshing.py +371 -371
- ansys/fluent/core/generated/datamodel_242/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_242/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_251/MeshingUtilities.py +244 -244
- ansys/fluent/core/generated/datamodel_251/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_251/PartManagement.py +60 -60
- ansys/fluent/core/generated/datamodel_251/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_251/meshing.py +384 -382
- ansys/fluent/core/generated/datamodel_251/preferences.py +7 -0
- ansys/fluent/core/generated/datamodel_251/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_251/workflow.py +10 -10
- ansys/fluent/core/generated/datamodel_252/MeshingUtilities.py +3664 -0
- ansys/fluent/core/generated/datamodel_252/PMFileManagement.py +288 -0
- ansys/fluent/core/generated/datamodel_252/PartManagement.py +2588 -0
- ansys/fluent/core/generated/datamodel_252/flicing.py +7972 -0
- ansys/fluent/core/generated/datamodel_252/meshing.py +2644 -0
- ansys/fluent/core/generated/datamodel_252/preferences.py +2760 -0
- ansys/fluent/core/generated/datamodel_252/solverworkflow.py +479 -0
- ansys/fluent/core/generated/datamodel_252/workflow.py +466 -0
- ansys/fluent/core/generated/fluent_version_251.py +4 -4
- ansys/fluent/core/generated/fluent_version_252.py +5 -0
- ansys/fluent/core/generated/meshing/tui_251.py +1139 -1179
- ansys/fluent/core/generated/meshing/tui_252.py +10181 -0
- ansys/fluent/core/generated/solver/settings_222.py +3 -3
- ansys/fluent/core/generated/solver/settings_231.py +4 -4
- ansys/fluent/core/generated/solver/settings_232.py +5 -5
- ansys/fluent/core/generated/solver/settings_241.py +5 -5
- ansys/fluent/core/generated/solver/settings_242.py +1185 -1185
- ansys/fluent/core/generated/solver/settings_251.py +1847 -1652
- ansys/fluent/core/generated/solver/settings_251.pyi +237 -211
- ansys/fluent/core/generated/solver/settings_252.py +90369 -0
- ansys/fluent/core/generated/solver/settings_252.pyi +63778 -0
- ansys/fluent/core/generated/solver/settings_builtin.py +612 -1
- ansys/fluent/core/generated/solver/settings_builtin.pyi +235 -0
- ansys/fluent/core/generated/solver/tui_251.py +2283 -2103
- ansys/fluent/core/generated/solver/tui_252.py +37720 -0
- ansys/fluent/core/journaling.py +1 -1
- ansys/fluent/core/launcher/error_handler.py +3 -0
- ansys/fluent/core/launcher/fluent_container.py +5 -0
- ansys/fluent/core/launcher/launcher.py +1 -2
- ansys/fluent/core/launcher/launcher_utils.py +17 -6
- ansys/fluent/core/launcher/process_launch_string.py +3 -3
- ansys/fluent/core/launcher/pyfluent_enums.py +1 -1
- ansys/fluent/core/launcher/slurm_launcher.py +2 -1
- ansys/fluent/core/launcher/standalone_launcher.py +11 -5
- ansys/fluent/core/launcher/watchdog.py +1 -1
- ansys/fluent/core/launcher/watchdog_exec +6 -3
- ansys/fluent/core/logging.py +1 -5
- ansys/fluent/core/parametric.py +6 -3
- ansys/fluent/core/post_objects/meta.py +1 -39
- ansys/fluent/core/post_objects/post_helper.py +4 -3
- ansys/fluent/core/post_objects/post_object_definitions.py +12 -7
- ansys/fluent/core/post_objects/post_objects_container.py +39 -2
- ansys/fluent/core/rpvars.py +2 -1
- ansys/fluent/core/scheduler/machine_list.py +3 -1
- ansys/fluent/core/search.py +109 -262
- ansys/fluent/core/services/__init__.py +3 -0
- ansys/fluent/core/services/api_upgrade.py +1 -0
- ansys/fluent/core/services/batch_ops.py +3 -1
- ansys/fluent/core/services/datamodel_se.py +37 -30
- ansys/fluent/core/services/datamodel_tui.py +8 -3
- ansys/fluent/core/services/deprecated_field_data.py +691 -0
- ansys/fluent/core/services/field_data.py +67 -357
- ansys/fluent/core/services/interceptors.py +6 -4
- ansys/fluent/core/services/reduction.py +1 -2
- ansys/fluent/core/services/scheme_eval.py +2 -3
- ansys/fluent/core/services/solution_variables.py +46 -48
- ansys/fluent/core/session.py +6 -4
- ansys/fluent/core/session_meshing.pyi +5 -0
- ansys/fluent/core/session_pure_meshing.pyi +4 -1
- ansys/fluent/core/session_solver_lite.py +2 -1
- ansys/fluent/core/solver/flobject.py +179 -207
- ansys/fluent/core/solver/flunits.py +65 -56
- ansys/fluent/core/solver/function/reduction.py +9 -29
- ansys/fluent/core/solver/settings_builtin_bases.py +28 -22
- ansys/fluent/core/solver/settings_builtin_data.py +105 -1
- ansys/fluent/core/solver/settings_external.py +0 -28
- ansys/fluent/core/streaming_services/field_data_streaming.py +1 -0
- ansys/fluent/core/streaming_services/monitor_streaming.py +0 -1
- ansys/fluent/core/systemcoupling.py +145 -14
- ansys/fluent/core/utils/__init__.py +18 -2
- ansys/fluent/core/utils/dump_session_data.py +7 -4
- ansys/fluent/core/utils/execution.py +2 -2
- ansys/fluent/core/utils/file_transfer_service.py +37 -42
- ansys/fluent/core/utils/fluent_version.py +20 -2
- ansys/fluent/core/utils/networking.py +39 -1
- ansys/fluent/core/workflow.py +3 -15
- ansys/fluent/tests/conftest.py +89 -7
- ansys/fluent/tests/fluent/test_version/test.py +2 -0
- ansys/fluent/tests/fluent_fixtures.py +195 -0
- ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +7 -7
- ansys/fluent/tests/parametric/test_parametric_workflow.py +14 -4
- ansys/fluent/tests/test_builtin_settings.py +28 -0
- ansys/fluent/tests/test_cad_to_post_ftm.py +1 -3
- ansys/fluent/tests/test_cad_to_post_wtm.py +1 -1
- ansys/fluent/tests/test_casereader.py +1 -1
- ansys/fluent/tests/test_codegen.py +116 -6
- ansys/fluent/tests/test_data_model_cache.py +1 -1
- ansys/fluent/tests/test_datamodel_service.py +14 -19
- ansys/fluent/tests/test_field_data.py +93 -45
- ansys/fluent/tests/test_file_session.py +32 -29
- ansys/fluent/tests/test_flobject.py +16 -58
- ansys/fluent/tests/test_fluent_fixes.py +5 -5
- ansys/fluent/tests/test_fluent_session.py +11 -8
- ansys/fluent/tests/test_fluent_version.py +1 -1
- ansys/fluent/tests/test_launcher.py +22 -5
- ansys/fluent/tests/test_launcher_remote.py +80 -4
- ansys/fluent/tests/test_meshing_utilities.py +93 -44
- ansys/fluent/tests/test_meshing_workflow.py +6 -6
- ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +1 -1
- ansys/fluent/tests/test_new_meshing_workflow.py +42 -3
- ansys/fluent/tests/test_preferences.py +6 -6
- ansys/fluent/tests/test_reduction.py +61 -30
- ansys/fluent/tests/test_rp_vars.py +1 -1
- ansys/fluent/tests/test_search.py +53 -200
- ansys/fluent/tests/test_session.py +18 -13
- ansys/fluent/tests/test_settings_api.py +93 -29
- ansys/fluent/tests/test_settings_reader.py +1 -1
- ansys/fluent/tests/test_solver_monitors.py +1 -1
- ansys/fluent/tests/test_solvermode/test_calculationactivities.py +4 -4
- ansys/fluent/tests/test_solvermode/test_controls.py +3 -3
- ansys/fluent/tests/test_solvermode/test_methods.py +1 -1
- ansys/fluent/tests/test_solvermode/test_models.py +3 -3
- ansys/fluent/tests/test_systemcoupling.py +33 -5
- ansys/fluent/tests/test_topy.py +2 -2
- ansys/fluent/tests/test_tui_api.py +5 -5
- ansys/fluent/tests/test_utils.py +1 -1
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/METADATA +6 -17
- ansys_fluent_core-0.28.dev0.dist-info/RECORD +291 -0
- ansys/fluent/core/generated/api_tree_222.pickle +0 -0
- ansys/fluent/core/generated/api_tree_231.pickle +0 -0
- ansys/fluent/core/generated/api_tree_232.pickle +0 -0
- ansys/fluent/core/generated/api_tree_241.pickle +0 -0
- ansys/fluent/core/generated/api_tree_242.pickle +0 -0
- ansys/fluent/core/generated/api_tree_251.pickle +0 -0
- ansys/fluent/tests/test_tests_util.py +0 -47
- ansys/fluent/tests/util/__init__.py +0 -38
- ansys_fluent_core-0.27.dev1.dist-info/RECORD +0 -283
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/AUTHORS +0 -0
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/LICENSE +0 -0
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/WHEEL +0 -0
ansys/fluent/tests/conftest.py
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
from contextlib import nullcontext
|
|
2
2
|
import functools
|
|
3
|
+
import inspect
|
|
3
4
|
import operator
|
|
4
5
|
import os
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import shutil
|
|
8
|
+
import sys
|
|
5
9
|
|
|
6
10
|
from packaging.specifiers import SpecifierSet
|
|
7
11
|
from packaging.version import Version
|
|
8
12
|
import pytest
|
|
9
13
|
|
|
10
14
|
import ansys.fluent.core as pyfluent
|
|
11
|
-
from ansys.fluent.core import codegen
|
|
12
15
|
from ansys.fluent.core.examples.downloads import download_file
|
|
13
16
|
from ansys.fluent.core.utils.file_transfer_service import RemoteFileTransferStrategy
|
|
14
17
|
from ansys.fluent.core.utils.fluent_version import FluentVersion
|
|
15
18
|
|
|
16
|
-
_fluent_release_version = FluentVersion.current_release().value
|
|
17
|
-
|
|
18
19
|
|
|
19
20
|
def pytest_addoption(parser):
|
|
20
21
|
parser.addoption(
|
|
@@ -29,6 +30,12 @@ def pytest_addoption(parser):
|
|
|
29
30
|
parser.addoption(
|
|
30
31
|
"--solvermode", action="store_true", default=False, help="run solvermode tests"
|
|
31
32
|
)
|
|
33
|
+
parser.addoption(
|
|
34
|
+
"--write-fluent-journals",
|
|
35
|
+
action="store_true",
|
|
36
|
+
default=False,
|
|
37
|
+
help="Write Fluent journals for unittests",
|
|
38
|
+
)
|
|
32
39
|
|
|
33
40
|
|
|
34
41
|
def pytest_runtest_setup(item):
|
|
@@ -48,6 +55,7 @@ def pytest_runtest_setup(item):
|
|
|
48
55
|
pytest.skip()
|
|
49
56
|
|
|
50
57
|
version_specs = []
|
|
58
|
+
fluent_release_version = FluentVersion.current_release().value
|
|
51
59
|
for mark in item.iter_markers(name="fluent_version"):
|
|
52
60
|
spec = mark.args[0]
|
|
53
61
|
# if a test is marked as fluent_version("latest")
|
|
@@ -55,9 +63,9 @@ def pytest_runtest_setup(item):
|
|
|
55
63
|
# run with release Fluent versions in PRs
|
|
56
64
|
if spec == "latest":
|
|
57
65
|
spec = (
|
|
58
|
-
f">={
|
|
66
|
+
f">={fluent_release_version}"
|
|
59
67
|
if is_nightly or is_solvermode_option
|
|
60
|
-
else f"=={
|
|
68
|
+
else f"=={fluent_release_version}"
|
|
61
69
|
)
|
|
62
70
|
version_specs.append(SpecifierSet(spec))
|
|
63
71
|
if version_specs:
|
|
@@ -67,14 +75,83 @@ def pytest_runtest_setup(item):
|
|
|
67
75
|
pytest.skip()
|
|
68
76
|
|
|
69
77
|
|
|
78
|
+
def pytest_collection_finish(session):
|
|
79
|
+
if session.config.getoption("--write-fluent-journals"):
|
|
80
|
+
import_path = Path(__file__).parent
|
|
81
|
+
sys.path.append(str(import_path))
|
|
82
|
+
import fluent_fixtures
|
|
83
|
+
|
|
84
|
+
launcher_args_by_fixture = {}
|
|
85
|
+
for k, v in fluent_fixtures.__dict__.items():
|
|
86
|
+
if hasattr(v, "fluent_launcher_args"):
|
|
87
|
+
launcher_args_by_fixture[k] = v.fluent_launcher_args
|
|
88
|
+
fluent_test_root = import_path / "fluent"
|
|
89
|
+
shutil.rmtree(fluent_test_root, ignore_errors=True)
|
|
90
|
+
for item in session.items:
|
|
91
|
+
skip = False
|
|
92
|
+
for mark in item.iter_markers(name="skip"):
|
|
93
|
+
skip = True
|
|
94
|
+
for mark in item.iter_markers(name="fluent_version"):
|
|
95
|
+
spec = mark.args[0]
|
|
96
|
+
# TODO: Support older versions
|
|
97
|
+
if not (
|
|
98
|
+
spec == "latest"
|
|
99
|
+
or Version(FluentVersion.current_dev().value) in SpecifierSet(spec)
|
|
100
|
+
):
|
|
101
|
+
skip = True
|
|
102
|
+
if skip:
|
|
103
|
+
continue
|
|
104
|
+
fluent_test_dir = fluent_test_root / item.module.__name__ / item.name
|
|
105
|
+
fluent_test_config = fluent_test_dir / "test.yaml"
|
|
106
|
+
fluent_test_file = fluent_test_dir / "test.py"
|
|
107
|
+
launcher_args = ""
|
|
108
|
+
parameters = inspect.signature(item.function).parameters
|
|
109
|
+
parameter_set = {p for p in parameters}
|
|
110
|
+
if not (parameter_set & set(launcher_args_by_fixture.keys())):
|
|
111
|
+
# Skipping as unittest doesn't use fluent fixture
|
|
112
|
+
continue
|
|
113
|
+
for param in parameters:
|
|
114
|
+
if param not in dir(fluent_fixtures):
|
|
115
|
+
print(f"Skipping {item.nodeid} because of missing fixture {param}")
|
|
116
|
+
skip = True
|
|
117
|
+
break
|
|
118
|
+
if skip:
|
|
119
|
+
continue
|
|
120
|
+
for param in parameters:
|
|
121
|
+
if param in launcher_args_by_fixture:
|
|
122
|
+
launcher_args = launcher_args_by_fixture[param]
|
|
123
|
+
break
|
|
124
|
+
fluent_test_dir.mkdir(parents=True, exist_ok=True)
|
|
125
|
+
with open(fluent_test_config, "w") as f:
|
|
126
|
+
f.write(f"launcher_args: {launcher_args}\n")
|
|
127
|
+
with open(fluent_test_file, "w") as f:
|
|
128
|
+
f.write("import sys\n")
|
|
129
|
+
f.write('sys.path.append("/testing")\n')
|
|
130
|
+
f.write(
|
|
131
|
+
f"from {item.module.__name__} import {item.name} # noqa: E402\n"
|
|
132
|
+
)
|
|
133
|
+
f.write("from fluent_fixtures import ( # noqa: E402\n")
|
|
134
|
+
for param in parameters:
|
|
135
|
+
f.write(f" {param},\n")
|
|
136
|
+
f.write(")\n")
|
|
137
|
+
f.write("\n")
|
|
138
|
+
f.write(f"{item.name}(")
|
|
139
|
+
f.write(", ".join([f"{p}(globals())" for p in parameters]))
|
|
140
|
+
f.write(")\n")
|
|
141
|
+
f.write("exit()\n")
|
|
142
|
+
print(f"Written {fluent_test_file}")
|
|
143
|
+
session.items = []
|
|
144
|
+
session.testscollected = 0
|
|
145
|
+
|
|
146
|
+
|
|
70
147
|
@pytest.fixture(autouse=True)
|
|
71
148
|
def run_before_each_test(
|
|
72
149
|
monkeypatch: pytest.MonkeyPatch, request: pytest.FixtureRequest
|
|
73
150
|
) -> None:
|
|
74
151
|
monkeypatch.setenv("PYFLUENT_TEST_NAME", request.node.name)
|
|
152
|
+
monkeypatch.setenv("PYFLUENT_CODEGEN_SKIP_BUILTIN_SETTINGS", "1")
|
|
75
153
|
pyfluent.CONTAINER_MOUNT_SOURCE = pyfluent.EXAMPLES_PATH
|
|
76
154
|
pyfluent.CONTAINER_MOUNT_TARGET = pyfluent.EXAMPLES_PATH
|
|
77
|
-
codegen.CODEGEN_GENERATE_BUILTIN_SETTINGS = False
|
|
78
155
|
|
|
79
156
|
|
|
80
157
|
class Helpers:
|
|
@@ -145,8 +222,8 @@ def exhaust_system_geometry_filename():
|
|
|
145
222
|
|
|
146
223
|
def create_session(**kwargs):
|
|
147
224
|
if pyfluent.USE_FILE_TRANSFER_SERVICE:
|
|
148
|
-
container_dict = {"mount_source": file_transfer_service.MOUNT_SOURCE}
|
|
149
225
|
file_transfer_service = RemoteFileTransferStrategy()
|
|
226
|
+
container_dict = {"mount_source": file_transfer_service.MOUNT_SOURCE}
|
|
150
227
|
return pyfluent.launch_fluent(
|
|
151
228
|
container_dict=container_dict,
|
|
152
229
|
file_transfer_service=file_transfer_service,
|
|
@@ -301,3 +378,8 @@ def periodic_rot_settings_session(new_solver_session):
|
|
|
301
378
|
lightweight_setup=True,
|
|
302
379
|
)
|
|
303
380
|
return solver
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
@pytest.fixture
|
|
384
|
+
def disable_datamodel_cache(monkeypatch: pytest.MonkeyPatch):
|
|
385
|
+
monkeypatch.setattr(pyfluent, "DATAMODEL_USE_STATE_CACHE", False)
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
import ansys.fluent.core as pyfluent
|
|
6
|
+
from ansys.fluent.core.data_model_cache import DataModelCache
|
|
7
|
+
from ansys.fluent.core.examples import download_file
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def fluent_launcher_args(args: str):
|
|
11
|
+
def fluent_launcher_args_inner(f: Callable):
|
|
12
|
+
def wrapper(*args, **kwargs):
|
|
13
|
+
return f(*args, **kwargs)
|
|
14
|
+
|
|
15
|
+
wrapper.fluent_launcher_args = args
|
|
16
|
+
return wrapper
|
|
17
|
+
|
|
18
|
+
return fluent_launcher_args_inner
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def mixing_elbow_geometry_filename(globals):
|
|
22
|
+
return download_file(
|
|
23
|
+
file_name="mixing_elbow.pmdb", directory="pyfluent/mixing_elbow"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def exhaust_system_geometry_filename(globals):
|
|
28
|
+
return download_file(
|
|
29
|
+
file_name="exhaust_system.fmd", directory="pyfluent/exhaust_system"
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@fluent_launcher_args("3ddp -meshing")
|
|
34
|
+
def new_meshing_session(globals):
|
|
35
|
+
meshing = globals["meshing"]
|
|
36
|
+
return meshing
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@fluent_launcher_args("3ddp -meshing")
|
|
40
|
+
def new_pure_meshing_session(globals):
|
|
41
|
+
return new_meshing_session(globals)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@fluent_launcher_args("3ddp -meshing")
|
|
45
|
+
def watertight_workflow_session(globals):
|
|
46
|
+
meshing = new_meshing_session(globals)
|
|
47
|
+
meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
|
|
48
|
+
return meshing
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@fluent_launcher_args("3ddp -meshing")
|
|
52
|
+
def fault_tolerant_workflow_session(globals):
|
|
53
|
+
meshing = new_meshing_session(globals)
|
|
54
|
+
meshing.workflow.InitializeWorkflow(WorkflowType="Fault-tolerant Meshing")
|
|
55
|
+
return meshing
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@fluent_launcher_args("3ddp -meshing")
|
|
59
|
+
def mixing_elbow_watertight_pure_meshing_session(globals):
|
|
60
|
+
meshing = new_pure_meshing_session(globals)
|
|
61
|
+
geometry_filename = mixing_elbow_geometry_filename(globals)
|
|
62
|
+
meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
|
|
63
|
+
meshing.workflow.TaskObject["Import Geometry"].Arguments = dict(
|
|
64
|
+
FileName=geometry_filename, LengthUnit="in"
|
|
65
|
+
)
|
|
66
|
+
return meshing
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@fluent_launcher_args("3ddp")
|
|
70
|
+
def new_solver_session(globals):
|
|
71
|
+
solver = globals["solver"]
|
|
72
|
+
return solver
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@fluent_launcher_args("3d")
|
|
76
|
+
def new_solver_session_sp(globals):
|
|
77
|
+
return new_solver_session(globals)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@fluent_launcher_args("2ddp")
|
|
81
|
+
def new_solver_session_2d(globals):
|
|
82
|
+
return new_solver_session(globals)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@fluent_launcher_args("3ddp")
|
|
86
|
+
def static_mixer_settings_session(globals):
|
|
87
|
+
solver = new_solver_session(globals)
|
|
88
|
+
case_name = download_file("Static_Mixer_main.cas.h5", "pyfluent/static_mixer")
|
|
89
|
+
solver.file.read(
|
|
90
|
+
file_type="case",
|
|
91
|
+
file_name=case_name,
|
|
92
|
+
lightweight_setup=True,
|
|
93
|
+
)
|
|
94
|
+
return solver
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@fluent_launcher_args("3ddp")
|
|
98
|
+
def static_mixer_case_session(globals):
|
|
99
|
+
solver = new_solver_session(globals)
|
|
100
|
+
case_name = download_file("Static_Mixer_main.cas.h5", "pyfluent/static_mixer")
|
|
101
|
+
solver.file.read(file_type="case", file_name=case_name)
|
|
102
|
+
return solver
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@fluent_launcher_args("3ddp")
|
|
106
|
+
def mixing_elbow_settings_session(globals):
|
|
107
|
+
solver = new_solver_session(globals)
|
|
108
|
+
case_name = download_file("mixing_elbow.cas.h5", "pyfluent/mixing_elbow")
|
|
109
|
+
solver.settings.file.read(
|
|
110
|
+
file_type="case",
|
|
111
|
+
file_name=case_name,
|
|
112
|
+
lightweight_setup=True,
|
|
113
|
+
)
|
|
114
|
+
return solver
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@fluent_launcher_args("3ddp")
|
|
118
|
+
def mixing_elbow_case_data_session(globals):
|
|
119
|
+
solver = new_solver_session(globals)
|
|
120
|
+
case_name = download_file("mixing_elbow.cas.h5", "pyfluent/mixing_elbow")
|
|
121
|
+
download_file("mixing_elbow.dat.h5", "pyfluent/mixing_elbow")
|
|
122
|
+
solver.settings.file.read(file_type="case-data", file_name=case_name)
|
|
123
|
+
return solver
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@fluent_launcher_args("3ddp")
|
|
127
|
+
def mixing_elbow_param_case_data_session(globals):
|
|
128
|
+
solver = new_solver_session(globals)
|
|
129
|
+
case_name = download_file("elbow_param.cas.h5", "pyfluent/mixing_elbow")
|
|
130
|
+
download_file("elbow_param.dat.h5", "pyfluent/mixing_elbow")
|
|
131
|
+
solver.settings.file.read(file_type="case-data", file_name=case_name)
|
|
132
|
+
return solver
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@fluent_launcher_args("2ddp")
|
|
136
|
+
def disk_settings_session(globals):
|
|
137
|
+
solver = new_solver_session_2d(globals)
|
|
138
|
+
case_name = download_file("disk.cas.h5", "pyfluent/rotating_disk")
|
|
139
|
+
solver.file.read(
|
|
140
|
+
file_type="case",
|
|
141
|
+
file_name=case_name,
|
|
142
|
+
lightweight_setup=True,
|
|
143
|
+
)
|
|
144
|
+
return solver
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@fluent_launcher_args("2ddp")
|
|
148
|
+
def disk_case_session(globals):
|
|
149
|
+
solver = new_solver_session_2d(globals)
|
|
150
|
+
case_name = download_file("disk.cas.h5", "pyfluent/rotating_disk")
|
|
151
|
+
solver.file.read(file_type="case", file_name=case_name)
|
|
152
|
+
return solver
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@fluent_launcher_args("3ddp")
|
|
156
|
+
def periodic_rot_settings_session(globals):
|
|
157
|
+
solver = new_solver_session(globals)
|
|
158
|
+
case_name = download_file(
|
|
159
|
+
"periodic_rot.cas.h5",
|
|
160
|
+
"pyfluent/periodic_rot",
|
|
161
|
+
)
|
|
162
|
+
solver.file.read(
|
|
163
|
+
file_type="case",
|
|
164
|
+
file_name=case_name,
|
|
165
|
+
lightweight_setup=True,
|
|
166
|
+
)
|
|
167
|
+
return solver
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
monkeypatch = pytest.MonkeyPatch()
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def disable_datamodel_cache(globals):
|
|
174
|
+
monkeypatch.setattr(pyfluent, "DATAMODEL_USE_STATE_CACHE", False)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def display_names_as_keys_in_cache(globals):
|
|
178
|
+
DataModelCache.use_display_name = True
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def new_meshing_session2(globals):
|
|
182
|
+
session = pyfluent.launch_fluent(mode=pyfluent.LaunchMode.MESHING)
|
|
183
|
+
return session
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def new_solver_session2(globals):
|
|
187
|
+
session = pyfluent.launch_fluent()
|
|
188
|
+
return session
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def static_mixer_case_session2(globals):
|
|
192
|
+
session = new_solver_session2(globals)
|
|
193
|
+
case_name = download_file("Static_Mixer_main.cas.h5", "pyfluent/static_mixer")
|
|
194
|
+
session.file.read(file_type="case", file_name=case_name)
|
|
195
|
+
return session
|
|
@@ -84,7 +84,7 @@ def test_simple_solve(mixing_elbow_param_case_data_session):
|
|
|
84
84
|
else:
|
|
85
85
|
print("Solution is converged")
|
|
86
86
|
|
|
87
|
-
assert convergence
|
|
87
|
+
assert convergence, "Solution failed to converge"
|
|
88
88
|
|
|
89
89
|
# Step 5: Read the data again from the case and data file
|
|
90
90
|
solver_session.settings.file.read_case_data(file_name=case_path)
|
|
@@ -148,8 +148,8 @@ def test_generate_read_mesh(mixing_elbow_geometry_filename):
|
|
|
148
148
|
h5_path = str(Path(temporary_resource_path) / "default_mesh.msh.h5")
|
|
149
149
|
meshing.tui.file.write_mesh(gz_path)
|
|
150
150
|
meshing.tui.file.write_mesh(h5_path)
|
|
151
|
-
assert (Path(temporary_resource_path) / "default_mesh.msh.gz").exists()
|
|
152
|
-
assert (Path(temporary_resource_path) / "default_mesh.msh.h5").exists()
|
|
151
|
+
assert (Path(temporary_resource_path) / "default_mesh.msh.gz").exists()
|
|
152
|
+
assert (Path(temporary_resource_path) / "default_mesh.msh.h5").exists()
|
|
153
153
|
|
|
154
154
|
# Step 3: use created mesh file - .msh.gz/.msh.h5
|
|
155
155
|
meshing.tui.file.read_mesh(gz_path, "ok")
|
|
@@ -163,8 +163,8 @@ def test_generate_read_mesh(mixing_elbow_geometry_filename):
|
|
|
163
163
|
write_case = solver.settings.file.write_case
|
|
164
164
|
write_case(file_name=gz_path)
|
|
165
165
|
write_case(file_name=h5_path)
|
|
166
|
-
assert (Path(temporary_resource_path) / "default_case.cas.gz").exists()
|
|
167
|
-
assert (Path(temporary_resource_path) / "default_case.cas.h5").exists()
|
|
166
|
+
assert (Path(temporary_resource_path) / "default_case.cas.gz").exists()
|
|
167
|
+
assert (Path(temporary_resource_path) / "default_case.cas.h5").exists()
|
|
168
168
|
solver.exit()
|
|
169
169
|
shutil.rmtree(temporary_resource_path, ignore_errors=True)
|
|
170
170
|
|
|
@@ -254,9 +254,9 @@ def test_parametric_project(mixing_elbow_param_case_data_session, new_solver_ses
|
|
|
254
254
|
assert base_outputs == {"outlet_temp-op": pytest_approx(322.336008)}
|
|
255
255
|
if session2.get_fluent_version() < FluentVersion.v251:
|
|
256
256
|
pstudy.design_points.create_1()
|
|
257
|
+
dp = pstudy.design_points["DP1"]
|
|
257
258
|
else:
|
|
258
|
-
pstudy.design_points.create()
|
|
259
|
-
dp = pstudy.design_points["DP1"]
|
|
259
|
+
dp = pstudy.design_points.create()
|
|
260
260
|
dp.input_parameters["inlet2_temp"] = 600.0
|
|
261
261
|
pstudy.design_points.update_selected(design_points=["DP1"])
|
|
262
262
|
fluent_output_table = dp.output_parameters()
|
|
@@ -105,10 +105,10 @@ def test_parametric_workflow():
|
|
|
105
105
|
dp_names = set([*study1.design_points.keys()])
|
|
106
106
|
if solver_session.get_fluent_version() < FluentVersion.v251:
|
|
107
107
|
study1.design_points.create_1()
|
|
108
|
+
dp1_name = set([*study1.design_points.keys()]).difference(dp_names).pop()
|
|
109
|
+
dp1 = study1.design_points[dp1_name]
|
|
108
110
|
else:
|
|
109
|
-
study1.design_points.create()
|
|
110
|
-
dp1_name = set([*study1.design_points.keys()]).difference(dp_names).pop()
|
|
111
|
-
dp1 = study1.design_points[dp1_name]
|
|
111
|
+
dp1 = study1.design_points.create()
|
|
112
112
|
dp1.input_parameters["inlet1_temp"] = 500
|
|
113
113
|
dp1.input_parameters["inlet1_vel"] = 1
|
|
114
114
|
dp1.input_parameters["inlet2_vel"] = 1
|
|
@@ -145,7 +145,7 @@ def test_parametric_workflow():
|
|
|
145
145
|
solver_session.parametric_studies.export_design_table(filepath=write_design_table)
|
|
146
146
|
assert design_point_table.exists()
|
|
147
147
|
|
|
148
|
-
study1.design_points.delete_design_points(design_points=[
|
|
148
|
+
study1.design_points.delete_design_points(design_points=[dp1.obj_name])
|
|
149
149
|
assert len(study1.design_points) == 2
|
|
150
150
|
study_names = set([*solver_session.parametric_studies.keys()])
|
|
151
151
|
solver_session.parametric_studies.duplicate()
|
|
@@ -255,6 +255,15 @@ def test_parameters_list_function(static_mixer_settings_session):
|
|
|
255
255
|
create_output_param("report-definition", "outlet-temp-avg")
|
|
256
256
|
create_output_param("report-definition", "outlet-vel-avg")
|
|
257
257
|
|
|
258
|
+
# Create a unitless output parameter
|
|
259
|
+
unitless_quantity = solver.settings.solution.report_definitions.surface.create(
|
|
260
|
+
"temp-outlet-uniformity"
|
|
261
|
+
)
|
|
262
|
+
unitless_quantity.report_type = "surface-masswtui"
|
|
263
|
+
unitless_quantity.field = "temperature"
|
|
264
|
+
unitless_quantity.surface_names = ["outlet"]
|
|
265
|
+
unitless_quantity.output_parameter = True
|
|
266
|
+
|
|
258
267
|
input_parameters_list = solver.parameters.input_parameters.list()
|
|
259
268
|
output_parameters_list = solver.parameters.output_parameters.list()
|
|
260
269
|
assert input_parameters_list == {
|
|
@@ -266,4 +275,5 @@ def test_parameters_list_function(static_mixer_settings_session):
|
|
|
266
275
|
assert output_parameters_list == {
|
|
267
276
|
"outlet-temp-avg-op": [0.0, "K"],
|
|
268
277
|
"outlet-vel-avg-op": [0.0, "m/s"],
|
|
278
|
+
"temp-outlet-uniformity-op": [0.0, ""],
|
|
269
279
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import tempfile
|
|
3
|
+
|
|
1
4
|
import pytest
|
|
2
5
|
|
|
3
6
|
try:
|
|
@@ -19,6 +22,8 @@ try:
|
|
|
19
22
|
CumulativePlots,
|
|
20
23
|
CustomFieldFunctions,
|
|
21
24
|
CustomVectors,
|
|
25
|
+
DesignPoint,
|
|
26
|
+
DesignPoints,
|
|
22
27
|
DiscretePhase,
|
|
23
28
|
DiscretePhaseHistogram,
|
|
24
29
|
DynamicMesh,
|
|
@@ -56,6 +61,8 @@ try:
|
|
|
56
61
|
NamedExpressions,
|
|
57
62
|
Optics,
|
|
58
63
|
OutputParameters,
|
|
64
|
+
ParametricStudies,
|
|
65
|
+
ParametricStudy,
|
|
59
66
|
ParticleTracks,
|
|
60
67
|
PartitionSurfaces,
|
|
61
68
|
Pathlines,
|
|
@@ -112,6 +119,7 @@ try:
|
|
|
112
119
|
)
|
|
113
120
|
except ImportError:
|
|
114
121
|
pass # for no-codegen testing workflow
|
|
122
|
+
import ansys.fluent.core as pyfluent
|
|
115
123
|
from ansys.fluent.core.examples import download_file
|
|
116
124
|
from ansys.fluent.core.utils.fluent_version import FluentVersion
|
|
117
125
|
|
|
@@ -630,6 +638,26 @@ def test_builtin_settings(mixing_elbow_case_data_session):
|
|
|
630
638
|
else:
|
|
631
639
|
with pytest.raises(RuntimeError):
|
|
632
640
|
CustomVectors(settings_source=solver)
|
|
641
|
+
tmp_save_path = tempfile.mkdtemp(dir=pyfluent.EXAMPLES_PATH)
|
|
642
|
+
project_file = Path(tmp_save_path) / "mixing_elbow_param.flprj"
|
|
643
|
+
solver.settings.parametric_studies.initialize(project_filename=str(project_file))
|
|
644
|
+
assert ParametricStudies(settings_source=solver) == solver.parametric_studies
|
|
645
|
+
assert (
|
|
646
|
+
ParametricStudy(settings_source=solver, name="mixing_elbow-Solve")
|
|
647
|
+
== solver.parametric_studies["mixing_elbow-Solve"]
|
|
648
|
+
)
|
|
649
|
+
assert (
|
|
650
|
+
DesignPoints(settings_source=solver, parametric_studies="mixing_elbow-Solve")
|
|
651
|
+
== solver.parametric_studies["mixing_elbow-Solve"].design_points
|
|
652
|
+
)
|
|
653
|
+
assert (
|
|
654
|
+
DesignPoint(
|
|
655
|
+
settings_source=solver,
|
|
656
|
+
parametric_studies="mixing_elbow-Solve",
|
|
657
|
+
name="Base DP",
|
|
658
|
+
)
|
|
659
|
+
== solver.parametric_studies["mixing_elbow-Solve"].design_points["Base DP"]
|
|
660
|
+
)
|
|
633
661
|
|
|
634
662
|
|
|
635
663
|
@pytest.mark.codegen_required
|
|
@@ -32,9 +32,7 @@ def test_exhaust_system(
|
|
|
32
32
|
meshing_session = fault_tolerant_workflow_session
|
|
33
33
|
workflow = meshing_session.workflow
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
assign_task_arguments, workflow=workflow, check_state=True
|
|
37
|
-
)
|
|
35
|
+
_ = partial(assign_task_arguments, workflow=workflow, check_state=True)
|
|
38
36
|
|
|
39
37
|
execute_task_with_pre_and_postconditions = partial(
|
|
40
38
|
execute_task_with_pre_and_postcondition_checks, workflow=workflow
|
|
@@ -17,7 +17,7 @@ This test queries the following using PyTest:
|
|
|
17
17
|
from functools import partial
|
|
18
18
|
|
|
19
19
|
import pytest
|
|
20
|
-
from util.meshing_workflow import (
|
|
20
|
+
from util.meshing_workflow import (
|
|
21
21
|
assign_task_arguments,
|
|
22
22
|
execute_task_with_pre_and_postcondition_checks,
|
|
23
23
|
)
|
|
@@ -286,7 +286,7 @@ def test_lispy_for_multiline_string():
|
|
|
286
286
|
|
|
287
287
|
|
|
288
288
|
def test_lispy_for_quotes():
|
|
289
|
-
lispy.parse(
|
|
289
|
+
assert lispy.parse(
|
|
290
290
|
'(define x "\n(format \\"\n-------------------------\nRunning Original Settings\n------------------------\n\\")")'
|
|
291
291
|
) == [
|
|
292
292
|
"define",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ast
|
|
1
2
|
import importlib
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
import pickle
|
|
@@ -330,8 +331,8 @@ def test_codegen_with_datamodel_static_info(monkeypatch, rules):
|
|
|
330
331
|
f"datamodel_{version}",
|
|
331
332
|
}
|
|
332
333
|
datamodel_paths = list((codegen_outdir / f"datamodel_{version}").iterdir())
|
|
333
|
-
assert len(datamodel_paths) == 1
|
|
334
|
-
assert set(p.name for p in datamodel_paths) == {f"{rules}.py"}
|
|
334
|
+
assert len(datamodel_paths) == 1 or 2
|
|
335
|
+
assert set(p.name for p in datamodel_paths) == {f"{rules}.py"} or {f"{rules}.pyi"}
|
|
335
336
|
with open(codegen_outdir / f"datamodel_{version}" / f"{rules}.py", "r") as f:
|
|
336
337
|
assert f.read().strip() == _expected_datamodel_api_output
|
|
337
338
|
api_tree_file = get_api_tree_file_name(version)
|
|
@@ -812,8 +813,8 @@ def test_codegen_old_with_settings_static_info(monkeypatch):
|
|
|
812
813
|
"Q1": "Query",
|
|
813
814
|
}
|
|
814
815
|
api_tree_expected = {}
|
|
815
|
-
api_tree_expected[
|
|
816
|
-
api_tree_expected[
|
|
816
|
+
api_tree_expected["<meshing_session>"] = {}
|
|
817
|
+
api_tree_expected["<solver_session>"] = settings_tree
|
|
817
818
|
assert api_tree == api_tree_expected
|
|
818
819
|
shutil.rmtree(str(codegen_outdir))
|
|
819
820
|
|
|
@@ -1077,7 +1078,116 @@ def test_codegen_with_settings_static_info(monkeypatch):
|
|
|
1077
1078
|
"Q1": "Query",
|
|
1078
1079
|
}
|
|
1079
1080
|
api_tree_expected = {}
|
|
1080
|
-
api_tree_expected[
|
|
1081
|
-
api_tree_expected[
|
|
1081
|
+
api_tree_expected["<meshing_session>"] = {}
|
|
1082
|
+
api_tree_expected["<solver_session>"] = settings_tree
|
|
1082
1083
|
assert api_tree == api_tree_expected
|
|
1083
1084
|
shutil.rmtree(str(codegen_outdir))
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
_settings_static_info_duplicate_parameters = {
|
|
1088
|
+
"children": (
|
|
1089
|
+
_get_group_settings_static_info(
|
|
1090
|
+
"G1",
|
|
1091
|
+
(
|
|
1092
|
+
(
|
|
1093
|
+
_get_group_settings_static_info(
|
|
1094
|
+
"G2",
|
|
1095
|
+
_get_parameter_settings_static_info("P1", "string"),
|
|
1096
|
+
{},
|
|
1097
|
+
{},
|
|
1098
|
+
)
|
|
1099
|
+
)
|
|
1100
|
+
| _get_parameter_settings_static_info("P1", "string")
|
|
1101
|
+
),
|
|
1102
|
+
{},
|
|
1103
|
+
{},
|
|
1104
|
+
)
|
|
1105
|
+
),
|
|
1106
|
+
"commands": {},
|
|
1107
|
+
"queries": {},
|
|
1108
|
+
"type": "group",
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
_settings_static_info_different_parameters_with_same_name = {
|
|
1112
|
+
"children": (
|
|
1113
|
+
_get_group_settings_static_info(
|
|
1114
|
+
"G1",
|
|
1115
|
+
(
|
|
1116
|
+
(
|
|
1117
|
+
_get_group_settings_static_info(
|
|
1118
|
+
"G2",
|
|
1119
|
+
_get_parameter_settings_static_info("P1", "real"),
|
|
1120
|
+
{},
|
|
1121
|
+
{},
|
|
1122
|
+
)
|
|
1123
|
+
)
|
|
1124
|
+
| _get_parameter_settings_static_info("P1", "string")
|
|
1125
|
+
),
|
|
1126
|
+
{},
|
|
1127
|
+
{},
|
|
1128
|
+
)
|
|
1129
|
+
),
|
|
1130
|
+
"commands": {},
|
|
1131
|
+
"queries": {},
|
|
1132
|
+
"type": "group",
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
|
|
1136
|
+
_settings_static_info_combined_case = {
|
|
1137
|
+
"children": (
|
|
1138
|
+
_get_group_settings_static_info(
|
|
1139
|
+
"G1",
|
|
1140
|
+
(
|
|
1141
|
+
(
|
|
1142
|
+
_get_group_settings_static_info(
|
|
1143
|
+
"G2",
|
|
1144
|
+
(
|
|
1145
|
+
_get_parameter_settings_static_info("P1", "real")
|
|
1146
|
+
| _get_parameter_settings_static_info("P2", "string")
|
|
1147
|
+
),
|
|
1148
|
+
{},
|
|
1149
|
+
{},
|
|
1150
|
+
)
|
|
1151
|
+
)
|
|
1152
|
+
| _get_parameter_settings_static_info("P1", "string")
|
|
1153
|
+
| _get_parameter_settings_static_info("P2", "string")
|
|
1154
|
+
),
|
|
1155
|
+
{},
|
|
1156
|
+
{},
|
|
1157
|
+
)
|
|
1158
|
+
),
|
|
1159
|
+
"commands": {},
|
|
1160
|
+
"queries": {},
|
|
1161
|
+
"type": "group",
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
@pytest.mark.parametrize(
|
|
1166
|
+
"settings_static_info,class_names",
|
|
1167
|
+
[
|
|
1168
|
+
(_settings_static_info_duplicate_parameters, ["P1", "G2", "G1", "root"]),
|
|
1169
|
+
(
|
|
1170
|
+
_settings_static_info_different_parameters_with_same_name,
|
|
1171
|
+
["P1_1", "G2", "P1", "G1", "root"],
|
|
1172
|
+
),
|
|
1173
|
+
(_settings_static_info_combined_case, ["P1_1", "P2", "G2", "P1", "G1", "root"]),
|
|
1174
|
+
],
|
|
1175
|
+
)
|
|
1176
|
+
def test_codegen_with_settings_static_info_edge_cases(
|
|
1177
|
+
monkeypatch, settings_static_info, class_names
|
|
1178
|
+
):
|
|
1179
|
+
|
|
1180
|
+
codegen_outdir = Path(tempfile.mkdtemp())
|
|
1181
|
+
monkeypatch.setattr(pyfluent, "CODEGEN_OUTDIR", codegen_outdir)
|
|
1182
|
+
version = "251"
|
|
1183
|
+
static_infos = {}
|
|
1184
|
+
static_infos[StaticInfoType.SETTINGS] = settings_static_info
|
|
1185
|
+
allapigen.generate(version, static_infos)
|
|
1186
|
+
with open(codegen_outdir / "solver" / f"settings_{version}.py", "r") as f:
|
|
1187
|
+
module_def = ast.parse(f.read())
|
|
1188
|
+
class_names_from_file = [
|
|
1189
|
+
x.name for x in module_def.body if isinstance(x, ast.ClassDef)
|
|
1190
|
+
]
|
|
1191
|
+
# The order of classes is important.
|
|
1192
|
+
assert class_names_from_file == class_names
|
|
1193
|
+
shutil.rmtree(str(codegen_outdir))
|
|
@@ -429,6 +429,6 @@ def test_cache_per_session():
|
|
|
429
429
|
):
|
|
430
430
|
assert m1.meshing.GlobalSettings.EnableComplexMeshing()
|
|
431
431
|
assert m2.meshing.GlobalSettings.EnableComplexMeshing()
|
|
432
|
-
|
|
432
|
+
_ = m1.watertight()
|
|
433
433
|
assert not m1.meshing.GlobalSettings.EnableComplexMeshing()
|
|
434
434
|
assert m2.meshing.GlobalSettings.EnableComplexMeshing()
|