ansys-fluent-core 0.34.dev0__py3-none-any.whl → 0.35.dev0__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 (108) hide show
  1. ansys/fluent/core/__init__.py +48 -84
  2. ansys/fluent/core/codegen/allapigen.py +2 -2
  3. ansys/fluent/core/codegen/builtin_settingsgen.py +41 -13
  4. ansys/fluent/core/codegen/datamodelgen.py +3 -1
  5. ansys/fluent/core/codegen/print_fluent_version.py +2 -2
  6. ansys/fluent/core/codegen/settingsgen.py +18 -6
  7. ansys/fluent/core/codegen/tuigen.py +6 -5
  8. ansys/fluent/core/data_model_cache.py +2 -2
  9. ansys/fluent/core/docker/docker_compose.py +11 -9
  10. ansys/fluent/core/docker/utils.py +35 -0
  11. ansys/fluent/core/examples/downloads.py +8 -11
  12. ansys/fluent/core/exceptions.py +13 -1
  13. ansys/fluent/core/field_data_interfaces.py +239 -38
  14. ansys/fluent/core/file_session.py +167 -61
  15. ansys/fluent/core/fluent_connection.py +41 -26
  16. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  17. ansys/fluent/core/generated/datamodel_231/flicing.py +40 -40
  18. ansys/fluent/core/generated/datamodel_231/meshing.py +231 -231
  19. ansys/fluent/core/generated/datamodel_232/flicing.py +50 -50
  20. ansys/fluent/core/generated/datamodel_232/meshing.py +189 -189
  21. ansys/fluent/core/generated/datamodel_241/flicing.py +30 -30
  22. ansys/fluent/core/generated/datamodel_241/meshing.py +290 -290
  23. ansys/fluent/core/generated/datamodel_242/flicing.py +50 -50
  24. ansys/fluent/core/generated/datamodel_242/meshing.py +331 -331
  25. ansys/fluent/core/generated/datamodel_242/part_management.py +6 -6
  26. ansys/fluent/core/generated/datamodel_251/flicing.py +65 -65
  27. ansys/fluent/core/generated/datamodel_251/meshing.py +300 -300
  28. ansys/fluent/core/generated/datamodel_251/part_management.py +6 -6
  29. ansys/fluent/core/generated/datamodel_252/flicing.py +25 -25
  30. ansys/fluent/core/generated/datamodel_252/meshing.py +382 -382
  31. ansys/fluent/core/generated/datamodel_252/part_management.py +10 -10
  32. ansys/fluent/core/generated/datamodel_261/flicing.py +45 -45
  33. ansys/fluent/core/generated/datamodel_261/meshing.py +454 -435
  34. ansys/fluent/core/generated/datamodel_261/part_management.py +5 -5
  35. ansys/fluent/core/generated/datamodel_261/preferences.py +7 -0
  36. ansys/fluent/core/generated/fluent_version_252.py +1 -1
  37. ansys/fluent/core/generated/fluent_version_261.py +3 -3
  38. ansys/fluent/core/generated/meshing/tui_261.py +54 -3
  39. ansys/fluent/core/generated/solver/settings_231.py +1 -0
  40. ansys/fluent/core/generated/solver/settings_231.pyi +3025 -1
  41. ansys/fluent/core/generated/solver/settings_232.py +1 -0
  42. ansys/fluent/core/generated/solver/settings_232.pyi +3425 -1
  43. ansys/fluent/core/generated/solver/settings_241.py +1 -0
  44. ansys/fluent/core/generated/solver/settings_241.pyi +4423 -1
  45. ansys/fluent/core/generated/solver/settings_242.py +1 -0
  46. ansys/fluent/core/generated/solver/settings_242.pyi +5474 -1
  47. ansys/fluent/core/generated/solver/settings_251.py +11 -0
  48. ansys/fluent/core/generated/solver/settings_251.pyi +6006 -1
  49. ansys/fluent/core/generated/solver/settings_252.py +11 -1
  50. ansys/fluent/core/generated/solver/settings_252.pyi +6782 -2
  51. ansys/fluent/core/generated/solver/settings_261.py +5592 -2740
  52. ansys/fluent/core/generated/solver/settings_261.pyi +10335 -1994
  53. ansys/fluent/core/generated/solver/settings_builtin.py +560 -38
  54. ansys/fluent/core/generated/solver/settings_builtin.pyi +24 -18
  55. ansys/fluent/core/generated/solver/tui_261.py +409 -285
  56. ansys/fluent/core/launcher/container_launcher.py +25 -6
  57. ansys/fluent/core/launcher/error_handler.py +1 -1
  58. ansys/fluent/core/launcher/fluent_container.py +97 -45
  59. ansys/fluent/core/launcher/launch_options.py +5 -4
  60. ansys/fluent/core/launcher/launcher.py +18 -2
  61. ansys/fluent/core/launcher/launcher_utils.py +63 -15
  62. ansys/fluent/core/launcher/pim_launcher.py +17 -3
  63. ansys/fluent/core/launcher/process_launch_string.py +3 -2
  64. ansys/fluent/core/launcher/server_info.py +7 -3
  65. ansys/fluent/core/launcher/slurm_launcher.py +4 -2
  66. ansys/fluent/core/launcher/standalone_launcher.py +6 -3
  67. ansys/fluent/core/launcher/watchdog.py +6 -6
  68. ansys/fluent/core/launcher/watchdog_exec +1 -1
  69. ansys/fluent/core/logger.py +3 -1
  70. ansys/fluent/core/module_config.py +358 -0
  71. ansys/fluent/core/pyfluent_warnings.py +9 -3
  72. ansys/fluent/core/report.py +2 -2
  73. ansys/fluent/core/search.py +34 -13
  74. ansys/fluent/core/services/__init__.py +2 -2
  75. ansys/fluent/core/services/api_upgrade.py +3 -2
  76. ansys/fluent/core/services/app_utilities.py +39 -0
  77. ansys/fluent/core/services/datamodel_se.py +4 -2
  78. ansys/fluent/core/services/deprecated_field_data.py +4 -4
  79. ansys/fluent/core/services/field_data.py +185 -49
  80. ansys/fluent/core/services/health_check.py +3 -1
  81. ansys/fluent/core/services/interceptors.py +8 -6
  82. ansys/fluent/core/services/reduction.py +16 -5
  83. ansys/fluent/core/services/settings.py +1 -0
  84. ansys/fluent/core/session.py +47 -4
  85. ansys/fluent/core/session_pure_meshing.py +6 -6
  86. ansys/fluent/core/session_pure_meshing.pyi +1 -0
  87. ansys/fluent/core/session_shared.py +4 -4
  88. ansys/fluent/core/session_solver.py +41 -10
  89. ansys/fluent/core/session_solver.pyi +1 -0
  90. ansys/fluent/core/session_utilities.py +7 -0
  91. ansys/fluent/core/solver/error_message.py +2 -2
  92. ansys/fluent/core/solver/flobject.py +192 -123
  93. ansys/fluent/core/solver/function/reduction.py +37 -9
  94. ansys/fluent/core/solver/settings_builtin_bases.py +3 -3
  95. ansys/fluent/core/solver/settings_builtin_data.py +7 -17
  96. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +3 -2
  97. ansys/fluent/core/streaming_services/datamodel_streaming.py +3 -1
  98. ansys/fluent/core/streaming_services/events_streaming.py +2 -18
  99. ansys/fluent/core/system_coupling.py +3 -1
  100. ansys/fluent/core/utils/__init__.py +0 -7
  101. ansys/fluent/core/utils/data_transfer.py +3 -3
  102. ansys/fluent/core/utils/file_transfer_service.py +24 -15
  103. ansys/fluent/core/utils/fluent_version.py +4 -6
  104. ansys/fluent/core/utils/networking.py +21 -11
  105. {ansys_fluent_core-0.34.dev0.dist-info → ansys_fluent_core-0.35.dev0.dist-info}/METADATA +10 -11
  106. {ansys_fluent_core-0.34.dev0.dist-info → ansys_fluent_core-0.35.dev0.dist-info}/RECORD +108 -106
  107. {ansys_fluent_core-0.34.dev0.dist-info → ansys_fluent_core-0.35.dev0.dist-info}/WHEEL +1 -1
  108. {ansys_fluent_core-0.34.dev0.dist-info/licenses → ansys_fluent_core-0.35.dev0.dist-info}/LICENSE +0 -0
