Skip to content

docs: Add Podman Usage Examples and Documentation Improvements [skip tests] #4224

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jul 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changelog.d/4224.documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add podman usage examples and documentation improvements [skip tests]
59 changes: 55 additions & 4 deletions doc/source/user_guide/make_container_image.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,13 @@ Run Docker container using the command line

When you run the Docker container, you must specify the Ansys license file.

Execute this command to run the Docker container in solver mode:
To launch the container in solution mode, use:

.. code:: console

sudo docker run -it --name ansys-inc -e ANSYSLMD_LICENSE_FILE=<license file or server> ansys_inc 3ddp -gu

Execute this command to run the Docker container in meshing mode:
To launch the container in meshing mode, use:

.. code:: console

Expand All @@ -79,14 +79,65 @@ Execute this command to run the Docker container in meshing mode:
Run Docker container using PyFluent
-----------------------------------

Install `PyFluent <https://github.com/ansys/pyfluent>`_ and execute this code
to run the Docker container using PyFluent:
1. Install `PyFluent <https://github.com/ansys/pyfluent>`_.
2. Use the following Python code to run the container:

.. code:: python

import os
import ansys.fluent.core as pyfluent
os.environ["PYFLUENT_USE_DOCKER_COMPOSE"] = "1"
os.environ["ANSYSLMD_LICENSE_FILE"] = "<license file or server>"
custom_config = {'fluent_image': 'ansys_inc:latest', 'mount_source': f"{os.getcwd()}", 'auto_remove': False}
solver_session = pyfluent.launch_fluent(container_dict=custom_config)


Run Podman container using the command line
-------------------------------------------

Follow these steps to pull and run a Fluent container using Podman.

1. Pull the Docker image into Podman:

.. code:: console

sudo podman pull docker-daemon:ansys-inc:latest


2. Verify the image in the local Podman registry:

.. code:: console

sudo podman images


When you run the Podman container, you must specify the Ansys license file.

To launch the container in solution mode, use:

.. code:: console

sudo podman run -it --name ansys-inc -e ANSYSLMD_LICENSE_FILE=<license file or server> ansys_inc 3ddp -gu

To launch the container in meshing mode, use:

.. code:: console

sudo podman run -it --name ansys-inc -e ANSYSLMD_LICENSE_FILE=<license file or server> ansys_inc 3ddp -gu -meshing


Run Podman container using PyFluent
-----------------------------------

1. Install `PyFluent <https://github.com/ansys/pyfluent>`_.
2. Use the following Python code to run the container:

.. code:: python

import os
import ansys.fluent.core as pyfluent
os.environ["ANSYSLMD_LICENSE_FILE"] = "<license file or server>"
os.environ["PYFLUENT_USE_PODMAN_COMPOSE"] = "1"
custom_config = {'fluent_image': 'ansys_inc:latest', 'mount_source': f"{os.getcwd()}", 'auto_remove': False}
solver_session = pyfluent.launch_fluent(container_dict=custom_config)

6 changes: 3 additions & 3 deletions doc/source/user_guide/meshing/meshing_workflows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -819,10 +819,10 @@ Export Fluent 2D mesh
>>> )
>>> export_mesh.Execute()

Switch to solver mode
~~~~~~~~~~~~~~~~~~~~~
Switch to solution mode
~~~~~~~~~~~~~~~~~~~~~~~

Switching to solver mode is not allowed in 2D Meshing mode.
Switching to solution mode is not allowed in 2D Meshing mode.


State access
Expand Down
6 changes: 3 additions & 3 deletions doc/source/user_guide/session/launching_ansys_fluent.rst
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ Launcher options
The following examples show different ways that you can launch Fluent locally.
For more information, see :func:`launch_fluent() <ansys.fluent.core.launcher.launcher.launch_fluent>`.

Solver mode
~~~~~~~~~~~
Solution mode
~~~~~~~~~~~~~
These two examples show equivalent ways to launch Fluent in solution mode:

.. code:: python
Expand Down Expand Up @@ -329,7 +329,7 @@ Set environment variables to select the container engine:

>>> import os
>>> os.environ["PYFLUENT_LAUNCH_CONTAINER"] = "1"
>>> os.environ["PYFLUENT_USE_PODMAN_COMPOSE"] = "1" # or os.environ["PYFLUENT_USE_PODMAN_COMPOSE"] = "1"
>>> os.environ["PYFLUENT_USE_DOCKER_COMPOSE"] = "1" # or os.environ["PYFLUENT_USE_PODMAN_COMPOSE"] = "1"


