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,89 +0,0 @@
1
- import pytest
2
-
3
- from ansys.fluent.core.services.datamodel_se import ReadOnlyObjectError
4
-
5
-
6
- @pytest.mark.codegen_required
7
- def test_solver_preferences(new_solver_session):
8
- solver = new_solver_session
9
- preferred_meshing = solver.preferences.MeshingWorkflow
10
- preferred_meshing.Verbosity = "off"
11
- assert preferred_meshing.Verbosity() == "off"
12
-
13
- with pytest.raises(ReadOnlyObjectError):
14
- preferred_meshing.CheckpointingOption = "Write into memory"
15
- assert preferred_meshing.CheckpointingOption() == "Write mesh files"
16
-
17
- preferred_drawing = preferred_meshing.DrawSettings
18
- preferred_drawing.FacetLimit = 6000000
19
- assert preferred_drawing.FacetLimit() == 6000000
20
- preferred_drawing.FaceZoneLimit = 15000
21
- assert preferred_drawing.FaceZoneLimit() == 15000
22
-
23
- ansys_logo = solver.preferences.Appearance.AnsysLogo
24
- ansys_logo.Color = "white"
25
- assert ansys_logo.Color() == "white"
26
-
27
- ansys_logo.Color = "black"
28
- assert ansys_logo.Color() == "black"
29
-
30
- ansys_logo.Visible = True
31
- assert ansys_logo.Visible() is True
32
-
33
- perfered_graphics = solver.preferences.Graphics
34
- perfered_graphics.AnimationOption = "wireframe"
35
- assert perfered_graphics.AnimationOption() == "wireframe"
36
-
37
- solver.exit()
38
-
39
-
40
- @pytest.mark.codegen_required
41
- def test_meshing_preferences(new_meshing_session):
42
- meshing = new_meshing_session
43
- preferred_meshing = meshing.preferences.MeshingWorkflow
44
- preferred_meshing.Verbosity = "off"
45
- assert preferred_meshing.Verbosity() == "off"
46
-
47
- with pytest.raises(ReadOnlyObjectError):
48
- preferred_meshing.CheckpointingOption = "Write into memory"
49
- assert preferred_meshing.CheckpointingOption() == "Write mesh files"
50
-
51
- preferred_drawing = preferred_meshing.DrawSettings
52
- preferred_drawing.FacetLimit = 6000000
53
- assert preferred_drawing.FacetLimit() == 6000000
54
-
55
- preferred_drawing.FaceZoneLimit = 15000
56
- assert preferred_drawing.FaceZoneLimit() == 15000
57
-
58
- ansys_logo = meshing.preferences.Appearance.AnsysLogo
59
- ansys_logo.Color = "white"
60
- assert ansys_logo.Color() == "white"
61
-
62
- ansys_logo.Color = "black"
63
- assert ansys_logo.Color() == "black"
64
-
65
- ansys_logo.Visible = True
66
- assert ansys_logo.Visible() is True
67
-
68
- preferred_graphics = meshing.preferences.Graphics
69
- preferred_graphics.AnimationOption = "wireframe"
70
- assert preferred_graphics.AnimationOption() == "wireframe"
71
-
72
- meshing.exit()
73
-
74
-
75
- @pytest.mark.codegen_required
76
- def test_read_only_preferences(new_solver_session):
77
- solver = new_solver_session
78
- m = solver.preferences.MeshingWorkflow
79
- m.SaveCheckpointFiles = True
80
- assert m.SaveCheckpointFiles() is True
81
- assert m.CheckpointingOption() == "Write mesh files"
82
- assert m.CheckpointingOption.is_read_only() is True
83
- with pytest.raises(RuntimeError):
84
- m.CheckpointingOption = "Write into memory"
85
- m.SaveCheckpointFiles = False
86
- assert m.SaveCheckpointFiles() is False
87
- assert m.CheckpointingOption.is_read_only() is False
88
- m.CheckpointingOption = "Write into memory"
89
- assert m.CheckpointingOption() == "Write into memory"
@@ -1,101 +0,0 @@
1
- import pytest
2
-
3
- from ansys.fluent.core.examples import download_file
4
-
5
-
6
- @pytest.mark.codegen_required
7
- @pytest.mark.fluent_version(">=23.1")
8
- def test_pure_meshing_mode(mixing_elbow_watertight_pure_meshing_session):
9
- pure_meshing_session = mixing_elbow_watertight_pure_meshing_session
10
- # check a few dir elements
11
- # n.b. 'field_data', 'field_info' need to
12
- # be eliminated from meshing sessions
13
- session_dir = dir(pure_meshing_session)
14
- for attr in ("fields", "meshing", "workflow"):
15
- assert attr in session_dir
16
- workflow = pure_meshing_session.workflow
17
- workflow_dir = dir(workflow)
18
- for attr in ("TaskObject", "InsertNewTask", "Workflow", "setState"):
19
- assert attr in workflow_dir
20
- import_geometry = workflow.TaskObject["Import Geometry"]
21
- import_geometry_dir = dir(import_geometry)
22
- for attr in ("AddChildToTask", "Arguments", "Execute", "setState"):
23
- assert attr in import_geometry_dir
24
- with pytest.raises(AttributeError):
25
- pure_meshing_session.switch_to_solver()
26
-
27
-
28
- @pytest.mark.codegen_required
29
- @pytest.mark.fluent_version(">=23.1")
30
- def test_meshing_mode(new_meshing_session):
31
- meshing_session = new_meshing_session
32
- # check a few dir elements
33
- # n.b. 'field_data', 'field_info' need to
34
- # be eliminated from meshing sessions
35
- session_dir = dir(meshing_session)
36
- for attr in ("fields", "meshing", "workflow"):
37
- assert attr in session_dir
38
- assert meshing_session.workflow.InitializeWorkflow(
39
- WorkflowType="Watertight Geometry"
40
- )
41
- assert meshing_session.switch_to_solver()
42
-
43
-
44
- @pytest.mark.codegen_required
45
- @pytest.mark.fluent_version(">=23.1")
46
- def test_meshing_and_solver_mode_exit(new_meshing_session):
47
- meshing_session = new_meshing_session
48
- solver_session = meshing_session.switch_to_solver()
49
- # Even if exit statement is invoked twice, only one is executed as the channel instance is shared
50
- meshing_session.exit()
51
- solver_session.exit()
52
-
53
-
54
- @pytest.mark.codegen_required
55
- @pytest.mark.fluent_version(">=23.1")
56
- def test_meshing_mode_post_switching_to_solver(new_meshing_session):
57
- meshing_session = new_meshing_session
58
- meshing_session.switch_to_solver()
59
- # Post switching to solver session, meshing session specific attributes are unavailable
60
- with pytest.raises(AttributeError):
61
- meshing_session.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
62
-
63
-
64
- # def test_transfer_mesh_to_solvers(
65
- # new_pure_meshing_session, new_solver_session
66
- # ):
67
- # mesh_file_name = download_file("mixing_elbow.msh.h5", "pyfluent/mixing_elbow")
68
- # pure_meshing_session = new_pure_meshing_session
69
- # pure_meshing_session.tui.file.read_mesh(mesh_file_name)
70
- # pure_meshing_session.tui.mesh.check_mesh()
71
- # mesh_info = pure_meshing_session.scheme_eval.string_eval(
72
- # "(%tg-length-of-entity-list)"
73
- # )
74
- # pure_meshing_session_cell_count = mesh_info.strip("( )").split()[3]
75
- #
76
- # solver_session = new_solver_session
77
- # pure_meshing_session.transfer_mesh_to_solvers([solver_session], file_type="mesh")
78
- # solver_session.tui.mesh.check()
79
- # mesh_info = solver_session.scheme_eval.string_eval("(inquire-grids)")
80
- # solver_session_cell_count = mesh_info.strip("( )").split()[1]
81
- #
82
- # assert pure_meshing_session_cell_count == solver_session_cell_count
83
-
84
-
85
- def test_transfer_case_to_solvers(new_pure_meshing_session, new_solver_session):
86
- case_file_name = download_file("mixing_elbow.cas.h5", "pyfluent/mixing_elbow")
87
- pure_meshing_session = new_pure_meshing_session
88
- pure_meshing_session.tui.file.read_case(case_file_name)
89
- pure_meshing_session.tui.mesh.check_mesh()
90
- mesh_info = pure_meshing_session.scheme_eval.string_eval(
91
- "(%tg-length-of-entity-list)"
92
- )
93
- pure_meshing_session_cell_count = mesh_info.strip("( )").split()[3]
94
-
95
- solver_session = new_solver_session
96
- pure_meshing_session.transfer_mesh_to_solvers([solver_session], file_type="case")
97
- solver_session.tui.mesh.check()
98
- mesh_info = solver_session.scheme_eval.string_eval("(inquire-grids)")
99
- solver_session_cell_count = mesh_info.strip("( )").split()[1]
100
-
101
- assert pure_meshing_session_cell_count == solver_session_cell_count
@@ -1,484 +0,0 @@
1
- from typing import Any
2
-
3
- import pytest
4
-
5
- from ansys.fluent.core.examples import download_file
6
- from ansys.fluent.core.services.reduction import _locn_names_and_objs
7
- from ansys.fluent.core.solver.function import reduction
8
-
9
-
10
- def _test_locn_extraction(solver1, solver2):
11
- solver1_boundary_conditions = solver1.setup.boundary_conditions
12
- solver2_boundary_conditions = solver2.setup.boundary_conditions
13
- locns = _locn_names_and_objs(["inlet1"])
14
- assert locns == [["inlet1", ["inlet1"]]]
15
-
16
- all_bcs = solver1_boundary_conditions
17
- locns = _locn_names_and_objs(all_bcs)
18
- assert locns == [
19
- ["interior--fluid", all_bcs],
20
- ["outlet", all_bcs],
21
- ["inlet1", all_bcs],
22
- ["inlet2", all_bcs],
23
- ["wall", all_bcs],
24
- ]
25
-
26
- locns = _locn_names_and_objs([all_bcs["inlet1"]])
27
- assert locns == [["inlet1", all_bcs["inlet1"]]]
28
-
29
- all_bcs = solver1_boundary_conditions
30
- all_bcs2 = solver2_boundary_conditions
31
- locns = _locn_names_and_objs([all_bcs, all_bcs2])
32
- assert locns == [
33
- ["interior--fluid", all_bcs],
34
- ["outlet", all_bcs],
35
- ["inlet1", all_bcs],
36
- ["inlet2", all_bcs],
37
- ["wall", all_bcs],
38
- ["interior--fluid", all_bcs2],
39
- ["outlet", all_bcs2],
40
- ["inlet1", all_bcs2],
41
- ["inlet2", all_bcs2],
42
- ["wall", all_bcs2],
43
- ]
44
-
45
-
46
- def _test_context(solver):
47
- solver.solution.initialization.hybrid_initialize()
48
-
49
- assert solver.fields.reduction.area(
50
- locations=[solver.setup.boundary_conditions.velocity_inlet["inlet1"]],
51
- ctxt=solver,
52
- )
53
-
54
- assert solver.fields.reduction.area(locations=["inlet1"], ctxt=solver)
55
-
56
-
57
- def _test_area_average(solver):
58
- solver.solution.initialization.hybrid_initialize()
59
- solver_named_expressions = solver.setup.named_expressions
60
- solver_named_expressions["test_expr_1"] = {}
61
- solver_named_expressions["test_expr_1"].definition = (
62
- "AreaAve(AbsolutePressure, ['inlet1'])"
63
- )
64
- expr_val = solver_named_expressions["test_expr_1"].get_value()
65
- assert isinstance(expr_val, float) and expr_val != 0.0
66
- val = solver.fields.reduction.area_average(
67
- expression="AbsolutePressure",
68
- locations=solver.setup.boundary_conditions.velocity_inlet,
69
- )
70
- assert val == expr_val
71
- solver_named_expressions.pop(key="test_expr_1")
72
-
73
-
74
- def _test_min(solver1, solver2):
75
- s1_min = solver1.fields.reduction.minimum(
76
- expression="AbsolutePressure",
77
- locations=[solver1.setup.boundary_conditions.velocity_inlet],
78
- )
79
- s2_min = solver2.fields.reduction.minimum(
80
- expression="AbsolutePressure",
81
- locations=[solver2.setup.boundary_conditions.velocity_inlet],
82
- )
83
- result = reduction.minimum(
84
- expression="AbsolutePressure",
85
- locations=[
86
- solver1.setup.boundary_conditions.velocity_inlet,
87
- solver2.setup.boundary_conditions.velocity_inlet,
88
- ],
89
- )
90
- assert result == min(s1_min, s2_min)
91
-
92
-
93
- def _test_count(solver):
94
- solver.solution.initialization.hybrid_initialize()
95
- solver_named_expressions = solver.setup.named_expressions
96
- s_velocity_inlet = solver.setup.boundary_conditions.velocity_inlet
97
- solver_named_expressions["test_expr_1"] = {}
98
- solver_named_expressions["test_expr_1"].definition = "Count(['inlet1'])"
99
- expr_val_1 = solver_named_expressions["test_expr_1"].get_value()
100
- solver_named_expressions["test_expr_1"].definition = "Count(['inlet2'])"
101
- expr_val_2 = solver_named_expressions["test_expr_1"].get_value()
102
- solver_named_expressions["test_expr_1"].definition = "Count(['inlet1', 'inlet2'])"
103
- expr_val_3 = solver_named_expressions["test_expr_1"].get_value()
104
- assert expr_val_3 == expr_val_1 + expr_val_2
105
- red_val_1 = solver.fields.reduction.count(locations=[s_velocity_inlet["inlet1"]])
106
- red_val_2 = solver.fields.reduction.count(locations=[s_velocity_inlet["inlet2"]])
107
- red_val_3 = solver.fields.reduction.count(locations=[s_velocity_inlet])
108
- assert red_val_1 == expr_val_1
109
- assert red_val_2 == expr_val_2
110
- assert red_val_3 == expr_val_3
111
- solver_named_expressions.pop(key="test_expr_1")
112
-
113
-
114
- def _test_count_if(solver):
115
- solver.solution.initialization.hybrid_initialize()
116
- solver_named_expressions = solver.setup.named_expressions
117
- s_velocity_inlet = solver.setup.boundary_conditions.velocity_inlet
118
- solver_named_expressions["test_expr_1"] = {}
119
- solver_named_expressions["test_expr_1"].definition = (
120
- "CountIf(AbsolutePressure > 0[Pa], ['inlet1'])"
121
- )
122
- expr_val_1 = solver_named_expressions["test_expr_1"].get_value()
123
- solver_named_expressions["test_expr_1"].definition = (
124
- "CountIf(AbsolutePressure > 0[Pa], ['inlet2'])"
125
- )
126
- expr_val_2 = solver_named_expressions["test_expr_1"].get_value()
127
- solver_named_expressions["test_expr_1"].definition = (
128
- "CountIf(AbsolutePressure > 0[Pa], ['inlet1', 'inlet2'])"
129
- )
130
- expr_val_3 = solver_named_expressions["test_expr_1"].get_value()
131
- assert expr_val_3 == expr_val_1 + expr_val_2
132
- red_val_1 = solver.fields.reduction.count_if(
133
- condition="AbsolutePressure > 0[Pa]", locations=["inlet1"]
134
- )
135
- red_val_2 = solver.fields.reduction.count_if(
136
- condition="AbsolutePressure > 0[Pa]", locations=[s_velocity_inlet["inlet2"]]
137
- )
138
- red_val_3 = solver.fields.reduction.count_if(
139
- condition="AbsolutePressure > 0[Pa]", locations=[s_velocity_inlet]
140
- )
141
- assert red_val_1 == expr_val_1
142
- assert red_val_2 == expr_val_2
143
- assert red_val_3 == expr_val_3
144
- solver_named_expressions.pop(key="test_expr_1")
145
-
146
-
147
- def _test_centroid(solver):
148
- solver.solution.initialization.hybrid_initialize()
149
- solver_named_expressions = solver.setup.named_expressions
150
- velocity_inlet = solver.setup.boundary_conditions.velocity_inlet
151
- solver_named_expressions["test_expr_1"] = {}
152
- solver_named_expressions["test_expr_1"].definition = "Centroid(['inlet1'])"
153
- expr_val_1 = solver_named_expressions["test_expr_1"].get_value()
154
- solver_named_expressions["test_expr_1"].definition = "Centroid(['inlet2'])"
155
- expr_val_2 = solver_named_expressions["test_expr_1"].get_value()
156
- solver_named_expressions["test_expr_1"].definition = (
157
- "Centroid(['inlet1', 'inlet2'])"
158
- )
159
- expr_val_3 = solver_named_expressions["test_expr_1"].get_value()
160
- red_val_1 = solver.fields.reduction.centroid(locations=[velocity_inlet["inlet1"]])
161
- red_val_2 = solver.fields.reduction.centroid(locations=[velocity_inlet["inlet2"]])
162
- red_val_3 = solver.fields.reduction.centroid(locations=[velocity_inlet])
163
- assert [red_val_1[0], red_val_1[1], red_val_1[2]] == expr_val_1
164
- assert [red_val_2[0], red_val_2[1], red_val_2[2]] == expr_val_2
165
- assert [red_val_3[0], red_val_3[1], red_val_3[2]] == expr_val_3
166
- solver_named_expressions.pop(key="test_expr_1")
167
-
168
-
169
- def _test_area_integrated_average(solver1, solver2):
170
- solver1.solution.initialization.hybrid_initialize()
171
- solver2.solution.initialization.hybrid_initialize()
172
- solver1_boundary_conditions = solver1.setup.boundary_conditions
173
- solver2_boundary_conditions = solver2.setup.boundary_conditions
174
- solver1_named_expr = solver1.setup.named_expressions
175
- solver2_named_expr = solver2.setup.named_expressions
176
-
177
- solver1_named_expr["test_expr_1"] = {}
178
- solver1_named_expr["test_expr_1"].definition = (
179
- "AreaInt(AbsolutePressure, ['inlet1'])"
180
- )
181
- expr_val_1 = solver1_named_expr["test_expr_1"].get_value()
182
-
183
- solver1_named_expr["test_expr_1"].definition = (
184
- "AreaInt(AbsolutePressure, ['inlet2'])"
185
- )
186
- expr_val_2 = solver1_named_expr["test_expr_1"].get_value()
187
- solver1_named_expr["test_expr_1"].definition = (
188
- "AreaInt(AbsolutePressure, ['inlet1', 'inlet2'])"
189
- )
190
- expr_val_3 = solver1_named_expr["test_expr_1"].get_value()
191
-
192
- assert expr_val_3 - (expr_val_1 + expr_val_2) <= 0.000000001
193
-
194
- red_val_1 = solver1.fields.reduction.area_integral(
195
- expression="AbsolutePressure",
196
- locations=[solver1_boundary_conditions.velocity_inlet["inlet1"]],
197
- )
198
- red_val_2 = solver1.fields.reduction.area_integral(
199
- expression="AbsolutePressure",
200
- locations=[solver1_boundary_conditions.velocity_inlet["inlet2"]],
201
- )
202
- red_val_3 = solver1.fields.reduction.area_integral(
203
- expression="AbsolutePressure",
204
- locations=[solver1_boundary_conditions.velocity_inlet],
205
- )
206
-
207
- assert red_val_1 == expr_val_1
208
- assert red_val_2 == expr_val_2
209
- assert red_val_3 == expr_val_3
210
-
211
- solver2_named_expr["test_expr_1"] = {}
212
- solver2_named_expr["test_expr_1"].definition = (
213
- "AreaInt(AbsolutePressure, ['inlet1'])"
214
- )
215
- expr_val_4 = solver2_named_expr["test_expr_1"].get_value()
216
-
217
- solver2_named_expr["test_expr_1"].definition = (
218
- "AreaInt(AbsolutePressure, ['inlet2'])"
219
- )
220
- expr_val_5 = solver2_named_expr["test_expr_1"].get_value()
221
- solver2_named_expr["test_expr_1"].definition = (
222
- "AreaInt(AbsolutePressure, ['inlet1', 'inlet2'])"
223
- )
224
- expr_val_6 = solver2_named_expr["test_expr_1"].get_value()
225
-
226
- assert expr_val_6 - (expr_val_4 + expr_val_5) <= 0.000000001
227
-
228
- red_val_4 = solver2.fields.reduction.area_integral(
229
- expression="AbsolutePressure",
230
- locations=[solver2_boundary_conditions.velocity_inlet["inlet1"]],
231
- )
232
- red_val_5 = solver2.fields.reduction.area_integral(
233
- expression="AbsolutePressure",
234
- locations=[solver2_boundary_conditions.velocity_inlet["inlet2"]],
235
- )
236
- red_val_6 = solver2.fields.reduction.area_integral(
237
- expression="AbsolutePressure",
238
- locations=[solver2_boundary_conditions.velocity_inlet],
239
- )
240
-
241
- assert red_val_4 == expr_val_4
242
- assert red_val_5 == expr_val_5
243
- assert red_val_6 == expr_val_6
244
-
245
- red_val_7 = solver2.fields.reduction.area_integral(
246
- expression="AbsolutePressure",
247
- locations=[
248
- solver1_boundary_conditions.velocity_inlet,
249
- solver2_boundary_conditions.velocity_inlet,
250
- ],
251
- )
252
-
253
- assert red_val_7 - (expr_val_3 + expr_val_6) <= 0.000000001
254
-
255
- solver1_named_expr.pop(key="test_expr_1")
256
-
257
-
258
- def _test_error_handling(solver):
259
- if int(solver._version) < 241:
260
- with pytest.raises(RuntimeError):
261
- solver.fields.reduction.area_average(
262
- expression="AbsoluteVelocity", # This is a wrong expression intentionally passed
263
- locations=solver.setup.boundary_conditions.velocity_inlet,
264
- )
265
-
266
-
267
- def _test_force(solver):
268
- solver.solution.initialization.hybrid_initialize()
269
- solver_named_expressions = solver.setup.named_expressions
270
- solver_named_expressions["test_expr_1"] = {}
271
- solver_named_expressions["test_expr_1"].definition = "Force(['wall'])"
272
- expr_val_1 = solver_named_expressions["test_expr_1"].get_value()
273
-
274
- red_total_force = solver.fields.reduction.force(
275
- locations=[solver.setup.boundary_conditions.wall]
276
- )
277
- red_pressure_force = solver.fields.reduction.pressure_force(
278
- locations=[solver.setup.boundary_conditions.wall]
279
- )
280
- red_viscous_force = solver.fields.reduction.viscous_force(
281
- locations=[solver.setup.boundary_conditions.wall]
282
- )
283
-
284
- assert [red_total_force[0], red_total_force[1], red_total_force[2]] == expr_val_1
285
-
286
- assert red_pressure_force[0] + red_viscous_force[0] == red_total_force[0]
287
-
288
- assert red_pressure_force[1] + red_viscous_force[1] == red_total_force[1]
289
-
290
- assert red_pressure_force[2] + red_viscous_force[2] == red_total_force[2]
291
-
292
- solver_named_expressions.pop(key="test_expr_1")
293
-
294
-
295
- def _test_moment(solver):
296
- solver.solution.initialization.hybrid_initialize()
297
- solver_named_expressions = solver.setup.named_expressions
298
- location = solver.setup.boundary_conditions.wall
299
- solver_named_expressions["test_expr_1"] = {}
300
- solver_named_expressions["test_expr_1"].definition = (
301
- "Moment(Force(['wall']),['wall'])"
302
- )
303
- expr_val_1 = solver_named_expressions["test_expr_1"].get_value()
304
-
305
- solver_named_expressions["test_expr_1"].definition = "Moment(['inlet1'],['wall'])"
306
- expr_val_2 = solver_named_expressions["test_expr_1"].get_value()
307
-
308
- red_moment_force = solver.fields.reduction.moment(
309
- expression="Force(['wall'])", locations=[location]
310
- )
311
-
312
- red_moment_location = solver.fields.reduction.moment(
313
- expression="['inlet1']", locations=[location]
314
- )
315
-
316
- assert [red_moment_force[0], red_moment_force[1], red_moment_force[2]] == expr_val_1
317
- assert [
318
- red_moment_location[0],
319
- red_moment_location[1],
320
- red_moment_location[2],
321
- ] == expr_val_2
322
-
323
- solver_named_expressions.pop(key="test_expr_1")
324
-
325
-
326
- def _test_sum(solver):
327
- solver.solution.initialization.hybrid_initialize()
328
- solver.setup.named_expressions["test_expr_1"] = {}
329
- solver.setup.named_expressions["test_expr_1"].definition = (
330
- "Sum(AbsolutePressure, ['inlet1'], Weight=Area)"
331
- )
332
- expr_val = solver.setup.named_expressions["test_expr_1"].get_value()
333
- assert isinstance(expr_val, float) and expr_val != 0.0
334
-
335
- val = solver.fields.reduction.sum(
336
- expression="AbsolutePressure",
337
- locations=[solver.setup.boundary_conditions.velocity_inlet["inlet1"]],
338
- weight="Area",
339
- )
340
-
341
- assert val == expr_val
342
- solver.setup.named_expressions.pop(key="test_expr_1")
343
-
344
-
345
- def _test_sum_if(solver):
346
- solver.solution.initialization.hybrid_initialize()
347
- solver.setup.named_expressions["test_expr_1"] = {}
348
- solver.setup.named_expressions["test_expr_1"].definition = (
349
- "SumIf(AbsolutePressure, AbsolutePressure > 0[Pa], ['inlet1'], Weight=Area)"
350
- )
351
- expr_val = solver.setup.named_expressions["test_expr_1"].get_value()
352
- assert isinstance(expr_val, float) and expr_val != 0.0
353
-
354
- val = solver.fields.reduction.sum_if(
355
- expression="AbsolutePressure",
356
- condition="AbsolutePressure > 0[Pa]",
357
- locations=[solver.setup.boundary_conditions.velocity_inlet["inlet1"]],
358
- weight="Area",
359
- )
360
-
361
- assert val == expr_val
362
- solver.setup.named_expressions.pop(key="test_expr_1")
363
-
364
-
365
- def _test_centroid_2_sources(solver1, solver2):
366
- s1_cent = solver1.fields.reduction.centroid(
367
- locations=[solver1.setup.boundary_conditions.velocity_inlet]
368
- )
369
- s2_cent = solver2.fields.reduction.centroid(
370
- locations=[solver2.setup.boundary_conditions.velocity_inlet]
371
- )
372
-
373
- result = reduction.centroid(
374
- locations=[
375
- solver1.setup.boundary_conditions.velocity_inlet,
376
- solver2.setup.boundary_conditions.velocity_inlet,
377
- ]
378
- )
379
- assert [round(x, 5) for x in result] == [
380
- (round(x, 5) + round(y, 5)) / 2 for x, y in zip(*[s1_cent, s2_cent])
381
- ]
382
-
383
-
384
- @pytest.fixture
385
- def static_mixer_case_session2(static_mixer_case_session: Any):
386
- return static_mixer_case_session
387
-
388
-
389
- @pytest.mark.nightly
390
- @pytest.mark.fluent_version(">=23.1")
391
- def test_reductions(
392
- static_mixer_case_session: Any, static_mixer_case_session2: Any
393
- ) -> None:
394
- solver1 = static_mixer_case_session
395
- solver2 = static_mixer_case_session2
396
- _test_context(solver1)
397
- _test_locn_extraction(solver1, solver2)
398
- _test_area_average(solver1)
399
- _test_count(solver1)
400
- _test_count_if(solver1)
401
- _test_centroid(solver1)
402
- _test_area_integrated_average(solver1, solver2)
403
- _test_error_handling(solver1)
404
- _test_force(solver1)
405
- _test_moment(solver1)
406
- _test_sum(solver1)
407
- _test_sum_if(solver1)
408
- # The case and data are changed after this point to check the functional reduction with multiple solvers
409
- case_path = download_file(
410
- file_name="exhaust_system.cas.h5", directory="pyfluent/exhaust_system"
411
- )
412
- download_file(
413
- file_name="exhaust_system.dat.h5", directory="pyfluent/exhaust_system"
414
- )
415
- solver1.file.read_case_data(file_name=case_path)
416
- case_path1 = download_file("elbow1.cas.h5", "pyfluent/file_session")
417
- download_file("elbow1.dat.h5", "pyfluent/file_session")
418
- solver2.file.read_case_data(file_name=case_path1)
419
- _test_min(solver1, solver2)
420
- _test_centroid_2_sources(solver1, solver2)
421
-
422
-
423
- @pytest.mark.fluent_version(">=24.2")
424
- def test_reduction_does_not_modify_case(static_mixer_case_session: Any):
425
- solver = static_mixer_case_session
426
- # After reading the static-mixer case in Fluent, case-modifed? flag is somehow True
427
- solver.scheme_eval.scheme_eval("(%save-case-id)")
428
- assert not solver.scheme_eval.scheme_eval("(case-modified?)")
429
- solver.reduction.area_average(
430
- expression="AbsolutePressure",
431
- locations=solver.setup.boundary_conditions.velocity_inlet,
432
- )
433
- assert not solver.scheme_eval.scheme_eval("(case-modified?)")
434
-
435
-
436
- @pytest.mark.fluent_version(">=24.2")
437
- def test_fix_for_invalid_location_inputs(static_mixer_case_session: Any):
438
- solver = static_mixer_case_session
439
- solver.solution.initialization.hybrid_initialize()
440
-
441
- assert solver.fields.reduction.area(locations=["inlet1"], ctxt=solver)
442
-
443
- with pytest.raises(ValueError):
444
- assert solver.fields.reduction.area(locations=["inlet-1"], ctxt=solver)
445
-
446
- with pytest.raises(KeyError):
447
- assert solver.fields.reduction.area(
448
- locations=[solver.setup.boundary_conditions.velocity_inlet["inlet-1"]]
449
- )
450
-
451
- assert solver.fields.reduction.area(locations=["inlet1"])
452
-
453
- with pytest.raises(ValueError):
454
- assert solver.fields.reduction.area(locations=["inlet-1"])
455
-
456
-
457
- @pytest.mark.fluent_version(">=25.2")
458
- def test_fix_for_empty_location_inputs(static_mixer_case_session: Any):
459
- solver = static_mixer_case_session
460
- solver.solution.initialization.hybrid_initialize()
461
-
462
- assert solver.fields.reduction.area(locations=["inlet1"])
463
-
464
- with pytest.raises(RuntimeError):
465
- assert reduction.area(locations=[], ctxt=solver)
466
-
467
- with pytest.raises(RuntimeError):
468
- assert reduction.area_average(
469
- expression="AbsolutePressure", locations=[], ctxt=solver
470
- )
471
-
472
- with pytest.raises(RuntimeError):
473
- assert reduction.centroid(locations=[], ctxt=solver)
474
-
475
- with pytest.raises(RuntimeError):
476
- assert solver.fields.reduction.area(locations=[])
477
-
478
- with pytest.raises(RuntimeError):
479
- assert solver.fields.reduction.area_average(
480
- expression="AbsolutePressure", locations=[]
481
- )
482
-
483
- with pytest.raises(RuntimeError):
484
- assert solver.fields.reduction.centroid(locations=[])