Skip to main content

Pythonic interface to files generated by MAPDL

Project description

https://badge.fury.io/py/ansys-mapdl-reader.svg https://github.com/pyansys/pymapdl-reader/actions/workflows/testing-and-deployment.yml/badge.svg

This is the legacy module for reading in binary and ASCII files generated from MAPDL.

This Python module allows you to extract data directly from binary ANSYS v14.5+ files and to display or animate them rapidly using a straightforward API coupled with C libraries based on header files provided by ANSYS.

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

Please see the PyMAPDL-Reader Documentation for the full documentation.

Installation

Installation through pip:

pip install ansys-mapdl-reader

You can also visit pymapdl-reader to download the source or releases from GitHub.

Python 3.10 Extra Instructions

PyMAPDL-Reader requires the VTK library which, at the moment, is not available for Python 3.10 in their official channel.

If you wish to install PyMAPDL-Reader in Python 3.10, you can still do it by using the unofficial VTK wheel from PyVista using --find-links. This tells pip to look for vtk at wheels.pyvista.org. Use this with:

pip install ansys-mapdl-reader --find-links https://wheels.pyvista.org/

Please visit Unofficial VTK Wheels for Python 3.10 for further details.

Examples

Loading and Plotting a MAPDL Archive File

ANSYS archive files containing solid elements (both legacy and modern), can be loaded using Archive and then converted to a vtk object.

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

# Sample *.cdb
filename = examples.hexarchivefile

# Read ansys archive file
archive = pyansys.Archive(filename)

# Print raw data from 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

You can then load this vtk file using pyvista or another program that uses VTK.

# Load this from 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 = pyansys.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 = pyansys.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. Only Python <= 3.8 appears to be supported at the moment.

  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 .

To get the package up and running.

License and Acknowledgments

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

ansys_mapdl_reader-0.51.14-cp310-cp310-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.10Windows x86-64

ansys_mapdl_reader-0.51.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

ansys_mapdl_reader-0.51.14-cp39-cp39-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.9Windows x86-64

ansys_mapdl_reader-0.51.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

ansys_mapdl_reader-0.51.14-cp38-cp38-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.8Windows x86-64

ansys_mapdl_reader-0.51.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

ansys_mapdl_reader-0.51.14-cp37-cp37m-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.7mWindows x86-64

ansys_mapdl_reader-0.51.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

Details for the file ansys_mapdl_reader-0.51.14-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9aaf639e07403c3006b8b038212936d99609c187a56d410b4154f2a08982aa03
MD5 0fc90784430876bfee912a16f135a352
BLAKE2b-256 8ff3f927d9d90740c047e9908490c1d06247455a9bcffb6bd3cdc3ba6cadbdfb

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78cd4c043abc536542af6a6188d246d9fa0704d7965df6e5a7f244d48b315e7a
MD5 99395dbadca444ec4e9b7f7cc3007b97
BLAKE2b-256 b81401c8dca00425c5c9e5462e346c0afe883a392f5d11486619c2752c0b2ab3

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 338c0f0b89b7a955b9616d9b36cc7cd17738090ada792517bebc08950632f225
MD5 53101432d00d12e4431c820198af9399
BLAKE2b-256 cde1300cf5edd0827fca3bbdd651197a08f258a92d2fc4b849ff00c74bf05473

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 867de43475653e85fe29edf9582298cbb34991a4d6c05c88f5da6be5b0423788
MD5 dfd491d332b028ac6c83e3e6abb1022d
BLAKE2b-256 8edc826a5dc04e57c36f7091fda46232d721275751735aebbc01a67303614b68

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d0398c7aba3dce9ae69e409f9363360beace0d6444cb197de80e23a063de98d4
MD5 907a8ecfb68d1acd007a3e63e960b73b
BLAKE2b-256 9dac579c4194812c9dfb45026eb1ac6434800710976162c7ec21a98453f30215

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4252cf60c0536080b0ab6926a04c321918d877b6e56e2918376b44b12228bebb
MD5 967770b40e67d1e5ab9aeed3b4aafb39
BLAKE2b-256 662e78ffe830ba629131763dd673f0e804f2ed70d8f7b44c233d37b7eeba2a3a

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c191a90ff5ea4f35a004f1bd029a755081dbb0469f7215339e0a7cc51793a472
MD5 1e50346dd2da540b8c0413dd334bf0b3
BLAKE2b-256 9faba569de9db8d7d27bb08751ff45ced82347f76379a6f6ab7ac1b3059f7386

See more details on using hashes here.

File details

Details for the file ansys_mapdl_reader-0.51.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ansys_mapdl_reader-0.51.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 602f7419e89b6d74e8fc701419ed036fec550c70e2652879abb2901dccc3909b
MD5 952a634b7d22dba447ae478810088718
BLAKE2b-256 f887bf60ffeaf77ba52cce2dcdb50810357ccbaa63362f5fd9e02bdfcdd20dda

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page