User guide#

PyFluent-Visualization enables post-processing of Fluent results, allowing you to display graphical objects and plot data efficiently.

Launch Fluent and read data#

Use the following script to launch Fluent and load your case and data files:

import ansys.fluent.core as pyfluent
from ansys.fluent.core import examples
from ansys.fluent.visualization import set_config

set_config(blocking=True, set_view_on_display="isometric")

import_case = examples.download_file(
    file_name="exhaust_system.cas.h5", directory="pyfluent/exhaust_system"
)

import_data = examples.download_file(
    file_name="exhaust_system.dat.h5", directory="pyfluent/exhaust_system"
)

solver_session = pyfluent.launch_fluent(
    precision=pyfluent.Precision.DOUBLE,
    processor_count=2,
    mode=pyfluent.FluentMode.SOLVER,
)

solver_session.settings.file.read_case(file_name=import_case)
solver_session.settings.file.read_data(file_name=import_data)

Graphics operations#

PyFluent-Visualization supports various graphical operations.

Display mesh#

The following example demonstrates how to display a mesh with and without edges:

from ansys.fluent.visualization import GraphicsWindow, Mesh

mesh = Mesh(solver=solver_session, show_edges=True, surfaces=["in1", "in2", "in3"])
window = GraphicsWindow(grid=(1, 2))
window.add_graphics(mesh, position=(0, 0))

mesh = Mesh(solver=solver_session, surfaces=["in1", "in2", "in3"])
window.add_graphics(mesh, position=(0, 1))
window.show()

Display plane-surface#

Create and visualize a plane surface at a specified z-coordinate:

from ansys.fluent.visualization import Surface

surf_xy_plane = Surface(solver=solver_session)
surf_xy_plane.type = "plane-surface"
surf_xy_plane.creation_method = "xy-plane"
surf_xy_plane.z = -0.0441921
window = GraphicsWindow()
window.add_graphics(surf_xy_plane)
window.show()

Display iso-surface#

Generate an iso-surface based on the y-coordinate:

surf_outlet_plane = Surface(
    solver=solver_session,
    type="iso-surface",
    field="y-coordinate",
    iso_value=-0.125017
    )
window = GraphicsWindow()
window.add_graphics(surf_outlet_plane)
window.show()

Display contour#

Plot a temperature contour over selected surfaces:

from ansys.fluent.visualization import Contour

temperature_contour_manifold = Contour(
    solver=solver_session,
    field="temperature",
    surfaces=["in1", "in2", "in3"],
)
window = GraphicsWindow()
window.add_graphics(temperature_contour_manifold)
window.show()

Display vector#

Visualize velocity vectors over a selected surface:

from ansys.fluent.visualization import Vector

velocity_vector = Vector(
    solver=solver_session,
    field="pressure",
    surfaces=["solid_up:1:830"],
    scale=2,
)
window = GraphicsWindow()
window.add_graphics(velocity_vector)
window.show()

Display pathlines#

Visualize pathlines to analyze flow patterns:

from ansys.fluent.visualization import Pathline

pathlines = Pathline(solver=solver_session)
pathlines.field = "velocity-magnitude"
pathlines.surfaces = ["inlet", "inlet1", "inlet2"]

window = GraphicsWindow()
window.add_graphics(pathlines)
window.show()

Plot operations#

PyFluent-Visualization supports various plot operations.

Display plot#

Generate an XY plot of temperature variations at an outlet:

from ansys.fluent.visualization import XYPlot

xy_plot = XYPlot(
    solver=solver_session,
    surfaces=["outlet"],
    y_axis_function="temperature",
)
window = GraphicsWindow()
window.add_graphics(xy_plot)
window.show()

Display solution residual plot#

Plot solution residuals:

from ansys.fluent.visualization import Monitor

residual = Monitor(solver=solver_session)
residual.monitor_set_name = "residual"
window = GraphicsWindow()
window.add_graphics(residual)
window.show()

Display solution monitors plot#

Monitor solution convergence using mass balance and velocity plots:

solver_session.settings.solution.initialization.hybrid_initialize()
solver_session.settings.solution.run_calculation.iterate(iter_count=50)

mass_bal_rplot = Monitor(solver=solver_session)
mass_bal_rplot.monitor_set_name = "mass-bal-rplot"
window = GraphicsWindow(grid=(1, 2))
window.add_graphics(mass_bal_rplot, position=(0, 0))

point_vel_rplot = Monitor(solver=solver_session, monitor_set_name="point-vel-rplot")
window.add_graphics(point_vel_rplot, position=(0, 1))
window.show()

Interactive Graphics#

The GraphicsWindow class provides functionality for managing and directly interacting with the graphics window. By registering the window with EventsManager, you can dynamically update graphics during runtime and create animations.

The following example demonstrates how to update multiple graphics windows (contour_window, xy_plot_window, and monitor_window) during different solution stages. Graphics updates occur:

  • During solution initialization

  • Whenever data is read

  • At the end of every time step during the calculation

from ansys.fluent.visualization import Contour, XYPlot, Monitor, GraphicsWindow

contour_object = Contour(
    solver=solver_session, field="velocity-magnitude", surfaces=["symmetry"]
)

xy_plot_object = XYPlot(solver=solver_session)
xy_plot_object.surfaces = ['symmetry']
xy_plot_object.y_axis_function = "temperature"

monitor_object = Monitor(solver=solver_session)
monitor_object.monitor_set_name = "residual"

contour_window = GraphicsWindow()
contour_window.add_graphics(contour_object)
contour_window.show()

xy_plot_window = GraphicsWindow()
xy_plot_window.add_graphics(xy_plot_object)
xy_plot_window.show()

monitor_window = GraphicsWindow()
monitor_window.add_graphics(monitor1)
monitor_window.show()

def auto_refresh_graphics(session, event_info):
    contour_window.refresh(session.id)
    xy_plot_window.refresh(session.id)
    monitor_window.refresh(session.id)

#Register this callback with server events.
solver_session.events.register_callback('InitializedEvent', auto_refresh_graphics)
solver_session.events.register_callback('DataReadEvent', auto_refresh_graphics)
solver_session.events.register_callback('TimestepEndedEvent', auto_refresh_graphics)

#Create animation for contour.
contour_window.animate(solver_session.id)

solver_session.settings.solution.initialization.hybrid_initialize()
solver_session.settings.solution.run_calculation.iterate(iter_count=50)

These updates are implemented using explicit callback registrations. Additionally, animations can be created from a graphics window.

This guide provides a structured approach to using PyFluent-Visualization. For detailed usage of individual modules, refer to the respective module documentation, see visualization.