Explore the data of a result with the DataFrame - Harmonic Simulation#

使用 DataFrame 查看结果数据 - 谐波分析

本脚本以谐波模拟为例,说明如何与每个结果返回的 post DataFrame 对象交互。

Perform required imports#

执行所需的导入

本示例使用了一个提供的文件,您可以通过导入 DPF examples 包获得该文件。

from ansys.dpf import post
from ansys.dpf.post import examples

Get the Simulation object#

获取允许访问结果的 ``Simulation`` 对象

必须使用结果文件的路径实例化 Simulation 对象。例如,Windows 下为 "C:/Users/user/my_result.rst" 或 Linux 下为 "/home/user/my_result.rst"

example_path = examples.download_harmonic_clamped_pipe()
# 自动检测模拟类型,请使用
simulation = post.load_simulation(example_path)

# 要启用 auto-completion 功能,请使用等效的命令:
simulation = post.HarmonicMechanicalSimulation(example_path)

# 打印 simulation ,了解可用内容的概况
print(simulation)
Harmonic Mechanical Simulation.


Data Sources
------------------------------
C:\Users\ff\AppData\Roaming\Python\Python310\site-packages\ansys\dpf\core\examples\result_files\harmonic\clamped_pipe.rst

DPF Model
------------------------------
Msup analysis
Unit system: NMM: mm, ton, N, s, mA, degC
Physics Type: Mechanical
Available results:
     -  displacement: Nodal Displacement
     -  reaction_force: Nodal Force
     -  stress: ElementalNodal Stress
     -  elemental_volume: Elemental Volume
     -  stiffness_matrix_energy: Elemental Energy-stiffness matrix
     -  artificial_hourglass_energy: Elemental Hourglass Energy
     -  thermal_dissipation_energy: Elemental thermal dissipation energy
     -  kinetic_energy: Elemental Kinetic Energy
     -  co_energy: Elemental co-energy
     -  incremental_energy: Elemental incremental energy
     -  elastic_strain: ElementalNodal Strain
------------------------------
DPF  Meshed Region:
  9943 nodes
  5732 elements
  Unit: mm
  With solid (3D) elements, shell (2D) elements, shell (3D) elements
------------------------------
DPF  Time/Freq Support:
  Number of sets: 5
  With complex values

Cumulative     Frequency (Hz) LoadStep       Substep        RPM
1              2000.000000    1              1              0.000000
2              4000.000000    1              2              0.000000
3              6000.000000    1              3              0.000000
4              8000.000000    1              4              0.000000
5              10000.000000   1              5              0.000000

Extract displacement over all sets as an example#

以提取所有 sets 的位移结果为例

displacement = simulation.displacement(all_sets=True)
print(displacement)
print(type(displacement)) # <class 'ansys.dpf.post.dataframe.DataFrame'>
             results           U                                                          ...
             set_ids           1                      2                      3            ...
             complex           0          1           0          1           0          1 ...
 node_ids components                                                                      ...
     3548          X  9.3929e+01 0.0000e+00 -5.2330e+01 0.0000e+00 -1.1203e+01 0.0000e+00 ...
                   Y -4.3312e+02 0.0000e+00  1.8810e+02 0.0000e+00  6.8681e+01 0.0000e+00 ...
                   Z  9.6172e-01 0.0000e+00 -1.3049e+01 0.0000e+00  2.3508e+01 0.0000e+00 ...
     3656          X  1.0516e+02 0.0000e+00 -5.8461e+01 0.0000e+00 -1.4575e+01 0.0000e+00 ...
                   Y -4.6059e+02 0.0000e+00  2.0315e+02 0.0000e+00  7.4665e+01 0.0000e+00 ...
                   Z  9.4728e-01 0.0000e+00 -1.3728e+01 0.0000e+00  2.5207e+01 0.0000e+00 ...
      ...        ...         ...        ...         ...        ...         ...        ... ...

<class 'ansys.dpf.post.dataframe.DataFrame'>

循环遍历所有列和行,了解 DataFrame 并获取每个索引的值。

# columns
for column in displacement.columns:
    print(f'Column with label "{column.name}" and available values {column.values}.')

# rows
for row in displacement.index:
    print(f'Row with label "{row.name}" and available values {row.values}.')
Column with label "results" and available values ['U'].
Column with label "set_ids" and available values [1, 2, 3, 4, 5].
Column with label "complex" and available values [0, 1].
Row with label "node_ids" and available values [3548 3656 4099 ... 3260 9942 9943].
Row with label "components" and available values ['X', 'Y', 'Z'].

这里的 “complex” 列标签代表复数,0 表示实数部分,1 表示虚数部分。 –ff

Make selections in this DataFrame#

在此 DataFrame 中进行选择

上面显示的所有标签和数值都可用于选择 DataFrame 的子部分。

all_real_values = displacement.select(complex=0)
print(all_real_values) # 这段代码首先调用 displacement 对象的 select 方法,选择复数部分为 0(即实数部分)的位移信息。然后,代码打印了选择的位移信息。

