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