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
9 changes: 8 additions & 1 deletion src/ansys/fluent/core/launcher/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,14 @@ def launch_fluent(
if (show_gui is False) or (
show_gui is None and (os.getenv("PYFLUENT_SHOW_SERVER_GUI") != "1")
):
launch_string += " -hidden"
aargs = additional_arguments
if (
"-g " not in aargs
and "-gu " not in aargs
and not aargs.endswith("-g")
and not aargs.endswith("-gu")
):
launch_string += " -hidden"
LOG.info("Launching Fluent with cmd: %s", launch_string)
sifile_last_mtime = Path(server_info_filepath).stat().st_mtime
if env is None:
Expand Down
24 changes: 12 additions & 12 deletions src/ansys/fluent/core/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,13 +434,11 @@ class _Uploader:

def __init__(self, pim_instance):
self.pim_instance = pim_instance

self.file_service = None
try:
upload_server = self.pim_instance.services["http-simple-upload-server"]
except AttributeError:
LOG.error("PIM is not installed or not authorized.")
except KeyError:
self.file_service = None
except (AttributeError, KeyError):
pass
else:
from simple_upload_server.client import Client

Expand All @@ -450,13 +448,15 @@ def __init__(self, pim_instance):

def upload(self, file_path: str, remote_file_name: str = None):
"""Uploads a file on the server."""
expanded_file_path = os.path.expandvars(file_path)
upload_file_name = remote_file_name or os.path.basename(expanded_file_path)
self.file_service.upload_file(expanded_file_path, upload_file_name)
if self.file_service:
expanded_file_path = os.path.expandvars(file_path)
upload_file_name = remote_file_name or os.path.basename(expanded_file_path)
self.file_service.upload_file(expanded_file_path, upload_file_name)

def download(self, file_name: str, local_file_path: str = None):
"""Downloads a file from the server."""
if self.file_service.file_exist(file_name):
self.file_service.download_file(file_name, local_file_path)
else:
raise FileNotFoundError("Remote file does not exist.")
if self.file_service:
if self.file_service.file_exist(file_name):
self.file_service.download_file(file_name, local_file_path)
else:
raise FileNotFoundError("Remote file does not exist.")
43 changes: 43 additions & 0 deletions src/ansys/fluent/core/session_pure_meshing.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
**********PRESENTLY SAME AS MESHING WITHOUT THE SWITCH TO SOLVER***********
"""


from ansys.fluent.core.fluent_connection import _FluentConnection
from ansys.fluent.core.session import _BaseSession
from ansys.fluent.core.session_base_meshing import _BaseMeshing
from ansys.fluent.core.utils.data_transfer import transfer_case


class PureMeshing(_BaseSession):
Expand Down Expand Up @@ -50,3 +52,44 @@ def PMFileManagement(self):
def preferences(self):
"""preferences datamodel root."""
return self._base_meshing.preferences

def transfer_mesh_to_solvers(
self,
solvers,
file_type: str = "case",
file_name_stem: str = None,
num_files_to_try: int = 1,
clean_up_mesh_file: bool = True,
overwrite_previous: bool = True,
):
"""Transfer mesh to Fluent solver instances.

Parameters
----------
solvers : iterable
Sequence of solver instances
file_type : str, default "case"
"case" or "mesh"
file_name_stem : str
Optional file name stem
num_files_to_try : int, default 1
Optional number of files to try to write,
each with a different generated name.
Defaults to 1
clean_up_mesh_file: bool, default True
Whether to remove the file at the end
overwrite_previous: bool, default True
Whether to overwrite the file if it already exists
Returns
-------
None
"""
transfer_case(
self,
solvers,
file_type,
file_name_stem,
num_files_to_try,
clean_up_mesh_file,
overwrite_previous,
)
87 changes: 87 additions & 0 deletions src/ansys/fluent/core/utils/data_transfer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from functools import partial
import os

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


@asynchronous
def read_case_into(solver, file_type, file_name):
LOG.info(f"Trying to read case: {file_name}")
solver.upload(file_name)
solver.file.read(file_name=file_name, file_type=file_type)
LOG.info(f"Have read case: {file_name}")


def read_case_into_each(solvers, file_type, file_name):
reads = []
for solver in solvers:
reads.append(read_case_into(solver, file_type, file_name))
for r in reads:
r.result()


def transfer_case(
source_instance,
solvers,
file_type,
file_name_stem,
num_files_to_try,
clean_up_temp_file,
overwrite_previous,
):
"""Transfer case between instances.

Parameters
----------
source_instance : object
Fluent instance (tested for meshing instance)
solvers : iterable
Sequence of solver instances
file_type : str
"case" or "mesh"
file_name_stem : str
Optional file name stem
num_files_to_try : int
Optional number of files to try to write,
each with a different generated name.
Defaults to 1
clean_up_mesh_file: bool
Whether to remove the file at the end
overwrite_previous: bool
Whether to overwrite the file if it already exists
Returns
-------
None
"""
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", "."))
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):
LOG.info(f"Saving mesh from meshing session: {file_name}")
file_menu = source_instance.tui.file
writer = partial(
file_menu.write_mesh if file_type == "mesh" else file_menu.write_case,
file_name,
)
if os.path.isfile(file_name):
writer("y")
else:
writer()
full_file_name = (
file_name + "." + ("msh.h5" if file_type == "mesh" else "cas.h5")
)
source_instance.download(full_file_name, ".")
LOG.info(f"Saved mesh from meshing session: {full_file_name}")
read_case_into_each(solvers, file_type, full_file_name)
if clean_up_temp_file:
try:
os.remove(full_file_name)
except BaseException as ex:
LOG.warn(
f"Encountered exception while cleaning up during case transfer {ex}"
)
return
raise RuntimeError("Could not write mesh from meshing session.")