Mesh and geometry#

通过 Mapdl 类,您可以访问网格和几何图形,而无需写入中间文件或解释各种 MAPDL 命令的文本输出。 例如,要访问模型的节点和达摩院,通常可以使用 Mapdl.nlist() 方法在 MAPDL 中列出节点。但是,这会生成一个字符串。 数组访问要么需要繁琐的 MAPDL GET 命令,要么需要将节点写入归档文件,然后用其他软件读入:

NLIST

LIST ALL SELECTED NODES.   DSYS=      0

NODE        X             Y             Z           THXY     THYZ     THZX
    1   0.0000        0.0000        0.0000          0.00     0.00     0.00
    2   1.0000        0.0000        0.0000          0.00     0.00     0.00
    3   0.2500        0.0000        0.0000          0.00     0.00     0.00

不过,通过 Mapdl.mesh 类,您可以与 Mapdl 类的当前实例接口,并使用此代码访问当前节点坐标:

>>> mapdl.mesh.nodes
[[0.0, 0.0, 0.0],
  [1.0, 0.0, 0.0],
  [0.25, 0.0, 0.0],
  [0.75, 0.5, 3.5],
  [0.75, 0.5, 4.0],
  [0.75, 0.5, 4.5]]

Mapdl.geometryMapdl.mesh 属性都支持对 MAPDL 数据进行额外的、较低级别的访问。您可以使用此代码访问它们:

>>> mapdl.mesh
>>> mapdl.geometry

要查看当前网格状态,可以使用此代码:

>>> mapdl.mesh
 ANSYS Mesh
   Number of Nodes:              7217
   Number of Elements:           2080
   Number of Element Types:      2
   Number of Node Components:    0
   Number of Element Components: 0

Geometry#

在 PyMAPDL 0.66.0 及以后版本中,默认情况下,所有几何实体都以 pyvista.MultiBlock 对象的形式返回。

Example 1

>>> mapdl.geometry.areas
MultiBlock (0x147ca7640)
  N Blocks    28
  X Bounds    -0.016, 0.016
  Y Bounds    -0.008, 0.018
  Z Bounds    -0.003, 0.015

Example 2:

>>> mapdl.geometry.keypoints
MultiBlock (0x147a78220)
  N Blocks    26
  X Bounds    -0.016, 0.016
  Y Bounds    -0.008, 0.018
  Z Bounds    -0.003, 0.015

如您所见,您不需要在新 API 中调用实体。

关于新版几何 API 与旧版几何 API 的更多区别,请参见 迁移到新的几何应用程序接口

现在的“选择”方式也更容易了。

您可以使用索引:

>>> volume0 = mapdl.geometry.volumes[0]
>>> volume0
UnstructuredGrid (0x149107340)
  N Cells:    34
  N Points:   36
  X Bounds:   0.000e+00, 1.588e-02
  Y Bounds:   -7.620e-03, 1.778e-02
  Z Bounds:   -3.180e-03, 0.000e+00
  N Arrays:   3

您可以使用实体名称:

>>> volume1 = mapdl.geometry.volumes["volume 1"]
>>> volume1
UnstructuredGrid (0x149107340)
  N Cells:    34
  N Points:   36
  X Bounds:   0.000e+00, 1.588e-02
  Y Bounds:   -7.620e-03, 1.778e-02
  Z Bounds:   -3.180e-03, 0.000e+00
  N Arrays:   3

您可以通过调用 plot() 方法来绘制不同的实体:

>>> mapdl.geometry.areas.plot()
../_images/multiblock_pic1.png

您可以绘制单个实体:

>>> mapdl.geometry.areas["area 1"].plot()
../_images/multiblock_pic2.png

您可以使用切片绘制多个实体:

>>> mapdl.geometry.areas[2:12:2].plot()
../_images/multiblock_pic3.png

此外,我们还提供了以下方法,将几何实体作为其他 Python 对象返回:

Table 1. Get_ENTITY methods.

Default output

return_as_list=True

return_as_array=True

return_ids_in_array=True

Geometry.get_keypoints()

pyvista.PolyData

List[pyvista.PolyData]

Numpy.array

Numpy.array

Geometry.get_lines()

pyvista.PolyData

List[pyvista.PolyData]

Not Applicable

Not Applicable

Geometry.get_areas()

pyvista.PolyData

List[pyvista.UnstructuredGrid]

Not Applicable

Not Applicable

Geometry.get_volumes()

pyvista.PolyData

List[pyvista.UnstructuredGrid]

Not Applicable

Not Applicable

迁移到新的几何应用程序接口#

要将旧版脚本从旧版 API 升级到新版 API,必须对旧版脚本进行几处修改。

其中最重要的一点是,您不再需要像在旧 API 中那样调用实体。

Old API

# Old API
>>> mapdl.geometry.areas()
[UnstructuredGrid (0x7f14add95040)
  N Cells:   12
  N Points:  20
  X Bounds:  -2.000e+00, 2.000e+00
  Y Bounds:  0.000e+00, 1.974e+00
  Z Bounds:  0.000e+00, 0.000e+00
  N Arrays:  4,
UnstructuredGrid (0x7f14add95ca0)
  N Cells:   12
  N Points:  20
  X Bounds:  -2.000e+00, 2.000e+00
  Y Bounds:  0.000e+00, 1.974e+00
  Z Bounds:  5.500e-01, 5.500e-01
  N Arrays:  4,
 ...

New API

>>> mapdl.geometry.areas
MultiBlock (0x147ca7640)
  N Blocks    28
  X Bounds    -0.016, 0.016
  Y Bounds    -0.008, 0.018
  Z Bounds    -0.003, 0.015

此外,这些方法返回的实体类型也不同。本表比较了新旧 API 返回的对象:

Table 2. Comparison between objects returned by both APIs.

Function

Old API (Function based - Must be called)

New API (Property based - Doesn’t need to be called)

Geometry.keypoints

Numpy.array

pyvista.MultiBlock

Geometry.lines

pyvista.PolyData

pyvista.MultiBlock

Geometry.areas

pyvista.PolyData

pyvista.MultiBlock

Geometry.volumes

Not existent

pyvista.MultiBlock

该表显示了新旧 API 之间的等效性:

Table 3. Equivalence between both API methods.

Old API

New API equivalent

LegacyGeometry.keypoints()

Geometry.get_keypoints(return_as_array=True)

LegacyGeometry.lines()

Geometry.get_lines()

LegacyGeometry.areas()

Geometry.get_areas()

Not existent

Geometry.volumes

MAPDL geometry commands#

有关创建几何图形的其他 MAPDL 命令,请参阅 Preprocessing 命令。

API reference#

有关 MeshGeometry 类的完整描述,请参阅 MeshGeometry