File Session#

The FileSession class mimics the functionality of live session objects, allowing you to access field data and other relevant information without a live Fluent session. You command FileSession objects to read your input files before you access the data through the FileSession object methods.

Sample usage#

The following examples cover both single-phase and multiphase cases. After case and data files are loaded, field information is accessed and some field data is extracted. Here, the extraction uses two approaches: a transaction-based approach where multiple data requests are bundled into each transaction and a direct approach where a sequence of separate requests are made.

Single-phase#

>>> from ansys.fluent.core.file_session import FileSession
>>> from ansys.fluent.core import (
>>>   examples,
>>>   ScalarFieldDataRequest,
>>>   SurfaceDataType,
>>>   SurfaceFieldDataRequest,
>>>   VectorFieldDataRequest,
>>> )

>>> case_file_name = examples.download_file("elbow1.cas.h5", "pyfluent/file_session")
>>> data_file_name = examples.download_file("elbow1.dat.h5", "pyfluent/file_session")
>>> file_session = FileSession(case_file_name, data_file_name)

>>> file_session.fields.field_info.get_scalar_field_range("SV_T")
[0.0, 313.1515948109515]
>>> file_session.fields.field_info.get_surfaces_info()
{'wall': {'surface_id': [3],
 'zone_id': -1,
 'zone_type': 'wall',
 'type': 'plane'},
 'symmetry': {'surface_id': [4],
 'zone_id': -1,
 'zone_type': 'wall',
 'type': 'plane'},
  .....
 'default-interior': {'surface_id': [9],
 'zone_id': -1,
 'zone_type': 'wall',
 'type': 'plane'}}