@@ -33,7 +33,6 @@ from deprecated.sphinx import deprecated
33
33
 
34
34
  from ansys.fluent.core.fluent_connection import FluentConnection
35
35
  from ansys.fluent.core.journaling import Journal
36
- from ansys.fluent.core.launcher.launcher_utils import is_compose
37
36
  from ansys.fluent.core.pyfluent_warnings import (
38
37
  PyFluentDeprecationWarning,
39
38
  PyFluentUserWarning,
@@ -151,6 +150,7 @@ class BaseSession:
151
150
  file_transfer_service,
152
151
  event_type,
153
152
  get_zones_info,
153
+ launcher_args,
154
154
  )
155
155
  self.register_finalizer_callback = fluent_connection.register_finalizer_cb
156
156
 
@@ -161,10 +161,14 @@ class BaseSession:
161
161
  file_transfer_service: Any | None = None,
162
162
  event_type=None,
163
163
  get_zones_info: weakref.WeakMethod[Callable[[], list[ZoneInfo]]] | None = None,
164
+ launcher_args: Dict[str, Any] | None = None,
164
165
  ):
165
166
  """Build a BaseSession object from fluent_connection object."""
166
167
  self._fluent_connection = fluent_connection
168
+ # Stores the backup of the fluent connection for later reference.
169
+ self._fluent_connection_backup = self._fluent_connection
167
170
  self._file_transfer_service = file_transfer_service