all_imaginary_values = displacement.select(complex=1)
print(all_imaginary_values) # 这段代码首先调用 displacement 对象的 select 方法,选择复数部分为 1(即虚数部分)的位移信息。然后,代码打印了选择的位移信息。

sets_values = displacement.select(set_ids=[1, 2])
print(sets_values)

node_values = displacement.select(node_ids=[3548])
print(node_values)
            results           U
            set_ids           1           2           3           4           5
            complex           0
node_ids components
    3548          X  9.3929e+01 -5.2330e+01 -1.1203e+01 -1.1510e+01 -1.4457e+01
                  Y -4.3312e+02  1.8810e+02  6.8681e+01  2.2900e+01 -6.6765e+00
                  Z  9.6172e-01 -1.3049e+01  2.3508e+01  1.4745e+00 -5.9568e+00
    3656          X  1.0516e+02 -5.8461e+01 -1.4575e+01 -1.3822e+01 -1.7782e+01
                  Y -4.6059e+02  2.0315e+02  7.4665e+01  2.7874e+01  1.5223e+00
                  Z  9.4728e-01 -1.3728e+01  2.5207e+01  1.4487e+00 -7.3947e+00
     ...        ...         ...         ...         ...         ...         ...


            results          U
            set_ids          1          2          3          4          5
            complex          1
node_ids components
    3548          X 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
                  Y 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
                  Z 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
    3656          X 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
                  Y 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
                  Z 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
     ...        ...        ...        ...        ...        ...        ...


            results           U
            set_ids           1                      2
            complex           0          1           0          1
node_ids components
    3548          X  9.3929e+01 0.0000e+00 -5.2330e+01 0.0000e+00
                  Y -4.3312e+02 0.0000e+00  1.8810e+02 0.0000e+00
                  Z  9.6172e-01 0.0000e+00 -1.3049e+01 0.0000e+00
    3656          X  1.0516e+02 0.0000e+00 -5.8461e+01 0.0000e+00
                  Y -4.6059e+02 0.0000e+00  2.0315e+02 0.0000e+00
                  Z  9.4728e-01 0.0000e+00 -1.3728e+01 0.0000e+00
     ...        ...         ...        ...         ...        ...


            results           U                                                          ...
            set_ids           1                      2                      3            ...
            complex           0          1           0          1           0          1 ...
node_ids components                                                                      ...
    3548          X  9.3929e+01 0.0000e+00 -5.2330e+01 0.0000e+00 -1.1203e+01 0.0000e+00 ...
                  Y -4.3312e+02 0.0000e+00  1.8810e+02 0.0000e+00  6.8681e+01 0.0000e+00 ...
                  Z  9.6172e-01 0.0000e+00 -1.3049e+01 0.0000e+00  2.3508e+01 0.0000e+00 ...

Make selections by index in this DataFrame#

在此 DataFrame 中按索引进行选择

要按索引选择每个标签的值,可以使用 iselect 方法。(注意这个方法索引值是从 0 开始的。 –ff) 从索引到 ID 的顺序与上述索引值方法返回的顺序一致。

sets_values = displacement.iselect(set_ids=0)
print(sets_values)

node_values = displacement.iselect(node_ids=[0])
print(node_values)
            results           U
            set_ids           1
            complex           0          1
node_ids components
    3548          X  9.3929e+01 0.0000e+00
                  Y -4.3312e+02 0.0000e+00
                  Z  9.6172e-01 0.0000e+00
    3656          X  1.0516e+02 0.0000e+00
                  Y -4.6059e+02 0.0000e+00
                  Z  9.4728e-01 0.0000e+00
     ...        ...         ...        ...


            results           U                                                          ...
            set_ids           1                      2                      3            ...
            complex           0          1           0          1           0          1 ...
node_ids components                                                                      ...
    3548          X  9.3929e+01 0.0000e+00 -5.2330e+01 0.0000e+00 -1.1203e+01 0.0000e+00 ...
                  Y -4.3312e+02 0.0000e+00  1.8810e+02 0.0000e+00  6.8681e+01 0.0000e+00 ...
                  Z  9.6172e-01 0.0000e+00 -1.3049e+01 0.0000e+00  2.3508e+01 0.0000e+00 ...

Make multi selections in this DataFrame#

在此 DataFrame 中进行多重选择

real_values_for_one_set_onde_node = displacement.select(
    node_ids=[3548], set_ids=1, complex=0
)
print(real_values_for_one_set_onde_node)
            results           U
            set_ids           1
            complex           0
node_ids components
    3548          X  9.3929e+01
                  Y -4.3312e+02
                  Z  9.6172e-01

Make selections to plot the DataFrame#

选择并绘制 DataFrame

displacement.plot(set_ids=1, complex=0)
03 explore result data harmonic

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

Gallery generated by Sphinx-Gallery