>>> file_session.fields.field_info.get_scalar_fields_info()
{'SV_ARTIFICIAL_WALL_FLAG': {'display_name': 'SV_ARTIFICIAL_WALL_FLAG',
 'section': 'field-data',
 'domain': 'phase-1'},
 'SV_D': {'display_name': 'SV_D',
 'section': 'field-data',
 'domain': 'phase-1'},
 .....
 'SV_WALL_YPLUS_UTAU': {'display_name': 'SV_WALL_YPLUS_UTAU',
 'section': 'field-data',
 'domain': 'phase-1'}}
 >>> file_session.fields.field_info.get_vector_fields_info()
 {'velocity': {'x-component': 'SV_U',
  'y-component': 'SV_V',
  'z-component': 'SV_W'}}
 >>> transaction = file_session.fields.field_data.new_transaction()
 >>> vertices_and_faces_connectivity_request = SurfaceFieldDataRequest(
 >>>      data_types=[SurfaceDataType.Vertices, SurfaceDataType.FacesConnectivity],
 >>>      surfaces=[3, 4],
 >>> )
 >>> solution_variable_temperature_request = ScalarFieldDataRequest(field_name="SV_T", surfaces=[3, 4], node_value=False, boundary_value=False)
 >>> velocity_request = VectorFieldDataRequest(field_name="velocity", surfaces=[3, 4])
 >>> transaction.add_requests(vertices_and_faces_connectivity_request, solution_variable_temperature_request, velocity_request)
 >>> data = transaction.get_response()
 >>> data.get_field_data(vertices_and_faces_connectivity_request)[3][SurfaceDataType.Vertices]
 array([[ 0.        , -0.1016    ,  0.        ],
     [-0.00635   , -0.1016    ,  0.        ],
     [-0.00634829, -0.10203364,  0.00662349],
     ...,
     [ 0.01857703, -0.19223897,  0.03035362],
     [ 0.0124151 , -0.19273971,  0.03034735],
     [ 0.00620755, -0.19304685,  0.03033731]])
 >>> data.get_field_data(solution_variable_temperature_request)[4]
 array([293.14999, 293.14999, 293.14999, ..., 293.14999, 293.14999,
     293.14999])
 >>> data.get_field_data(velocity_request).keys()
 dict_keys([3, 4]
 >>> data.get_field_data(velocity_request)[4].shape
 (2018, 3)

 >>> vertices_request = SurfaceFieldDataRequest(data_types=[SurfaceDataType.Vertices], surfaces=[3, 4])
 >>> file_session.fields.field_data.get_field_data(vertices_request)[3].shape
 (3810, 3)
 >>> file_session.fields.field_data.get_field_data(vertices_request)[3][1500][0]
 0.12405861914157867
 >>> file_session.fields.field_data.get_field_data(ScalarFieldDataRequest(field_name="SV_T", surfaces=["wall"]))["wall"].shape
 (3630,)
 >>> file_session.fields.field_data.get_field_data(ScalarFieldDataRequest(field_name="SV_T", surfaces=["wall"]))["wall"][1500]
 293.18071329432047
 >>> velocity_request = VectorFieldDataRequest(field_name="velocity", surfaces=["symmetry"])
 >>> file_session.fields.field_data.get_field_data(velocity_request)["symmetry"].shape
 (2018, 3)
 >>> file_session.fields.field_data.get_field_data(velocity_request)["symmetry"][1000][0]
 0.001690600193527586

Multiphase#

>>> from ansys.fluent.core.file_session import FileSession
>>> from ansys.fluent.core import (
>>>   examples,
>>>   ScalarFieldDataRequest,
>>>   SurfaceDataType,
>>>   SurfaceFieldDataRequest,
>>>   VectorFieldDataRequest,
>>> )

>>> case_file_name = examples.download_file("mixing_elbow_mul_ph.cas.h5", "pyfluent/file_session")
>>> data_file_name = examples.download_file("mixing_elbow_mul_ph.dat.h5", "pyfluent/file_session")
>>> file_session = FileSession()
>>> file_session.read_case(case_file_name)
>>> file_session.read_data(data_file_name)

>>> file_session.fields.field_info.get_scalar_field_range("phase-2:SV_P")
[0.0, 1.5435200335871788e-11]
>>> file_session.fields.field_info.get_scalar_fields_info()
{'phase-1:SV_ARTIFICIAL_WALL_FLAG': {'display_name': 'SV_ARTIFICIAL_WALL_FLAG',
 'section': 'field-data',
 'domain': 'phase-1'},
 'phase-1:SV_DENSITY': {'display_name': 'SV_DENSITY',
 'section': 'field-data',
 'domain': 'phase-1'},
 .....
 'phase-4:': {'display_name': '',
 'section': 'field-data',
 'domain': 'phase-4'}}
 >>> file_session.fields.field_info.get_vector_fields_info()
 {'phase-1:velocity': {'x-component': 'phase-1: SV_U',
  'y-component': 'phase-1: SV_V',
  'z-component': 'phase-1: SV_W'},
  .....
  'phase-4:velocity': {'x-component': 'phase-4: SV_U',
  'y-component': 'phase-4: SV_V',
  'z-component': 'phase-4: SV_W'}}
 >>> transaction = file_session.fields.field_data.new_transaction()
 >>> ph1_density_request = ScalarFieldDataRequest(field_name="phase-1:SV_DENSITY", surfaces=[30], node_value=False, boundary_value=False)
 >>> ph1_velocity_request = VectorFieldDataRequest(field_name="phase-1:velocity", surfaces=[30])
 >>> transaction.add_requests(ph1_density_request, ph1_velocity_request)
 >>> data = transaction.get_response()
 >>> data.get_field_data(ph1_density_request)[30]
 array([1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225, 1.225,
     1.225])
 >>> data.get_field_data(ph1_velocity_request)[30].shape
 (55, 3)

 >>> vertices_data_request = SurfaceFieldDataRequest(data_types=[SurfaceDataType.Vertices], surfaces=[30])
 >>> file_session.fields.field_data.get_field_data(vertices_data_request)[30].shape
 (79, 3)
 >>> file_session.fields.field_data.get_field_data(vertices_data_request)[30][50][0]
 0.14896461503555408
 >>> ph1_pressure_request = ScalarFieldDataRequest(field_name="phase-1:SV_P", surfaces=["wall-elbow"])
 >>> file_session.fields.field_data.get_field_data(ph1_pressure_request)["wall-elbow"].shape
 (2168,)
 >>> file_session.fields.field_data.get_field_data(ph1_pressure_request)["wall-elbow"][1100]
 1.4444035696104466e-11
 >>> ph2_velocity_request = VectorFieldDataRequest(field_name="phase-2:velocity", surfaces=["wall-elbow"])
 >>> file_session.fields.field_data.get_field_data(ph2_velocity_request)["wall-elbow"].shape
 (2168, 3)
 >>> file_session.fields.field_data.get_field_data(ph2_velocity_request)["wall-elbow"][1000][0]
 0.0

Visualization sample usage#

You can use the ansys-fluent-visualization package to display the mesh and to visualize results via contours, vectors and other post-processing objects.

>>> from ansys.fluent.visualization import set_config
>>> set_config(blocking=True, set_view_on_display="isometric")
>>> import ansys.fluent.core as pyfluent
>>> from ansys.fluent.core import examples
>>> from ansys.fluent.visualization.matplotlib import Plots
>>> from ansys.fluent.visualization.pyvista import Graphics
>>> from ansys.fluent.core.file_session import FileSession
>>> fileSession=FileSession()
>>> fileSession.read_case("elbow1.cas.h5")
>>> fileSession.read_data("elbow1.dat.h5")
>>> graphics = Graphics(session=fileSession)

Display mesh at wall.

>>> mesh1 = graphics.Meshes["mesh-1"]
>>> mesh1.show_edges = True
>>> mesh1.surfaces_list = [ "wall"]
>>> mesh1.display("w1")

Display temperature contour at symmetry.

>>> contour1 = graphics.Contours["mesh-1"]
>>> contour1.node_values = False
>>> contour1.field = "SV_T"
>>> contour1.surfaces_list = ['symmetry']
>>> contour1.display('w2')

Display velocity vector data at symmetry and wall.

>>> velocity_vector = graphics.Vectors["velocity-vector"]
>>> velocity_vector.field = "SV_T"
>>> velocity_vector.surfaces_list = ['symmetry', 'wall']
>>> velocity_vector.display("w3")