171
+ self._launcher_args = launcher_args
168
172
  self._error_state = fluent_connection._error_state
169
173
  self.scheme = scheme_eval
170
174
  self.rp_vars = RPVars(self.scheme.string_eval)
@@ -354,8 +358,32 @@ class BaseSession:
354
358
  return FluentVersion(self.scheme.version)
355
359
 
356
360
  def _exit_compose_service(self):
357
- if self._fluent_connection._container and is_compose():
358
- self._fluent_connection._container.stop()
361
+ args = self._launcher_args or {}
362
+ compose_config = args.get("compose_config", None)
363
+
364
+ container = self._fluent_connection._container
365
+ if compose_config and compose_config.is_compose:
366
+ container.stop()
367
+
368
+ def wait_process_finished(self, wait: float | int | bool = 60):
369
+ """Returns ``True`` if local Fluent processes have finished, ``False`` if they
370
+ are still running when wait limit (default 60 seconds) is reached. Immediately
371
+ cancels and returns ``None`` if ``wait`` is set to ``False``.
372
+
373
+ Parameters
374
+ ----------
375
+ wait : float, int or bool, optional
376
+ How long to wait for processes to finish before returning, by default 60 seconds.
377
+ Can also be set to ``True``, which will result in waiting indefinitely.
378
+
379
+ Raises
380
+ ------
381
+ UnsupportedRemoteFluentInstance
382
+ If current Fluent instance is running remotely.
383
+ WaitTypeError
384
+ If ``wait`` is specified improperly.
385
+ """
386
+ return self._fluent_connection_backup.wait_process_finished()
359
387
 
360
388
  def exit(self, **kwargs) -> None:
361
389
  """Exit session."""
@@ -452,9 +480,18 @@ class BaseSession:
452
480
  "field_data_streaming",
453
481
  "start_journal",
454
482
  "stop_journal",
483
+ "scheme_eval",
455
484
  }
456
485
  return sorted(dir_list)
457
486
 
487
+ def enable_beta_features(self):
488
+ """Enable access to Fluent beta-features"""
489
+ self._app_utilities.enable_beta()
490
+
491
+ @property
492
+ def _is_beta_enabled(self):
493
+ return self._app_utilities.is_beta_enabled()
494
+
458
495
 
