Note
Go to the end to download the full example code.
Fluid Simulation#
This example shows how to load a fluid simulation, explore the model and its available zones, species, and phases, as well as how to extract a result.
Note
This example requires DPF 7.0 (2024.1.pre0) or above. For more information, see Compatibility.
Perform required imports#
from ansys.dpf import post
from ansys.dpf.post import examples
Load the fluid analysis result#
fluid_example_files = examples.download_fluent_axial_comp()
simulation = post.FluidSimulation(
cas=fluid_example_files["cas"], dat=fluid_example_files["dat"]
)
# Printing the simulation will show 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.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01438.cas.h5
result key: cas and path: /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01439.cas.h5
result key: cas and path: /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01440.cas.h5
Secondary files:
path: /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01438.dat.h5
path: /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01439.dat.h5
path: /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/fluent-axial_comp/axial_comp-1-01440.dat.h5
DPF Model
------------------------------
Static analysis
Unit system: SI: m, kg, N, s, V, A, K
Physics Type: Fluid
Available results:
- enthalpy: Elemental Enthalpy
- mass_flow_rate: Faces Mass Flow Rate
- static_pressure: ElementalAndFaces Static Pressure
- mean_static_pressure: Elemental Mean Static Pressure
- rms_static_pressure: Elemental Rms Static Pressure
- surface_heat_rate: Faces Surface Heat Rate
- density: ElementalAndFaces Density
- wall_shear_stress: Faces Wall Shear Stress
- temperature: ElementalAndFaces Temperature
- mean_temperature: ElementalAndFaces Mean Temperature
- rms_temperature: Elemental Rms Temperature
- velocity: ElementalAndFaces Velocity
- mean_velocity: Elemental Mean Velocity
- rms_velocity: Elemental Rms Velocity
Available qualifier labels:
- phase: phase-1 (1)
- zone: default-interior:0 (2), rotor-hub (3), rotor-shroud (4), rotor-inlet (5), rotor-interface (6), rotor-blade-1 (7), rotor-blade-2 (8), rotor-per-1-shadow (9), rotor-per-1 (10), rotor-per-2-shadow (11), rotor-per-2 (12), fluid-rotor (13), default-interior (15), stator-hub (16), stator-shroud (17), stator-interface (18), stator-outlet (19), stator-blade-1 (20), stator-blade-2 (21), stator-blade-3 (22), stator-blade-4 (23), stator-per-2 (24), stator-per-2-shadow (25), stator-per-1 (26), stator-per-1-shadow (27), fluid-stator (28)
------------------------------
DPF Meshed Region:
16660 nodes
13856 elements
44242 faces
Unit: m
With solid (3D) elements
------------------------------
DPF Time/Freq Support:
Number of sets: 1
Cumulative Frequency () LoadStep Substep
1 0.000000 1 1
Explore the available metadata#
Check the available cell and face zones
print(simulation.cell_zones)
print(simulation.face_zones)
{13: 'fluid-rotor', 28: 'fluid-stator'}
{2: 'default-interior:0', 3: 'rotor-hub', 4: 'rotor-shroud', 5: 'rotor-inlet', 6: 'rotor-interface', 7: 'rotor-blade-1', 8: 'rotor-blade-2', 9: 'rotor-per-1-shadow', 10: 'rotor-per-1', 11: 'rotor-per-2-shadow', 12: 'rotor-per-2', 15: 'default-interior', 16: 'stator-hub', 17: 'stator-shroud', 18: 'stator-interface', 19: 'stator-outlet', 20: 'stator-blade-1', 21: 'stator-blade-2', 22: 'stator-blade-3', 23: 'stator-blade-4', 24: 'stator-per-2', 25: 'stator-per-2-shadow', 26: 'stator-per-1', 27: 'stator-per-1-shadow'}
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: 16660
Number of faces: 45391
Number of cells: 13856
Cell zones:
{13: 'fluid-rotor', 28: 'fluid-stator'}
Face zones:
{2: 'default-interior:0', 3: 'rotor-hub', 4: 'rotor-shroud', 5: 'rotor-inlet', 6: 'rotor-interface', 7: 'rotor-blade-1', 8: 'rotor-blade-2', 9: 'rotor-per-1-shadow', 10: 'rotor-per-1', 11: 'rotor-per-2-shadow', 12: 'rotor-per-2', 15: 'default-interior', 16: 'stator-hub', 17: 'stator-shroud', 18: 'stator-interface', 19: 'stator-outlet', 20: 'stator-blade-1', 21: 'stator-blade-2', 22: 'stator-blade-3', 23: 'stator-blade-4', 24: 'stator-per-2', 25: 'stator-per-2-shadow', 26: 'stator-per-1', 27: 'stator-per-1-shadow'}
Cell to face zones:
{13: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 28: [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]}
Check the available species
print(simulation.species)
0 species available
{}
Check the available phases
print(simulation.phases)
1 phases available
{Phase<name: 'phase-1', id=1>, }
- Extract a result
print(simulation.result_info)
Static analysis
Unit system: SI: m, kg, N, s, V, A, K
Physics Type: Fluid
Available results:
- enthalpy: Elemental Enthalpy
- mass_flow_rate: Faces Mass Flow Rate
- static_pressure: ElementalAndFaces Static Pressure
- mean_static_pressure: Elemental Mean Static Pressure
- rms_static_pressure: Elemental Rms Static Pressure
- surface_heat_rate: Faces Surface Heat Rate
- density: ElementalAndFaces Density
- wall_shear_stress: Faces Wall Shear Stress
- temperature: ElementalAndFaces Temperature
- mean_temperature: ElementalAndFaces Mean Temperature
- rms_temperature: Elemental Rms Temperature
- velocity: ElementalAndFaces Velocity
- mean_velocity: Elemental Mean Velocity
- rms_velocity: Elemental Rms Velocity
Available qualifier labels:
- phase: phase-1 (1)
- zone: default-interior:0 (2), rotor-hub (3), rotor-shroud (4), rotor-inlet (5), rotor-interface (6), rotor-blade-1 (7), rotor-blade-2 (8), rotor-per-1-shadow (9), rotor-per-1 (10), rotor-per-2-shadow (11), rotor-per-2 (12), fluid-rotor (13), default-interior (15), stator-hub (16), stator-shroud (17), stator-interface (18), stator-outlet (19), stator-blade-1 (20), stator-blade-2 (21), stator-blade-3 (22), stator-blade-4 (23), stator-per-2 (24), stator-per-2-shadow (25), stator-per-1 (26), stator-per-1-shadow (27), fluid-stator (28)
Print a specific one to get more information on available qualifiers (zones, phases and so on)
print(simulation.result_info["enthalpy"])
# Or use an index
# print(simulation.result_info[0])
DPF Result
----------
enthalpy
Operator name: "H_S"
Number of components: 1
Dimensionality: scalar
Homogeneity: specific_energy
Units: J/kg
Location: Elemental
Available qualifier labels:
- zone: fluid-rotor (13), fluid-stator (28)
- phase: phase-1 (1)
Available qualifier combinations:
{'zone': 13, 'phase': 1}
{'zone': 28, 'phase': 1}
Extract this available result as a Dataframe
enthalpy = simulation.enthalpy()
print(enthalpy)
# Not specifying any qualifier returns a unique column of data
results H_S (J/kg)
set_ids 1
cell_ids
1 2.7790e+05
2 2.7781e+05
3 2.7795e+05
4 2.7712e+05
5 2.7720e+05
6 2.7769e+05
... ...
Plot the Dataframe
enthalpy.plot()
Available qualifiers for this result can be used in the extraction request to filter/separate data. Here we want a different column for each available zone for this result
print(simulation.enthalpy(zone_ids=[13, 28]))
# Here only the data for the fluid-stator zone is extracted
print(simulation.enthalpy(zone_ids=[28]))
# The same logic can be applied to any available qualifier found in the ``AvailableResult``
# description under 'Available qualifier labels'.
results H_S (J/kg)
set_ids 1
zone fluid-rotor (13) fluid-stator (28)
cell_ids
1 2.7790e+05
2 2.7781e+05
3 2.7795e+05
4 2.7712e+05
5 2.7720e+05
6 2.7769e+05
... ... ...
results H_S (J/kg)
set_ids 1
zone fluid-stator (28)
cell_ids
6081 3.0593e+05
6082 3.0567e+05
6083 3.0510e+05
6084 3.0407e+05
6085 3.0543e+05
6086 3.0252e+05
... ...
The result extraction request can also contain selection arguments The enthalpy result being defined on cells, you can request data for specific cells using their IDs:
print(simulation.enthalpy(cell_ids=[1, 2]))
results H_S (J/kg)
set_ids 1
cell_ids
1 2.7790e+05
2 2.7781e+05
For selection and manipulation of the Dataframe, please refer to example “Create and manipulate a DPF Dataframe”
Total running time of the script: (0 minutes 2.762 seconds)