ansys-fluent-core 0.27.dev1__py3-none-any.whl → 0.28.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.
- ansys/fluent/core/__init__.py +22 -9
- ansys/fluent/core/_version.py +5 -2
- ansys/fluent/core/codegen/__init__.py +0 -3
- ansys/fluent/core/codegen/allapigen.py +1 -5
- ansys/fluent/core/codegen/builtin_settingsgen.py +44 -10
- ansys/fluent/core/codegen/datamodelgen.py +53 -12
- ansys/fluent/core/codegen/settingsgen.py +21 -12
- ansys/fluent/core/codegen/settingsgen_old.py +2 -2
- ansys/fluent/core/codegen/tuigen.py +1 -1
- ansys/fluent/core/codegen/write_settings_yaml.py +3 -4
- ansys/fluent/core/data_model_cache.py +132 -70
- ansys/fluent/core/docs/README.rst +2 -2
- ansys/fluent/core/examples/downloads.py +3 -5
- ansys/fluent/core/exceptions.py +1 -0
- ansys/fluent/core/file_session.py +59 -131
- ansys/fluent/core/filereader/case_file.py +17 -17
- ansys/fluent/core/filereader/casereader.py +2 -1
- ansys/fluent/core/filereader/data_file.py +7 -7
- ansys/fluent/core/filereader/lispy.py +6 -1
- ansys/fluent/core/fluent_connection.py +35 -7
- ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
- ansys/fluent/core/generated/datamodel_222/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_222/PartManagement.py +28 -28
- ansys/fluent/core/generated/datamodel_222/meshing.py +301 -301
- ansys/fluent/core/generated/datamodel_222/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_231/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_231/PartManagement.py +55 -55
- ansys/fluent/core/generated/datamodel_231/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_231/meshing.py +317 -317
- ansys/fluent/core/generated/datamodel_231/solverworkflow.py +51 -51
- ansys/fluent/core/generated/datamodel_231/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_232/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_232/PartManagement.py +55 -55
- ansys/fluent/core/generated/datamodel_232/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_232/meshing.py +335 -335
- ansys/fluent/core/generated/datamodel_232/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_232/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_241/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_241/PartManagement.py +57 -57
- ansys/fluent/core/generated/datamodel_241/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_241/meshing.py +361 -361
- ansys/fluent/core/generated/datamodel_241/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_241/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_242/MeshingUtilities.py +240 -240
- ansys/fluent/core/generated/datamodel_242/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_242/PartManagement.py +60 -60
- ansys/fluent/core/generated/datamodel_242/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_242/meshing.py +371 -371
- ansys/fluent/core/generated/datamodel_242/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_242/workflow.py +9 -9
- ansys/fluent/core/generated/datamodel_251/MeshingUtilities.py +244 -244
- ansys/fluent/core/generated/datamodel_251/PMFileManagement.py +2 -2
- ansys/fluent/core/generated/datamodel_251/PartManagement.py +60 -60
- ansys/fluent/core/generated/datamodel_251/flicing.py +51 -51
- ansys/fluent/core/generated/datamodel_251/meshing.py +384 -382
- ansys/fluent/core/generated/datamodel_251/preferences.py +7 -0
- ansys/fluent/core/generated/datamodel_251/solverworkflow.py +58 -58
- ansys/fluent/core/generated/datamodel_251/workflow.py +10 -10
- ansys/fluent/core/generated/datamodel_252/MeshingUtilities.py +3664 -0
- ansys/fluent/core/generated/datamodel_252/PMFileManagement.py +288 -0
- ansys/fluent/core/generated/datamodel_252/PartManagement.py +2588 -0
- ansys/fluent/core/generated/datamodel_252/flicing.py +7972 -0
- ansys/fluent/core/generated/datamodel_252/meshing.py +2644 -0
- ansys/fluent/core/generated/datamodel_252/preferences.py +2760 -0
- ansys/fluent/core/generated/datamodel_252/solverworkflow.py +479 -0
- ansys/fluent/core/generated/datamodel_252/workflow.py +466 -0
- ansys/fluent/core/generated/fluent_version_251.py +4 -4
- ansys/fluent/core/generated/fluent_version_252.py +5 -0
- ansys/fluent/core/generated/meshing/tui_251.py +1139 -1179
- ansys/fluent/core/generated/meshing/tui_252.py +10181 -0
- ansys/fluent/core/generated/solver/settings_222.py +3 -3
- ansys/fluent/core/generated/solver/settings_231.py +4 -4
- ansys/fluent/core/generated/solver/settings_232.py +5 -5
- ansys/fluent/core/generated/solver/settings_241.py +5 -5
- ansys/fluent/core/generated/solver/settings_242.py +1185 -1185
- ansys/fluent/core/generated/solver/settings_251.py +1847 -1652
- ansys/fluent/core/generated/solver/settings_251.pyi +237 -211
- ansys/fluent/core/generated/solver/settings_252.py +90369 -0
- ansys/fluent/core/generated/solver/settings_252.pyi +63778 -0
- ansys/fluent/core/generated/solver/settings_builtin.py +612 -1
- ansys/fluent/core/generated/solver/settings_builtin.pyi +235 -0
- ansys/fluent/core/generated/solver/tui_251.py +2283 -2103
- ansys/fluent/core/generated/solver/tui_252.py +37720 -0
- ansys/fluent/core/journaling.py +1 -1
- ansys/fluent/core/launcher/error_handler.py +3 -0
- ansys/fluent/core/launcher/fluent_container.py +5 -0
- ansys/fluent/core/launcher/launcher.py +1 -2
- ansys/fluent/core/launcher/launcher_utils.py +17 -6
- ansys/fluent/core/launcher/process_launch_string.py +3 -3
- ansys/fluent/core/launcher/pyfluent_enums.py +1 -1
- ansys/fluent/core/launcher/slurm_launcher.py +2 -1
- ansys/fluent/core/launcher/standalone_launcher.py +11 -5
- ansys/fluent/core/launcher/watchdog.py +1 -1
- ansys/fluent/core/launcher/watchdog_exec +6 -3
- ansys/fluent/core/logging.py +1 -5
- ansys/fluent/core/parametric.py +6 -3
- ansys/fluent/core/post_objects/meta.py +1 -39
- ansys/fluent/core/post_objects/post_helper.py +4 -3
- ansys/fluent/core/post_objects/post_object_definitions.py +12 -7
- ansys/fluent/core/post_objects/post_objects_container.py +39 -2
- ansys/fluent/core/rpvars.py +2 -1
- ansys/fluent/core/scheduler/machine_list.py +3 -1
- ansys/fluent/core/search.py +109 -262
- ansys/fluent/core/services/__init__.py +3 -0
- ansys/fluent/core/services/api_upgrade.py +1 -0
- ansys/fluent/core/services/batch_ops.py +3 -1
- ansys/fluent/core/services/datamodel_se.py +37 -30
- ansys/fluent/core/services/datamodel_tui.py +8 -3
- ansys/fluent/core/services/deprecated_field_data.py +691 -0
- ansys/fluent/core/services/field_data.py +67 -357
- ansys/fluent/core/services/interceptors.py +6 -4
- ansys/fluent/core/services/reduction.py +1 -2
- ansys/fluent/core/services/scheme_eval.py +2 -3
- ansys/fluent/core/services/solution_variables.py +46 -48
- ansys/fluent/core/session.py +6 -4
- ansys/fluent/core/session_meshing.pyi +5 -0
- ansys/fluent/core/session_pure_meshing.pyi +4 -1
- ansys/fluent/core/session_solver_lite.py +2 -1
- ansys/fluent/core/solver/flobject.py +179 -207
- ansys/fluent/core/solver/flunits.py +65 -56
- ansys/fluent/core/solver/function/reduction.py +9 -29
- ansys/fluent/core/solver/settings_builtin_bases.py +28 -22
- ansys/fluent/core/solver/settings_builtin_data.py +105 -1
- ansys/fluent/core/solver/settings_external.py +0 -28
- ansys/fluent/core/streaming_services/field_data_streaming.py +1 -0
- ansys/fluent/core/streaming_services/monitor_streaming.py +0 -1
- ansys/fluent/core/systemcoupling.py +145 -14
- ansys/fluent/core/utils/__init__.py +18 -2
- ansys/fluent/core/utils/dump_session_data.py +7 -4
- ansys/fluent/core/utils/execution.py +2 -2
- ansys/fluent/core/utils/file_transfer_service.py +37 -42
- ansys/fluent/core/utils/fluent_version.py +20 -2
- ansys/fluent/core/utils/networking.py +39 -1
- ansys/fluent/core/workflow.py +3 -15
- ansys/fluent/tests/conftest.py +89 -7
- ansys/fluent/tests/fluent/test_version/test.py +2 -0
- ansys/fluent/tests/fluent_fixtures.py +195 -0
- ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +7 -7
- ansys/fluent/tests/parametric/test_parametric_workflow.py +14 -4
- ansys/fluent/tests/test_builtin_settings.py +28 -0
- ansys/fluent/tests/test_cad_to_post_ftm.py +1 -3
- ansys/fluent/tests/test_cad_to_post_wtm.py +1 -1
- ansys/fluent/tests/test_casereader.py +1 -1
- ansys/fluent/tests/test_codegen.py +116 -6
- ansys/fluent/tests/test_data_model_cache.py +1 -1
- ansys/fluent/tests/test_datamodel_service.py +14 -19
- ansys/fluent/tests/test_field_data.py +93 -45
- ansys/fluent/tests/test_file_session.py +32 -29
- ansys/fluent/tests/test_flobject.py +16 -58
- ansys/fluent/tests/test_fluent_fixes.py +5 -5
- ansys/fluent/tests/test_fluent_session.py +11 -8
- ansys/fluent/tests/test_fluent_version.py +1 -1
- ansys/fluent/tests/test_launcher.py +22 -5
- ansys/fluent/tests/test_launcher_remote.py +80 -4
- ansys/fluent/tests/test_meshing_utilities.py +93 -44
- ansys/fluent/tests/test_meshing_workflow.py +6 -6
- ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +1 -1
- ansys/fluent/tests/test_new_meshing_workflow.py +42 -3
- ansys/fluent/tests/test_preferences.py +6 -6
- ansys/fluent/tests/test_reduction.py +61 -30
- ansys/fluent/tests/test_rp_vars.py +1 -1
- ansys/fluent/tests/test_search.py +53 -200
- ansys/fluent/tests/test_session.py +18 -13
- ansys/fluent/tests/test_settings_api.py +93 -29
- ansys/fluent/tests/test_settings_reader.py +1 -1
- ansys/fluent/tests/test_solver_monitors.py +1 -1
- ansys/fluent/tests/test_solvermode/test_calculationactivities.py +4 -4
- ansys/fluent/tests/test_solvermode/test_controls.py +3 -3
- ansys/fluent/tests/test_solvermode/test_methods.py +1 -1
- ansys/fluent/tests/test_solvermode/test_models.py +3 -3
- ansys/fluent/tests/test_systemcoupling.py +33 -5
- ansys/fluent/tests/test_topy.py +2 -2
- ansys/fluent/tests/test_tui_api.py +5 -5
- ansys/fluent/tests/test_utils.py +1 -1
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/METADATA +6 -17
- ansys_fluent_core-0.28.dev0.dist-info/RECORD +291 -0
- ansys/fluent/core/generated/api_tree_222.pickle +0 -0
- ansys/fluent/core/generated/api_tree_231.pickle +0 -0
- ansys/fluent/core/generated/api_tree_232.pickle +0 -0
- ansys/fluent/core/generated/api_tree_241.pickle +0 -0
- ansys/fluent/core/generated/api_tree_242.pickle +0 -0
- ansys/fluent/core/generated/api_tree_251.pickle +0 -0
- ansys/fluent/tests/test_tests_util.py +0 -47
- ansys/fluent/tests/util/__init__.py +0 -38
- ansys_fluent_core-0.27.dev1.dist-info/RECORD +0 -283
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/AUTHORS +0 -0
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/LICENSE +0 -0
- {ansys_fluent_core-0.27.dev1.dist-info → ansys_fluent_core-0.28.dev0.dist-info}/WHEEL +0 -0
|
@@ -7,61 +7,62 @@ Example
|
|
|
7
7
|
The following code is employed to translate the source data
|
|
8
8
|
into Python data structures:
|
|
9
9
|
|
|
10
|
-
from ansys.fluent.core.filereader import lispy
|
|
11
|
-
from ansys.units import Quantity, Unit
|
|
12
|
-
from ansys.units.quantity import get_si_value
|
|
13
|
-
import re
|
|
14
|
-
from pprint import pprint
|
|
15
|
-
|
|
16
|
-
fl_unit_re_subs = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
fl_unit_subs = {'%': ''}
|
|
23
|
-
|
|
24
|
-
def replace_units(match):
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def substitute_fl_units_with_py_units(fl_units_dict):
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def remove_unhandled_units(fl_units_dict):
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def make_python_fl_unit_table(scheme_unit_table):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
10
|
+
>>> from ansys.fluent.core.filereader import lispy
|
|
11
|
+
>>> from ansys.units import Quantity, Unit
|
|
12
|
+
>>> from ansys.units.quantity import get_si_value
|
|
13
|
+
>>> import re
|
|
14
|
+
>>> from pprint import pprint
|
|
15
|
+
>>>
|
|
16
|
+
>>> fl_unit_re_subs = {
|
|
17
|
+
... 'deg': 'radian',
|
|
18
|
+
... 'rad': 'radian',
|
|
19
|
+
... 'Ohm': 'ohm'
|
|
20
|
+
... }
|
|
21
|
+
>>>
|
|
22
|
+
>>> fl_unit_subs = {'%': ''}
|
|
23
|
+
>>>
|
|
24
|
+
>>> def replace_units(match):
|
|
25
|
+
... return fl_unit_re_subs[match.group(0)]
|
|
26
|
+
...
|
|
27
|
+
>>> def substitute_fl_units_with_py_units(fl_units_dict):
|
|
28
|
+
... subs = {}
|
|
29
|
+
... for k, v in fl_units_dict.items():
|
|
30
|
+
... new_val = re.sub('|'.join(r'\b%s\b' % re.escape(s) for s in fl_unit_re_subs), replace_units, v)
|
|
31
|
+
... if new_val != v:
|
|
32
|
+
... subs[k] = new_val
|
|
33
|
+
... else:
|
|
34
|
+
... new_val = fl_unit_subs.get(v, None)
|
|
35
|
+
... if new_val is not None:
|
|
36
|
+
... subs[k] = new_val
|
|
37
|
+
... print("Substitutions:")
|
|
38
|
+
... for k, v in subs.items():
|
|
39
|
+
... print(f"'{fl_units_dict[k]}' -> '{v}' for '{k}'")
|
|
40
|
+
... fl_units_dict.update(subs)
|
|
41
|
+
... return fl_units_dict
|
|
42
|
+
...
|
|
43
|
+
>>> def remove_unhandled_units(fl_units_dict):
|
|
44
|
+
... not_si = {}
|
|
45
|
+
... unhandled = {}
|
|
46
|
+
... for k, v in fl_units_dict.items():
|
|
47
|
+
... try:
|
|
48
|
+
... Unit(v)
|
|
49
|
+
... q = Quantity(1.0, v)
|
|
50
|
+
... if get_si_value(q) != 1.0:
|
|
51
|
+
... not_si[k] = v
|
|
52
|
+
... except Exception:
|
|
53
|
+
... unhandled[k] = v
|
|
54
|
+
... print("Not SI:")
|
|
55
|
+
... pprint(not_si)
|
|
56
|
+
... print("Unhandled:")
|
|
57
|
+
... pprint(unhandled)
|
|
58
|
+
... [fl_units_dict.pop(key) for key in list(not_si) + list(unhandled)]
|
|
59
|
+
... return fl_units_dict
|
|
60
|
+
...
|
|
61
|
+
>>> def make_python_fl_unit_table(scheme_unit_table):
|
|
62
|
+
... as_list = lispy.parse(scheme_unit_table)[1][1]
|
|
63
|
+
... as_dict = { x[0]:x[1][3].split('"')[1] for x in as_list }
|
|
64
|
+
... return remove_unhandled_units(substitute_fl_units_with_py_units(as_dict))
|
|
65
|
+
...
|
|
65
66
|
|
|
66
67
|
Output from most recent run to generate the table below:
|
|
67
68
|
|
|
@@ -103,6 +104,8 @@ Unhandled:
|
|
|
103
104
|
|
|
104
105
|
from __future__ import annotations
|
|
105
106
|
|
|
107
|
+
from typing import TypeVar
|
|
108
|
+
|
|
106
109
|
_fl_unit_table = {
|
|
107
110
|
"acceleration": "m s^-2",
|
|
108
111
|
"angle": "radian",
|
|
@@ -223,6 +226,7 @@ class InvalidQuantityType(TypeError):
|
|
|
223
226
|
self,
|
|
224
227
|
quantity,
|
|
225
228
|
) -> None:
|
|
229
|
+
"""Initialize InvalidQuantityType."""
|
|
226
230
|
super().__init__(
|
|
227
231
|
f"The specified quantity, '{quantity}' is not a string ({type(quantity)})."
|
|
228
232
|
)
|
|
@@ -235,19 +239,24 @@ class UnitsNotDefinedForQuantity(ValueError):
|
|
|
235
239
|
self,
|
|
236
240
|
quantity: str,
|
|
237
241
|
) -> None:
|
|
242
|
+
"""Initialize UnitsNotDefinedForQuantity."""
|
|
238
243
|
super().__init__(
|
|
239
244
|
f"The units for the specified quantity, '{quantity}' are not defined in PyFluent."
|
|
240
245
|
)
|
|
241
246
|
|
|
242
247
|
|
|
248
|
+
QuantityT = TypeVar("QuantityT")
|
|
249
|
+
|
|
250
|
+
|
|
243
251
|
class UnhandledQuantity(RuntimeError):
|
|
244
252
|
"""Raised on an attempt to get an unhandled Quantity."""
|
|
245
253
|
|
|
246
254
|
def __init__(
|
|
247
255
|
self,
|
|
248
256
|
path: str,
|
|
249
|
-
quantity:
|
|
257
|
+
quantity: QuantityT,
|
|
250
258
|
) -> None:
|
|
259
|
+
"""Initialize UnhandledQuantity."""
|
|
251
260
|
super().__init__(
|
|
252
261
|
f"Could not handle the quantity, '{quantity}' for the path, {path}."
|
|
253
262
|
)
|
|
@@ -6,7 +6,7 @@ expr parameter is not relevant to all reductions functions.
|
|
|
6
6
|
|
|
7
7
|
Parameters
|
|
8
8
|
----------
|
|
9
|
-
|
|
9
|
+
expression : Any
|
|
10
10
|
Expression that can be either a string or an
|
|
11
11
|
instance of a specific settings API named_expressions
|
|
12
12
|
object. The expression can be a field variable or a
|
|
@@ -197,7 +197,7 @@ def _extent_expression(
|
|
|
197
197
|
numerator += val * extent
|
|
198
198
|
denominator += extent
|
|
199
199
|
except TypeError:
|
|
200
|
-
if
|
|
200
|
+
if isinstance(val, list):
|
|
201
201
|
numerator += np.multiply(val, extent)
|
|
202
202
|
denominator += extent
|
|
203
203
|
else:
|
|
@@ -217,7 +217,7 @@ def _extent_moment_vector(f_string, expr, locations, ctxt):
|
|
|
217
217
|
total += array(extent)
|
|
218
218
|
except TypeError:
|
|
219
219
|
raise RuntimeError(extent)
|
|
220
|
-
return
|
|
220
|
+
return tuple(total)
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
def _extent_average(extent_name, expr, locations, ctxt):
|
|
@@ -251,27 +251,7 @@ def _extent_vectors(extent_name, locations, ctxt):
|
|
|
251
251
|
total += array(extent)
|
|
252
252
|
except TypeError:
|
|
253
253
|
raise RuntimeError(extent)
|
|
254
|
-
return
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
class _Vector:
|
|
258
|
-
def __init__(self, np_arr):
|
|
259
|
-
self.array = np_arr
|
|
260
|
-
|
|
261
|
-
@property
|
|
262
|
-
def x(self):
|
|
263
|
-
"""Get X vector."""
|
|
264
|
-
return self.array[0]
|
|
265
|
-
|
|
266
|
-
@property
|
|
267
|
-
def y(self):
|
|
268
|
-
"""Get Y vector."""
|
|
269
|
-
return self.array[1]
|
|
270
|
-
|
|
271
|
-
@property
|
|
272
|
-
def z(self):
|
|
273
|
-
"""Get Z vector."""
|
|
274
|
-
return self.array[2]
|
|
254
|
+
return tuple(total)
|
|
275
255
|
|
|
276
256
|
|
|
277
257
|
def _limit(limit, expr, locations, ctxt):
|
|
@@ -401,7 +381,7 @@ def centroid(locations, ctxt=None):
|
|
|
401
381
|
ctxt : Any, optional
|
|
402
382
|
Returns
|
|
403
383
|
-------
|
|
404
|
-
|
|
384
|
+
tuple
|
|
405
385
|
"""
|
|
406
386
|
return _extent_vectors("Centroid", locations, ctxt)
|
|
407
387
|
|
|
@@ -416,7 +396,7 @@ def force(locations, ctxt=None):
|
|
|
416
396
|
ctxt : Any, optional
|
|
417
397
|
Returns
|
|
418
398
|
-------
|
|
419
|
-
|
|
399
|
+
tuple
|
|
420
400
|
"""
|
|
421
401
|
return _extent_vectors("Force", locations, ctxt)
|
|
422
402
|
|
|
@@ -431,7 +411,7 @@ def pressure_force(locations, ctxt=None):
|
|
|
431
411
|
ctxt : Any, optional
|
|
432
412
|
Returns
|
|
433
413
|
-------
|
|
434
|
-
|
|
414
|
+
tuple
|
|
435
415
|
"""
|
|
436
416
|
return _extent_vectors("PressureForce", locations, ctxt)
|
|
437
417
|
|
|
@@ -446,7 +426,7 @@ def viscous_force(locations, ctxt=None):
|
|
|
446
426
|
ctxt : Any, optional
|
|
447
427
|
Returns
|
|
448
428
|
-------
|
|
449
|
-
|
|
429
|
+
tuple
|
|
450
430
|
"""
|
|
451
431
|
return _extent_vectors("ViscousForce", locations, ctxt)
|
|
452
432
|
|
|
@@ -462,7 +442,7 @@ def moment(expression, locations, ctxt=None):
|
|
|
462
442
|
ctxt : Any, optional
|
|
463
443
|
Returns
|
|
464
444
|
-------
|
|
465
|
-
|
|
445
|
+
tuple
|
|
466
446
|
"""
|
|
467
447
|
return _extent_moment_vector("Moment", expression, locations, ctxt)
|
|
468
448
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import Protocol, runtime_checkable
|
|
4
4
|
|
|
5
|
-
from ansys.fluent.core.solver.flobject import SettingsBase
|
|
5
|
+
from ansys.fluent.core.solver.flobject import NamedObject, SettingsBase
|
|
6
6
|
from ansys.fluent.core.solver.settings_builtin_data import DATA
|
|
7
7
|
from ansys.fluent.core.utils.fluent_version import FluentVersion
|
|
8
8
|
|
|
@@ -28,55 +28,60 @@ def _get_settings_root(settings_source: SettingsBase | Solver):
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def _get_settings_obj(
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
def _get_settings_obj(settings_root, builtin_settings_obj):
|
|
32
|
+
builtin_cls_name = builtin_settings_obj.__class__.__name__
|
|
33
|
+
obj = settings_root
|
|
34
|
+
path = DATA[builtin_cls_name][1]
|
|
34
35
|
if isinstance(path, dict):
|
|
35
36
|
version = FluentVersion(obj.version)
|
|
36
37
|
path = path.get(version)
|
|
37
38
|
if path is None:
|
|
38
39
|
raise RuntimeError(
|
|
39
|
-
f"{
|
|
40
|
+
f"{builtin_cls_name} is not supported in Fluent version {version}."
|
|
40
41
|
)
|
|
41
|
-
|
|
42
|
+
comps = path.split(".")
|
|
43
|
+
for i, comp in enumerate(comps):
|
|
42
44
|
obj = SettingsBase.__getattribute__(obj, comp) # bypass InactiveObjectError
|
|
45
|
+
if i < len(comps) - 1 and isinstance(obj, NamedObject):
|
|
46
|
+
obj_name = getattr(builtin_settings_obj, comp)
|
|
47
|
+
obj = obj[obj_name]
|
|
43
48
|
return obj
|
|
44
49
|
|
|
45
50
|
|
|
46
51
|
class _SingletonSetting:
|
|
47
52
|
# Covers both groups and named-object containers
|
|
48
|
-
def __init__(self, settings_source: SettingsBase | Solver | None = None):
|
|
49
|
-
self.__dict__.update(dict(settings_source=None))
|
|
53
|
+
def __init__(self, settings_source: SettingsBase | Solver | None = None, **kwargs):
|
|
54
|
+
self.__dict__.update(dict(settings_source=None) | kwargs)
|
|
50
55
|
if settings_source is not None:
|
|
51
56
|
self.settings_source = settings_source
|
|
52
57
|
|
|
53
58
|
def __setattr__(self, name, value):
|
|
54
59
|
if name == "settings_source":
|
|
55
|
-
|
|
60
|
+
settings_root = _get_settings_root(value)
|
|
61
|
+
obj = _get_settings_obj(settings_root, self)
|
|
56
62
|
self.__class__ = obj.__class__
|
|
57
63
|
self.__dict__.clear()
|
|
58
|
-
self.__dict__.update(
|
|
59
|
-
obj.__dict__ | dict(settings_source=_get_settings_root(value))
|
|
60
|
-
)
|
|
64
|
+
self.__dict__.update(obj.__dict__ | dict(settings_source=settings_root))
|
|
61
65
|
else:
|
|
62
66
|
super().__setattr__(name, value)
|
|
63
67
|
|
|
64
68
|
|
|
65
69
|
class _NonCreatableNamedObjectSetting:
|
|
66
|
-
def __init__(
|
|
67
|
-
self
|
|
70
|
+
def __init__(
|
|
71
|
+
self, name: str, settings_source: SettingsBase | Solver | None = None, **kwargs
|
|
72
|
+
):
|
|
73
|
+
self.__dict__.update(dict(settings_source=None, name=name) | kwargs)
|
|
68
74
|
if settings_source is not None:
|
|
69
75
|
self.settings_source = settings_source
|
|
70
76
|
|
|
71
77
|
def __setattr__(self, name, value):
|
|
72
78
|
if name == "settings_source":
|
|
73
|
-
|
|
79
|
+
settings_root = _get_settings_root(value)
|
|
80
|
+
obj = _get_settings_obj(settings_root, self)
|
|
74
81
|
obj = obj[self.name]
|
|
75
82
|
self.__class__ = obj.__class__
|
|
76
83
|
self.__dict__.clear()
|
|
77
|
-
self.__dict__.update(
|
|
78
|
-
obj.__dict__ | dict(settings_source=_get_settings_root(value))
|
|
79
|
-
)
|
|
84
|
+
self.__dict__.update(obj.__dict__ | dict(settings_source=settings_root))
|
|
80
85
|
else:
|
|
81
86
|
super().__setattr__(name, value)
|
|
82
87
|
|
|
@@ -87,18 +92,21 @@ class _CreatableNamedObjectSetting:
|
|
|
87
92
|
settings_source: SettingsBase | Solver | None = None,
|
|
88
93
|
name: str | None = None,
|
|
89
94
|
new_instance_name: str | None = None,
|
|
95
|
+
**kwargs,
|
|
90
96
|
):
|
|
91
97
|
if name and new_instance_name:
|
|
92
98
|
raise ValueError("Cannot specify both name and new_instance_name.")
|
|
93
99
|
self.__dict__.update(
|
|
94
100
|
dict(settings_source=None, name=name, new_instance_name=new_instance_name)
|
|
101
|
+
| kwargs
|
|
95
102
|
)
|
|
96
103
|
if settings_source is not None:
|
|
97
104
|
self.settings_source = settings_source
|
|
98
105
|
|
|
99
106
|
def __setattr__(self, name, value):
|
|
100
107
|
if name == "settings_source":
|
|
101
|
-
|
|
108
|
+
settings_root = _get_settings_root(value)
|
|
109
|
+
obj = _get_settings_obj(settings_root, self)
|
|
102
110
|
if self.name:
|
|
103
111
|
obj = obj[self.name]
|
|
104
112
|
elif self.new_instance_name:
|
|
@@ -107,8 +115,6 @@ class _CreatableNamedObjectSetting:
|
|
|
107
115
|
obj = obj.create()
|
|
108
116
|
self.__class__ = obj.__class__
|
|
109
117
|
self.__dict__.clear()
|
|
110
|
-
self.__dict__.update(
|
|
111
|
-
obj.__dict__ | dict(settings_source=_get_settings_root(value))
|
|
112
|
-
)
|
|
118
|
+
self.__dict__.update(obj.__dict__ | dict(settings_source=settings_root))
|
|
113
119
|
else:
|
|
114
120
|
super().__setattr__(name, value)
|