459
496
  class Fields:
460
497
  """Container for field and solution variables."""
@@ -468,7 +505,7 @@ class Fields:
468
505
  self._is_solution_data_valid = (
469
506
  _session._app_utilities.is_solution_data_available
470
507
  )
471
- self.field_info = service_creator("field_info").create(
508
+ self._field_info = service_creator("field_info").create(
472
509
  _session._field_data_service,
473
510
  self._is_solution_data_valid,
474
511
  )
@@ -488,3 +525,9 @@ class Fields:
488
525
  self._is_solution_data_valid,
489
526
  _session.scheme,
490
527
  )
528
+
529
+ @property
530
+ @deprecated(version="0.34.0", reason="Use relevant ``field_data`` methods..")
531
+ def field_info(self):
532
+ """Field Information."""
533
+ return self._field_info
@@ -27,6 +27,7 @@ from typing import Any, Dict
27
27
 
28
28
  import ansys.fluent.core as pyfluent
29
29
  from ansys.fluent.core.data_model_cache import DataModelCache, NameKey
30
+ from ansys.fluent.core.exceptions import BetaFeaturesNotEnabled
30
31
  from ansys.fluent.core.fluent_connection import FluentConnection
31
32
  from ansys.fluent.core.services import SchemeEval
32
33
  from ansys.fluent.core.session import BaseSession
@@ -119,7 +120,7 @@ class PureMeshing(BaseSession):
119
120
  self.datamodel_streams[rules] = stream
120
121
  stream.start(
121
122
  rules=rules,
122
- no_commands_diff_state=pyfluent.DATAMODEL_USE_NOCOMMANDS_DIFF_STATE,
123
+ no_commands_diff_state=pyfluent.config.datamodel_use_nocommands_diff_state,
123
124
  )
124
125
  self._fluent_connection.register_finalizer_cb(stream.stop)
125
126
 
@@ -175,13 +176,12 @@ class PureMeshing(BaseSession):
175
176
 
176
177
  Raises
177
178
  ------
178
- RuntimeError
179
+ AttributeError
179
180
  If beta features are not enabled in Fluent.
