Postprocessing#

在活动的 MAPDL 会话中,您可以使用 Mapdl.post_processing 类(Mapdl 实例的属性)进行后处理。 这种方法的一个优点是能与现有的 MAPDL 脚本或自动化很好地集成。这种方法也可用于其他程序(包括 ANSYS Mechanical)生成的结果文件。

基于 gRPC 的后处理的最大优势之一是可以远程完成,无需交换任何文件。 数千兆字节的结果文件可以保持远程状态,只将必要的数据流传输回客户端进行审查或可视化。

Note

我们鼓励您使用 DPF-CoreDPF-Post 中的数据处理框架 (DPF) 模块,因为它们提供了使用客户端-服务器界面访问 Ansys 结果文件的现代界面。它们使用与 Ansys Workbench 中相同的软件,但通过 Python 客户端。

您通常会使用 PRNSOL 命令从 MAPDL 请求节点结果:

POST1:
PRNSOL, U, X

PRINT U    NODAL SOLUTION PER NODE

 ***** POST1 NODAL DEGREE OF FREEDOM LISTING *****

 LOAD STEP=     1  SUBSTEP=     1
  TIME=    1.0000      LOAD CASE=   0

 THE FOLLOWING DEGREE OF FREEDOM RESULTS ARE IN THE GLOBAL COORDINATE SYSTEM

   NODE       UX
      1  0.10751E-003
      2  0.85914E-004
      3  0.57069E-004
      4  0.13913E-003
      5  0.35621E-004
      6  0.52186E-004
      7  0.30417E-004
      8  0.36139E-004
      9  0.15001E-003
MORE (YES,NO OR CONTINUOUS)=

不过,使用 Mapdl 类的实例,您可以请求节点位移:

>>> mapdl.set(1, 1)
>>> disp_x = mapdl.post_processing.nodal_displacement("X")
array([1.07512979e-04, 8.59137773e-05, 5.70690047e-05, ...,
       5.70333124e-05, 8.58600402e-05, 1.07445726e-04])

您还可以使用此代码绘制节点位移图:

>>> mapdl.post_processing.plot_nodal_displacement("X")
../_images/post_norm_disp.png

Normalized Displacement of a Cylinder from MAPDL#

Selecting entities#

如果节点或单元被选中,MAPDL 数据库会独立处理某些结果。如果您已经子选择了某个组件, 并希望同时限制某个输出结果(nodal_displacement() ), 请使用 selected_nodes 属性来获取当前选定节点的掩码:

>>> mapdl.nsel("S", "NODE", vmin=1, vmax=2000)
>>> mapdl.esel("S", "ELEM", vmin=500, vmax=2000)
>>> mask = mapdl.post_processing.selected_nodes

Postprocessing object methods#

有关所有后处理方法的列表,请参阅 PostProcessing class

Enriched command output#

所有 Mapdl 类命令都会输出一个字符串对象,可以对其进行解析以获取特定数据。

在某些 Mapdl 类命令中,返回的字符串包含一些处理输出的方法。 Table-1 列出了这些命令。

Table 1. Commands with extra processing methods in the output

Category

Extra methods available

MAPDL commands

Listing

Results listing

Other Listing

Boundary Conditions Listing

Warning

如果使用 Mapdl.nlist() 这样的方法,您可能会获得比使用 Mesh 方法更低的精度。

下面有一个简单的示例来演示使用方法:

>>> from ansys.mapdl.core import launch_mapdl
>>> from ansys.mapdl.core import examples

>>> mapdl = launch_mapdl()
>>> example = examples.vmfiles["vm10"]
>>> mapdl.input(example)

>>> mapdl.slashsolu()
>>> mapdl.solve()

>>> mapdl.post1()
>>> cmd = mapdl.prnsol("U", "X")

# Output as a list.

>>> cmd.to_list()
[['1', '0.0000'], ['2', '0.0000']]

# Output as array.

>>> cmd.to_array()
array([[1., 0.],
       [2., 0.]])

# Output as dataframe.

>>> cmd.to_dataframe()
NODE   UX
0      1.0
1      2.0