Skip to content
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
43 changes: 43 additions & 0 deletions doc/source/user_guide/data_transfer.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.. _ref_data_transfer:

Data transfer
=============

Data transfer helps in transferring a case or a mesh file between instances of fluent.
We need to specify a source instance and one or multiple destination instances.

Sample usage
------------

You can use the 'transfer_case' to transfer either a mesh or a case file by importing it
and passing the source and destination instances along with the file type. You can either
generate the files in the parent instance or just read it.

The following example show the usage of 'transfer_case' by reading a mesh file in a
pure meshing session and transferring it to a solver session.

.. code-block:: python

>>> import ansys.fluent.core as pyfluent
>>> from ansys.fluent.core.examples import download_file
>>> from ansys.fluent.core.utils.data_transfer import transfer_case

>>> mesh_filename = download_file("mixing_elbow.msh.h5", "pyfluent/mixing_elbow")
>>> pure_meshing_session = pyfluent.launch_fluent(mode="pure-meshing")
>>> pure_meshing_session.tui.file.read_mesh(import_filename)

>>> solver_session = pyfluent.launch_fluent(mode="solver")

>>> transfer_case(
>>> source_instance=meshing,
>>> solvers=[solver],
>>> file_type="mesh",
>>> file_name_stem='',
>>> num_files_to_try=1,
>>> clean_up_temp_file=True,
>>> overwrite_previous=True
>>> )


Similarly, 'transfer_case' can also be used to transfer a case file from one instance of fluent
to another.
1 change: 1 addition & 0 deletions doc/source/user_guide/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Python code to control and monitor Ansys Fluent.
boundary_conditions
solution
case_reader
data_transfer


Overview
Expand Down
4 changes: 3 additions & 1 deletion src/ansys/fluent/core/utils/data_transfer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from functools import partial
import os
import tempfile

import ansys.fluent.core as pyfluent
from ansys.fluent.core.utils.async_execution import asynchronous
from ansys.fluent.core.utils.logging import LOG

Expand Down Expand Up @@ -56,7 +58,7 @@ def transfer_case(
"""
for idx in range(num_files_to_try):
file_name = (file_name_stem or "temp_case_file_") + "_" + str(idx)
folder = os.getenv("TMP", os.getenv("TMPDIR", "."))
folder = tempfile.mkdtemp(prefix="temp_store-", dir=pyfluent.EXAMPLES_PATH)
file_name = os.path.join(folder, file_name)
LOG.info(f"Trying to save mesh from meshing session: {file_name}")
if overwrite_previous or not os.path.isfile(file_name):
Expand Down
44 changes: 44 additions & 0 deletions tests/test_pure_mesh_vs_mesh_workflow.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import pytest

from ansys.fluent.core.examples import download_file


def test_pure_meshing_mode(load_mixing_elbow_pure_meshing):
pure_meshing_session = load_mixing_elbow_pure_meshing
Expand Down Expand Up @@ -49,3 +51,45 @@ def test_meshing_mode_post_switching_to_solver(load_mixing_elbow_meshing):
# Post switching to solver session, meshing session specific attributes are unavailable
with pytest.raises(AttributeError):
meshing_session.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")


def test_transfer_mesh_to_solvers(
launch_fluent_pure_meshing, launch_fluent_solver_3ddp_t2
):
mesh_filename = download_file("mixing_elbow.msh.h5", "pyfluent/mixing_elbow")
pure_meshing_session = launch_fluent_pure_meshing
pure_meshing_session.tui.file.read_mesh(mesh_filename)
pure_meshing_session.tui.mesh.check_mesh()
mesh_info = pure_meshing_session.scheme_eval.string_eval(
"(%tg-length-of-entity-list)"
)
pure_meshing_session_cell_count = mesh_info.strip("( )").split()[3]

solver_session = launch_fluent_solver_3ddp_t2
pure_meshing_session.transfer_mesh_to_solvers([solver_session], file_type="mesh")
solver_session.tui.mesh.check()
mesh_info = solver_session.scheme_eval.string_eval("(inquire-grids)")
solver_session_cell_count = mesh_info.strip("( )").split()[1]

assert pure_meshing_session_cell_count == solver_session_cell_count


def test_transfer_case_to_solvers(
launch_fluent_pure_meshing, launch_fluent_solver_3ddp_t2
):
case_filename = download_file("mixing_elbow.cas.h5", "pyfluent/mixing_elbow")
pure_meshing_session = launch_fluent_pure_meshing
pure_meshing_session.tui.file.read_case(case_filename)
pure_meshing_session.tui.mesh.check_mesh()
mesh_info = pure_meshing_session.scheme_eval.string_eval(
"(%tg-length-of-entity-list)"
)
pure_meshing_session_cell_count = mesh_info.strip("( )").split()[3]

solver_session = launch_fluent_solver_3ddp_t2
pure_meshing_session.transfer_mesh_to_solvers([solver_session], file_type="case")
solver_session.tui.mesh.check()
mesh_info = solver_session.scheme_eval.string_eval("(inquire-grids)")
solver_session_cell_count = mesh_info.strip("( )").split()[1]

assert pure_meshing_session_cell_count == solver_session_cell_count
7 changes: 7 additions & 0 deletions tests/util/fixture_fluent.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ def sample_solver_session(with_launching_container):
solver_session.exit()


@pytest.fixture
def launch_fluent_pure_meshing(with_launching_container):
pure_meshing_session = pyfluent.launch_fluent(mode="pure-meshing")
yield pure_meshing_session
pure_meshing_session.exit()


@pytest.fixture
def launch_fluent_solver_3ddp_t2(with_launching_container):
solver_session = pyfluent.launch_fluent(
Expand Down