180
181
  """
181
- if not self._app_utilities.is_beta_enabled():
182
- raise RuntimeError("Topology-based Meshing is a beta feature in Fluent.")
183
- self._base_meshing.topology_based_meshing_workflow.initialize()
184
- return self._base_meshing.topology_based_meshing_workflow
182
+ if not self._is_beta_enabled:
183
+ raise BetaFeaturesNotEnabled("Topology-based meshing")
184
+ return self._base_meshing.topology_based_meshing_workflow()
185
185
 
186
186
  @property
187
187
  def PartManagement(self):
@@ -66,3 +66,4 @@ class PureMeshing:
66
66
  clean_up_mesh_file: bool = ...,
67
67
  overwrite_previous: bool = ...,
68
68
  ): ...
69
+ def enable_beta_features(self): ...
@@ -47,11 +47,11 @@ tui_logger = logging.getLogger("pyfluent.tui")
47
47
 
48
48
  def _make_tui_module(session, module_name):
49
49
  try:
50
- from ansys.fluent.core import CODEGEN_OUTDIR
50
+ from ansys.fluent.core import config
51
51
 
52
52
  tui_module = pyfluent.utils.load_module(
53
53
  f"{module_name}_tui_{session._version}",
54
- CODEGEN_OUTDIR / module_name / f"tui_{session._version}.py",
54
+ config.codegen_outdir / module_name / f"tui_{session._version}.py",
55
55
  )
56
56
  warning_for_fluent_dev_version(session._version)
57
57
  return tui_module.main_menu(
@@ -64,13 +64,13 @@ def _make_tui_module(session, module_name):
64
64
 
65
65
  def _make_datamodel_module(session, module_name):
66
66
  try:
67
- from ansys.fluent.core import CODEGEN_OUTDIR
67
+ from ansys.fluent.core import config
68
68
  from ansys.fluent.core.codegen.datamodelgen import datamodel_file_name_map
69
69
 
70
70
  file_name = datamodel_file_name_map[module_name]
71
71
  module = pyfluent.utils.load_module(
72
72
  f"{module_name}_{session._version}",
73
- CODEGEN_OUTDIR / f"datamodel_{session._version}" / f"{file_name}.py",
73
+ config.codegen_outdir / f"datamodel_{session._version}" / f"{file_name}.py",
74
74
  )
75
75
  warning_for_fluent_dev_version(session._version)
76
76
  return module.Root(session._se_service, module_name, [])
@@ -30,6 +30,7 @@ import weakref
30
30
 
31
31
  from ansys.api.fluent.v0 import svar_pb2 as SvarProtoModule
32
32
  import ansys.fluent.core as pyfluent
33
+ from ansys.fluent.core.exceptions import BetaFeaturesNotEnabled
33
34
  from ansys.fluent.core.pyfluent_warnings import PyFluentDeprecationWarning
34
35
  from ansys.fluent.core.services import SchemeEval, service_creator
35
36
  from ansys.fluent.core.services.field_data import ZoneInfo, ZoneType
@@ -118,13 +119,16 @@ class Solver(BaseSession):
118
119
  get_zones_info=weakref.WeakMethod(self._get_zones_info),
119
120
  )
120
121
  self._settings = None
121
- self._build_from_fluent_connection(fluent_connection, scheme_eval)
122
+ self._build_from_fluent_connection(
123
+ fluent_connection, scheme_eval, launcher_args=launcher_args
124
+ )
122
125
 
123
126
  def _build_from_fluent_connection(
124
127
  self,
125
128
  fluent_connection,
126
129
  scheme_eval: SchemeEval,
127
130
  file_transfer_service: Any | None = None,
131
+ launcher_args: Dict[str, Any] | None = None,
128
132
  ):
129
133
  self._tui_service = self._datamodel_service_tui
130
134
  self._se_service = self._datamodel_service_se
@@ -133,6 +137,7 @@ class Solver(BaseSession):
133
137
  self._system_coupling = None
134
138
  self._fluent_version = None
135
139
  self._bg_session_threads = []
140
+ self._launcher_args = launcher_args
136
141
  self._solution_variable_service = service_creator("svar").create(
137
142
  fluent_connection._channel, fluent_connection._metadata
138
143
  )
@@ -266,7 +271,7 @@ class Solver(BaseSession):
266
271
  "solution/run-calculation/calculate",
267
272
  "solution/run-calculation/dual-time-iterate",
268
273
  ]
269
- if pyfluent.SUPPORT_SOLVER_INTERRUPT:
274
+ if pyfluent.config.support_solver_interrupt:
270
275
  if command.path in interruptible_commands:
271
276
  command._root.solution.run_calculation.interrupt()
272
277
 
@@ -295,10 +300,12 @@ class Solver(BaseSession):
295
300
  bg_session._fluent_connection,
296
301
  bg_session._fluent_connection._connection_interface.scheme_eval,
297
302
  event_type=SolverEvent,
303
+ launcher_args=launcher_args,
298
304
  )
299
305
  self._build_from_fluent_connection(
300
306
  bg_session._fluent_connection,
301
307
  bg_session._fluent_connection._connection_interface.scheme_eval,
308
+ launcher_args=launcher_args,
302
309
  )
303
310
  # TODO temporary fix till set_state at settings root is fixed
304
311
  _set_state_safe(self.settings, state)
@@ -353,16 +360,40 @@ class Solver(BaseSession):
353
360
  raise ex
354
361
 
355
362
  def __dir__(self):
356
- if self._fluent_connection is None:
357
- return ["is_active"]
358
- dir_list = set(list(self.__dict__.keys()) + dir(type(self))) - {
363
+ dir_list = set(super().__dir__()) - {
359
364
  "svar_data",
360
365
  "svar_info",
361
366
  "reduction",
362
- "field_data",
363
- "field_info",
364
- "field_data_streaming",
365
- "start_journal",
366
- "stop_journal",
367
367
  }
368
368
  return sorted(dir_list)
369
+
370
+ def switch_to_meshing(self):
371
+ """Switch to meshing mode and return a meshing session object. Deactivate this
372
+ object's public interface and streaming services.
373
+
374
+ Raises
375
+ ------
376
+ AttributeError
377
+ If beta features are not enabled in Fluent.
378
+
379
+ Returns
380
+ -------
381
+ Meshing
382
+ """
383
+ if not self._is_beta_enabled:
384
+ raise BetaFeaturesNotEnabled("switch_to_meshing")
385
+ from ansys.fluent.core.session_meshing import Meshing
386
+
387
+ self.settings.switch_to_meshing_mode()
388
+ for cb in self._fluent_connection.finalizer_cbs:
389
+ cb()
390
+ meshing_session = Meshing(
391
+ fluent_connection=self._fluent_connection,
392
+ scheme_eval=self.scheme,
393
+ file_transfer_service=self._file_transfer_service,
394
+ )
395
+ self._fluent_connection = None
396
+ self.__doc__ = (
397
+ "The solver session is no longer usable after switching to meshing mode."
398
+ )
399
+ return meshing_session
@@ -44,3 +44,4 @@ class Solver:
44
44
  def write_case(self, file_name: str): ...
45
45
  @property
46
46
  def settings(self) -> settings_root.root: ...
47
+ def enable_beta_features(self): ...
@@ -264,6 +264,7 @@ class SessionBase:
264
264
  @classmethod
265
265
  def from_pim(
266
266
  cls,
267
+ ui_mode: UIMode | str | None = None,
267
268
  graphics_driver: (
268
269
  FluentWindowsGraphicsDriver | FluentLinuxGraphicsDriver | str | None
269
270
  ) = None,
@@ -274,6 +275,7 @@ class SessionBase:
274
275
  start_timeout: int = 60,
275
276
  additional_arguments: str = "",
276
277
  cleanup_on_exit: bool = True,
278
+ dry_run: bool | None = None,
277
279
  start_transcript: bool = True,
278
280
  gpu: bool | None = None,
279
281
  start_watchdog: bool | None = None,
@@ -284,6 +286,8 @@ class SessionBase:
284
286
 
285
287
  Parameters
286
288
  ----------
289
+ ui_mode : UIMode or str, optional
290
+ Defines the user interface mode for Fluent. Options correspond to values in the ``UIMode`` enum.
287
291
  graphics_driver : FluentWindowsGraphicsDriver or FluentLinuxGraphicsDriver
288
292
  Specifies the graphics driver for Fluent. Options are from the ``FluentWindowsGraphicsDriver`` enum
289
293
  (for Windows) or the ``FluentLinuxGraphicsDriver`` enum (for Linux).
@@ -309,6 +313,9 @@ class SessionBase:
309
313
  cleanup_on_exit : bool
310
314
  Determines whether to shut down the connected Fluent session upon exit or when calling
311
315
  the session's `exit()` method. Defaults to True.
316
+ dry_run : bool, optional
317
+ If True, does not launch Fluent but prints configuration information instead. If dry running a
318
+ PIM start, this method will return a configuration dictionary. Defaults to False.
312
319
  start_transcript : bool
313
320
  Indicates whether to start streaming the Fluent transcript in the client. Defaults to True;
314
321
  streaming can be controlled via `transcript.start()` and `transcript.stop()` methods on the session object.
@@ -49,9 +49,9 @@ def allowed_name_error_message(
49
49
  if all(isinstance(item, str) for item in allowed_values) and allowed_values:
50
50
  matches = closest_allowed_names(trial_name, allowed_values)
51
51
  if matches:
52
- message += f"The most similar names are: {', '.join(matches)}."
52
+ message += f"The most similar names are: {', '.join(matches)}"
53
53
  else:
54
- message += f"The allowed values are: {allowed_values}."
54
+ message += f"The allowed values are: {allowed_values}"
55
55
 
56
56
  return message
57
57