Skip to content
Open
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c07231a
Docs: Added example on one way fsi
MohammedAnsys Aug 26, 2025
ae0b4e9
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Aug 28, 2025
d9e2442
chore: adding changelog file 4407.added.md [dependabot-skip]
pyansys-ci-bot Aug 28, 2025
55b3950
chore: adding changelog file 4407.documentation.md [dependabot-skip]
pyansys-ci-bot Aug 28, 2025
90f53a5
Updated total displacement plot to isometric view
MohammedAnsys Sep 3, 2025
5e66b55
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Sep 3, 2025
ba03689
Updated as per review comments
MohammedAnsys Sep 8, 2025
8f8da6e
yml update
MohammedAnsys Sep 8, 2025
9f9540b
updated as per main
MohammedAnsys Sep 8, 2025
b392341
updated module_config file as per main
MohammedAnsys Sep 8, 2025
3d040d2
updated report.py file as per main
MohammedAnsys Sep 8, 2025
c994310
updated init.pu file as per main
MohammedAnsys Sep 8, 2025
59f6f62
updated filed_data.py file as per main
MohammedAnsys Sep 8, 2025
70fe656
updated session.py file as per main
MohammedAnsys Sep 8, 2025
5b427b3
updated single batter cell file as per main
MohammedAnsys Sep 8, 2025
8152e42
updated modeling cavitaion file as per main
MohammedAnsys Sep 8, 2025
42c108c
updated environment file as per main
MohammedAnsys Sep 8, 2025
3b02a38
fix to environment_variables.rst
abhishekchitwar Sep 8, 2025
747032b
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Sep 9, 2025
7452563
Fix: review changes + conflict resolution
MohammedAnsys Sep 17, 2025
fa84c36
Fix: review changes and conflict resolution
MohammedAnsys Sep 17, 2025
ddf8917
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Sep 17, 2025
02123d0
fix to ci.yml
MohammedAnsys Sep 18, 2025
3b2aed5
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Oct 13, 2025
5e2e2b2
Update examples/00-fluent/fsi_1way_workflow.py
MohammedAnsys Oct 24, 2025
e24af44
Merge branch 'main' into docs/example_on_fsi_one_way
MohammedAnsys Oct 24, 2025
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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -633,8 +633,8 @@ jobs:
needs: [test, update-changelog, nightly-dev-test]
runs-on: ubuntu-latest
permissions:
id-token: write # required for trusted publishing
contents: write # required for GitHub release upload
id-token: write # required for trusted publishing
contents: write # required for GitHub release upload

steps:
- name: Set up Python
Expand All @@ -647,7 +647,7 @@ jobs:

- name: Upload to Private PyPi
run: |
pip install 'twine<6.2.0'
pip install twine
python -m twine upload --skip-existing ./**/*.whl
python -m twine upload --skip-existing ./**/*.tar.gz
env:
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/execute-examples-weekly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,9 @@ jobs:
run: |
python examples/00-fluent/steady_vortex.py

- name: Execute fsi_1way_workflow.py
run: |
python examples/00-fluent/fsi_1way_workflow.py

# https://github.com/ansys/pyfluent/issues/4157
# - name: Execute conjugate_heat_transfer.py
Expand All @@ -182,4 +185,4 @@ jobs:

