From 0b8d4537252bc2d784e4ed79fe7bb911af79d262 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 10 Dec 2024 17:55:17 +0530 Subject: [PATCH] doc: Add example for meshing mode. --- examples/00-postprocessing/meshing_session.py | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 examples/00-postprocessing/meshing_session.py diff --git a/examples/00-postprocessing/meshing_session.py b/examples/00-postprocessing/meshing_session.py new file mode 100644 index 00000000..1b4122a2 --- /dev/null +++ b/examples/00-postprocessing/meshing_session.py @@ -0,0 +1,127 @@ +""".. _ref_meshing_session: + +Postprocessing mesh +------------------- +This example uses PyVista and Matplotlib to demonstrate PyFluent +postprocessing capabilities. The 3D model in this example +is a mixing elbow that is being meshed, and you can plot it real time. + +""" + +from ansys.fluent.visualization import set_config + +set_config(blocking=False, set_view_on_display="isometric") + +import ansys.fluent.core as pyfluent +from ansys.fluent.core import examples + +from ansys.fluent.visualization.graphics.graphics_windows_manager import ( + FieldDataType, + graphics_windows_manager, +) +from ansys.fluent.visualization.pyvista import Graphics + +meshing = pyfluent.launch_fluent(mode="meshing", ui_mode="gui") +session_id = meshing._fluent_connection._id +graphics = Graphics(session=meshing) +mesh = graphics.Meshes["mesh-1"] + +active_window = None +active_window_id = None + +import_file_name = examples.download_file("mixing_elbow.pmdb", "pyfluent/mixing_elbow") + + +def open_window(window_id): + global active_window, active_window_id + active_window_id = window_id + graphics_windows_manager.open_window(window_id) + active_window = graphics_windows_manager.get_window(window_id) + active_window.post_object = mesh + active_window.overlay = True + + +mesh_data = {} +overlay = True + + +def plot_mesh(index, field_name, data): + raise RuntimeError("*****") + global mesh_data, active_window, overlay + if active_window is None: + return + if data is not None: + if index in mesh_data: + mesh_data[index].update({field_name: data}) + else: + mesh_data[index] = {field_name: data} + if "vertices" in mesh_data[index] and "faces" in mesh_data[index]: + active_window.set_data(FieldDataType.Meshes, mesh_data) + graphics_windows_manager.refresh_windows( + session_id, [active_window_id], overlay=overlay + ) + mesh_data = {} + overlay = True + else: + overlay = False + + +meshing.fields.field_data_streaming.register_callback(plot_mesh) +meshing.fields.field_data_streaming.start(provideBytesStream=True, chunkSize=1024) + +open_window("w0") + +### +mesh.show_edges = False +meshing.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry") + +meshing.workflow.TaskObject["Import Geometry"].Arguments = { + "FileName": import_file_name, + "LengthUnit": "in", +} +meshing.workflow.TaskObject["Import Geometry"].Execute() + +mesh.show_edges = True +meshing.workflow.TaskObject["Add Local Sizing"].AddChildToTask() +meshing.workflow.TaskObject["Add Local Sizing"].Execute() + +#### +meshing.workflow.TaskObject["Generate the Surface Mesh"].Arguments = { + "CFDSurfaceMeshControls": {"MaxSize": 0.1} +} +meshing.workflow.TaskObject["Generate the Surface Mesh"].Execute() + +meshing.workflow.TaskObject["Describe Geometry"].UpdateChildTasks( + SetupTypeChanged=False +) +meshing.workflow.TaskObject["Describe Geometry"].Arguments = { + "SetupType": "The geometry consists of only fluid regions with no voids" +} +meshing.workflow.TaskObject["Describe Geometry"].UpdateChildTasks(SetupTypeChanged=True) +meshing.workflow.TaskObject["Describe Geometry"].Execute() +meshing.workflow.TaskObject["Update Boundaries"].Arguments = { + "BoundaryLabelList": ["wall-inlet"], + "BoundaryLabelTypeList": ["wall"], + "OldBoundaryLabelList": ["wall-inlet"], + "OldBoundaryLabelTypeList": ["velocity-inlet"], +} +meshing.workflow.TaskObject["Update Boundaries"].Execute() + +### +meshing.workflow.TaskObject["Update Regions"].Execute() + +meshing.workflow.TaskObject["Add Boundary Layers"].AddChildToTask() +meshing.workflow.TaskObject["Add Boundary Layers"].InsertCompoundChildTask() +meshing.workflow.TaskObject["smooth-transition_1"].Arguments = { + "BLControlName": "smooth-transition_1", +} +meshing.workflow.TaskObject["Add Boundary Layers"].Arguments = {} +meshing.workflow.TaskObject["smooth-transition_1"].Execute() + +meshing.workflow.TaskObject["Generate the Volume Mesh"].Arguments = { + "VolumeFill": "poly-hexcore", + "VolumeFillControls": { + "HexMaxCellLength": 0.3, + }, +} +meshing.workflow.TaskObject["Generate the Volume Mesh"].Execute()