From b59338d7c20a2fa5d7a50998b34686946d324f98 Mon Sep 17 00:00:00 2001 From: Mainak Kundu Date: Wed, 11 May 2022 19:09:48 +0530 Subject: [PATCH] Update API hierarchy --- README.rst | 8 +- doc/source/api/core/meshing/index.rst | 14 +- doc/source/api/core/solver/settings.rst | 11 +- doc/source/api/post/index.rst | 16 +- doc/source/getting_started/index.rst | 8 +- doc/source/users_guide/index.rst | 3 +- examples/00-fluent/exhaust_system.py | 234 ++++++++++-------- examples/00-fluent/mixing_elbow.py | 124 +++++----- .../parametric_static_mixer_1.py | 57 +++-- .../parametric_static_mixer_2.py | 5 +- .../post_processing_exhaust_manifold.py | 5 +- src/ansys/fluent/core/meta.py | 2 +- src/ansys/fluent/core/session.py | 135 ++++++---- .../fluent/core/utils/async_execution.py | 6 +- src/ansys/fluent/parametric/__init__.py | 8 +- tests/test_cad_to_post_ftm.py | 61 ++--- tests/test_cad_to_post_wtm.py | 69 +++--- tests/test_meshing_workflow.py | 4 +- tests/test_settings_api.py | 38 +-- tests/test_tui_api.py | 4 +- tests/util/meshing_workflow.py | 16 +- 21 files changed, 459 insertions(+), 369 deletions(-) diff --git a/README.rst b/README.rst index 8d660f49eb4f..68c4de61368a 100644 --- a/README.rst +++ b/README.rst @@ -83,10 +83,10 @@ You can run Fluent TUI commands using the ``session.tui`` interface: .. code:: python - session.tui.solver.file.read_case(case_file_name='elbow.cas.h5') - session.tui.solver.define.models.unsteady_2nd_order("yes") - session.tui.solver.solve.initialize.initialize_flow() - session.tui.solver.solve.dual_time_iterate(2, 3) + session.solver.tui.file.read_case(case_file_name='elbow.cas.h5') + session.solver.tui.define.models.unsteady_2nd_order("yes") + session.solver.tui.solve.initialize.initialize_flow() + session.solver.tui.solve.dual_time_iterate(2, 3) In addition to all TUI commands being available there are the ``parametric`` and ``post`` packages. The ``parametric`` package provides access to Fluent's diff --git a/doc/source/api/core/meshing/index.rst b/doc/source/api/core/meshing/index.rst index 2ecac1220e67..b90cfec4a071 100644 --- a/doc/source/api/core/meshing/index.rst +++ b/doc/source/api/core/meshing/index.rst @@ -13,10 +13,10 @@ Workflow Example import ansys.fluent.core as pyfluent session = pyfluent.launch_fluent(meshing_mode=True) session.start_transcript() - session.workflow.InitializeWorkflow(WorkflowType='Watertight Geometry') - session.workflow.TaskObject['Import Geometry'].Arguments = dict(FileName='cylinder.agdb') - session.workflow.TaskObject['Import Geometry'].Execute() - session.tui.meshing.mesh.check_mesh() + session.meshing.workflow.InitializeWorkflow(WorkflowType='Watertight Geometry') + session.meshing.workflow.TaskObject['Import Geometry'].Arguments = dict(FileName='cylinder.agdb') + session.meshing.workflow.TaskObject['Import Geometry'].Execute() + session.meshing.tui.mesh.check_mesh() exit() TUI Commands Example @@ -26,9 +26,9 @@ TUI Commands Example import ansys.fluent.core as pyfluent session = pyfluent.launch_fluent(meshing_mode=True) - session.tui.meshing.file.read_case("elbow.cas.gz") - session.tui.meshing.switch_to_solution_mode("yes") - session.tui.solver.define.models.unsteady_2nd_order("yes") + session.meshing.tui.file.read_case("elbow.cas.gz") + session.meshing.tui.switch_to_solution_mode("yes") + session.solver.tui.define.models.unsteady_2nd_order("yes") exit() .. currentmodule:: ansys.fluent.core.meshing diff --git a/doc/source/api/core/solver/settings.rst b/doc/source/api/core/solver/settings.rst index 51e033eb7b57..6110e893f089 100644 --- a/doc/source/api/core/solver/settings.rst +++ b/doc/source/api/core/solver/settings.rst @@ -12,18 +12,17 @@ issue commands with a hierarchy of objects. Top-level Objects ----------------- -The top-level settings object can be accessed by executing the -``get_settings_root`` method on a session object. +The top-level settings object is available as the ``root`` property of session.solver. .. code-block:: >>> import ansys.fluent.core as pyfluent >>> session = pyfluent.launch_fluent() - >>> root = session.get_settings_root() + >>> root = session.solver.root -The root object contains attributes such as ``file``, ``setup``, ``solution`` -and ``results``. These objects are also instances of 'settings' objects and -roughly mirror the outline view in Fluent. +The root object contains attributes such as ``file``, ``setup``, +``solution`` and ``results``. These objects are also instances of 'settings' +objects and roughly mirror the outline view in Fluent. Types of Settings Objects ------------------------- diff --git a/doc/source/api/post/index.rst b/doc/source/api/post/index.rst index cbfd3bc8f682..aef0378c981b 100644 --- a/doc/source/api/post/index.rst +++ b/doc/source/api/post/index.rst @@ -14,14 +14,14 @@ written to a file using standard Fluent commands. .. code:: python - session.tui.solver.display.objects.contour['contour-1'] = {'boundary_values': True, 'color_map': {'color': 'field-velocity', 'font_automatic': True, 'font_name': 'Helvetica', 'font_size': 0.032, 'format': '%0.2e', 'length': 0.54, 'log_scale': False, 'position': 1, 'show_all': True, 'size': 100, 'user_skip': 9, 'visible': True, 'width': 6.0}, 'coloring': {'smooth': False}, 'contour_lines': False, 'display_state_name': 'None', 'draw_mesh': False, 'field': 'pressure', 'filled': True, 'mesh_object': '', 'node_values': True, 'range_option': {'auto_range_on': {'global_range': True}}, 'surfaces_list': [2, 5]} - session.tui.solver.display.objects.contour['contour-1']() - session.tui.solver.display.objects.contour['contour-1'].field.set_state('velocity-magnitude') - session.tui.solver.display.objects.contour['contour-1'].field() - session.tui.solver.display.objects.contour['contour-1'].color_map.size.set_state(80.0) - session.tui.solver.display.objects.contour['contour-1'].color_map.size() - session.tui.solver.display.objects.contour['contour-1'].rename('my-contour') - del session.tui.solver.display.objects.contour['my-contour'] + session.solver.tui.display.objects.contour['contour-1'] = {'boundary_values': True, 'color_map': {'color': 'field-velocity', 'font_automatic': True, 'font_name': 'Helvetica', 'font_size': 0.032, 'format': '%0.2e', 'length': 0.54, 'log_scale': False, 'position': 1, 'show_all': True, 'size': 100, 'user_skip': 9, 'visible': True, 'width': 6.0}, 'coloring': {'smooth': False}, 'contour_lines': False, 'display_state_name': 'None', 'draw_mesh': False, 'field': 'pressure', 'filled': True, 'mesh_object': '', 'node_values': True, 'range_option': {'auto_range_on': {'global_range': True}}, 'surfaces_list': [2, 5]} + session.solver.tui.display.objects.contour['contour-1']() + session.solver.tui.display.objects.contour['contour-1'].field.set_state('velocity-magnitude') + session.solver.tui.display.objects.contour['contour-1'].field() + session.solver.tui.display.objects.contour['contour-1'].color_map.size.set_state(80.0) + session.solver.tui.display.objects.contour['contour-1'].color_map.size() + session.solver.tui.display.objects.contour['contour-1'].rename('my-contour') + del session.solver.tui.display.objects.contour['my-contour'] PyVista Example (Graphics) -------------------------- diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst index 317ca5a7747e..19424d1ff3d2 100644 --- a/doc/source/getting_started/index.rst +++ b/doc/source/getting_started/index.rst @@ -72,10 +72,10 @@ solver: .. code:: python - session.tui.solver.file.read_case(case_file_name='elbow.cas.h5') - session.tui.solver.define.models.unsteady_2nd_order("yes") - session.tui.solver.solve.initialize.initialize_flow() - session.tui.solver.solve.dual_time_iterate(2, 3) + session.solver.tui.file.read_case(case_file_name='elbow.cas.h5') + session.solver.tui.define.models.unsteady_2nd_order("yes") + session.solver.tui.solve.initialize.initialize_flow() + session.solver.tui.solve.dual_time_iterate(2, 3) In addition to all TUI commands being available there are the ``parametric`` and ``post`` packages. The ``parametric`` package provides access to Fluent's diff --git a/doc/source/users_guide/index.rst b/doc/source/users_guide/index.rst index 72afe625f956..ab6800ba156c 100644 --- a/doc/source/users_guide/index.rst +++ b/doc/source/users_guide/index.rst @@ -46,8 +46,7 @@ Fluent capabilities. .. code:: - settings = session.get_settings_root() - settings.setup.models.energy.enabled = True + session.solver.root.setup.models.energy.enabled = True + The 'datamodel' module is a Python interface to access the datamodel-driven aspects of Fluent, such as the meshing workflows. diff --git a/examples/00-fluent/exhaust_system.py b/examples/00-fluent/exhaust_system.py index 650bfd30e47c..4ceea2707d2f 100644 --- a/examples/00-fluent/exhaust_system.py +++ b/examples/00-fluent/exhaust_system.py @@ -56,17 +56,17 @@ ############################################################################### # Select the Fault Tolerant Meshing Workflow -session.workflow.InitializeWorkflow(WorkflowType="Fault-tolerant Meshing") +session.meshing.workflow.InitializeWorkflow(WorkflowType="Fault-tolerant Meshing") ############################################################################### # Import the CAD geometry (exhaust_system.fmd). Perform some selective part # management. -session.part_management.InputFileChanged( +session.meshing.PartManagement.InputFileChanged( FilePath=import_filename, IgnoreSolidNames=False, PartPerBody=False ) -session.PMFileManagement.FileManager.LoadFiles() -session.part_management.Node["Meshing Model"].Copy( +session.meshing.PMFileManagement.FileManager.LoadFiles() +session.meshing.PartManagement.Node["Meshing Model"].Copy( Paths=[ "/dirty_manifold-for-wrapper," + "1/dirty_manifold-for-wrapper,1/main,1", "/dirty_manifold-for-wrapper," + "1/dirty_manifold-for-wrapper,1/flow-pipe,1", @@ -75,10 +75,12 @@ "/dirty_manifold-for-wrapper," + "1/dirty_manifold-for-wrapper,1/object1,1", ] ) -session.part_management.ObjectSetting["DefaultObjectSetting"].OneZonePer.setState( - "part" -) -session.workflow.TaskObject["Import CAD and Part Management"].Arguments.setState( +session.meshing.PartManagement.ObjectSetting[ + "DefaultObjectSetting" +].OneZonePer.setState("part") +session.meshing.workflow.TaskObject[ + "Import CAD and Part Management" +].Arguments.setState( { "Context": 0, "CreateObjectPer": "Custom", @@ -92,22 +94,22 @@ }, } ) -session.workflow.TaskObject["Import CAD and Part Management"].Execute() +session.meshing.workflow.TaskObject["Import CAD and Part Management"].Execute() ############################################################################### # Provide a description for the geometry and the flow characteristics. -session.workflow.TaskObject["Describe Geometry and Flow"].Arguments.setState( +session.meshing.workflow.TaskObject["Describe Geometry and Flow"].Arguments.setState( { "AddEnclosure": "No", "CloseCaps": "Yes", "FlowType": "Internal flow through the object", } ) -session.workflow.TaskObject["Describe Geometry and Flow"].UpdateChildTasks( +session.meshing.workflow.TaskObject["Describe Geometry and Flow"].UpdateChildTasks( SetupTypeChanged=False ) -session.workflow.TaskObject["Describe Geometry and Flow"].Arguments.setState( +session.meshing.workflow.TaskObject["Describe Geometry and Flow"].Arguments.setState( { "AddEnclosure": "No", "CloseCaps": "Yes", @@ -118,15 +120,17 @@ "FlowType": "Internal flow through the object", } ) -session.workflow.TaskObject["Describe Geometry and Flow"].UpdateChildTasks( +session.meshing.workflow.TaskObject["Describe Geometry and Flow"].UpdateChildTasks( SetupTypeChanged=False ) -session.workflow.TaskObject["Describe Geometry and Flow"].Execute() +session.meshing.workflow.TaskObject["Describe Geometry and Flow"].Execute() ############################################################################### # Cover any openings in your geometry. -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "CreatePatchPreferences": { "ShowCreatePatchPreferences": False, @@ -136,7 +140,9 @@ "ZoneSelectionList": ["inlet.1"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "CreatePatchPreferences": { "ShowCreatePatchPreferences": False, @@ -156,19 +162,27 @@ "ZoneSelectionList": ["inlet.1"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() - -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].InsertCompoundChildTask() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState({}) -session.workflow.TaskObject["inlet-1"].Execute() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() + +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].InsertCompoundChildTask() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState({}) +session.meshing.workflow.TaskObject["inlet-1"].Execute() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "inlet-2", "SelectionType": "zone", "ZoneSelectionList": ["inlet.2"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "inlet-2", "SelectionType": "zone", @@ -185,19 +199,27 @@ "ZoneSelectionList": ["inlet.2"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() - -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].InsertCompoundChildTask() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState({}) -session.workflow.TaskObject["inlet-2"].Execute() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() + +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].InsertCompoundChildTask() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState({}) +session.meshing.workflow.TaskObject["inlet-2"].Execute() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "inlet-3", "SelectionType": "zone", "ZoneSelectionList": ["inlet"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "inlet-3", "SelectionType": "zone", @@ -214,12 +236,18 @@ "ZoneSelectionList": ["inlet"], } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() - -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].InsertCompoundChildTask() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState({}) -session.workflow.TaskObject["inlet-3"].Execute() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() + +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].InsertCompoundChildTask() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState({}) +session.meshing.workflow.TaskObject["inlet-3"].Execute() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "outlet-1", "SelectionType": "zone", @@ -227,7 +255,9 @@ "ZoneType": "pressure-outlet", } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState( { "PatchName": "outlet-1", "SelectionType": "zone", @@ -245,40 +275,44 @@ "ZoneType": "pressure-outlet", } ) -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() +session.meshing.workflow.TaskObject["Enclose Fluid Regions (Capping)"].AddChildToTask() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].InsertCompoundChildTask() -session.workflow.TaskObject["Enclose Fluid Regions (Capping)"].Arguments.setState({}) -session.workflow.TaskObject["outlet-1"].Execute() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].InsertCompoundChildTask() +session.meshing.workflow.TaskObject[ + "Enclose Fluid Regions (Capping)" +].Arguments.setState({}) +session.meshing.workflow.TaskObject["outlet-1"].Execute() ############################################################################### # Extract edge features. -session.workflow.TaskObject["Extract Edge Features"].Arguments.setState( +session.meshing.workflow.TaskObject["Extract Edge Features"].Arguments.setState( { "ExtractMethodType": "Intersection Loops", "ObjectSelectionList": ["flow_pipe", "main"], } ) -session.workflow.TaskObject["Extract Edge Features"].AddChildToTask() +session.meshing.workflow.TaskObject["Extract Edge Features"].AddChildToTask() -session.workflow.TaskObject["Extract Edge Features"].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["Extract Edge Features"].InsertCompoundChildTask() -session.workflow.TaskObject["edge-group-1"].Arguments.setState( +session.meshing.workflow.TaskObject["edge-group-1"].Arguments.setState( { "ExtractEdgesName": "edge-group-1", "ExtractMethodType": "Intersection Loops", "ObjectSelectionList": ["flow_pipe", "main"], } ) -session.workflow.TaskObject["Extract Edge Features"].Arguments.setState({}) +session.meshing.workflow.TaskObject["Extract Edge Features"].Arguments.setState({}) -session.workflow.TaskObject["edge-group-1"].Execute() +session.meshing.workflow.TaskObject["edge-group-1"].Execute() ############################################################################### # Identify regions. -session.workflow.TaskObject["Identify Regions"].Arguments.setState( +session.meshing.workflow.TaskObject["Identify Regions"].Arguments.setState( { "SelectionType": "zone", "X": 377.322045740589, @@ -287,7 +321,7 @@ "ZoneSelectionList": ["main.1"], } ) -session.workflow.TaskObject["Identify Regions"].Arguments.setState( +session.meshing.workflow.TaskObject["Identify Regions"].Arguments.setState( { "SelectionType": "zone", "X": 377.322045740589, @@ -306,11 +340,11 @@ "ZoneSelectionList": ["main.1"], } ) -session.workflow.TaskObject["Identify Regions"].AddChildToTask() +session.meshing.workflow.TaskObject["Identify Regions"].AddChildToTask() -session.workflow.TaskObject["Identify Regions"].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["Identify Regions"].InsertCompoundChildTask() -session.workflow.TaskObject["fluid-region-1"].Arguments.setState( +session.meshing.workflow.TaskObject["fluid-region-1"].Arguments.setState( { "MaterialPointsName": "fluid-region-1", "SelectionType": "zone", @@ -330,10 +364,10 @@ "ZoneSelectionList": ["main.1"], } ) -session.workflow.TaskObject["Identify Regions"].Arguments.setState({}) +session.meshing.workflow.TaskObject["Identify Regions"].Arguments.setState({}) -session.workflow.TaskObject["fluid-region-1"].Execute() -session.workflow.TaskObject["Identify Regions"].Arguments.setState( +session.meshing.workflow.TaskObject["fluid-region-1"].Execute() +session.meshing.workflow.TaskObject["Identify Regions"].Arguments.setState( { "MaterialPointsName": "void-region-1", "NewRegionType": "void", @@ -343,18 +377,18 @@ "Z": -161.1700719416913, } ) -session.workflow.TaskObject["Identify Regions"].AddChildToTask() +session.meshing.workflow.TaskObject["Identify Regions"].AddChildToTask() -session.workflow.TaskObject["Identify Regions"].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["Identify Regions"].InsertCompoundChildTask() -session.workflow.TaskObject["Identify Regions"].Arguments.setState({}) +session.meshing.workflow.TaskObject["Identify Regions"].Arguments.setState({}) -session.workflow.TaskObject["void-region-1"].Execute() +session.meshing.workflow.TaskObject["void-region-1"].Execute() ############################################################################### # Define thresholds for any potential leakages. -session.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( +session.meshing.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( { "AddChild": "yes", "FlipDirection": True, @@ -362,10 +396,12 @@ "RegionSelectionSingle": "void-region-1", } ) -session.workflow.TaskObject["Define Leakage Threshold"].AddChildToTask() +session.meshing.workflow.TaskObject["Define Leakage Threshold"].AddChildToTask() -session.workflow.TaskObject["Define Leakage Threshold"].InsertCompoundChildTask() -session.workflow.TaskObject["leakage-1"].Arguments.setState( +session.meshing.workflow.TaskObject[ + "Define Leakage Threshold" +].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["leakage-1"].Arguments.setState( { "AddChild": "yes", "FlipDirection": True, @@ -374,17 +410,17 @@ "RegionSelectionSingle": "void-region-1", } ) -session.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( +session.meshing.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( { "AddChild": "yes", } ) -session.workflow.TaskObject["leakage-1"].Execute() +session.meshing.workflow.TaskObject["leakage-1"].Execute() ############################################################################### # Review your region settings. -session.workflow.TaskObject["Update Region Settings"].Arguments.setState( +session.meshing.workflow.TaskObject["Update Region Settings"].Arguments.setState( { "AllRegionFilterCategories": ["2"] * 5 + ["1"] * 2, "AllRegionLeakageSizeList": ["none"] * 6 + ["6.4"], @@ -418,44 +454,44 @@ "RegionVolumeFillList": ["tet"], } ) -session.workflow.TaskObject["Update Region Settings"].Execute() +session.meshing.workflow.TaskObject["Update Region Settings"].Execute() ############################################################################### # Select options for controlling the mesh. -session.workflow.TaskObject["Choose Mesh Control Options"].Execute() +session.meshing.workflow.TaskObject["Choose Mesh Control Options"].Execute() ############################################################################### # Generate the surface mesh. -session.workflow.TaskObject["Generate the Surface Mesh"].Execute() +session.meshing.workflow.TaskObject["Generate the Surface Mesh"].Execute() ############################################################################### # Confirm and update the boundaries. -session.workflow.TaskObject["Update Boundaries"].Execute() +session.meshing.workflow.TaskObject["Update Boundaries"].Execute() ############################################################################### # Add boundary layers. -session.workflow.TaskObject["Add Boundary Layers"].AddChildToTask() +session.meshing.workflow.TaskObject["Add Boundary Layers"].AddChildToTask() -session.workflow.TaskObject["Add Boundary Layers"].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["Add Boundary Layers"].InsertCompoundChildTask() -session.workflow.TaskObject["aspect-ratio_1"].Arguments.setState( +session.meshing.workflow.TaskObject["aspect-ratio_1"].Arguments.setState( { "BLControlName": "aspect-ratio_1", } ) -session.workflow.TaskObject["Add Boundary Layers"].Arguments.setState({}) +session.meshing.workflow.TaskObject["Add Boundary Layers"].Arguments.setState({}) -session.workflow.TaskObject["aspect-ratio_1"].Execute() +session.meshing.workflow.TaskObject["aspect-ratio_1"].Execute() ############################################################################### # Generate the volume mesh. -session.workflow.TaskObject["Generate the Volume Mesh"].Arguments.setState( +session.meshing.workflow.TaskObject["Generate the Volume Mesh"].Arguments.setState( { "AllRegionNameList": [ "main", @@ -471,35 +507,35 @@ "EnableParallel": True, } ) -session.workflow.TaskObject["Generate the Volume Mesh"].Execute() +session.meshing.workflow.TaskObject["Generate the Volume Mesh"].Execute() ############################################################################### # Check the mesh. -session.tui.meshing.mesh.check_mesh() +session.meshing.tui.mesh.check_mesh() ############################################################################### # Switch to Solution mode. -session.tui.meshing.switch_to_solution_mode("yes") +session.meshing.tui.switch_to_solution_mode("yes") -session.tui.solver.mesh.check() +session.solver.tui.mesh.check() ############################################################################### # Set the units for length -session.tui.solver.define.units("length", "mm") +session.solver.tui.define.units("length", "mm") ############################################################################### # Select kw sst turbulence model -session.tui.solver.define.models.viscous.kw_sst("yes") +session.solver.tui.define.models.viscous.kw_sst("yes") ############################################################################### # Set the velocity and turbulence boundary conditions for the first inlet # (inlet-1). -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet-1", [], "vmag", "no", 1, "quit" ) @@ -507,35 +543,35 @@ # Apply the same conditions for the other velocity inlet boundaries (inlet_2, # and inlet_3). -session.tui.solver.define.boundary_conditions.copy_bc( +session.solver.tui.define.boundary_conditions.copy_bc( "inlet-1", "inlet-2", "inlet-3", () ) ############################################################################### # Set the boundary conditions at the outlet (outlet-1). -session.tui.solver.define.boundary_conditions.set.pressure_outlet( +session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet-1", [], "turb-intensity", 5, "quit" ) -session.tui.solver.solve.monitors.residual.plot("yes") +session.solver.tui.solve.monitors.residual.plot("yes") ############################################################################### # Initialize the flow field using the Initialization -session.tui.solver.solve.initialize.hyb_initialization() +session.solver.tui.solve.initialize.hyb_initialization() ############################################################################### # Start the calculation by requesting 100 iterations -session.tui.solver.solve.set.number_of_iterations(100) -session.tui.solver.solve.iterate() +session.solver.tui.solve.set.number_of_iterations(100) +session.solver.tui.solve.iterate() -# session.tui.solver.report.volume_integrals.volume("fluid-region-1","()","yes","volume.vrp") +# session.solver.tui.report.volume_integrals.volume("fluid-region-1","()","yes","volume.vrp") ############################################################################### # Display path lines highlighting the flow field -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "pathlines", "pathlines-1", "field", @@ -552,12 +588,12 @@ "()", "quit", ) -# session.tui.solver.display.objects.display("pathlines-1") +# session.solver.tui.display.objects.display("pathlines-1") ############################################################################### # Create an iso-surface through the manifold geometry. -session.tui.solver.surface.iso_surface( +session.solver.tui.surface.iso_surface( "x-coordinate", "surf-x-coordinate", "()", @@ -571,7 +607,7 @@ # Create and define contours of velocity magnitude throughout the manifold # along with the mesh. -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "contour", "contour-velocity", "field", @@ -588,16 +624,16 @@ "quit", "quit", ) -# session.tui.solver.display.objects.display("contour-velocity") +# session.solver.tui.display.objects.display("contour-velocity") -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "mesh", "mesh-1", "surfaces-list", "*", "()", "quit" ) ############################################################################### # Create a scene containing the mesh and the contours. -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "scene", "scene-1", "graphics-objects", @@ -612,10 +648,10 @@ "quit", "quit", ) -# session.tui.solver.display.objects.display("scene-1") +# session.solver.tui.display.objects.display("scene-1") ############################################################################### # Save case, data and exit. -# session.tui.solver.file.write_case_data("exhaust_system.cas.h5") +# session.solver.tui.file.write_case_data("exhaust_system.cas.h5") # session.exit() diff --git a/examples/00-fluent/mixing_elbow.py b/examples/00-fluent/mixing_elbow.py index 595653b50be1..72bd7d30dfca 100644 --- a/examples/00-fluent/mixing_elbow.py +++ b/examples/00-fluent/mixing_elbow.py @@ -53,18 +53,18 @@ ############################################################################### # Select the Watertight Geometry Meshing Workflow -session.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry") +session.meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry") ############################################################################### # Import the CAD geometry. For Length Units, select "in". # Execute the Import Geometry task. -session.workflow.TaskObject["Import Geometry"].Arguments = dict( +session.meshing.workflow.TaskObject["Import Geometry"].Arguments = dict( FileName=import_filename, LengthUnit="in" ) -session.workflow.TaskObject["Import Geometry"].Execute() +session.meshing.workflow.TaskObject["Import Geometry"].Execute() ############################################################################### # Add local sizing: @@ -72,8 +72,8 @@ # like to add local sizing controls to the faceted geometry. For the purposes of # this example, you can keep the default setting. Execute to complete this task # and proceed to the next task in the workflow. -session.workflow.TaskObject["Add Local Sizing"].AddChildToTask() -session.workflow.TaskObject["Add Local Sizing"].Execute() +session.meshing.workflow.TaskObject["Add Local Sizing"].AddChildToTask() +session.meshing.workflow.TaskObject["Add Local Sizing"].Execute() ############################################################################### # Generate the surface mesh: @@ -81,10 +81,10 @@ # surface mesh for the faceted geometry. Specify 0.3 for Maximum Size. Execute # the Surface Mesh to complete this task and proceed to the next task in the # workflow. -session.workflow.TaskObject["Generate the Surface Mesh"].Arguments = { +session.meshing.workflow.TaskObject["Generate the Surface Mesh"].Arguments = { "CFDSurfaceMeshControls": {"MaxSize": 0.3} } -session.workflow.TaskObject["Generate the Surface Mesh"].Execute() +session.meshing.workflow.TaskObject["Generate the Surface Mesh"].Execute() ############################################################################### # Describe the geometry: @@ -93,68 +93,70 @@ # the fluid region. Select The geometry consists of only fluid regions with no # voids for Geometry Type. Execute Describe Geometry to complete this task and # proceed to the next task in the workflow. -session.workflow.TaskObject["Describe Geometry"].UpdateChildTasks( +session.meshing.workflow.TaskObject["Describe Geometry"].UpdateChildTasks( SetupTypeChanged=False ) -session.workflow.TaskObject["Describe Geometry"].Arguments = dict( +session.meshing.workflow.TaskObject["Describe Geometry"].Arguments = dict( SetupType="The geometry consists of only fluid regions with no voids" ) -session.workflow.TaskObject["Describe Geometry"].UpdateChildTasks(SetupTypeChanged=True) -session.workflow.TaskObject["Describe Geometry"].Execute() +session.meshing.workflow.TaskObject["Describe Geometry"].UpdateChildTasks( + SetupTypeChanged=True +) +session.meshing.workflow.TaskObject["Describe Geometry"].Execute() ############################################################################### # Update Boundaries Task: # For the wall-inlet boundary, change the Boundary Type field to wall. Execute # Update Boundaries to complete this task and proceed to the next task in the # workflow. -session.workflow.TaskObject["Update Boundaries"].Arguments = { +session.meshing.workflow.TaskObject["Update Boundaries"].Arguments = { "BoundaryLabelList": ["wall-inlet"], "BoundaryLabelTypeList": ["wall"], "OldBoundaryLabelList": ["wall-inlet"], "OldBoundaryLabelTypeList": ["velocity-inlet"], } -session.workflow.TaskObject["Update Boundaries"].Execute() +session.meshing.workflow.TaskObject["Update Boundaries"].Execute() ############################################################################### # Update your regions: # Select the Update Regions task, where you can review the names and types of # the various regions that have been generated from your imported geometry, and # change them as needed. Keep the default settings, and execute Update Regions. -session.workflow.TaskObject["Update Regions"].Execute() +session.meshing.workflow.TaskObject["Update Regions"].Execute() ############################################################################### # Add Boundary Layers: # Select the Add Boundary Layers task, where you can set properties of the # boundary layer mesh. Keep the default settings, and Add Boundary Layers. -session.workflow.TaskObject["Add Boundary Layers"].AddChildToTask() -session.workflow.TaskObject["Add Boundary Layers"].InsertCompoundChildTask() -session.workflow.TaskObject["smooth-transition_1"].Arguments = { +session.meshing.workflow.TaskObject["Add Boundary Layers"].AddChildToTask() +session.meshing.workflow.TaskObject["Add Boundary Layers"].InsertCompoundChildTask() +session.meshing.workflow.TaskObject["smooth-transition_1"].Arguments = { "BLControlName": "smooth-transition_1", } -session.workflow.TaskObject["Add Boundary Layers"].Arguments = {} -session.workflow.TaskObject["smooth-transition_1"].Execute() +session.meshing.workflow.TaskObject["Add Boundary Layers"].Arguments = {} +session.meshing.workflow.TaskObject["smooth-transition_1"].Execute() ############################################################################### # Generate the volume mesh: # Select the Generate the Volume Mesh task, where you can set properties of the # volume mesh. Select the poly-hexcore for Fill With. Execute Generate the # Volume Mesh. -session.workflow.TaskObject["Generate the Volume Mesh"].Arguments = { +session.meshing.workflow.TaskObject["Generate the Volume Mesh"].Arguments = { "VolumeFill": "poly-hexcore", "VolumeFillControls": { "HexMaxCellLength": 0.3, }, } -session.workflow.TaskObject["Generate the Volume Mesh"].Execute() +session.meshing.workflow.TaskObject["Generate the Volume Mesh"].Execute() ############################################################################### # Check the mesh in Meshing mode -session.tui.meshing.mesh.check_mesh() +session.meshing.tui.mesh.check_mesh() ############################################################################### # Save the mesh file (mixing_elbow.msh.h5) -# session.tui.meshing.file.write_mesh('mixing_elbow.msh.h5') +# session.meshing.tui.file.write_mesh('mixing_elbow.msh.h5') ############################################################################### # Switch to Solution mode: @@ -162,7 +164,7 @@ # mode, you can now switch to solver mode to complete the setup of the # simulation. We have just checked the mesh, so select Yes to switch to # solution mode. -session.tui.meshing.switch_to_solution_mode("yes") +session.meshing.tui.switch_to_solution_mode("yes") ############################################################################### # Check the mesh in Solver mode: @@ -171,7 +173,7 @@ # mesh features that are checked. Any errors in the mesh will be reported at # this time. Ensure that the minimum volume is not negative, since Ansys Fluent # cannot begin a calculation when this is the case. -session.tui.solver.mesh.check() +session.solver.tui.mesh.check() ############################################################################### # Set the working units for the mesh: @@ -180,20 +182,20 @@ # to change any other units in this problem. If you want a different working # unit for length, other than inches (for example, millimeters), make the # appropriate change. -session.tui.solver.define.units("length", "in") +session.solver.tui.define.units("length", "in") ############################################################################### # Enable heat transfer by activating the energy equation. -session.tui.solver.define.models.energy("yes", ", ", ", ", ", ", ", ") +session.solver.tui.define.models.energy("yes", ", ", ", ", ", ", ", ") ############################################################################### # Create a new material called water-liquid. -session.tui.solver.define.materials.copy("fluid", "water-liquid") +session.solver.tui.define.materials.copy("fluid", "water-liquid") ############################################################################### # Set up the cell zone conditions for the fluid zone (elbow-fluid). Select # water-liquid from the Material list. -session.tui.solver.define.boundary_conditions.fluid( +session.solver.tui.define.boundary_conditions.fluid( "elbow-fluid", "yes", "water-liquid", @@ -226,19 +228,19 @@ # cold inlet (cold-inlet), Setting: Value: # Velocity Specification Method: Magnitude, Normal to Boundary -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "vmag", "no", 0.4, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "ke-spec", "no", "no", "no", "yes", "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "turb-intensity", 5, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "turb-hydraulic-diam", 4, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "temperature", "no", 293.15, "quit" ) @@ -247,19 +249,19 @@ # Velocity Specification Method: Magnitude, Normal to Boundary -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "vmag", "no", 1.2, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "ke-spec", "no", "no", "no", "yes", "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "turb-intensity", 5, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "turb-hydraulic-diam", 1, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "temperature", "no", 313.15, "quit" ) @@ -268,21 +270,21 @@ # Backflow Turbulent Intensity: 5 [%] # Backflow Turbulent Viscosity Ratio: 4 -session.tui.solver.define.boundary_conditions.set.pressure_outlet( +session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet", [], "turb-intensity", 5, "quit" ) -session.tui.solver.define.boundary_conditions.set.pressure_outlet( +session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet", [], "turb-viscosity-ratio", 4, "quit" ) ############################################################################### # Enable the plotting of residuals during the calculation. -session.tui.solver.solve.monitors.residual.plot("yes") +session.solver.tui.solve.monitors.residual.plot("yes") ############################################################################### # Create a surface report definition of average temperature at the outlet # (outlet) called "outlet-temp-avg -session.tui.solver.solve.report_definitions.add( +session.solver.tui.solve.report_definitions.add( "outlet-temp-avg", "surface-massavg", "field", @@ -308,7 +310,7 @@ # initial solution dynamics to settle out. Note that the value printed to the # console is the deviation between the current and previous iteration values # only. -session.tui.solver.solve.convergence_conditions( +session.solver.tui.solve.convergence_conditions( "conv-reports", "add", "con-outlet-temp-avg", @@ -330,25 +332,25 @@ "3", "quit", ) -session.tui.solver.solve.convergence_conditions("frequency", "3", "quit") +session.solver.tui.solve.convergence_conditions("frequency", "3", "quit") ############################################################################### # Initialize the flow field using the Hybrid Initialization -session.tui.solver.solve.initialize.hyb_initialization() +session.solver.tui.solve.initialize.hyb_initialization() ############################################################################### # Save the case file (mixing_elbow1.cas.h5). -# session.tui.solver.file.write_case('mixing_elbow1.cas.h5') +# session.solver.tui.file.write_case('mixing_elbow1.cas.h5') ############################################################################### # Solve for 100 Iterations. -session.tui.solver.solve.iterate(100) +session.solver.tui.solve.iterate(100) ############################################################################### # Examine the mass flux report for convergence: Select cold-inlet, hot-inlet, # and outlet from the Boundaries selection list. -# session.tui.solver.report.fluxes.mass_flow( +# session.solver.tui.report.fluxes.mass_flow( # "no", # "cold-inlet", # "hot-inlet", @@ -361,7 +363,7 @@ ############################################################################### # Save the data file (mixing_elbow1.dat.h5). -# session.tui.solver.file.write_data('mixing_elbow1.dat.h5') +# session.solver.tui.file.write_data('mixing_elbow1.dat.h5') ############################################################################### # Create and display a definition for velocity magnitude contours on the @@ -370,7 +372,7 @@ # symmetry-xyplane from the Surfaces list. Display contour-vel contour. -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "contour", "contour-vel", "filled?", @@ -386,7 +388,7 @@ "banded", "quit", ) -# session.tui.solver.display.objects.display("contour-vel") +# session.solver.tui.display.objects.display("contour-vel") ############################################################################### # Create and display a definition for temperature contours on the symmetry @@ -394,7 +396,7 @@ # Provide contour-temp for Contour Name. Select temperature. Select # symmetry-xyplane from the Surfaces list. Display contour-temp contour. -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "contour", "contour-temp", "filled?", @@ -410,7 +412,7 @@ "smooth", "quit", ) -# session.tui.solver.display.objects.display("contour-temp") +# session.solver.tui.display.objects.display("contour-temp") ############################################################################### # Create and display velocity vectors on the symmetry-xyplane plane: @@ -418,7 +420,7 @@ # Provide vector-vel for Vector Name. Select arrow for the Style. Select # symmetry-xyplane from the Surfaces selection list. Provide 4 for Scale. Set # Skip to 2. -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "vector", "vector-vel", "style", @@ -434,19 +436,19 @@ "2", "quit", ) -# session.tui.solver.display.objects.display("vector-vel") +# session.solver.tui.display.objects.display("vector-vel") ############################################################################### # Create an iso-surface representing the intersection of the plane z=0 and the # surface outlet. Name: z=0_outlet -session.tui.solver.surface.iso_surface( +session.solver.tui.surface.iso_surface( "z-coordinate", "z=0_outlet", "outlet", "()", "()", "0", "()" ) ############################################################################### # Display and save an XY plot of the temperature profile across the centerline # of the outlet for the initial solution -session.tui.solver.display.objects.create( +session.solver.tui.display.objects.create( "xy", "xy-outlet-temp", "y-axis-function", @@ -456,8 +458,8 @@ "()", "quit", ) -# session.tui.solver.display.objects.display("xy-outlet-temp") -# session.tui.solver.plot.plot( +# session.solver.tui.display.objects.display("xy-outlet-temp") +# session.solver.tui.plot.plot( # "yes", # "temp-1.xy", # "no", @@ -512,6 +514,6 @@ ############################################################################### # Write final case and data. -# session.tui.solver.file.write_case_data("mixing_elbow2_tui.cas.h5") +# session.solver.tui.file.write_case_data("mixing_elbow2_tui.cas.h5") ############################################################################### diff --git a/examples/01-parametric/parametric_static_mixer_1.py b/examples/01-parametric/parametric_static_mixer_1.py index e0e536d7e358..ddeec3ccc1e5 100755 --- a/examples/01-parametric/parametric_static_mixer_1.py +++ b/examples/01-parametric/parametric_static_mixer_1.py @@ -30,11 +30,6 @@ session = pyfluent.launch_fluent(precision="double", processor_count=4) -############################################################################ -# Enable the settings API (Beta) - -root = session.get_settings_root() - ############################################################################ # Read the hopper/mixer case @@ -42,12 +37,12 @@ "Static_Mixer_main.cas.h5", "pyfluent/static_mixer" ) -session.tui.solver.file.read_case(case_file_name=import_filename) +session.solver.tui.file.read_case(case_file_name=import_filename) ############################################################################ # Set number of iterations to 100 -session.tui.solver.solve.set.number_of_iterations("100") +session.solver.tui.solve.set.number_of_iterations("100") ############################################################################ # Create input parameters after enabling parameter creation in the TUI: @@ -55,61 +50,69 @@ # Inlet1: velocity (inlet1_vel) 5 m/s and temperature (inlet1_temp) at 300 K # Inlet2: velocity (inlet2_vel) 10 m/s and temperature (inlet2_temp) at 350 K -session.tui.solver.define.parameters.enable_in_TUI("yes") +session.solver.tui.define.parameters.enable_in_TUI("yes") -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet1", (), "vmag", "yes", "inlet1_vel", 5, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet1", (), "temperature", "yes", "inlet1_temp", 300, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet2", (), "vmag", "yes", "no", "inlet2_vel", 10, "quit" ) -session.tui.solver.define.boundary_conditions.set.velocity_inlet( +session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet2", (), "temperature", "yes", "no", "inlet2_temp", 350, "quit" ) ########################################################################### # Create output parameters using report definitions -root.solution.report_definitions.surface["outlet-temp-avg"] = {} -root.solution.report_definitions.surface[ +session.solver.root.solution.report_definitions.surface["outlet-temp-avg"] = {} +session.solver.root.solution.report_definitions.surface[ "outlet-temp-avg" ].report_type = "surface-areaavg" -root.solution.report_definitions.surface["outlet-temp-avg"].field = "temperature" -root.solution.report_definitions.surface["outlet-temp-avg"].surface_names = ["outlet"] +session.solver.root.solution.report_definitions.surface[ + "outlet-temp-avg" +].field = "temperature" +session.solver.root.solution.report_definitions.surface[ + "outlet-temp-avg" +].surface_names = ["outlet"] -root.solution.report_definitions.surface["outlet-vel-avg"] = {} -root.solution.report_definitions.surface[ +session.solver.root.solution.report_definitions.surface["outlet-vel-avg"] = {} +session.solver.root.solution.report_definitions.surface[ "outlet-vel-avg" ].report_type = "surface-areaavg" -root.solution.report_definitions.surface["outlet-vel-avg"].field = "velocity-magnitude" -root.solution.report_definitions.surface["outlet-vel-avg"].surface_names = ["outlet"] +session.solver.root.solution.report_definitions.surface[ + "outlet-vel-avg" +].field = "velocity-magnitude" +session.solver.root.solution.report_definitions.surface[ + "outlet-vel-avg" +].surface_names = ["outlet"] -session.tui.solver.define.parameters.enable_in_TUI("yes") -session.tui.solver.define.parameters.output_parameters.create( +session.solver.tui.define.parameters.enable_in_TUI("yes") +session.solver.tui.define.parameters.output_parameters.create( "report-definition", "outlet-temp-avg" ) -session.tui.solver.define.parameters.output_parameters.create( +session.solver.tui.define.parameters.output_parameters.create( "report-definition", "outlet-vel-avg" ) ########################################################################### # Enable convergence condition check -session.tui.solver.solve.monitors.residual.criterion_type("0") +session.solver.tui.solve.monitors.residual.criterion_type("0") ########################################################################### # Write case with all the settings in place case_path = str(Path(pyfluent.EXAMPLES_PATH) / "Static_Mixer_Parameters.cas.h5") -session.tui.solver.file.write_case(case_path) +session.solver.tui.file.write_case(case_path) ########################################################################### # Instantiate a parametric study from a Fluent session -study_1 = ParametricStudy(root.parametric_studies).initialize() +study_1 = ParametricStudy(session.solver.root.parametric_studies).initialize() ########################################################################### # Access and modify input parameters of base DP @@ -194,4 +197,4 @@ project_filepath = str(Path(pyfluent.EXAMPLES_PATH) / "static_mixer_study.flprj") -session.tui.solver.file.parametric_project.save_as(project_filepath) +session.solver.tui.file.parametric_project.save_as(project_filepath) diff --git a/examples/01-parametric/parametric_static_mixer_2.py b/examples/01-parametric/parametric_static_mixer_2.py index 3395518573dd..0da7b5b3ccc8 100755 --- a/examples/01-parametric/parametric_static_mixer_2.py +++ b/examples/01-parametric/parametric_static_mixer_2.py @@ -24,7 +24,6 @@ # Launch Fluent and enable the settings API (Beta) session = pyfluent.launch_fluent(precision="double", processor_count=4) -root = session.get_settings_root() ######################################################################### # Read the previously saved project - static_mixer_study.flprj @@ -32,8 +31,8 @@ project_filepath_read = str(Path(pyfluent.EXAMPLES_PATH) / "static_mixer_study.flprj") proj = ParametricProject( - root.file.parametric_project, - root.parametric_studies, + session.solver.root.file.parametric_project, + session.solver.root.parametric_studies, project_filepath_read, ) diff --git a/examples/02-postprocessing/post_processing_exhaust_manifold.py b/examples/02-postprocessing/post_processing_exhaust_manifold.py index 2ee7da652fd1..2ca8564d6091 100644 --- a/examples/02-postprocessing/post_processing_exhaust_manifold.py +++ b/examples/02-postprocessing/post_processing_exhaust_manifold.py @@ -37,10 +37,9 @@ ) session = pyfluent.launch_fluent(precision="double", processor_count=4) -root = session.get_settings_root() -session.tui.solver.file.read_case(case_file_name=import_case) -session.tui.solver.file.read_data(case_file_name=import_data) +session.solver.tui.file.read_case(case_file_name=import_case) +session.solver.tui.file.read_data(case_file_name=import_data) ############################################################################### # Get the graphics object for mesh display diff --git a/src/ansys/fluent/core/meta.py b/src/ansys/fluent/core/meta.py index d06c3164b21c..192335c884bb 100644 --- a/src/ansys/fluent/core/meta.py +++ b/src/ansys/fluent/core/meta.py @@ -22,7 +22,7 @@ def surface_name_in_server(local_surface_name): return "_dummy_surface_for_pyfluent:" + local_surface_name def _get_api_handle(self): - return self.obj._get_top_most_parent().session.tui.solver.surface + return self.obj._get_top_most_parent().session.solver.tui.surface def _delete_if_exist_on_server(self): field_info = self.obj._data_extractor.field_info() diff --git a/src/ansys/fluent/core/session.py b/src/ansys/fluent/core/session.py index 1c96e8ccd999..2d4beac3d45c 100644 --- a/src/ansys/fluent/core/session.py +++ b/src/ansys/fluent/core/session.py @@ -98,18 +98,12 @@ class Session: Attributes ---------- - tui : Session.Tui - Instance of Session.Tui on which Fluent's TUI methods can be - executed. - setup: flobject.Group - Instance of flobject.Group object from which setup related - settings can be accessed or modified. - solution: flobject.Group - Instance of flobject.Group object from which solution related - settings can be accessed or modified. - results: flobject.Group - Instance of flobject.Group object from which results related - settings can be accessed or modified. + meshing: Session.Meshing + Instance of Session.Meshing which holds the top-level objects + for meshing TUI and various meshing datamodel API calls. + solver: Session.Solver + Instance of Session.Solver which holds the top-level objects + for solver TUI and settings API calls. scheme_eval: SchemeEval Instance of SchemeEval on which Fluent's scheme code can be executed. @@ -207,27 +201,19 @@ def __init__( self._datamodel_service_tui = DatamodelService_TUI( self._channel, self._metadata ) + self._datamodel_service_se = DatamodelService_SE(self._channel, self._metadata) + self._settings_service = SettingsService(self._channel, self._metadata) self._field_data_service = FieldDataService(self._channel, self._metadata) self.field_info = FieldInfo(self._field_data_service) self.field_data = FieldData(self._field_data_service) - self.tui = Session.Tui(self._datamodel_service_tui) - self._datamodel_service_se = DatamodelService_SE(self._channel, self._metadata) - if "meshing_root" in globals(): - self.meshing = meshing_root(self._datamodel_service_se, "meshing", []) - if "workflow_root" in globals(): - self.workflow = workflow_root(self._datamodel_service_se, "workflow", []) - if "PartManagement_root" in globals(): - self.part_management = PartManagement_root( - self._datamodel_service_se, "PartManagement", [] - ) - self.PartManagement = self.part_management - if "PMFileManagement_root" in globals(): - self.pm_file_management = PMFileManagement_root( - self._datamodel_service_se, "PMFileManagement", [] - ) - self.PMFileManagement = self.pm_file_management + self.meshing = Session.Meshing( + self._datamodel_service_tui, self._datamodel_service_se + ) + self.solver = Session.Solver( + self._datamodel_service_tui, self._settings_service + ) self._health_check_service = HealthCheckService(self._channel, self._metadata) @@ -271,17 +257,6 @@ def id(self) -> str: """Return the session id.""" return self._id - def get_settings_service(self) -> SettingsService: - """Return an instance of SettingsService object.""" - return SettingsService(self._channel, self._metadata) - - def get_settings_root(self) -> root: - """Return root settings object.""" - if self._settings_root is None: - LOG.warning("The settings API is currently experimental.") - self._settings_root = settings_get_root(flproxy=self.get_settings_service()) - return self._settings_root - def _process_transcript(self): responses = self._transcript_service.begin_streaming() transcript = "" @@ -343,12 +318,82 @@ def exit_all() -> None: for cb in Session._on_exit_cbs: cb() - class Tui: - def __init__(self, service: DatamodelService_TUI): - if "MeshingMainMenu" in globals(): - self.meshing = MeshingMainMenu([], service) - if "SolverMainMenu" in globals(): - self.solver = SolverMainMenu([], service) + class Meshing: + def __init__( + self, tui_service: DatamodelService_TUI, se_service: DatamodelService_SE + ): + self._tui_service = tui_service + self._se_service = se_service + self._tui = None + self._meshing = None + self._workflow = None + self._part_management = None + self._pm_file_management = None + + @property + def tui(self): + """Instance of ``main_menu`` on which Fluent's SolverTUI methods + can be executed.""" + if self._tui is None: + self._tui = MeshingMainMenu([], self._tui_service) + return self._tui + + @property + def meshing(self): + """meshing datamodel root.""" + if self._meshing is None: + self._meshing = meshing_root(self._se_service, "meshing", []) + return self._meshing + + @property + def workflow(self): + """workflow datamodel root.""" + if self._workflow is None: + self._workflow = workflow_root(self._se_service, "workflow", []) + return self._workflow + + @property + def PartManagement(self): + """PartManagement datamodel root.""" + if self._part_management is None: + self._part_management = PartManagement_root( + self._se_service, "PartManagement", [] + ) + return self._part_management + + @property + def PMFileManagement(self): + """PMFileManagement datamodel root.""" + if self._pm_file_management is None: + self._pm_file_management = PMFileManagement_root( + self._se_service, "PMFileManagement", [] + ) + return self._pm_file_management + + class Solver: + def __init__( + self, tui_service: DatamodelService_TUI, settings_service: SettingsService + ): + self._tui_service = tui_service + self._settings_service = settings_service + self._tui = None + self._settings_root = None + + @property + def tui(self): + """Instance of ``main_menu`` on which Fluent's SolverTUI methods + can be executed.""" + if self._tui is None: + self._tui = SolverMainMenu([], self._tui_service) + return self._tui + + @property + def root(self): + """root settings object.""" + if self._settings_root is None: + LOG.warning("The settings API is currently experimental.") + self._settings_root = settings_get_root(flproxy=self._settings_service) + return self._settings_root atexit.register(Session.exit_all) diff --git a/src/ansys/fluent/core/utils/async_execution.py b/src/ansys/fluent/core/utils/async_execution.py index db571101df63..4cd71854a3ad 100644 --- a/src/ansys/fluent/core/utils/async_execution.py +++ b/src/ansys/fluent/core/utils/async_execution.py @@ -15,15 +15,15 @@ def asynchronous(f: Callable) -> Callable: >>> # asynchronous execution using @asynchronous decorator >>> @asynchronous ... def asynchronous_solve(session, number_of_iterations): - ... session.tui.solver.solve.iterate(number_of_iterations) + ... session.solver.tui.solve.iterate(number_of_iterations) >>> asynchronous_solve(session1, 100) >>> # using the asynchronous function directly - >>> asynchronous(session2.tui.solver.solve.iterate)(100) + >>> asynchronous(session2.solver.tui.solve.iterate)(100) >>> # synchronous execution of above 2 calls >>> asynchronous_solve(session1, 100).result() - >>> asynchronous(session2.tui.solver.solve.iterate)(100).result() + >>> asynchronous(session2.solver.tui.solve.iterate)(100).result() .. _Future: https://docs.python.org/3/library/asyncio-future.html#future-object # noqa: E501 .. _result(): https://docs.python.org/3/library/asyncio-future.html#asyncio.Future.result # noqa: E501 diff --git a/src/ansys/fluent/parametric/__init__.py b/src/ansys/fluent/parametric/__init__.py index 56db514adc0b..3c97860cc7b5 100644 --- a/src/ansys/fluent/parametric/__init__.py +++ b/src/ansys/fluent/parametric/__init__.py @@ -2,12 +2,11 @@ Example ------- ->>> root = session.get_settings_root() >>> from ansys.fluent.parametric import ParametricStudy Instantiate the study from a Fluent session which has already read a case ->>> study1 = ParametricStudy(root.parametric_studies).initialize() +>>> study1 = ParametricStudy(session.solver.root.parametric_studies).initialize() Access and modify the input parameters of base design point @@ -38,9 +37,8 @@ Project workflow ->>> root = session.get_settings_root() >>> from ansys.fluent.parametric import ParametricProject ->>> proj = ParametricProject(root.file.parametric_project, root.parametric_studies, "nozzle_para_named.flprj") # noqa: E501 +>>> proj = ParametricProject(session.solver.root.file.parametric_project, session.solver.root.parametric_studies, "nozzle_para_named.flprj") # noqa: E501 >>> proj.save() >>> proj.save_as(project_filepath="nozzle_para_named1.flprj") >>> proj.export(project_filepath="nozzle_para_named2.flprj") @@ -650,7 +648,7 @@ def __init__( ) if start_transcript: self.start_transcript() - self._root = self._session.get_settings_root() + self._root = self._session.solver.root if case_filepath is not None: self._root.file.read(file_name=case_filepath, file_type="case") study = ParametricStudy(self._root.parametric_studies).initialize() diff --git a/tests/test_cad_to_post_ftm.py b/tests/test_cad_to_post_ftm.py index 20fd7b353e39..af5c7ff76639 100644 --- a/tests/test_cad_to_post_ftm.py +++ b/tests/test_cad_to_post_ftm.py @@ -29,7 +29,7 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geometry): session = new_fault_tolerant_workflow_session - workflow = session.workflow + workflow = session.meshing.workflow assign_task_args = partial( assign_task_arguments, workflow=workflow, check_state=True @@ -41,13 +41,13 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom ############################################################################### # Import the CAD geometry - session.part_management.InputFileChanged( + session.meshing.PartManagement.InputFileChanged( FilePath=exhaust_system_geometry, IgnoreSolidNames=False, PartPerBody=False, ) - session.PMFileManagement.FileManager.LoadFiles() - session.part_management.Node["Meshing Model"].Copy( + session.meshing.PMFileManagement.FileManager.LoadFiles() + session.meshing.PartManagement.Node["Meshing Model"].Copy( Paths=[ "/dirty_manifold-for-wrapper," + "1/dirty_manifold-for-wrapper,1/main,1", "/dirty_manifold-for-wrapper," @@ -58,9 +58,9 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom "/dirty_manifold-for-wrapper," + "1/dirty_manifold-for-wrapper,1/object1,1", ] ) - session.part_management.ObjectSetting["DefaultObjectSetting"].OneZonePer.setState( - "part" - ) + session.meshing.PartManagement.ObjectSetting[ + "DefaultObjectSetting" + ].OneZonePer.setState("part") workflow.TaskObject["Import CAD and Part Management"].Arguments.setState( { "Context": 0, @@ -320,7 +320,7 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom ############################################################################### # Define thresholds for any potential leakages. - session.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( + session.meshing.workflow.TaskObject["Define Leakage Threshold"].Arguments.setState( { "AddChild": "yes", "FlipDirection": True, @@ -430,58 +430,59 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom ############################################################################### # Check the mesh in Meshing mode - session.tui.meshing.mesh.check_mesh() + session.meshing.tui.mesh.check_mesh() ############################################################################### # Switch to Solution mode - session.tui.meshing.switch_to_solution_mode("yes") + session.meshing.tui.switch_to_solution_mode("yes") ############################################################################### # Check the mesh in Solver mode - session.tui.solver.mesh.check() + session.solver.tui.mesh.check() ############################################################################### # Set the units for length - session.tui.solver.define.units("length", "mm") + session.solver.tui.define.units("length", "mm") ############################################################################### # Select kw sst turbulence model - session.tui.solver.define.models.viscous.kw_sst("yes") + session.solver.tui.define.models.viscous.kw_sst("yes") ############################################################################### # Set the velocity and turbulence boundary conditions for the first inlet # (inlet-1). - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "inlet-1", [], "vmag", "no", 1, "quit" ) ############################################################################### # Apply the same conditions for the other velocity inlet boundaries (inlet_2, # and inlet_3). - session.tui.solver.define.boundary_conditions.copy_bc( + session.solver.tui.define.boundary_conditions.copy_bc( "inlet-1", "inlet-2", "inlet-3", () ) ############################################################################### # Set the boundary conditions at the outlet (outlet-1). - session.tui.solver.define.boundary_conditions.set.pressure_outlet( + session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet-1", [], "turb-intensity", 5, "quit" ) - session.tui.solver.solve.monitors.residual.plot("yes") + session.solver.tui.solve.monitors.residual.plot("yes") ############################################################################### # Initialize the flow field using the Initialization - session.tui.solver.solve.initialize.hyb_initialization() + session.solver.tui.solve.initialize.hyb_initialization() ############################################################################### # Start the calculation by requesting 100 iterations - session.tui.solver.solve.set.number_of_iterations(100) - session.tui.solver.solve.iterate() + session.solver.tui.solve.set.number_of_iterations(100) + session.solver.tui.solve.iterate() ############################################################################### # Assert the returned mass flow rate report definition value - root = session.get_settings_root() - root.solution.report_definitions.flux["mass_flow_rate"] = {} - root.solution.report_definitions.flux["mass_flow_rate"].zone_names = [ + session.solver.root.solution.report_definitions.flux["mass_flow_rate"] = {} + session.solver.root.solution.report_definitions.flux[ + "mass_flow_rate" + ].zone_names = [ "inlet-1", "inlet-2", "inlet-3", @@ -490,7 +491,7 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom check_report_definition = partial( check_report_definition_result, - report_definitions=root.solution.report_definitions, + report_definitions=session.solver.root.solution.report_definitions, ) check_report_definition( @@ -501,20 +502,22 @@ def test_exhaust_system(new_fault_tolerant_workflow_session, exhaust_system_geom ############################################################################### # Assert the returned velocity-magnitude report definition value on the outlet # surface - root.solution.report_definitions.surface["velocity_magnitude_outlet"] = {} - root.solution.report_definitions.surface[ + session.solver.root.solution.report_definitions.surface[ + "velocity_magnitude_outlet" + ] = {} + session.solver.root.solution.report_definitions.surface[ "velocity_magnitude_outlet" ].report_type = "surface-areaavg" - root.solution.report_definitions.surface[ + session.solver.root.solution.report_definitions.surface[ "velocity_magnitude_outlet" ].field = "velocity-magnitude" - root.solution.report_definitions.surface[ + session.solver.root.solution.report_definitions.surface[ "velocity_magnitude_outlet" ].surface_names = ["outlet-1"] check_report_definition = partial( check_report_definition_result, - report_definitions=root.solution.report_definitions, + report_definitions=session.solver.root.solution.report_definitions, ) check_report_definition( diff --git a/tests/test_cad_to_post_wtm.py b/tests/test_cad_to_post_wtm.py index 77e490b6e809..d015f3818092 100644 --- a/tests/test_cad_to_post_wtm.py +++ b/tests/test_cad_to_post_wtm.py @@ -31,7 +31,7 @@ def test_mixing_elbow(new_watertight_workflow_session, mixing_elbow_geometry): session = new_watertight_workflow_session - workflow = session.workflow + workflow = session.meshing.workflow assign_task_args = partial( assign_task_arguments, workflow=workflow, check_state=True @@ -125,32 +125,32 @@ def test_mixing_elbow(new_watertight_workflow_session, mixing_elbow_geometry): ############################################################################### # Check the mesh in Meshing mode - session.tui.meshing.mesh.check_mesh() + session.meshing.tui.mesh.check_mesh() ############################################################################### # Switch to Solution mode - session.tui.meshing.switch_to_solution_mode("yes") + session.meshing.tui.switch_to_solution_mode("yes") ############################################################################### # Check the mesh in Solver mode - session.tui.solver.mesh.check() + session.solver.tui.mesh.check() ############################################################################### # Set the working units for the mesh - session.tui.solver.define.units("length", "in") + session.solver.tui.define.units("length", "in") ############################################################################### # Enable heat transfer by activating the energy equation. - session.tui.solver.define.models.energy("yes", ", ", ", ", ", ", ", ") + session.solver.tui.define.models.energy("yes", ", ", ", ", ", ", ", ") ############################################################################### # Create a new material called water-liquid. - session.tui.solver.define.materials.copy("fluid", "water-liquid") + session.solver.tui.define.materials.copy("fluid", "water-liquid") ############################################################################### # Set up the cell zone conditions for the fluid zone (elbow-fluid). Select # water-liquid from the Material list. - session.tui.solver.define.boundary_conditions.fluid( + session.solver.tui.define.boundary_conditions.fluid( "elbow-fluid", "yes", "water-liquid", @@ -178,62 +178,63 @@ def test_mixing_elbow(new_watertight_workflow_session, mixing_elbow_geometry): ############################################################################### # Set up the boundary conditions - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "vmag", "no", 0.4, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "ke-spec", "no", "no", "no", "yes", "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "turb-intensity", 5, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "turb-hydraulic-diam", 4, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "cold-inlet", [], "temperature", "no", 293.15, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "vmag", "no", 1.2, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "ke-spec", "no", "no", "no", "yes", "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "turb-intensity", 5, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "turb-hydraulic-diam", 1, "quit" ) - session.tui.solver.define.boundary_conditions.set.velocity_inlet( + session.solver.tui.define.boundary_conditions.set.velocity_inlet( "hot-inlet", [], "temperature", "no", 313.15, "quit" ) - session.tui.solver.define.boundary_conditions.set.pressure_outlet( + session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet", [], "turb-intensity", 5, "quit" ) - session.tui.solver.define.boundary_conditions.set.pressure_outlet( + session.solver.tui.define.boundary_conditions.set.pressure_outlet( "outlet", [], "turb-viscosity-ratio", 4, "quit" ) ############################################################################### # Enable the plotting of residuals during the calculation. - session.tui.solver.solve.monitors.residual.plot("yes") + session.solver.tui.solve.monitors.residual.plot("yes") ############################################################################### # Initialize the flow field using the Hybrid Initialization - session.tui.solver.solve.initialize.hyb_initialization() + session.solver.tui.solve.initialize.hyb_initialization() ############################################################################### # Solve for 250 Iterations. - session.tui.solver.solve.iterate(250) + session.solver.tui.solve.iterate(250) ############################################################################### # Assert the returned mass flow rate report definition value - root = session.get_settings_root() - root.solution.report_definitions.flux["mass_flow_rate"] = {} - root.solution.report_definitions.flux["mass_flow_rate"].zone_names = [ + session.solver.root.solution.report_definitions.flux["mass_flow_rate"] = {} + session.solver.root.solution.report_definitions.flux[ + "mass_flow_rate" + ].zone_names = [ "cold-inlet", "hot-inlet", "outlet", @@ -241,7 +242,7 @@ def test_mixing_elbow(new_watertight_workflow_session, mixing_elbow_geometry): check_report_definition = partial( check_report_definition_result, - report_definitions=root.solution.report_definitions, + report_definitions=session.solver.root.solution.report_definitions, ) check_report_definition( @@ -251,14 +252,16 @@ def test_mixing_elbow(new_watertight_workflow_session, mixing_elbow_geometry): ############################################################################### # Assert the returned temperature report definition value on the outlet surface - root.solution.report_definitions.surface["temperature_outlet"] = {} - root.solution.report_definitions.surface[ + session.solver.root.solution.report_definitions.surface["temperature_outlet"] = {} + session.solver.root.solution.report_definitions.surface[ "temperature_outlet" ].report_type = "surface-massavg" - root.solution.report_definitions.surface["temperature_outlet"].field = "temperature" - root.solution.report_definitions.surface["temperature_outlet"].surface_names = [ - "outlet" - ] + session.solver.root.solution.report_definitions.surface[ + "temperature_outlet" + ].field = "temperature" + session.solver.root.solution.report_definitions.surface[ + "temperature_outlet" + ].surface_names = ["outlet"] check_report_definition( report_definition_name="temperature_outlet", diff --git a/tests/test_meshing_workflow.py b/tests/test_meshing_workflow.py index 8ec18f1f5dc3..70a288e29fa9 100644 --- a/tests/test_meshing_workflow.py +++ b/tests/test_meshing_workflow.py @@ -23,7 +23,7 @@ def test_mixing_elbow_meshing_workflow( ): session = shared_watertight_workflow_session - workflow = session.workflow + workflow = session.meshing.workflow ############################################################################### @@ -117,7 +117,7 @@ def test_mixing_elbow_meshing_workflow( ############################################################################### # Check the mesh in Meshing mode - session.tui.meshing.mesh.check_mesh() + session.meshing.tui.mesh.check_mesh() def test_meshing_workflow_raises_exception_on_invalid_task_name( diff --git a/tests/test_settings_api.py b/tests/test_settings_api.py index 04b2cf43b488..a83449ebcb89 100644 --- a/tests/test_settings_api.py +++ b/tests/test_settings_api.py @@ -5,26 +5,28 @@ def test_setup_models_viscous_model_settings(new_solver_session) -> None: - root = new_solver_session.get_settings_root() - assert root.setup.models.viscous.model() == "laminar" - assert "inviscid" in root.setup.models.viscous.model.get_attr("allowed-values") - root.setup.models.viscous.model = "inviscid" - assert root.setup.models.viscous.model() == "inviscid" + session = new_solver_session + assert session.solver.root.setup.models.viscous.model() == "laminar" + assert "inviscid" in session.solver.root.setup.models.viscous.model.get_attr( + "allowed-values" + ) + session.solver.root.setup.models.viscous.model = "inviscid" + assert session.solver.root.setup.models.viscous.model() == "inviscid" @pytest.mark.skip(reason="failing if run with other tests") def test_results_graphics_mesh_settings(new_solver_session) -> None: + session = new_solver_session case_path = download_file("Static_Mixer_main.cas.h5", "pyfluent/static_mixer") - root = new_solver_session.get_settings_root() - root.file.read(file_type="case", file_name=case_path) - assert "mesh-1" not in root.results.graphics.mesh.get_object_names() - root.results.graphics.mesh["mesh-1"] = {} - assert "mesh-1" in root.results.graphics.mesh.get_object_names() - assert not root.results.graphics.mesh["mesh-1"].options.nodes() - root.results.graphics.mesh["mesh-1"].options.nodes = True - assert root.results.graphics.mesh["mesh-1"].options.nodes() - root.results.graphics.mesh.rename("mesh-a", "mesh-1") - assert "mesh-a" in root.results.graphics.mesh.get_object_names() - assert "mesh-1" not in root.results.graphics.mesh.get_object_names() - del root.results.graphics.mesh["mesh-a"] - assert "mesh-a" not in root.results.graphics.mesh.get_object_names() + session.solver.root.file.read(file_type="case", file_name=case_path) + assert "mesh-1" not in session.solver.root.results.graphics.mesh.get_object_names() + session.solver.root.results.graphics.mesh["mesh-1"] = {} + assert "mesh-1" in session.solver.root.results.graphics.mesh.get_object_names() + assert not session.solver.root.results.graphics.mesh["mesh-1"].options.nodes() + session.solver.root.results.graphics.mesh["mesh-1"].options.nodes = True + assert session.solver.root.results.graphics.mesh["mesh-1"].options.nodes() + session.solver.root.results.graphics.mesh.rename("mesh-a", "mesh-1") + assert "mesh-a" in session.solver.root.results.graphics.mesh.get_object_names() + assert "mesh-1" not in session.solver.root.results.graphics.mesh.get_object_names() + del session.solver.root.results.graphics.mesh["mesh-a"] + assert "mesh-a" not in session.solver.root.results.graphics.mesh.get_object_names() diff --git a/tests/test_tui_api.py b/tests/test_tui_api.py index 668abcb0416c..5b65e308198c 100644 --- a/tests/test_tui_api.py +++ b/tests/test_tui_api.py @@ -4,7 +4,7 @@ def test_report_system_proc_stats_tui(new_solver_session, capsys) -> None: new_solver_session.start_transcript() # Issue: Transcript missing for the first TUI command - new_solver_session.tui.solver.report.system.sys_stats() - new_solver_session.tui.solver.report.system.sys_stats() + new_solver_session.solver.tui.report.system.sys_stats() + new_solver_session.solver.tui.report.system.sys_stats() captured = capsys.readouterr() assert "CPU/Memory Usage" in captured.out diff --git a/tests/util/meshing_workflow.py b/tests/util/meshing_workflow.py index c9958bf4957c..ba2f3a78acc1 100644 --- a/tests/util/meshing_workflow.py +++ b/tests/util/meshing_workflow.py @@ -46,11 +46,11 @@ def create_mesh_session(): def initialize_watertight(mesh_session): - mesh_session.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry") + mesh_session.meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry") def reset_workflow(mesh_session): - mesh_session.workflow.ResetWorkflow() + mesh_session.meshing.workflow.ResetWorkflow() @pytest.fixture @@ -68,7 +68,7 @@ def new_watertight_workflow_session(new_mesh_session): @pytest.fixture def new_watertight_workflow(new_watertight_workflow_session): - yield new_watertight_workflow_session.workflow + yield new_watertight_workflow_session.meshing.workflow _mesher = None @@ -91,7 +91,7 @@ def shared_watertight_workflow_session(shared_mesh_session): @pytest.fixture def shared_watertight_workflow(shared_watertight_workflow_session): - yield shared_watertight_workflow_session.workflow + yield shared_watertight_workflow_session.meshing.workflow _mixing_elbow_geometry_filename = None @@ -108,7 +108,9 @@ def mixing_elbow_geometry(): def initialize_fault_tolerant(mesh_session): - mesh_session.workflow.InitializeWorkflow(WorkflowType="Fault-tolerant Meshing") + mesh_session.meshing.workflow.InitializeWorkflow( + WorkflowType="Fault-tolerant Meshing" + ) @pytest.fixture @@ -119,7 +121,7 @@ def new_fault_tolerant_workflow_session(new_mesh_session): @pytest.fixture def new_fault_tolerant_workflow(new_fault_tolerant_workflow_session): - yield new_fault_tolerant_workflow_session.workflow + yield new_fault_tolerant_workflow_session.meshing.workflow _mesher = None @@ -142,7 +144,7 @@ def shared_fault_tolerant_workflow_session(shared_mesh_session): @pytest.fixture def shared_fault_tolerant_workflow(shared_fault_tolerant_workflow_session): - yield shared_fault_tolerant_workflow_session.workflow + yield shared_fault_tolerant_workflow_session.meshing.workflow _exhaust_system_geometry_filename = None