- name: Remove all docker images
if: always()
run: make docker-clean-images
run: make docker-clean-images
1 change: 1 addition & 0 deletions doc/changelog.d/4407.documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added example on one way fsi
Binary file added doc/source/_static/fsi_1way_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/source/_static/fsi_1way_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/source/_static/fsi_1way_3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion doc/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def _stop_fluent_container(gallery_conf, fname):
# path where to save gallery generated examples
"gallery_dirs": ["examples"],
# Pattern to search for example files
"filename_pattern": r"exhaust_system_settings_api\.py|external_compressible_flow\.py|mixing_elbow_settings_api\.py|modeling_cavitation\.py|species_transport\.py|ahmed_body_workflow\.py|brake\.py|DOE_ML\.py|radiation_headlamp\.py|parametric_static_mixer_1\.py|conjugate_heat_transfer\.py|tyler_sofrin_modes\.py|lunar_lander_thermal\.py|modeling_ablation\.py|frozen_rotor_workflow\.py|mixing_tank_workflow\.py|single_battery_cell_workflow\.py|steady_vortex\.py",
"filename_pattern": r"exhaust_system_settings_api\.py|external_compressible_flow\.py|mixing_elbow_settings_api\.py|modeling_cavitation\.py|species_transport\.py|ahmed_body_workflow\.py|brake\.py|DOE_ML\.py|radiation_headlamp\.py|parametric_static_mixer_1\.py|conjugate_heat_transfer\.py|tyler_sofrin_modes\.py|lunar_lander_thermal\.py|modeling_ablation\.py|frozen_rotor_workflow\.py|mixing_tank_workflow\.py|single_battery_cell_workflow\.py|steady_vortex\.py|fsi_1way_workflow\.py",
# Do not execute examples
"plot_gallery": False,
# Remove the "Download all examples" button from the top level gallery
Expand Down
2 changes: 1 addition & 1 deletion doc/source/contributing/environment_variables.rst
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,4 @@ control the behavior of PyFluent within the same Python process. Please see the
* - REMOTING_SERVER_ADDRESS
- Specifies the IP address of the Fluent server while launching Fluent in :func:`launch_fluent() <ansys.fluent.core.launcher.launcher.launch_fluent>`.
* - SERVER_INFO_DIR
- Specifies the directory where the server-info file is created while launching Fluent in :func:`launch_fluent() <ansys.fluent.core.launcher.launcher.launch_fluent>`.
- Specifies the directory where the server-info file is created while launching Fluent in :func:`launch_fluent() <ansys.fluent.core.launcher.launcher.launch_fluent>`.
262 changes: 262 additions & 0 deletions examples/00-fluent/fsi_1way_workflow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
# Copyright (C) 2021 - 2025 ANSYS, Inc. and/or its affiliates.
# SPDX-License-Identifier: MIT
#
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

""".. _One_Way_FSI_Simulation:
Modeling One-Way Fluid-Structure Interaction
-------------------------------------------------------------
"""

# %%
# Objective
# ---------
#
# This example models turbulent airflow through a cylindrical test chamber
# that contains a steel probe. The airflow generates aerodynamic forces on
# the probe, causing it to deform. In this case, the deformation is expected
# to be small compared with the overall flow field. Because the probe’s motion
# does not significantly alter the airflow, we can treat the problem using
# a one-way fluid–structure interaction (FSI) approach.
#
# In a one-way FSI analysis, the fluid flow is solved first and the
# resulting forces are transferred to the structural model. The
# structural response is then computed independently, without feeding
# back into the fluid solution. This contrasts with a two-way FSI
# analysis, where structural deformation and fluid flow are solved
# in a fully coupled manner. The one-way approach is computationally
# more efficient and appropriate when structural feedback on the flow
# can be neglected.

# %%
# Problem Description
# -------------------
#
# The cylindrical test chamber is 20 cm long, with a diameter of 10 cm.
# Turbulent air enters the chamber at 100 m/s, flows around and through
# the steel probe, and exits through a pressure outlet.
#
#
# .. image:: ../../_static/fsi_1way_1.png
# :align: center
# :alt: One-Way Fluid-Structure Interaction Model

# %%
# Import modules
# --------------
#
# .. note::
# Importing the following classes offer streamlined access to key solver settings,
# eliminating the need to manually browse through the full settings structure.

import os

import ansys.fluent.core as pyfluent
from ansys.fluent.core import FluentMode, Precision, examples
from ansys.fluent.core.solver import (
BoundaryConditions,
Contour,
Graphics,
Initialization,
RunCalculation,
Setup,
Solution,
VelocityInlet,
)

# %%
# Launch Fluent session in solver mode
# ------------------------------------

solver = pyfluent.launch_fluent(
precision=Precision.DOUBLE,
mode=FluentMode.SOLVER,
)

# %%
# Download and read the mesh file
# -------------------------------

mesh_file = examples.download_file(
"fsi_1way.msh.h5",
"pyfluent/fsi_1way",
save_path=os.getcwd(),
)
solver.settings.file.read_case(file_name=mesh_file)

# %%
# Configure solver settings for fluid flow
# ----------------------------------------

velocity_inlet = VelocityInlet(solver, name="velocity_inlet")
velocity_inlet.momentum.velocity_magnitude = 100.0 # High-speed inlet flow (m/s)
velocity_inlet.turbulence.turbulent_viscosity_ratio = (
5 # Dimensionless, typically 1-10 for moderate turbulence
)

# %%
# Initialize and run fluid flow simulation
# ----------------------------------------

initialize = Initialization(solver)
initialize.hybrid_initialize()

