Note
Go to the end to download the full example code.
Extract components of results (modal simulation)#
This example processes a modal simulation to extract subcomponents of results like displacement and elastic strain.
Note
This example requires DPF 3.0 (2022 R1) or above. For more information, see PyDPF library compatibilities.
Perform required imports#
This example uses a supplied file that you can get by importing the DPF examples
package.
from ansys.dpf import post
from ansys.dpf.post import examples
Get Simulation object#
Get the Simulation object that allows access to the result. The Simulation
object must be instantiated with the path for the result file. For example,
"C:/Users/user/my_result.rst" on Windows or "/home/user/my_result.rst"
on Linux.
example_path = examples.download_all_kinds_of_complexity_modal()
# to automatically detect the simulation type, use:
simulation = post.load_simulation(example_path)
# to enable auto-completion, use the equivalent:
simulation = post.ModalMechanicalSimulation(example_path)
# print the simulation to get an overview of what's available
print(simulation)
Modal Mechanical Simulation.
Data Sources
------------------------------
/opt/hostedtoolcache/Python/3.10.19/x64/lib/python3.10/site-packages/ansys/dpf/core/examples/result_files/testing/modal_allKindOfComplexity.rst
DPF Model
------------------------------
Modal analysis
Unit system: MKS: m, kg, N, s, V, A, degC
Physics Type: Mechanical
Available results:
- node_orientations: Nodal Node Euler Angles
- displacement: Nodal Displacement
- nodal_rotation: Nodal Rotation
- reaction_force: Nodal Force
- smisc: Elemental Elemental Summable Miscellaneous Data
- element_nodal_forces: ElementalNodal Element nodal Forces
- stress: ElementalNodal Stress
- elemental_volume: Elemental Volume
- stiffness_matrix_energy: Elemental Energy-stiffness matrix
- artificial_hourglass_energy: Elemental Hourglass Energy
- kinetic_energy: Elemental Kinetic Energy
- co_energy: Elemental co-energy
- incremental_energy: Elemental incremental energy
- thermal_dissipation_energy: Elemental thermal dissipation energy
- elastic_strain: ElementalNodal Strain
- elastic_strain_eqv: ElementalNodal Strain eqv
- element_orientations: ElementalNodal Element Euler Angles
- nmisc: Elemental Elemental Non Summable Miscellaneous Data
- structural_temperature: ElementalNodal Structural temperature
------------------------------
DPF Meshed Region:
2388 nodes
1836 elements
Unit: m
With solid (3D) elements, shell (2D) elements, shell (3D) elements, beam (1D) elements
------------------------------
DPF Time/Freq Support:
Number of sets: 45
Cumulative Frequency (Hz) LoadStep Substep
1 4800.665229 1 1
2 6472.119402 1 2
3 10094.813112 1 3
4 15408.070193 1 4
5 19935.616102 1 5
6 30659.224027 1 6
7 33485.028985 1 7
8 40514.020302 1 8
9 41144.836724 1 9
10 41696.364343 1 10
11 42568.142453 1 11
12 48803.935725 1 12
13 51557.014600 1 13
14 54829.807966 1 14
15 55121.065060 1 15
16 55481.661956 1 16
17 55779.054274 1 17
18 56346.453210 1 18
19 56598.396154 1 19
20 57504.056787 1 20
21 57768.209089 1 21
22 60135.893137 1 22
23 62336.016111 1 23
24 62809.029190 1 24
25 64186.171203 1 25
26 64911.479227 1 26
27 66488.724651 1 27
28 66728.182829 1 28
29 67521.333063 1 29
30 68699.230845 1 30
31 70108.268581 1 31
32 71432.124756 1 32
33 71784.765113 1 33
34 73189.275762 1 34
35 74862.553459 1 35
36 75051.318416 1 36
37 76335.025905 1 37
38 76631.728520 1 38
39 76956.786796 1 39
40 77754.144888 1 40
41 78460.122703 1 41
42 78721.878185 1 42
43 79330.520798 1 43
44 80301.992725 1 44
45 80835.840814 1 45
Extract X displacement over a list modes#
To help pick the right modes, printing the time frequency support.
print(simulation.time_freq_support)
# To get X displacements on the first two modes
x_displacement = simulation.displacement(modes=[1, 2], components=["X"])
# equivalent to
x_displacement = simulation.displacement(set_ids=[1, 2], components=["X"])
print(x_displacement)
x_displacement.plot(set_id=1)

DPF Time/Freq Support:
Number of sets: 45
Cumulative Frequency (Hz) LoadStep Substep
1 4800.665229 1 1
2 6472.119402 1 2
3 10094.813112 1 3
4 15408.070193 1 4
5 19935.616102 1 5
6 30659.224027 1 6
7 33485.028985 1 7
8 40514.020302 1 8
9 41144.836724 1 9
10 41696.364343 1 10
11 42568.142453 1 11
12 48803.935725 1 12
13 51557.014600 1 13
14 54829.807966 1 14
15 55121.065060 1 15
16 55481.661956 1 16
17 55779.054274 1 17
18 56346.453210 1 18
19 56598.396154 1 19
20 57504.056787 1 20
21 57768.209089 1 21
22 60135.893137 1 22
23 62336.016111 1 23
24 62809.029190 1 24
25 64186.171203 1 25
26 64911.479227 1 26
27 66488.724651 1 27
28 66728.182829 1 28
29 67521.333063 1 29
30 68699.230845 1 30
31 70108.268581 1 31
32 71432.124756 1 32
33 71784.765113 1 33
34 73189.275762 1 34
35 74862.553459 1 35
36 75051.318416 1 36
37 76335.025905 1 37
38 76631.728520 1 38
39 76956.786796 1 39
40 77754.144888 1 40
41 78460.122703 1 41
42 78721.878185 1 42
43 79330.520798 1 43
44 80301.992725 1 44
45 80835.840814 1 45
results U_X (m)
set_ids 1 2
node_ids
289 -1.1710e+00 3.0726e+00
573 -1.6975e+00 3.1432e+00
589 -2.2447e+00 3.3385e+00
591 -1.5945e+00 3.6033e+00
324 0.0000e+00 0.0000e+00
579 0.0000e+00 0.0000e+00
... ... ...
(None, <pyvista.plotting.plotter.Plotter object at 0x7fb409fa77f0>)
Extract XX and XY elastic strain over a list modes#
Get X displacements on the first two modes.
XX_XY_elastic_strain = simulation.elastic_strain_nodal(
modes=[3], components=["XX", "XY"]
)
print(XX_XY_elastic_strain)
results EPEL
set_ids 3
elshape 1
node_ids components
79 XX
XY
598 XX
XY
487 XX
XY
... ... ...
Total running time of the script: (0 minutes 1.513 seconds)