Note
Go to the end to download the full example code.
Exctarct fluid simulation results#
This example shows how to load a fluid simulation for a heating coil that has been simulated with Ansys CFX, explore the metadata available, and use the result extraction capabilities.
Note
This example requires DPF 7.0 (2024.1.pre0) or later. For more information, see PyDPF library compatibilities.
Perform required imports#
Perform required imports. This example uses a supplied file that you can
get using the examples
module.
from ansys.dpf import post
from ansys.dpf.post import examples
Load fluid analysis result#
fluid_example_files = examples.download_cfx_heating_coil()
simulation = post.FluidSimulation(
cas=fluid_example_files["cas"], dat=fluid_example_files["dat"]
)
# Print the simulation TO see most of the available metadata
print(simulation)
Fluid Simulation.
Data Sources
------------------------------
DPF DataSources:
Result files:
result key: cas and path: /opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/cfx-heating_coil/def.cas.cff
Secondary files:
path: /opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/cfx-heating_coil/def.dat.cff
DPF Model
------------------------------
Static analysis
Unit system: SI: m, kg, N, s, V, A, K
Physics Type: Fluid
Available results:
- specific_heat: Nodal Specific Heat
- epsilon: Nodal Epsilon
- enthalpy: Nodal Enthalpy
- turbulent_kinetic_energy: Nodal Turbulent Kinetic Energy
- thermal_conductivity: Nodal Thermal Conductivity
- dynamic_viscosity: Nodal Dynamic Viscosity
- turbulent_viscosity: Nodal Turbulent Viscosity
- static_pressure: Nodal Static Pressure
- total_pressure: Nodal Total Pressure
- density: Nodal Density
- entropy: Nodal Entropy
- temperature: Nodal Temperature
- total_temperature: Nodal Total Temperature
- velocity: Nodal Velocity
Available qualifier labels:
- phase: <Mixture> (1), Water at 25 C (2), Copper (3)
- zone: outflow (9), Default (10), inflow (11), Solid 2.8 1 (12), Solid 2.7 1 (13), Solid 2.6 1 (14), Solid 2.5 1 (15), Solid 2.4 1 (16), Solid 2.3 1 (17), Default 1 (1), Default (18), Solid 2.3 (19), Solid 2.4 (20), Solid 2.5 (21), Solid 2.6 (22), Solid 2.7 (23), Solid 2.8 (24), heater (2)
------------------------------
DPF Meshed Region:
25456 nodes
74882 elements
Unit: m
With solid (3D) elements
------------------------------
DPF Time/Freq Support:
Number of sets: 1
Cumulative Frequency () LoadStep Substep
1 0.000000 1 1
Explore available metadata#
Check the available cell and face zones.
print(simulation.cell_zones)
print(simulation.face_zones)
{1: 'Default 1', 2: 'heater'}
{9: 'outflow', 10: 'Default', 11: 'inflow', 12: 'Solid 2.8 1', 13: 'Solid 2.7 1', 14: 'Solid 2.6 1', 15: 'Solid 2.5 1', 16: 'Solid 2.4 1', 17: 'Solid 2.3 1', 18: 'Default', 19: 'Solid 2.3', 20: 'Solid 2.4', 21: 'Solid 2.5', 22: 'Solid 2.6', 23: 'Solid 2.7', 24: 'Solid 2.8'}
The mesh metadata is available separately from the mesh
as accessing the mesh means loading it.
Use the mesh_info
property to explore the mesh structure to define queries.
print(simulation.mesh_info)
Fluid mesh metadata
-------------------
Number of nodes: 25456
Number of faces: 11780
Number of cells: 74882
Cell zones:
{1: 'Default 1', 2: 'heater'}
Face zones:
{9: 'outflow', 10: 'Default', 11: 'inflow', 12: 'Solid 2.8 1', 13: 'Solid 2.7 1', 14: 'Solid 2.6 1', 15: 'Solid 2.5 1', 16: 'Solid 2.4 1', 17: 'Solid 2.3 1', 18: 'Default', 19: 'Solid 2.3', 20: 'Solid 2.4', 21: 'Solid 2.5', 22: 'Solid 2.6', 23: 'Solid 2.7', 24: 'Solid 2.8'}
Cell to face zones:
{1: [9, 10, 11, 12, 13, 14, 15, 16, 17], 2: [18, 19, 20, 21, 22, 23, 24]}
Check available species.
print(simulation.species)
0 species available
{}
Check available phases.
print(simulation.phases)
3 phases available
{Phase<name: '<Mixture>', id=1>, Phase<name: 'Water at 25 C', id=2>, Phase<name: 'Copper', id=3>, }
Check the metadata on available results
print(simulation.result_info)
Static analysis
Unit system: SI: m, kg, N, s, V, A, K
Physics Type: Fluid
Available results:
- specific_heat: Nodal Specific Heat
- epsilon: Nodal Epsilon
- enthalpy: Nodal Enthalpy
- turbulent_kinetic_energy: Nodal Turbulent Kinetic Energy
- thermal_conductivity: Nodal Thermal Conductivity
- dynamic_viscosity: Nodal Dynamic Viscosity
- turbulent_viscosity: Nodal Turbulent Viscosity
- static_pressure: Nodal Static Pressure
- total_pressure: Nodal Total Pressure
- density: Nodal Density
- entropy: Nodal Entropy
- temperature: Nodal Temperature
- total_temperature: Nodal Total Temperature
- velocity: Nodal Velocity
Available qualifier labels:
- phase: <Mixture> (1), Water at 25 C (2), Copper (3)
- zone: outflow (9), Default (10), inflow (11), Solid 2.8 1 (12), Solid 2.7 1 (13), Solid 2.6 1 (14), Solid 2.5 1 (15), Solid 2.4 1 (16), Solid 2.3 1 (17), Default 1 (1), Default (18), Solid 2.3 (19), Solid 2.4 (20), Solid 2.5 (21), Solid 2.6 (22), Solid 2.7 (23), Solid 2.8 (24), heater (2)
Extract a result#
Print information about a specific available result.
print(simulation.result_info["temperature"])
# Printing information using an index.
print(simulation.result_info[12])
DPF Result
----------
temperature
Operator name: "TEMP"
Number of components: 1
Dimensionality: scalar
Homogeneity: temperature
Units: K
Location: Nodal
Available qualifier labels:
- zone: Default 1 (1), outflow (9), Default (10), inflow (11), Solid 2.8 1 (12), Solid 2.7 1 (13), Solid 2.6 1 (14), Solid 2.5 1 (15), Solid 2.4 1 (16), Solid 2.3 1 (17), heater (2), Default (18), Solid 2.3 (19), Solid 2.4 (20), Solid 2.5 (21), Solid 2.6 (22), Solid 2.7 (23), Solid 2.8 (24)
- phase: Water at 25 C (2), Copper (3)
Available qualifier combinations:
{'zone': 1, 'phase': 2}
{'zone': 9, 'phase': 2}
{'zone': 10, 'phase': 2}
{'zone': 11, 'phase': 2}
{'zone': 12, 'phase': 2}
{'zone': 13, 'phase': 2}
{'zone': 14, 'phase': 2}
{'zone': 15, 'phase': 2}
{'zone': 16, 'phase': 2}
{'zone': 17, 'phase': 2}
{'zone': 2, 'phase': 3}
{'zone': 18, 'phase': 3}
{'zone': 19, 'phase': 3}
{'zone': 20, 'phase': 3}
{'zone': 21, 'phase': 3}
{'zone': 22, 'phase': 3}
{'zone': 23, 'phase': 3}
{'zone': 24, 'phase': 3}
DPF Result
----------
total_temperature
Operator name: "TEMP_TOT"
Number of components: 1
Dimensionality: scalar
Homogeneity: temperature
Units: K
Location: Nodal
Available qualifier labels:
- zone: Default 1 (1), outflow (9), Default (10), inflow (11), Solid 2.8 1 (12), Solid 2.7 1 (13), Solid 2.6 1 (14), Solid 2.5 1 (15), Solid 2.4 1 (16), Solid 2.3 1 (17)
- phase: Water at 25 C (2)
Available qualifier combinations:
{'zone': 1, 'phase': 2}
{'zone': 9, 'phase': 2}
{'zone': 10, 'phase': 2}
{'zone': 11, 'phase': 2}
{'zone': 12, 'phase': 2}
{'zone': 13, 'phase': 2}
{'zone': 14, 'phase': 2}
{'zone': 15, 'phase': 2}
{'zone': 16, 'phase': 2}
{'zone': 17, 'phase': 2}
Extract temperature data#
temperature = simulation.temperature()
print(temperature)
# The resulting dataframe shows data for two different phases.
results TEMP (K)
set_ids 1
phase Water at 25 C (2) Copper (3)
node_ids
1 3.0533e+02
2 3.0389e+02
3 3.0155e+02
4 3.0201e+02
5 3.0340e+02
6 3.0487e+02
... ... ...
Select data for phase 2 (Water) only
print(temperature.select(phase=[2]))
results TEMP (K)
set_ids 1
phase Water at 25 C (2)
node_ids
1 3.0533e+02
2 3.0389e+02
3 3.0155e+02
4 3.0201e+02
5 3.0340e+02
6 3.0487e+02
... ...
To directly extract the temperature data for a given phase,
pass the temperature()
method a phases
argument.
This argument must be given a list of phase unique IDs, which appear
in the dataframe in the phase label column between parentheses,
or as listed under the Available qualifier labels
section of the
metadata on the result. You can also directly use the phase name.
water_temperature = simulation.temperature(phases=["Water at 25 C"])
# equivalent to
# water_temperature = simulation.temperature(phases=[2])
print(water_temperature)
# # The resulting dataframe now only stores data for the Water phase.
results TEMP (K) ...
set_ids 1 ...
phase Water at 25 C (2) ...
zone Default 1 (1) outflow (9) Default (10) inflow (11) Solid 2.8 1 (12) Solid 2.7 1 (13) ...
node_ids ...
1 3.0533e+02 3.0533e+02 ...
2 3.0389e+02 3.0389e+02 ...
3 3.0155e+02 3.0155e+02 ...
4 3.0201e+02 3.0201e+02 ...
5 3.0340e+02 3.0340e+02 ...
6 3.0487e+02 3.0487e+02 ...
... ... ... ... ... ... ... ...
To extract a result on given zones use the zone_ids
argument
or the qualifiers
dictionary argument with the zone
key.
This code gets and plots the temperature on all face zones.
face_temperature = simulation.temperature(zone_ids=list(simulation.face_zones.keys()))
face_temperature.plot()

Total running time of the script: (0 minutes 3.326 seconds)