ansys-fluent-core 0.29.dev0__py3-none-any.whl → 0.29.dev2__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 +1 -1
- ansys/fluent/core/_version.py +2 -2
- ansys/fluent/core/codegen/tuigen.py +1 -1
- ansys/fluent/core/codegen/walk_api.py +45 -18
- ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
- ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
- ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
- ansys/fluent/core/generated/fluent_version_252.py +3 -3
- ansys/fluent/core/generated/meshing/tui_252.py +395 -390
- ansys/fluent/core/generated/solver/settings_252.py +782 -306
- ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
- ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
- ansys/fluent/core/launcher/container_launcher.py +4 -3
- ansys/fluent/core/launcher/fluent_container.py +22 -19
- ansys/fluent/core/launcher/launcher.py +2 -2
- ansys/fluent/core/launcher/pim_launcher.py +2 -2
- ansys/fluent/core/launcher/slurm_launcher.py +2 -2
- ansys/fluent/core/launcher/standalone_launcher.py +2 -2
- ansys/fluent/core/logging.py +2 -0
- ansys/fluent/core/logging_config.yaml +3 -0
- ansys/fluent/core/services/app_utilities.py +2 -1
- ansys/fluent/core/services/datamodel_se.py +141 -61
- ansys/fluent/core/services/field_data.py +252 -0
- ansys/fluent/core/services/interceptors.py +28 -2
- ansys/fluent/core/session.py +7 -2
- ansys/fluent/core/session_solver.py +21 -0
- ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/LICENSE +1 -1
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/METADATA +53 -31
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/RECORD +65 -141
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/WHEEL +1 -1
- ansys/fluent/core/docs/README.rst +0 -155
- ansys/fluent/tests/conftest.py +0 -415
- ansys/fluent/tests/fluent_fixtures.py +0 -195
- ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
- ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
- ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
- ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
- ansys/fluent/tests/test_aero_session.py +0 -88
- ansys/fluent/tests/test_batch_ops.py +0 -39
- ansys/fluent/tests/test_builtin_settings.py +0 -761
- ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
- ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
- ansys/fluent/tests/test_casereader.py +0 -324
- ansys/fluent/tests/test_codegen.py +0 -783
- ansys/fluent/tests/test_creatable.py +0 -31
- ansys/fluent/tests/test_data_model_cache.py +0 -434
- ansys/fluent/tests/test_datamodel_api.py +0 -449
- ansys/fluent/tests/test_datamodel_service.py +0 -814
- ansys/fluent/tests/test_datareader.py +0 -103
- ansys/fluent/tests/test_error_handling.py +0 -24
- ansys/fluent/tests/test_events_manager.py +0 -214
- ansys/fluent/tests/test_field_data.py +0 -466
- ansys/fluent/tests/test_file_session.py +0 -355
- ansys/fluent/tests/test_file_transfer_service.py +0 -165
- ansys/fluent/tests/test_fix_doc.py +0 -29
- ansys/fluent/tests/test_flobject.py +0 -1235
- ansys/fluent/tests/test_fluent_fixes.py +0 -106
- ansys/fluent/tests/test_fluent_session.py +0 -270
- ansys/fluent/tests/test_fluent_version.py +0 -66
- ansys/fluent/tests/test_fluent_version_marker.py +0 -65
- ansys/fluent/tests/test_icing_session.py +0 -9
- ansys/fluent/tests/test_launcher.py +0 -529
- ansys/fluent/tests/test_launcher_remote.py +0 -272
- ansys/fluent/tests/test_lispy.py +0 -40
- ansys/fluent/tests/test_logging.py +0 -16
- ansys/fluent/tests/test_mapped_api.py +0 -774
- ansys/fluent/tests/test_meshing_utilities.py +0 -2436
- ansys/fluent/tests/test_meshing_workflow.py +0 -421
- ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
- ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
- ansys/fluent/tests/test_preferences.py +0 -89
- ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
- ansys/fluent/tests/test_reduction.py +0 -484
- ansys/fluent/tests/test_rp_vars.py +0 -77
- ansys/fluent/tests/test_scheduler.py +0 -471
- ansys/fluent/tests/test_scheme_eval_222.py +0 -338
- ansys/fluent/tests/test_scheme_eval_231.py +0 -243
- ansys/fluent/tests/test_search.py +0 -344
- ansys/fluent/tests/test_session.py +0 -594
- ansys/fluent/tests/test_settings_api.py +0 -606
- ansys/fluent/tests/test_settings_reader.py +0 -85
- ansys/fluent/tests/test_slurm_future.py +0 -67
- ansys/fluent/tests/test_solution_variables.py +0 -241
- ansys/fluent/tests/test_solver_monitors.py +0 -83
- ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
- ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
- ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
- ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
- ansys/fluent/tests/test_solvermode/test_general.py +0 -109
- ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
- ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
- ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
- ansys/fluent/tests/test_solvermode/test_models.py +0 -99
- ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
- ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
- ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
- ansys/fluent/tests/test_streaming_services.py +0 -52
- ansys/fluent/tests/test_systemcoupling.py +0 -44
- ansys/fluent/tests/test_topy.py +0 -179
- ansys/fluent/tests/test_tui_api.py +0 -70
- ansys/fluent/tests/test_type_stub.py +0 -37
- ansys/fluent/tests/test_utils.py +0 -82
- ansys/fluent/tests/util/__init__.py +0 -36
- ansys/fluent/tests/util/meshing_workflow.py +0 -33
- ansys/fluent/tests/util/solver.py +0 -72
- ansys_fluent_core-0.29.dev0.dist-info/AUTHORS +0 -12
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
from collections import OrderedDict
|
|
2
|
-
import os
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
import shutil
|
|
5
|
-
import tempfile
|
|
6
|
-
|
|
7
|
-
import pytest
|
|
8
|
-
from test_utils import pytest_approx
|
|
9
|
-
|
|
10
|
-
import ansys.fluent.core as pyfluent
|
|
11
|
-
from ansys.fluent.core import examples
|
|
12
|
-
from ansys.fluent.core.filereader.case_file import CaseFile
|
|
13
|
-
from ansys.fluent.core.utils.fluent_version import FluentVersion
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@pytest.mark.nightly
|
|
17
|
-
@pytest.mark.codegen_required
|
|
18
|
-
@pytest.mark.fluent_version("latest")
|
|
19
|
-
def test_simple_solve(mixing_elbow_param_case_data_session):
|
|
20
|
-
"""Use case 1: This optiSLang integration test performs these steps.
|
|
21
|
-
|
|
22
|
-
- Reads a case file with and without data file
|
|
23
|
-
- Gets input and output parameters and creates dictionary
|
|
24
|
-
- Sets a variation on input parameters
|
|
25
|
-
- Solve
|
|
26
|
-
- Reread data
|
|
27
|
-
|
|
28
|
-
This test queries the following using PyTest:
|
|
29
|
-
- Session health
|
|
30
|
-
- Input parameters
|
|
31
|
-
- Output parameters
|
|
32
|
-
"""
|
|
33
|
-
# Step 1: Launch fluent session and read case file with and without data file
|
|
34
|
-
solver_session = mixing_elbow_param_case_data_session
|
|
35
|
-
assert solver_session.health_check.is_serving
|
|
36
|
-
case_path = examples.path("elbow_param.cas.h5")
|
|
37
|
-
solver_session.settings.file.read_case_data(file_name=case_path)
|
|
38
|
-
|
|
39
|
-
# Step 2: Get input and output parameters and create a dictionary
|
|
40
|
-
reader = CaseFile(case_file_name=case_path)
|
|
41
|
-
|
|
42
|
-
input_parameters = {}
|
|
43
|
-
for p in reader.input_parameters():
|
|
44
|
-
input_parameters[p.name] = (p.value, p.numeric_value, p.units)
|
|
45
|
-
output_parameters = {}
|
|
46
|
-
for o in reader.output_parameters():
|
|
47
|
-
output_parameters[o.name] = (0, o.units)
|
|
48
|
-
solver_session.settings.file.read_case(file_name=case_path)
|
|
49
|
-
|
|
50
|
-
input_parameters = input_parameters["inlet2_temp"]
|
|
51
|
-
output_parameters = output_parameters["outlet_temp-op"]
|
|
52
|
-
|
|
53
|
-
# Step 3: Set a variation on these input parameters
|
|
54
|
-
# variations/designs are generated by optiSLang based on
|
|
55
|
-
# algorithm selected
|
|
56
|
-
inputs_table = solver_session.settings.parameters.input_parameters.expression[
|
|
57
|
-
"inlet2_temp"
|
|
58
|
-
] = {"value": 600}
|
|
59
|
-
|
|
60
|
-
Path(pyfluent.EXAMPLES_PATH).mkdir(parents=True, exist_ok=True)
|
|
61
|
-
tmp_save_path = tempfile.mkdtemp(dir=pyfluent.EXAMPLES_PATH)
|
|
62
|
-
design_elbow_param_path = Path(tmp_save_path) / "design_elbow_param.cas.h5"
|
|
63
|
-
solver_session.settings.file.write_case(file_name=str(design_elbow_param_path))
|
|
64
|
-
|
|
65
|
-
assert design_elbow_param_path.exists()
|
|
66
|
-
|
|
67
|
-
# Step 4: Solve
|
|
68
|
-
solver_session.settings.solution.initialization.standard_initialize()
|
|
69
|
-
|
|
70
|
-
# check if solution is steady or transient
|
|
71
|
-
workflow = solver_session.rp_vars("rp-unsteady?")
|
|
72
|
-
|
|
73
|
-
# iterate workflow
|
|
74
|
-
if workflow:
|
|
75
|
-
solver_session.settings.solution.run_calculation.dual_time_iterate()
|
|
76
|
-
else:
|
|
77
|
-
solver_session.settings.solution.run_calculation.iterate()
|
|
78
|
-
|
|
79
|
-
convergence = solver_session.rp_vars("solution/converged?")
|
|
80
|
-
|
|
81
|
-
# solution output (test conditional statement)
|
|
82
|
-
if not convergence: # -> let user know
|
|
83
|
-
print("Failed to converge")
|
|
84
|
-
else:
|
|
85
|
-
print("Solution is converged")
|
|
86
|
-
|
|
87
|
-
assert convergence, "Solution failed to converge"
|
|
88
|
-
|
|
89
|
-
# Step 5: Read the data again from the case and data file
|
|
90
|
-
solver_session.settings.file.read_case_data(file_name=case_path)
|
|
91
|
-
|
|
92
|
-
inputs_table = solver_session.settings.parameters.input_parameters.expression[
|
|
93
|
-
"inlet2_temp"
|
|
94
|
-
]()
|
|
95
|
-
assert input_parameters[0] == "500 [K]"
|
|
96
|
-
assert inputs_table["value"] == 500.0
|
|
97
|
-
|
|
98
|
-
fluent_output_table = solver_session.settings.parameters.output_parameters.list()
|
|
99
|
-
for key, entry in fluent_output_table.items():
|
|
100
|
-
output_value = entry[0]
|
|
101
|
-
output_unit = entry[1]
|
|
102
|
-
|
|
103
|
-
assert output_value == pytest_approx(322.3360076327905)
|
|
104
|
-
|
|
105
|
-
# output_unit should assert the unit string but it doesn't currently
|
|
106
|
-
# A bug has been submitted to address this
|
|
107
|
-
assert output_unit == "K"
|
|
108
|
-
assert output_parameters[1] == "K"
|
|
109
|
-
|
|
110
|
-
solver_session.exit()
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
@pytest.mark.nightly
|
|
114
|
-
@pytest.mark.codegen_required
|
|
115
|
-
@pytest.mark.fluent_version("latest")
|
|
116
|
-
def test_generate_read_mesh(mixing_elbow_geometry_filename):
|
|
117
|
-
"""Use case 2: This optiSLang integration test performs these steps.
|
|
118
|
-
|
|
119
|
-
- Launch Fluent in Meshing Mode
|
|
120
|
-
- Generate mesh with default workflow settings
|
|
121
|
-
- Read created mesh file
|
|
122
|
-
- Switch to solution and write case file
|
|
123
|
-
|
|
124
|
-
This test queries the following using PyTest:
|
|
125
|
-
- Session health
|
|
126
|
-
"""
|
|
127
|
-
# Step 1: Launch fluent session in meshing mode
|
|
128
|
-
meshing = pyfluent.launch_fluent(
|
|
129
|
-
mode="meshing", precision="double", processor_count=2
|
|
130
|
-
)
|
|
131
|
-
assert meshing.health_check.is_serving
|
|
132
|
-
temporary_resource_path = os.path.join(
|
|
133
|
-
pyfluent.EXAMPLES_PATH, "test_generate_read_mesh_resources"
|
|
134
|
-
)
|
|
135
|
-
if os.path.exists(temporary_resource_path):
|
|
136
|
-
shutil.rmtree(temporary_resource_path, ignore_errors=True)
|
|
137
|
-
if not os.path.exists(temporary_resource_path):
|
|
138
|
-
os.mkdir(temporary_resource_path)
|
|
139
|
-
|
|
140
|
-
# Step 2: Generate mesh from geometry with default workflow settings
|
|
141
|
-
meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
|
|
142
|
-
geo_import = meshing.workflow.TaskObject["Import Geometry"]
|
|
143
|
-
geo_import.Arguments = dict(FileName=mixing_elbow_geometry_filename)
|
|
144
|
-
geo_import.Execute()
|
|
145
|
-
meshing.workflow.TaskObject["Generate the Volume Mesh"].Execute()
|
|
146
|
-
meshing.tui.mesh.check_mesh()
|
|
147
|
-
gz_path = str(Path(temporary_resource_path) / "default_mesh.msh.gz")
|
|
148
|
-
h5_path = str(Path(temporary_resource_path) / "default_mesh.msh.h5")
|
|
149
|
-
meshing.tui.file.write_mesh(gz_path)
|
|
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()
|
|
153
|
-
|
|
154
|
-
# Step 3: use created mesh file - .msh.gz/.msh.h5
|
|
155
|
-
meshing.tui.file.read_mesh(gz_path, "ok")
|
|
156
|
-
meshing.tui.file.read_mesh(h5_path, "ok")
|
|
157
|
-
|
|
158
|
-
# Step 4: Switch to solution and Write case file
|
|
159
|
-
solver = meshing.switch_to_solver()
|
|
160
|
-
solver.settings.solution.initialization.hybrid_initialize()
|
|
161
|
-
gz_path = str(Path(temporary_resource_path) / "default_case.cas.gz")
|
|
162
|
-
h5_path = str(Path(temporary_resource_path) / "default_case.cas.h5")
|
|
163
|
-
write_case = solver.settings.file.write_case
|
|
164
|
-
write_case(file_name=gz_path)
|
|
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()
|
|
168
|
-
solver.exit()
|
|
169
|
-
shutil.rmtree(temporary_resource_path, ignore_errors=True)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
@pytest.mark.nightly
|
|
173
|
-
@pytest.mark.codegen_required
|
|
174
|
-
@pytest.mark.fluent_version("latest")
|
|
175
|
-
def test_case_file():
|
|
176
|
-
case_path = examples.download_file(
|
|
177
|
-
"elbow_param.cas.h5", "pyfluent/mixing_elbow", return_without_path=False
|
|
178
|
-
)
|
|
179
|
-
reader = CaseFile(case_file_name=case_path)
|
|
180
|
-
|
|
181
|
-
assert reader.num_dimensions() == 3
|
|
182
|
-
assert reader.precision() == 2
|
|
183
|
-
|
|
184
|
-
plist = []
|
|
185
|
-
olist = []
|
|
186
|
-
for p in reader.input_parameters():
|
|
187
|
-
ipar = OrderedDict()
|
|
188
|
-
ipar["name"] = p.name
|
|
189
|
-
ipar["numeric_value"] = p.numeric_value
|
|
190
|
-
ipar["units"] = p.units
|
|
191
|
-
plist.append(ipar)
|
|
192
|
-
|
|
193
|
-
input_params = plist[0]
|
|
194
|
-
assert input_params["name"] == "inlet2_temp"
|
|
195
|
-
assert input_params["numeric_value"] == 500.0
|
|
196
|
-
assert input_params["units"] == "K"
|
|
197
|
-
|
|
198
|
-
for o in reader.output_parameters():
|
|
199
|
-
opar = OrderedDict()
|
|
200
|
-
opar["name"] = o.name
|
|
201
|
-
opar["numeric_value"] = 0.0
|
|
202
|
-
opar["units"] = o.units
|
|
203
|
-
olist.append(opar)
|
|
204
|
-
|
|
205
|
-
output_params = olist[0]
|
|
206
|
-
assert output_params["name"] == "outlet_temp-op"
|
|
207
|
-
assert output_params["numeric_value"] == 0.0
|
|
208
|
-
assert output_params["units"] == "K"
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
@pytest.mark.nightly
|
|
212
|
-
@pytest.mark.codegen_required
|
|
213
|
-
@pytest.mark.fluent_version("latest")
|
|
214
|
-
def test_parameters(mixing_elbow_param_case_data_session):
|
|
215
|
-
solver_session = mixing_elbow_param_case_data_session
|
|
216
|
-
input_params = solver_session.settings.parameters.input_parameters.expression[
|
|
217
|
-
"inlet2_temp"
|
|
218
|
-
]
|
|
219
|
-
assert input_params() == {"name": "inlet2_temp", "value": 500.0}
|
|
220
|
-
|
|
221
|
-
output_params = solver_session.settings.parameters.output_parameters.list()
|
|
222
|
-
output_jdict = {}
|
|
223
|
-
for key, entry in output_params.items():
|
|
224
|
-
output_jdict[key] = entry[0]
|
|
225
|
-
output_jdict[key] = entry[1]
|
|
226
|
-
|
|
227
|
-
assert output_jdict == {"outlet_temp-op": "K"}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
@pytest.mark.nightly
|
|
231
|
-
@pytest.mark.codegen_required
|
|
232
|
-
@pytest.mark.fluent_version("latest")
|
|
233
|
-
def test_parametric_project(mixing_elbow_param_case_data_session, new_solver_session):
|
|
234
|
-
session1 = mixing_elbow_param_case_data_session
|
|
235
|
-
Path(pyfluent.EXAMPLES_PATH).mkdir(parents=True, exist_ok=True)
|
|
236
|
-
tmp_save_path = tempfile.mkdtemp(dir=pyfluent.EXAMPLES_PATH)
|
|
237
|
-
init_project = Path(tmp_save_path) / "mixing_elbow_param_init.flprj"
|
|
238
|
-
project_file = Path(tmp_save_path) / "mixing_elbow_param.flprj"
|
|
239
|
-
session1.settings.parametric_studies.initialize(project_filename=str(init_project))
|
|
240
|
-
session1.settings.file.parametric_project.save_as(
|
|
241
|
-
project_filename=str(project_file)
|
|
242
|
-
)
|
|
243
|
-
assert project_file.exists()
|
|
244
|
-
|
|
245
|
-
session2 = new_solver_session
|
|
246
|
-
session2.settings.file.parametric_project.open(project_filename=str(project_file))
|
|
247
|
-
current_pstudy_name = session2.settings.current_parametric_study()
|
|
248
|
-
assert current_pstudy_name == "elbow_param-Solve"
|
|
249
|
-
pstudy = session2.settings.parametric_studies[current_pstudy_name]
|
|
250
|
-
base_dp = pstudy.design_points["Base DP"]()
|
|
251
|
-
base_inputs = base_dp["input_parameters"]
|
|
252
|
-
assert base_inputs == {"inlet2_temp": 500.0}
|
|
253
|
-
base_outputs = base_dp["output_parameters"]
|
|
254
|
-
assert base_outputs == {"outlet_temp-op": pytest_approx(322.336008)}
|
|
255
|
-
if session2.get_fluent_version() < FluentVersion.v251:
|
|
256
|
-
pstudy.design_points.create_1()
|
|
257
|
-
dp = pstudy.design_points["DP1"]
|
|
258
|
-
else:
|
|
259
|
-
dp = pstudy.design_points.create()
|
|
260
|
-
dp.input_parameters["inlet2_temp"] = 600.0
|
|
261
|
-
pstudy.design_points.update_selected(design_points=["DP1"])
|
|
262
|
-
fluent_output_table = dp.output_parameters()
|
|
263
|
-
assert fluent_output_table["outlet_temp-op"] != 0.0
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
|
|
3
|
-
from ansys.fluent.core import examples
|
|
4
|
-
from ansys.fluent.core.parametric import (
|
|
5
|
-
LocalParametricStudy,
|
|
6
|
-
convert_design_point_parameter_units,
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@pytest.mark.standalone
|
|
11
|
-
def test_local_parametric_run():
|
|
12
|
-
case_filepath = examples.download_file(
|
|
13
|
-
"Static_Mixer_Parameters.cas.h5",
|
|
14
|
-
"pyfluent/static_mixer",
|
|
15
|
-
return_without_path=False,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
local_study = LocalParametricStudy(case_filepath=case_filepath)
|
|
19
|
-
|
|
20
|
-
for idx in range(4):
|
|
21
|
-
design_point = local_study.add_design_point("dp_" + str(idx))
|
|
22
|
-
design_point.input_parameters["inlet1_vel"] = float(2 + idx)
|
|
23
|
-
|
|
24
|
-
local_study.run_in_fluent(num_servers=2)
|
|
25
|
-
|
|
26
|
-
table = local_study.design_point_table
|
|
27
|
-
|
|
28
|
-
assert len(table) == 5
|
|
29
|
-
|
|
30
|
-
for point in table:
|
|
31
|
-
ins = convert_design_point_parameter_units(point.input_parameters)
|
|
32
|
-
outs = point.output_parameters
|
|
33
|
-
new_inlet_velocity = ins["inlet1_vel"]
|
|
34
|
-
new_outlet_velocity = outs["outlet-vel-avg-op"]
|
|
35
|
-
assert new_inlet_velocity
|
|
36
|
-
assert new_outlet_velocity
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from ansys.fluent.core import examples
|
|
2
|
-
from ansys.fluent.core.parametric import LocalParametricStudy
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def test_local_parametric_setup():
|
|
6
|
-
case_filepath = examples.download_file(
|
|
7
|
-
"Static_Mixer_Parameters.cas.h5",
|
|
8
|
-
"pyfluent/static_mixer",
|
|
9
|
-
return_without_path=False,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
local_study = LocalParametricStudy(case_filepath=case_filepath)
|
|
13
|
-
|
|
14
|
-
base_design_point = local_study.design_point("Base DP")
|
|
15
|
-
|
|
16
|
-
input_parameters = base_design_point.input_parameters
|
|
17
|
-
|
|
18
|
-
assert len(input_parameters) == 4
|
|
19
|
-
|
|
20
|
-
assert input_parameters["inlet1_temp"] == "300 [K]"
|
|
21
|
-
|
|
22
|
-
assert input_parameters["inlet1_vel"] == "1 [m/s]"
|
|
23
|
-
|
|
24
|
-
assert input_parameters["inlet2_temp"] == "350 [K]"
|
|
25
|
-
|
|
26
|
-
assert input_parameters["inlet2_vel"] == "1 [m/s]"
|
|
27
|
-
|
|
28
|
-
output_parameters = base_design_point.output_parameters
|
|
29
|
-
|
|
30
|
-
assert len(output_parameters) == 2
|
|
31
|
-
|
|
32
|
-
assert not output_parameters["outlet-temp-avg-op"]
|
|
33
|
-
|
|
34
|
-
assert not output_parameters["outlet-vel-avg-op"]
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
from pathlib import Path, PurePosixPath
|
|
3
|
-
import tempfile
|
|
4
|
-
|
|
5
|
-
import pytest
|
|
6
|
-
from test_utils import pytest_approx
|
|
7
|
-
|
|
8
|
-
import ansys.fluent.core as pyfluent
|
|
9
|
-
from ansys.fluent.core import examples
|
|
10
|
-
from ansys.fluent.core.utils.file_transfer_service import RemoteFileTransferStrategy
|
|
11
|
-
from ansys.fluent.core.utils.fluent_version import FluentVersion
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@pytest.mark.nightly
|
|
15
|
-
@pytest.mark.fluent_version("latest")
|
|
16
|
-
def test_parametric_workflow():
|
|
17
|
-
# parent path needs to exist for mkdtemp
|
|
18
|
-
Path(pyfluent.EXAMPLES_PATH).mkdir(parents=True, exist_ok=True)
|
|
19
|
-
tmp_save_path = tempfile.mkdtemp(dir=pyfluent.EXAMPLES_PATH)
|
|
20
|
-
if pyfluent.USE_FILE_TRANSFER_SERVICE:
|
|
21
|
-
file_transfer_service = RemoteFileTransferStrategy(mount_source=tmp_save_path)
|
|
22
|
-
import_file_name = examples.download_file(
|
|
23
|
-
"Static_Mixer_main.cas.h5", "pyfluent/static_mixer", save_path=tmp_save_path
|
|
24
|
-
)
|
|
25
|
-
if os.getenv("PYFLUENT_LAUNCH_CONTAINER") == "1":
|
|
26
|
-
inside_container = True
|
|
27
|
-
config_dict = {}
|
|
28
|
-
config_dict.update(mount_source=tmp_save_path)
|
|
29
|
-
if pyfluent.USE_FILE_TRANSFER_SERVICE:
|
|
30
|
-
solver_session = pyfluent.launch_fluent(
|
|
31
|
-
processor_count=2,
|
|
32
|
-
container_dict=config_dict,
|
|
33
|
-
file_transfer_service=file_transfer_service,
|
|
34
|
-
)
|
|
35
|
-
else:
|
|
36
|
-
solver_session = pyfluent.launch_fluent(
|
|
37
|
-
processor_count=2,
|
|
38
|
-
container_dict=config_dict,
|
|
39
|
-
)
|
|
40
|
-
container_workdir = PurePosixPath(pyfluent.CONTAINER_MOUNT_TARGET)
|
|
41
|
-
else:
|
|
42
|
-
inside_container = False
|
|
43
|
-
solver_session = pyfluent.launch_fluent(processor_count=2, cwd=tmp_save_path)
|
|
44
|
-
solver_session.file.read_case(file_name=import_file_name)
|
|
45
|
-
solver_session.solution.run_calculation.iter_count = 100
|
|
46
|
-
solver_session.tui.define.parameters.enable_in_TUI("yes")
|
|
47
|
-
|
|
48
|
-
velocity_inlet = solver_session.tui.define.boundary_conditions.set.velocity_inlet
|
|
49
|
-
velocity_inlet("inlet1", (), "vmag", "yes", "inlet1_vel", 1, "quit")
|
|
50
|
-
velocity_inlet("inlet1", (), "temperature", "yes", "inlet1_temp", 300, "quit")
|
|
51
|
-
velocity_inlet("inlet2", (), "vmag", "yes", "no", "inlet2_vel", 1, "quit")
|
|
52
|
-
velocity_inlet("inlet2", (), "temperature", "yes", "no", "inlet2_temp", 350, "quit")
|
|
53
|
-
|
|
54
|
-
solver_session.solution.report_definitions.surface["outlet-temp-avg"] = {}
|
|
55
|
-
outlet_temp_avg = solver_session.solution.report_definitions.surface[
|
|
56
|
-
"outlet-temp-avg"
|
|
57
|
-
]
|
|
58
|
-
outlet_temp_avg.report_type = "surface-areaavg"
|
|
59
|
-
outlet_temp_avg.field = "temperature"
|
|
60
|
-
outlet_temp_avg.surface_names = ["outlet"]
|
|
61
|
-
|
|
62
|
-
solver_session.solution.report_definitions.surface["outlet-vel-avg"] = {}
|
|
63
|
-
outlet_vel_avg = solver_session.solution.report_definitions.surface[
|
|
64
|
-
"outlet-vel-avg"
|
|
65
|
-
]
|
|
66
|
-
outlet_vel_avg.report_type = "surface-areaavg"
|
|
67
|
-
outlet_vel_avg.field = "velocity-magnitude"
|
|
68
|
-
outlet_vel_avg.surface_names = ["outlet"]
|
|
69
|
-
|
|
70
|
-
create_output_param = solver_session.tui.define.parameters.output_parameters.create
|
|
71
|
-
create_output_param("report-definition", "outlet-temp-avg")
|
|
72
|
-
create_output_param("report-definition", "outlet-vel-avg")
|
|
73
|
-
|
|
74
|
-
solver_session.tui.solve.monitors.residual.criterion_type("0")
|
|
75
|
-
|
|
76
|
-
case_path = Path(tmp_save_path) / "Static_Mixer_Parameters.cas.h5"
|
|
77
|
-
if inside_container:
|
|
78
|
-
write_case_path = str(container_workdir / "Static_Mixer_Parameters.cas.h5")
|
|
79
|
-
else:
|
|
80
|
-
write_case_path = str(case_path)
|
|
81
|
-
solver_session.file.write(file_type="case", file_name=write_case_path)
|
|
82
|
-
|
|
83
|
-
assert case_path.exists()
|
|
84
|
-
assert len(solver_session.parametric_studies) == 0
|
|
85
|
-
solver_session.parametric_studies.initialize()
|
|
86
|
-
assert len(solver_session.parametric_studies) == 1
|
|
87
|
-
study1_name = "Static_Mixer_main-Solve"
|
|
88
|
-
assert study1_name in solver_session.parametric_studies
|
|
89
|
-
study1 = solver_session.parametric_studies[study1_name]
|
|
90
|
-
assert len(study1.design_points) == 1
|
|
91
|
-
base_dp_name = "Base DP"
|
|
92
|
-
assert "Base DP" in study1.design_points
|
|
93
|
-
base_dp = study1.design_points[base_dp_name]
|
|
94
|
-
base_dp.input_parameters["inlet1_vel"] = 0.5
|
|
95
|
-
assert base_dp.input_parameters["inlet1_vel"]() == 0.5
|
|
96
|
-
assert base_dp.input_parameters["inlet2_temp"]() == 350.0
|
|
97
|
-
assert base_dp.input_parameters["inlet2_vel"]() == 1.0
|
|
98
|
-
assert base_dp.input_parameters["inlet1_temp"]() == 300.0
|
|
99
|
-
study1.design_points.update_current()
|
|
100
|
-
assert len(study1.design_points) == 1
|
|
101
|
-
assert base_dp.output_parameters["outlet-temp-avg-op"]() == pytest_approx(
|
|
102
|
-
333.348727
|
|
103
|
-
)
|
|
104
|
-
assert base_dp.output_parameters["outlet-vel-avg-op"]() == pytest_approx(1.506855)
|
|
105
|
-
dp_names = set([*study1.design_points.keys()])
|
|
106
|
-
if solver_session.get_fluent_version() < FluentVersion.v251:
|
|
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]
|
|
110
|
-
else:
|
|
111
|
-
dp1 = study1.design_points.create()
|
|
112
|
-
dp1.input_parameters["inlet1_temp"] = 500
|
|
113
|
-
dp1.input_parameters["inlet1_vel"] = 1
|
|
114
|
-
dp1.input_parameters["inlet2_vel"] = 1
|
|
115
|
-
assert len(study1.design_points) == 2
|
|
116
|
-
assert dp1.input_parameters["inlet1_temp"]() == 500
|
|
117
|
-
assert dp1.input_parameters["inlet1_vel"]() == 1
|
|
118
|
-
assert dp1.input_parameters["inlet2_vel"]() == 1
|
|
119
|
-
assert dp1.input_parameters["inlet2_temp"]() == 350.0
|
|
120
|
-
dp_names = set([*study1.design_points.keys()])
|
|
121
|
-
study1.design_points.duplicate(design_point=dp1.obj_name)
|
|
122
|
-
dp2_name = set([*study1.design_points.keys()]).difference(dp_names).pop()
|
|
123
|
-
dp2 = study1.design_points[dp2_name]
|
|
124
|
-
assert dp1.input_parameters() == dp2.input_parameters()
|
|
125
|
-
assert len(study1.design_points) == 3
|
|
126
|
-
assert study1.current_design_point() == base_dp_name
|
|
127
|
-
study1.design_points.set_as_current(design_point=dp2_name)
|
|
128
|
-
assert study1.current_design_point() == dp2_name
|
|
129
|
-
study1.design_points.update_all()
|
|
130
|
-
assert len(study1.design_points) == 3
|
|
131
|
-
assert base_dp.output_parameters["outlet-temp-avg-op"]() == pytest_approx(
|
|
132
|
-
333.348727
|
|
133
|
-
)
|
|
134
|
-
assert base_dp.output_parameters["outlet-vel-avg-op"]() == pytest_approx(1.506855)
|
|
135
|
-
assert dp1.output_parameters["outlet-temp-avg-op"]() == pytest_approx(425.004045)
|
|
136
|
-
assert dp1.output_parameters["outlet-vel-avg-op"]() == pytest_approx(2.029792)
|
|
137
|
-
assert dp2.output_parameters["outlet-temp-avg-op"]() == pytest_approx(425.004045)
|
|
138
|
-
assert dp2.output_parameters["outlet-vel-avg-op"]() == pytest_approx(2.029792)
|
|
139
|
-
|
|
140
|
-
design_point_table = Path(tmp_save_path) / "design_point_table_study_1.csv"
|
|
141
|
-
if inside_container:
|
|
142
|
-
write_design_table = str(container_workdir / "design_point_table_study_1.csv")
|
|
143
|
-
else:
|
|
144
|
-
write_design_table = str(design_point_table)
|
|
145
|
-
solver_session.parametric_studies.export_design_table(filepath=write_design_table)
|
|
146
|
-
assert design_point_table.exists()
|
|
147
|
-
|
|
148
|
-
study1.design_points.delete_design_points(design_points=[dp1.obj_name])
|
|
149
|
-
assert len(study1.design_points) == 2
|
|
150
|
-
study_names = set([*solver_session.parametric_studies.keys()])
|
|
151
|
-
solver_session.parametric_studies.duplicate()
|
|
152
|
-
assert len(solver_session.parametric_studies) == 2
|
|
153
|
-
study2_name = (
|
|
154
|
-
set([*solver_session.parametric_studies.keys()]).difference(study_names).pop()
|
|
155
|
-
)
|
|
156
|
-
study2 = solver_session.parametric_studies[study2_name]
|
|
157
|
-
assert len(study2.design_points) == 2
|
|
158
|
-
solver_session.parametric_studies[study2_name].rename("New Study")
|
|
159
|
-
assert "New Study" in solver_session.parametric_studies
|
|
160
|
-
del solver_session.parametric_studies[study1_name]
|
|
161
|
-
assert len(solver_session.parametric_studies) == 1
|
|
162
|
-
|
|
163
|
-
project_file_name = Path(tmp_save_path) / "static_mixer_study.flprj"
|
|
164
|
-
if inside_container:
|
|
165
|
-
write_project_file_name = str(container_workdir / "static_mixer_study.flprj")
|
|
166
|
-
else:
|
|
167
|
-
write_project_file_name = str(project_file_name)
|
|
168
|
-
|
|
169
|
-
solver_session.file.parametric_project.save_as(
|
|
170
|
-
project_filename=write_project_file_name
|
|
171
|
-
)
|
|
172
|
-
assert project_file_name.exists()
|
|
173
|
-
solver_session.exit()
|
|
174
|
-
|
|
175
|
-
if inside_container:
|
|
176
|
-
if pyfluent.USE_FILE_TRANSFER_SERVICE:
|
|
177
|
-
solver_session = pyfluent.launch_fluent(
|
|
178
|
-
processor_count=2,
|
|
179
|
-
container_dict=config_dict,
|
|
180
|
-
file_transfer_service=file_transfer_service,
|
|
181
|
-
)
|
|
182
|
-
else:
|
|
183
|
-
solver_session = pyfluent.launch_fluent(
|
|
184
|
-
processor_count=2,
|
|
185
|
-
container_dict=config_dict,
|
|
186
|
-
)
|
|
187
|
-
else:
|
|
188
|
-
solver_session = pyfluent.launch_fluent(processor_count=2, cwd=tmp_save_path)
|
|
189
|
-
|
|
190
|
-
solver_session.file.parametric_project.open(
|
|
191
|
-
project_filename=write_project_file_name
|
|
192
|
-
)
|
|
193
|
-
solver_session.file.parametric_project.save()
|
|
194
|
-
project_save_as_name = Path(tmp_save_path) / "static_mixer_study_save_as.flprj"
|
|
195
|
-
if inside_container:
|
|
196
|
-
write_project_save_as_name = str(
|
|
197
|
-
container_workdir / "static_mixer_study_save_as.flprj"
|
|
198
|
-
)
|
|
199
|
-
else:
|
|
200
|
-
write_project_save_as_name = str(project_save_as_name)
|
|
201
|
-
|
|
202
|
-
solver_session.file.parametric_project.save_as(
|
|
203
|
-
project_filename=write_project_save_as_name
|
|
204
|
-
)
|
|
205
|
-
assert project_save_as_name.exists()
|
|
206
|
-
|
|
207
|
-
project_save_as_copy_name = (
|
|
208
|
-
Path(tmp_save_path) / "static_mixer_study_save_copy_as.flprj"
|
|
209
|
-
)
|
|
210
|
-
if inside_container:
|
|
211
|
-
write_project_save_as_copy_name = str(
|
|
212
|
-
container_workdir / "static_mixer_study_save_copy_as.flprj"
|
|
213
|
-
)
|
|
214
|
-
else:
|
|
215
|
-
write_project_save_as_copy_name = str(project_save_as_copy_name)
|
|
216
|
-
solver_session.file.parametric_project.save_as_copy(
|
|
217
|
-
project_filename=write_project_save_as_copy_name
|
|
218
|
-
)
|
|
219
|
-
assert project_save_as_copy_name.exists()
|
|
220
|
-
|
|
221
|
-
archive_name = Path(tmp_save_path) / "static_mixer_study.flprz"
|
|
222
|
-
if inside_container:
|
|
223
|
-
write_archive_name = str(container_workdir / "static_mixer_study.flprz")
|
|
224
|
-
else:
|
|
225
|
-
write_archive_name = str(archive_name)
|
|
226
|
-
solver_session.file.parametric_project.archive(archive_name=write_archive_name)
|
|
227
|
-
assert archive_name.exists()
|
|
228
|
-
solver_session.exit()
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
@pytest.mark.fluent_version(">=24.2")
|
|
232
|
-
def test_parameters_list_function(static_mixer_settings_session):
|
|
233
|
-
solver = static_mixer_settings_session
|
|
234
|
-
solver.tui.define.parameters.enable_in_TUI("yes")
|
|
235
|
-
|
|
236
|
-
velocity_inlet = solver.tui.define.boundary_conditions.set.velocity_inlet
|
|
237
|
-
velocity_inlet("inlet1", (), "vmag", "yes", "inlet1_vel", 1, "quit")
|
|
238
|
-
velocity_inlet("inlet1", (), "temperature", "yes", "inlet1_temp", 300, "quit")
|
|
239
|
-
velocity_inlet("inlet2", (), "vmag", "yes", "no", "inlet2_vel", 1, "quit")
|
|
240
|
-
velocity_inlet("inlet2", (), "temperature", "yes", "no", "inlet2_temp", 350, "quit")
|
|
241
|
-
|
|
242
|
-
solver.solution.report_definitions.surface["outlet-temp-avg"] = {}
|
|
243
|
-
outlet_temp_avg = solver.solution.report_definitions.surface["outlet-temp-avg"]
|
|
244
|
-
outlet_temp_avg.report_type = "surface-areaavg"
|
|
245
|
-
outlet_temp_avg.field = "temperature"
|
|
246
|
-
outlet_temp_avg.surface_names = ["outlet"]
|
|
247
|
-
|
|
248
|
-
solver.solution.report_definitions.surface["outlet-vel-avg"] = {}
|
|
249
|
-
outlet_vel_avg = solver.solution.report_definitions.surface["outlet-vel-avg"]
|
|
250
|
-
outlet_vel_avg.report_type = "surface-areaavg"
|
|
251
|
-
outlet_vel_avg.field = "velocity-magnitude"
|
|
252
|
-
outlet_vel_avg.surface_names = ["outlet"]
|
|
253
|
-
|
|
254
|
-
create_output_param = solver.tui.define.parameters.output_parameters.create
|
|
255
|
-
create_output_param("report-definition", "outlet-temp-avg")
|
|
256
|
-
create_output_param("report-definition", "outlet-vel-avg")
|
|
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
|
-
|
|
267
|
-
input_parameters_list = solver.parameters.input_parameters.list()
|
|
268
|
-
output_parameters_list = solver.parameters.output_parameters.list()
|
|
269
|
-
assert input_parameters_list == {
|
|
270
|
-
"inlet1_temp": [300.0, "K"],
|
|
271
|
-
"inlet1_vel": [1.0, "m/s"],
|
|
272
|
-
"inlet2_temp": [350.0, "K"],
|
|
273
|
-
"inlet2_vel": [1.0, "m/s"],
|
|
274
|
-
}
|
|
275
|
-
assert output_parameters_list == {
|
|
276
|
-
"outlet-temp-avg-op": [0.0, "K"],
|
|
277
|
-
"outlet-vel-avg-op": [0.0, "m/s"],
|
|
278
|
-
"temp-outlet-uniformity-op": [0.0, ""],
|
|
279
|
-
}
|