Then launch:
Expand Down
140 changes: 74 additions & 66 deletions doc/source/user_guide/usability.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,69 +20,78 @@ Examples
>>> import ansys.fluent.core as pyfluent
>>>
>>> # Semantic search
>>> pyfluent.search("font")
<meshing_session>.meshing_utilities.count_marked_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.delete_marked_faces_in_zones (Command) (similarity: 98.31%)
<meshing_session>.meshing_utilities.get_free_faces_count (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.get_multi_faces_count (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.get_zones_with_free_faces_for_given_face_zones (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.get_zones_with_marked_faces_for_given_face_zones (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.get_zones_with_multi_faces_for_given_face_zones (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_bad_quality_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_duplicate_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_faces_by_quality (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_faces_deviating_from_size_field (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_faces_in_self_proximity (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_faces_using_node_degree (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_free_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_island_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_multi_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_self_intersecting_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.mark_sliver_faces (Query) (similarity: 98.31%)
<meshing_session>.meshing_utilities.refine_marked_faces_in_zones (Query) (similarity: 98.31%)
<meshing_session>.preferences.Appearance.Charts.Font (Object) (similarity: 98.31%)
<meshing_session>.preferences.Appearance.Charts.Font.Axes (Parameter) (similarity: 98.31%)
<meshing_session>.preferences.Appearance.Charts.Font.AxesTitles (Parameter) (similarity: 98.31%)
<meshing_session>.preferences.Appearance.Charts.Font.Legend (Parameter) (similarity: 98.31%)
<meshing_session>.preferences.Appearance.Charts.Font.Title (Parameter) (similarity: 98.31%)
>>> pyfluent.search("speed")
...
<solver_session>.mesh.swap_mesh_faces (Command) (similarity: 98.31%)
<solver_session>.preferences.Appearance.Charts.Font (Object) (similarity: 98.31%)
<solver_session>.preferences.Appearance.Charts.Font.Axes (Parameter) (similarity: 98.31%)
<solver_session>.preferences.Appearance.Charts.Font.AxesTitles (Parameter) (similarity: 98.31%)
<solver_session>.preferences.Appearance.Charts.Font.Legend (Parameter) (similarity: 98.31%)
<solver_session>.preferences.Appearance.Charts.Font.Title (Parameter) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>] (Object) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].field_name (Parameter) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].list_properties (Command) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].option (Parameter) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].profile_name (Parameter) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].resize (Command) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].udf (Parameter) (similarity: 98.31%)
<solver_session>.setup.physics.volumes.solid["<name>"].solid_motion.solid_motion_velocity[<index>].value (Parameter) (similarity: 98.31%)
<solver_session>.setup.reference_frames["<name>"].motion.constant_velocity (Object) (similarity: 98.31%)
<solver_session>.setup.reference_frames["<name>"].motion.constant_velocity.linear_velocity (Parameter) (similarity: 98.31%)
<solver_session>.setup.reference_frames["<name>"].motion.constant_velocity.rotational_velocity (Object) (similarity: 98.31%)
<solver_session>.setup.reference_frames["<name>"].motion.constant_velocity.rotational_velocity.rotation_axis (Parameter) (similarity: 98.31%)
<solver_session>.setup.reference_frames["<name>"].motion.constant_velocity.rotational_velocity.speed (Parameter) (similarity: 98.31%)
<solver_session>.setup.reference_values.velocity (Parameter) (similarity: 98.31%)
<solver_session>.solution.initialization.hybrid_init_options.general_settings.initialization_options.const_velocity (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.expert.physical_velocity_formulation (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.expert.velocity_formulation (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.high_speed_numerics (Object) (similarity: 98.31%)
<solver_session>.solution.methods.high_speed_numerics.enable (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.high_speed_numerics.expert (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.high_speed_numerics.robust_fluxes (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.high_speed_numerics.visualize_pressure_discontinuity_sensor (Parameter) (similarity: 98.31%)
<solver_session>.solution.methods.multiphase_numerics.advanced_stability_controls.hybrid_nita.instability_detector.set_velocity_limit (Parameter) (similarity: 98.31%)
...
>>>
>>> # Semantic search within a specific API object
>>> pyfluent.search("font", api_path="<solver_session>.results.annotation")
<solver_session>.results.annotation["<name>"].font_color (Parameter) (similarity: 98.31%)
<solver_session>.results.annotation["<name>"].font_name (Parameter) (similarity: 98.31%)
<solver_session>.results.annotation["<name>"].font_size (Parameter) (similarity: 98.31%)
<solver_session>.results.annotation["<name>"].font_slant (Parameter) (similarity: 98.31%)
<solver_session>.results.annotation["<name>"].font_weight (Parameter) (similarity: 98.31%)
>>> pyfluent.search("load", api_path="<solver_session>.parallel.partition.set")
<solver_session>.parallel.partition.set.dpm_load_balancing (Object) (similarity: 98.31%)
<solver_session>.parallel.partition.set.dpm_load_balancing.interval (Parameter) (similarity: 98.31%)
<solver_session>.parallel.partition.set.dpm_load_balancing.load_balancing (Parameter) (similarity: 98.31%)
<solver_session>.parallel.partition.set.dpm_load_balancing.threshold (Parameter) (similarity: 98.31%)
<solver_session>.parallel.partition.set.load_distribution (Parameter) (similarity: 98.31%)
>>>
>>> # Chinese semantic search
>>> pyfluent.search("读", language="cmn") # search 'read' in Chinese
<solver_session>.file.convert_hanging_nodes_during_read (Parameter) (similarity: 100.0%)
<solver_session>.file.import_.read (Command) (similarity: 100.0%)
<solver_session>.file.interpolate.read_data (Command) (similarity: 100.0%)
<solver_session>.file.read (Command) (similarity: 100.0%)
<solver_session>.file.read_case (Command) (similarity: 100.0%)
<solver_session>.file.read_case_data (Command) (similarity: 100.0%)
<solver_session>.file.read_case_lightweight (Command) (similarity: 100.0%)
<solver_session>.file.read_data (Command) (similarity: 100.0%)
<solver_session>.file.read_field_functions (Command) (similarity: 100.0%)
<solver_session>.file.read_injections (Command) (similarity: 100.0%)
<solver_session>.file.read_isat_table (Command) (similarity: 100.0%)
<solver_session>.file.read_journal (Command) (similarity: 100.0%)
<solver_session>.file.read_macros (Command) (similarity: 100.0%)
<solver_session>.file.read_mesh (Command) (similarity: 100.0%)
<solver_session>.file.read_pdf (Command) (similarity: 100.0%)
<solver_session>.file.read_profile (Command) (similarity: 100.0%)
<solver_session>.file.read_settings (Command) (similarity: 100.0%)
<solver_session>.file.read_surface_mesh (Command) (similarity: 100.0%)
<solver_session>.file.table_file_manager.read_table_file (Command) (similarity: 100.0%)
>>> # Spanish semantic search
>>> pyfluent.search("superficie", language="spa") # search 'surface' in Spanish
<meshing_session>.preferences.Appearance.SurfaceEmissivity (Parameter) (similarity: 100.0%)
<meshing_session>.preferences.Appearance.SurfaceSpecularity (Parameter) (similarity: 100.0%)
<meshing_session>.preferences.Appearance.SurfaceSpecularityForContours (Parameter) (similarity: 100.0%)
<meshing_session>.preferences.Graphics.Performance.SurfaceCaching (Parameter) (similarity: 100.0%)
<meshing_session>.preferences.Graphics.SurfaceGeneralDisplacement (Parameter) (similarity: 100.0%)
<solver_session>.design.geometry.parameterize_and_explore.design_change.export.stl_surfaces (Command) (similarity: 100.0%)
<solver_session>.design.geometry.parameterize_and_explore.design_change.history.surfaces (Parameter) (similarity: 100.0%)
<solver_session>.design.geometry.parameterize_and_explore.design_change.preview.surfaces (Parameter) (similarity: 100.0%)
...
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom (Object) (similarity: 88.89%)
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom.field_name (Parameter) (similarity: 88.89%)
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom.option (Parameter) (similarity: 88.89%)
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom.profile_name (Parameter) (similarity: 88.89%)
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom.udf (Parameter) (similarity: 88.89%)
<solver_session>.setup.boundary_conditions.intake_fan["<name>"].multiphase.ht_bottom.value (Parameter) (similarity: 88.89%)
...
<solver_session>.setup.boundary_conditions.outlet_vent["<name>"].list (Command) (similarity: 85.71%)
<solver_session>.setup.boundary_conditions.outlet_vent["<name>"].list_properties (Command) (similarity: 85.71%)
<solver_session>.setup.boundary_conditions.outlet_vent["<name>"].make_a_copy (Command) (similarity: 85.71%)
<solver_session>.setup.boundary_conditions.outlet_vent["<name>"].momentum (Object) (similarity: 85.71%)
...
<solver_session>.results.graphics.pathline["<name>"].axes.rules.x_axis.major_rule_line_color (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.x_axis.major_rule_weight (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.x_axis.minor_rule_line_color (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.x_axis.minor_rule_weight (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.y_axis.major_rule_line_color (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.y_axis.major_rule_weight (Parameter) (similarity: 83.33%)
<solver_session>.results.graphics.pathline["<name>"].axes.rules.y_axis.minor_rule_line_color (Parameter) (similarity: 83.33%)
...
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.species.tss_scalar["<name>"].profile_name (Parameter) (similarity: 82.35%)
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.structure.x_disp_boundary_value.profile_name (Parameter) (similarity: 82.35%)
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.structure.y_disp_boundary_value.profile_name (Parameter) (similarity: 82.35%)
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.structure.z_disp_boundary_value.profile_name (Parameter) (similarity: 82.35%)
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.thermal.backflow_total_temperature.profile_name (Parameter) (similarity: 82.35%)
<solver_session>.setup.physics.volumes.solid["<name>"].boundaries.pressure_outlet["<name>"].settings.turbulence.backflow_intermittency.profile_name (Parameter) (similarity: 82.35%)
...
>>>
>>> # Chinese semantic search within a specific API object
Expand All @@ -102,11 +111,8 @@ Examples
<solver_session>.tui.results.report.simulation_reports.read_simulation_report_template_file (Command) (similarity: 100.0%)
>>>
>>> # Whole word search
>>> pyfluent.search("ApplicationFontSize", match_whole_word=True)
<meshing_session>.preferences.Appearance.ApplicationFontSize (Parameter)
<solver_session>.preferences.Appearance.ApplicationFontSize (Parameter)
<meshing_session>.tui.preferences.appearance.application_font_size (Command)
<solver_session>.tui.preferences.appearance.application_font_size (Command)
>>> pyfluent.search("iteration_at_creation_or_edit", match_whole_word=True)
<solver_session>.solution.monitor.convergence_conditions.convergence_reports["<name>"].iteration_at_creation_or_edit (Parameter)
>>>
>>> # Whole word search within a specific API object
>>> pyfluent.search("ApplicationFontSize", match_whole_word=True, api_path="preferences")
Expand All @@ -128,9 +134,11 @@ Examples
...
>>>
>> # Wildcard pattern search within a specific API object
>>> pyfluent.search("local*", api_path="mesh_interfaces")
<solver_session>.setup.mesh_interfaces.interface["<name>"].local_absolute_mapped_tolerance (Parameter)
<solver_session>.setup.mesh_interfaces.interface["<name>"].local_relative_mapped_tolerance (Parameter)
>>> pyfluent.search("iter*", api_path="<solver_session>.parallel.multidomain")
<solver_session>.parallel.multidomain.conjugate_heat_transfer.set.coupling.iter_per_coupling_count (Parameter)
<solver_session>.parallel.multidomain.conjugate_heat_transfer.set.coupling.single_session_coupling.iteration (Parameter)
<solver_session>.parallel.multidomain.solve.dual_time_iterate (Command)
<solver_session>.parallel.multidomain.solve.iterate (Command)
>>>
>>> # Misspelled search
>>> pyfluent.search("cfb_lma")
Expand Down
4 changes: 2 additions & 2 deletions examples/00-fluent/conjugate_heat_transfer.py
Original file line number Diff line number Diff line change
Expand Up @@ -848,8 +848,8 @@
solver_session.results.surfaces.iso_surface["x=0.012826"] = {"iso_values": [0.012826]}

#############################################################################
# Vecotor Plot
# ============
# Vector Plot
# ===========

vector1 = Vector(solver=solver_session, surfaces=["x=0.012826"], scale=2.0, skip=5)
window3 = GraphicsWindow()
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ dependencies = [
"grpcio-status>=1.26.0",
"nltk>=3.9.1",
"numpy>=1.14.0,<3.0.0",
"pandas>=1.1.0,<2.3",
"pandas>=1.1.0,<3.0.0",
"pyansys-tools-report>=0.8.1",
"pyyaml>=6.0",
]
Expand Down
Loading