ansys-fluent-core 0.28.1__py3-none-any.whl → 0.29.0__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 (223) hide show
  1. ansys/fluent/core/__init__.py +26 -1
  2. ansys/fluent/core/_stand_alone_datamodel_client/_datamodel_client.py +22 -0
  3. ansys/fluent/core/_version.py +24 -2
  4. ansys/fluent/core/codegen/__init__.py +22 -0
  5. ansys/fluent/core/codegen/allapigen.py +38 -5
  6. ansys/fluent/core/codegen/builtin_settingsgen.py +22 -0
  7. ansys/fluent/core/codegen/data/__init__.py +21 -0
  8. ansys/fluent/core/codegen/data/fluent_gui_help_patch.py +22 -0
  9. ansys/fluent/core/codegen/data/meshing_utilities_examples.py +22 -0
  10. ansys/fluent/core/codegen/datamodelgen.py +40 -4
  11. ansys/fluent/core/codegen/print_fluent_version.py +22 -0
  12. ansys/fluent/core/codegen/settingsgen.py +67 -4
  13. ansys/fluent/core/codegen/tuigen.py +44 -6
  14. ansys/fluent/core/codegen/walk_api.py +67 -18
  15. ansys/fluent/core/codegen/write_settings_yaml.py +22 -0
  16. ansys/fluent/core/data_model_cache.py +22 -0
  17. ansys/fluent/core/examples/__init__.py +22 -0
  18. ansys/fluent/core/examples/downloads.py +22 -0
  19. ansys/fluent/core/exceptions.py +22 -0
  20. ansys/fluent/core/file_session.py +22 -0
  21. ansys/fluent/core/filereader/__init__.py +21 -0
  22. ansys/fluent/core/filereader/case_file.py +22 -0
  23. ansys/fluent/core/filereader/casereader.py +22 -0
  24. ansys/fluent/core/filereader/data_file.py +22 -0
  25. ansys/fluent/core/filereader/lispy.py +22 -0
  26. ansys/fluent/core/fluent_connection.py +23 -1
  27. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  28. ansys/fluent/core/generated/datamodel_252/meshing.py +32 -0
  29. ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
  30. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  31. ansys/fluent/core/generated/meshing/tui_252.py +395 -390
  32. ansys/fluent/core/generated/solver/settings_222.py +0 -72
  33. ansys/fluent/core/generated/solver/settings_222.pyi +0 -307
  34. ansys/fluent/core/generated/solver/settings_231.py +0 -574
  35. ansys/fluent/core/generated/solver/settings_231.pyi +0 -561
  36. ansys/fluent/core/generated/solver/settings_232.py +0 -527
  37. ansys/fluent/core/generated/solver/settings_232.pyi +0 -2803
  38. ansys/fluent/core/generated/solver/settings_241.py +0 -478
  39. ansys/fluent/core/generated/solver/settings_241.pyi +0 -522
  40. ansys/fluent/core/generated/solver/settings_242.py +0 -361
  41. ansys/fluent/core/generated/solver/settings_242.pyi +0 -591
  42. ansys/fluent/core/generated/solver/settings_251.py +0 -399
  43. ansys/fluent/core/generated/solver/settings_251.pyi +0 -629
  44. ansys/fluent/core/generated/solver/settings_252.py +8118 -4206
  45. ansys/fluent/core/generated/solver/settings_252.pyi +7229 -3259
  46. ansys/fluent/core/generated/solver/tui_252.py +4508 -3877
  47. ansys/fluent/core/get_build_details.py +22 -0
  48. ansys/fluent/core/journaling.py +38 -0
  49. ansys/fluent/core/launcher/__init__.py +22 -0
  50. ansys/fluent/core/launcher/container_launcher.py +65 -56
  51. ansys/fluent/core/launcher/error_handler.py +30 -0
  52. ansys/fluent/core/launcher/fluent_container.py +45 -20
  53. ansys/fluent/core/launcher/launcher.py +53 -5
  54. ansys/fluent/core/launcher/launcher_utils.py +22 -0
  55. ansys/fluent/core/launcher/pim_launcher.py +120 -86
  56. ansys/fluent/core/launcher/process_launch_string.py +22 -0
  57. ansys/fluent/core/launcher/pyfluent_enums.py +22 -0
  58. ansys/fluent/core/launcher/server_info.py +45 -3
  59. ansys/fluent/core/launcher/slurm_launcher.py +25 -3
  60. ansys/fluent/core/launcher/standalone_launcher.py +68 -63
  61. ansys/fluent/core/launcher/watchdog.py +22 -0
  62. ansys/fluent/core/logging.py +24 -0
  63. ansys/fluent/core/logging_config.yaml +3 -0
  64. ansys/fluent/core/meshing/meshing_workflow.py +22 -0
  65. ansys/fluent/core/parametric.py +22 -0
  66. ansys/fluent/core/post_objects/__init__.py +21 -0
  67. ansys/fluent/core/post_objects/check_in_notebook.py +22 -0
  68. ansys/fluent/core/post_objects/meta.py +22 -0
  69. ansys/fluent/core/post_objects/post_helper.py +22 -0
  70. ansys/fluent/core/post_objects/post_object_definitions.py +22 -0
  71. ansys/fluent/core/post_objects/post_objects_container.py +22 -0
  72. ansys/fluent/core/post_objects/singleton_meta.py +22 -0
  73. ansys/fluent/core/post_objects/timing_decorator.py +22 -0
  74. ansys/fluent/core/report.py +77 -0
  75. ansys/fluent/core/rpvars.py +22 -0
  76. ansys/fluent/core/scheduler/__init__.py +22 -0
  77. ansys/fluent/core/scheduler/load_machines.py +22 -0
  78. ansys/fluent/core/scheduler/machine_list.py +22 -0
  79. ansys/fluent/core/search.py +22 -0
  80. ansys/fluent/core/services/__init__.py +22 -0
  81. ansys/fluent/core/services/api_upgrade.py +22 -0
  82. ansys/fluent/core/services/app_utilities.py +38 -0
  83. ansys/fluent/core/services/batch_ops.py +22 -0
  84. ansys/fluent/core/services/datamodel_se.py +163 -61
  85. ansys/fluent/core/services/datamodel_tui.py +22 -0
  86. ansys/fluent/core/services/deprecated_field_data.py +23 -1
  87. ansys/fluent/core/services/events.py +22 -0
  88. ansys/fluent/core/services/field_data.py +285 -2
  89. ansys/fluent/core/services/health_check.py +22 -0
  90. ansys/fluent/core/services/interceptors.py +50 -2
  91. ansys/fluent/core/services/monitor.py +22 -0
  92. ansys/fluent/core/services/reduction.py +22 -0
  93. ansys/fluent/core/services/scheme_eval.py +22 -0
  94. ansys/fluent/core/services/settings.py +22 -0
  95. ansys/fluent/core/services/solution_variables.py +22 -0
  96. ansys/fluent/core/services/streaming.py +22 -0
  97. ansys/fluent/core/services/transcript.py +22 -0
  98. ansys/fluent/core/session.py +39 -2
  99. ansys/fluent/core/session_base_meshing.py +22 -0
  100. ansys/fluent/core/session_meshing.py +22 -0
  101. ansys/fluent/core/session_meshing.pyi +22 -0
  102. ansys/fluent/core/session_pure_meshing.py +22 -0
  103. ansys/fluent/core/session_pure_meshing.pyi +22 -0
  104. ansys/fluent/core/session_shared.py +22 -0
  105. ansys/fluent/core/session_solver.py +43 -0
  106. ansys/fluent/core/session_solver.pyi +22 -0
  107. ansys/fluent/core/session_solver_aero.py +22 -0
  108. ansys/fluent/core/session_solver_icing.py +22 -0
  109. ansys/fluent/core/session_solver_lite.py +22 -0
  110. ansys/fluent/core/solver/__init__.py +22 -0
  111. ansys/fluent/core/solver/error_message.py +22 -0
  112. ansys/fluent/core/solver/flobject.py +22 -0
  113. ansys/fluent/core/solver/flunits.py +22 -0
  114. ansys/fluent/core/solver/function/__init__.py +22 -0
  115. ansys/fluent/core/solver/function/reduction.py +22 -0
  116. ansys/fluent/core/solver/settings_builtin_bases.py +22 -0
  117. ansys/fluent/core/solver/settings_builtin_data.py +22 -0
  118. ansys/fluent/core/solver/settings_external.py +22 -0
  119. ansys/fluent/core/streaming_services/__init__.py +21 -0
  120. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +34 -12
  121. ansys/fluent/core/streaming_services/datamodel_streaming.py +22 -0
  122. ansys/fluent/core/streaming_services/events_streaming.py +22 -0
  123. ansys/fluent/core/streaming_services/field_data_streaming.py +22 -0
  124. ansys/fluent/core/streaming_services/monitor_streaming.py +23 -1
  125. ansys/fluent/core/streaming_services/streaming.py +22 -0
  126. ansys/fluent/core/streaming_services/transcript_streaming.py +22 -0
  127. ansys/fluent/core/systemcoupling.py +22 -0
  128. ansys/fluent/core/utils/__init__.py +22 -0
  129. ansys/fluent/core/utils/data_transfer.py +22 -0
  130. ansys/fluent/core/utils/deprecate.py +24 -1
  131. ansys/fluent/core/utils/dictionary_operations.py +22 -0
  132. ansys/fluent/core/utils/dump_session_data.py +22 -0
  133. ansys/fluent/core/utils/event_loop.py +22 -0
  134. ansys/fluent/core/utils/execution.py +22 -0
  135. ansys/fluent/core/utils/file_transfer_service.py +22 -0
  136. ansys/fluent/core/utils/fix_doc.py +22 -0
  137. ansys/fluent/core/utils/fldoc.py +22 -0
  138. ansys/fluent/core/utils/fluent_version.py +22 -0
  139. ansys/fluent/core/utils/networking.py +22 -0
  140. ansys/fluent/core/utils/setup_for_fluent.py +22 -0
  141. ansys/fluent/core/warnings.py +22 -0
  142. ansys/fluent/core/workflow.py +22 -0
  143. {ansys_fluent_core-0.28.1.dist-info → ansys_fluent_core-0.29.0.dist-info}/LICENSE +8 -8
  144. {ansys_fluent_core-0.28.1.dist-info → ansys_fluent_core-0.29.0.dist-info}/METADATA +56 -33
  145. ansys_fluent_core-0.29.0.dist-info/RECORD +219 -0
  146. {ansys_fluent_core-0.28.1.dist-info → ansys_fluent_core-0.29.0.dist-info}/WHEEL +1 -1
  147. ansys/fluent/core/docs/README.rst +0 -155
  148. ansys/fluent/tests/conftest.py +0 -415
  149. ansys/fluent/tests/fluent_fixtures.py +0 -195
  150. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  151. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  152. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  153. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  154. ansys/fluent/tests/test_aero_session.py +0 -88
  155. ansys/fluent/tests/test_batch_ops.py +0 -39
  156. ansys/fluent/tests/test_builtin_settings.py +0 -761
  157. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  158. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  159. ansys/fluent/tests/test_casereader.py +0 -324
  160. ansys/fluent/tests/test_codegen.py +0 -783
  161. ansys/fluent/tests/test_creatable.py +0 -31
  162. ansys/fluent/tests/test_data_model_cache.py +0 -434
  163. ansys/fluent/tests/test_datamodel_api.py +0 -449
  164. ansys/fluent/tests/test_datamodel_service.py +0 -814
  165. ansys/fluent/tests/test_datareader.py +0 -103
  166. ansys/fluent/tests/test_error_handling.py +0 -24
  167. ansys/fluent/tests/test_events_manager.py +0 -214
  168. ansys/fluent/tests/test_field_data.py +0 -466
  169. ansys/fluent/tests/test_file_session.py +0 -355
  170. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  171. ansys/fluent/tests/test_fix_doc.py +0 -29
  172. ansys/fluent/tests/test_flobject.py +0 -1235
  173. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  174. ansys/fluent/tests/test_fluent_session.py +0 -270
  175. ansys/fluent/tests/test_fluent_version.py +0 -66
  176. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  177. ansys/fluent/tests/test_icing_session.py +0 -9
  178. ansys/fluent/tests/test_launcher.py +0 -529
  179. ansys/fluent/tests/test_launcher_remote.py +0 -272
  180. ansys/fluent/tests/test_lispy.py +0 -40
  181. ansys/fluent/tests/test_logging.py +0 -16
  182. ansys/fluent/tests/test_mapped_api.py +0 -774
  183. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  184. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  185. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  186. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  187. ansys/fluent/tests/test_preferences.py +0 -89
  188. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  189. ansys/fluent/tests/test_reduction.py +0 -484
  190. ansys/fluent/tests/test_rp_vars.py +0 -77
  191. ansys/fluent/tests/test_scheduler.py +0 -471
  192. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  193. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  194. ansys/fluent/tests/test_search.py +0 -344
  195. ansys/fluent/tests/test_session.py +0 -594
  196. ansys/fluent/tests/test_settings_api.py +0 -606
  197. ansys/fluent/tests/test_settings_reader.py +0 -85
  198. ansys/fluent/tests/test_slurm_future.py +0 -67
  199. ansys/fluent/tests/test_solution_variables.py +0 -241
  200. ansys/fluent/tests/test_solver_monitors.py +0 -83
  201. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  202. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  203. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  204. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  205. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  206. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  207. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  208. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  209. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  210. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  211. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  212. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  213. ansys/fluent/tests/test_streaming_services.py +0 -52
  214. ansys/fluent/tests/test_systemcoupling.py +0 -44
  215. ansys/fluent/tests/test_topy.py +0 -179
  216. ansys/fluent/tests/test_tui_api.py +0 -70
  217. ansys/fluent/tests/test_type_stub.py +0 -37
  218. ansys/fluent/tests/test_utils.py +0 -82
  219. ansys/fluent/tests/util/__init__.py +0 -36
  220. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  221. ansys/fluent/tests/util/solver.py +0 -72
  222. ansys_fluent_core-0.28.1.dist-info/AUTHORS +0 -12
  223. ansys_fluent_core-0.28.1.dist-info/RECORD +0 -294
@@ -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
- }