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.

Files changed (107) hide show
  1. ansys/fluent/core/__init__.py +1 -1
  2. ansys/fluent/core/_version.py +2 -2
  3. ansys/fluent/core/codegen/tuigen.py +1 -1
  4. ansys/fluent/core/codegen/walk_api.py +45 -18
  5. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  6. ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
  7. ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
  8. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  9. ansys/fluent/core/generated/meshing/tui_252.py +395 -390
  10. ansys/fluent/core/generated/solver/settings_252.py +782 -306
  11. ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
  12. ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
  13. ansys/fluent/core/launcher/container_launcher.py +4 -3
  14. ansys/fluent/core/launcher/fluent_container.py +22 -19
  15. ansys/fluent/core/launcher/launcher.py +2 -2
  16. ansys/fluent/core/launcher/pim_launcher.py +2 -2
  17. ansys/fluent/core/launcher/slurm_launcher.py +2 -2
  18. ansys/fluent/core/launcher/standalone_launcher.py +2 -2
  19. ansys/fluent/core/logging.py +2 -0
  20. ansys/fluent/core/logging_config.yaml +3 -0
  21. ansys/fluent/core/services/app_utilities.py +2 -1
  22. ansys/fluent/core/services/datamodel_se.py +141 -61
  23. ansys/fluent/core/services/field_data.py +252 -0
  24. ansys/fluent/core/services/interceptors.py +28 -2
  25. ansys/fluent/core/session.py +7 -2
  26. ansys/fluent/core/session_solver.py +21 -0
  27. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
  28. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/LICENSE +1 -1
  29. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/METADATA +53 -31
  30. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/RECORD +65 -141
  31. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/WHEEL +1 -1
  32. ansys/fluent/core/docs/README.rst +0 -155
  33. ansys/fluent/tests/conftest.py +0 -415
  34. ansys/fluent/tests/fluent_fixtures.py +0 -195
  35. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  36. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  37. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  38. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  39. ansys/fluent/tests/test_aero_session.py +0 -88
  40. ansys/fluent/tests/test_batch_ops.py +0 -39
  41. ansys/fluent/tests/test_builtin_settings.py +0 -761
  42. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  43. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  44. ansys/fluent/tests/test_casereader.py +0 -324
  45. ansys/fluent/tests/test_codegen.py +0 -783
  46. ansys/fluent/tests/test_creatable.py +0 -31
  47. ansys/fluent/tests/test_data_model_cache.py +0 -434
  48. ansys/fluent/tests/test_datamodel_api.py +0 -449
  49. ansys/fluent/tests/test_datamodel_service.py +0 -814
  50. ansys/fluent/tests/test_datareader.py +0 -103
  51. ansys/fluent/tests/test_error_handling.py +0 -24
  52. ansys/fluent/tests/test_events_manager.py +0 -214
  53. ansys/fluent/tests/test_field_data.py +0 -466
  54. ansys/fluent/tests/test_file_session.py +0 -355
  55. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  56. ansys/fluent/tests/test_fix_doc.py +0 -29
  57. ansys/fluent/tests/test_flobject.py +0 -1235
  58. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  59. ansys/fluent/tests/test_fluent_session.py +0 -270
  60. ansys/fluent/tests/test_fluent_version.py +0 -66
  61. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  62. ansys/fluent/tests/test_icing_session.py +0 -9
  63. ansys/fluent/tests/test_launcher.py +0 -529
  64. ansys/fluent/tests/test_launcher_remote.py +0 -272
  65. ansys/fluent/tests/test_lispy.py +0 -40
  66. ansys/fluent/tests/test_logging.py +0 -16
  67. ansys/fluent/tests/test_mapped_api.py +0 -774
  68. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  69. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  70. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  71. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  72. ansys/fluent/tests/test_preferences.py +0 -89
  73. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  74. ansys/fluent/tests/test_reduction.py +0 -484
  75. ansys/fluent/tests/test_rp_vars.py +0 -77
  76. ansys/fluent/tests/test_scheduler.py +0 -471
  77. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  78. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  79. ansys/fluent/tests/test_search.py +0 -344
  80. ansys/fluent/tests/test_session.py +0 -594
  81. ansys/fluent/tests/test_settings_api.py +0 -606
  82. ansys/fluent/tests/test_settings_reader.py +0 -85
  83. ansys/fluent/tests/test_slurm_future.py +0 -67
  84. ansys/fluent/tests/test_solution_variables.py +0 -241
  85. ansys/fluent/tests/test_solver_monitors.py +0 -83
  86. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  87. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  88. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  89. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  90. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  91. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  92. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  93. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  94. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  95. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  96. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  97. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  98. ansys/fluent/tests/test_streaming_services.py +0 -52
  99. ansys/fluent/tests/test_systemcoupling.py +0 -44
  100. ansys/fluent/tests/test_topy.py +0 -179
  101. ansys/fluent/tests/test_tui_api.py +0 -70
  102. ansys/fluent/tests/test_type_stub.py +0 -37
  103. ansys/fluent/tests/test_utils.py +0 -82
  104. ansys/fluent/tests/util/__init__.py +0 -36
  105. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  106. ansys/fluent/tests/util/solver.py +0 -72
  107. 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
- }