calculation = RunCalculation(solver)
calculation.iterate(iter_count=100)

# %%
# Post-processing
# ---------------

graphics = Graphics(solver)
graphics.picture.x_resolution = 650 # Horizontal resolution for clear visualization
graphics.picture.y_resolution = 450 # Vertical resolution matching typical aspect ratio

graphics.contour["contour-vel"] = {
"field": "velocity-magnitude",
"surfaces_list": ["fluid-symmetry"],
"coloring": {"option": "banded"},
}

graphics.contour["contour-vel"].display()
graphics.views.restore_view(view_name="front")

graphics.picture.save_picture(file_name="fsi_1way_2.png")


# %%
# .. image:: ../../_static/fsi_1way_2.png
# :align: center
# :alt: Velocity Contour

# %%
# Structural model and material setup
# -----------------------------------
# To analyze the deformation of a steel probe under fluid flow,
# Linear Elasticity Structural model is chosen

setup = Setup(solver)
setup.models.structure.model = "linear-elasticity"
solver.settings.setup.models.structure.model = "linear-elasticity"

# Copy materials from the database and assign to solid zone

setup.materials.database.copy_by_name(type="solid", name="steel")
setup.cell_zone_conditions.solid["solid"] = {"general": {"material": "steel"}}

# %%
# Structural boundary conditions
# ------------------------------
# configure Fluent to define the steel probe's support and movement using
# structural boundary conditions

wall_boundary = BoundaryConditions(solver)

# Configure solid-symmetry boundary
wall_boundary.wall["solid-symmetry"] = {
"structure": {
"z_disp_boundary_value": 0,
"z_disp_boundary_condition": "Node Z-Displacement",
}
}

# Set solid-top boundary (fully fixed)
wall_boundary.wall["solid-top"] = {
"structure": {
"z_disp_boundary_value": 0,
"z_disp_boundary_condition": "Node Z-Displacement",
"y_disp_boundary_value": 0,
"y_disp_boundary_condition": "Node Y-Displacement",
"x_disp_boundary_value": 0,
"x_disp_boundary_condition": "Node X-Displacement",
}
}

# Copy boundary conditions from solid-symmetry to solid-symmetry:011
wall_boundary.copy(from_="solid-symmetry", to=["solid-symmetry:011"])

# Configure FSI surface
wall_boundary.wall["fsisurface-solid"] = {
"structure": {
"x_disp_boundary_condition": "Intrinsic FSI",
"y_disp_boundary_condition": "Intrinsic FSI",
"z_disp_boundary_condition": "Intrinsic FSI",
}
}

# %%
# Inclusion of Operating Pressure in Fluid-Structure Interaction Forces
# ---------------------------------------------------------------------
# Fluent uses gauge pressure for fluid-structure interaction force calculations.
# By setting ``include_pop_in_fsi_force`` to ``True``, Fluent uses absolute pressure.

setup.models.structure.expert.include_pop_in_fsi_force = True

# %%
# Configure flow settings
# -----------------------
# Disable flow equations for structural simulation

solution = Solution(solver)
solution.controls.equations["flow"] = False
solution.controls.equations["kw"] = False

# %%
# Run FSI simulation
# ------------------

solver.settings.file.write_case(file_name="probe_fsi_1way.cas.h5")

calculation.iterate(iter_count=2)

# %%
# Structural Postprocessing
# -------------------------

displacement_contour = Contour(solver, new_instance_name="displacement_contour")

displacement_contour.field = "total-displacement"
displacement_contour.surfaces_list = ["fsisurface-solid"]

displacement_contour.display()
graphics.views.restore_view(view_name="isometric")
graphics.picture.save_picture(file_name="fsi_1way_3.png")

# save the case and data file
solver.settings.file.write_case_data(file_name="probe_fsi_1way")

# %%
# .. image:: ../../_static/fsi_1way_3.png
# :align: center
# :alt: Structural Displacement Contour

# %%
# Close Fluent
# ------------
solver.exit()

#######################################################################################
# References:
# =====================================================================================
# .. _Reference:
# [1] Modeling One-Way Fluid-Structure Interaction (FSI) Within Fluent, `Ansys Fluent documentation​ <https://ansyshelp.ansys.com/public/account/secured?returnurl=/Views/Secured/corp/v252/en/flu_tg/flu_tg_fsi_1way.html>`_.

# sphinx_gallery_thumbnail_path = '_static/fsi_1way_2.png'
Loading