Skip to content

can-ti/PyMAPDL-Reader-zh_CN

 
 

Repository files navigation

PyMAPDL Reader - Legacy Binary and Archive File Reader

PyAnsys pypi PyPIact GH-CI codecov MIT black pre-commit.ci status

这是一个传统模块,用于读取由 MAPDL 生成的二进制和 ASCII 文件。

通过该 Python 模块,您可以直接从 ANSYS v14.5+ 二进制文件中提取数据,并使用直接的 API 和基于 ANSYS 提供的头文件的 C 库快速显示或制作动画。

The ansys-mapdl-reader module supports the following formats:

  • *.rst - Structural analysis result file 结构分析结果文件
  • *.rth - Thermal analysis result file 热分析结果文件
  • *.emat - Element matrix data file 单元矩阵数据文件
  • *.full - Full stiffness-mass matrix file 全刚度-质量矩阵文件
  • *.cdb or *.dat - MAPDL ASCII block archive and Mechanical Workbench input files MAPDL ASCII 块存档和 Mechanical Workbench 输入文件

请参阅 PyMAPDL-Reader 文档 获取完整文档。

Note

该模块将来可能会被舍弃。

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

Note

通过设置 /FCOMP,RST,0 ,禁用结果文件压缩,将大大提高结果文件的兼容性。

DPF 没有这种限制。

安装

通过 pip 进行安装::

pip install ansys-mapdl-reader

你也可以访问 pymapdl-reader 从 GitHub 下载源代码或发布版本。

示例

加载和绘制 MAPDL 存档文件

包含实体单元(传统和现代)的 ANSYS 归档文件可使用归档文件加载,然后转换为 vtk 对象。

from ansys.mapdl import reader as pymapdl_reader
from ansys.mapdl.reader import examples

# Sample *.cdb
filename = examples.hexarchivefile

# Read ansys archive file 读取 ansys 存档文件
archive = pymapdl_reader.Archive(filename)

# Print raw data from cdb 从 cdb 打印原始数据
for key in archive.raw:
   print("%s : %s" % (key, archive.raw[key]))

# Create a vtk unstructured grid from the raw data and plot it
grid = archive.parse_vtk(force_linear=True)
grid.plot(color='w', show_edges=True)

# write this as a vtk xml file
grid.save('hex.vtu')

# or as a vtk binary
grid.save('hex.vtk')
Hexahedral beam

然后,您可以使用 pyvista 或其他使用 VTK 的程序加载该 vtk 文件。

# 从 vtk 中加载
import pyvista as pv
grid = pv.UnstructuredGrid('hex.vtu')
grid.plot()

Loading the Result File

This example reads in binary results from a modal analysis of a beam from ANSYS.

# Load the reader from pyansys
from ansys.mapdl import reader as pymapdl_reader
from ansys.mapdl.reader import examples

# Sample result file
rstfile = examples.rstfile

# Create result object by loading the result file
result = pymapdl_reader.read_binary(rstfile)

# Beam natural frequencies
freqs = result.time_values
>>> print(freq)
[ 7366.49503969  7366.49503969 11504.89523664 17285.70459456
  17285.70459457 20137.19299035]

Get the 1st bending mode shape. Results are ordered based on the sorted node numbering. Note that results are zero indexed

>>> nnum, disp = result.nodal_solution(0)
>>> print(disp)
[[ 2.89623914e+01 -2.82480489e+01 -3.09226692e-01]
 [ 2.89489249e+01 -2.82342416e+01  2.47536161e+01]
 [ 2.89177130e+01 -2.82745126e+01  6.05151053e+00]
 [ 2.88715048e+01 -2.82764960e+01  1.22913304e+01]
 [ 2.89221536e+01 -2.82479511e+01  1.84965333e+01]
 [ 2.89623914e+01 -2.82480489e+01  3.09226692e-01]
 ...

Plotting Nodal Results

As the geometry of the model is contained within the result file, you can plot the result without having to load any additional geometry. Below, displacement for the first mode of the modal analysis beam is plotted using VTK.

# Plot the displacement of Mode 0 in the x direction
result.plot_nodal_solution(0, 'x', label='Displacement')
https://github.com/pyansys/pymapdl-reader/blob/main/doc/source/images/hexbeam_disp_small.png

Results can be plotted non-interactively and screenshots saved by setting up the camera and saving the result. This can help with the visualization and post-processing of a batch result.

First, get the camera position from an interactive plot:

>>> cpos = result.plot_nodal_solution(0)
>>> print(cpos)
[(5.2722879880979345, 4.308737919176047, 10.467694436036483),
 (0.5, 0.5, 2.5),
 (-0.2565529433509593, 0.9227952809887077, -0.28745339908049733)]

Then generate the plot:

result.plot_nodal_solution(0, 'x', label='Displacement', cpos=cpos,
                           screenshot='hexbeam_disp.png',
                           window_size=[800, 600], interactive=False)

Stress can be plotted as well using the below code. The nodal stress is computed in the same manner that ANSYS uses by to determine the stress at each node by averaging the stress evaluated at that node for all attached elements. For now, only component stresses can be displayed.

# Display node averaged stress in x direction for result 6
result.plot_nodal_stress(5, 'Sx')
https://github.com/pyansys/pymapdl-reader/blob/main/doc/source/images/beam_stress_small.png

Nodal stress can also be generated non-interactively with:

result.plot_nodal_stress(5, 'Sx', cpos=cpos, screenshot=beam_stress.png,
                       window_size=[800, 600], interactive=False)

Animating a Modal Solution

Mode shapes from a modal analysis can be animated using animate_nodal_solution:

result.animate_nodal_solution(0)
Modal shape animation

If you wish to save the animation to a file, specify the movie_filename and animate it with:

result.animate_nodal_solution(0, movie_filename='/tmp/movie.mp4', cpos=cpos)

Reading a Full File

This example reads in the mass and stiffness matrices associated with the above example.

# Load the reader from pyansys
from ansys.mapdl import reader as pymapdl_reader
from scipy import sparse

# load the full file
fobj = pymapdl_reader.FullReader('file.full')
dofref, k, m = fobj.load_km()  # returns upper triangle only

# make k, m full, symmetric matrices
k += sparse.triu(k, 1).T
m += sparse.triu(m, 1).T

If you have scipy installed, you can solve the eigensystem for its natural frequencies and mode shapes.

from scipy.sparse import linalg

# condition the k matrix
# to avoid getting the "Factor is exactly singular" error
k += sparse.diags(np.random.random(k.shape[0])/1E20, shape=k.shape)

# Solve
w, v = linalg.eigsh(k, k=20, M=m, sigma=10000)

# System natural frequencies
f = np.real(w)**0.5/(2*np.pi)

print('First four natural frequencies')
for i in range(4):
    print '{:.3f} Hz'.format(f[i])
First four natural frequencies
1283.200 Hz
1283.200 Hz
5781.975 Hz
6919.399 Hz

Developing on Windows

This package is designed to be developed on Linux, and if you need to develop on Windows you will need to install your own C++ compiler. We recommend:

  1. Install Visual C++
    1. See here for a list of which Python versions correspond to which Visual C++ version
  2. Install the development version of pymapdl-reader to your Python environment
    1. Navigate to the project's top level (the same directory as this README)
    2. run pip install -e .

License and Acknowledgments

The ansys-mapdl-reader library is licensed under the MIT license.

About

MAPDL 二进制文件的传统接口。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • Python 63.7%
  • Cython 28.1%
  • C 5.8%
  • C++ 2.3%
  • Other 0.1%