Skip to main content

Pythonic interface to ANSYS binary files

Project description

https://img.shields.io/pypi/v/pyansys.svg https://dev.azure.com/femorph/pyansys/_apis/build/status/akaszynski.pyansys?branchName=master https://zenodo.org/badge/70696039.svg
This Python module allows you to:
  • Interactively control an instance of ANSYS v14.5 + using Python on Linux, >=17.0 on Windows.

  • Extract data directly from binary ANSYS v14.5+ files and to display or animate them.

  • Rapidly read in binary result (.rst), binary mass and stiffness (.full), and ASCII block archive (.cdb) files.

See the Documentation page for more details, and the Examples gallery for some examples.

Installation

Installation through pip:

pip install pyansys

You can also visit GitHub to download the source.

Quick Examples

Many of the following examples are built in and can be run from the build-in examples module. For a quick demo, run:

from pyansys import examples
examples.run_all()

Controlling ANSYS

Create an instance of ANSYS and interactively send commands to it. This is a direct interface and does not rely on writing a temporary script file. You can also generate plots using either MAPDL’s internal plotting with matplotlib, or interactive plots using VTK:

import os
import pyansys

path = os.getcwd()
mapdl = pyansys.launch_mapdl(run_location=path, interactive_plotting=True)

# create a square area using keypoints
mapdl.prep7()
mapdl.k(1, 0, 0, 0)
mapdl.k(2, 1, 0, 0)
mapdl.k(3, 1, 1, 0)
mapdl.k(4, 0, 1, 0)
mapdl.l(1, 2)
mapdl.l(2, 3)
mapdl.l(3, 4)
mapdl.l(4, 1)
mapdl.al(1, 2, 3, 4)
mapdl.aplot()
mapdl.save()

Here is an example plot from one of the more complex examples:

https://github.com/akaszynski/pyansys/raw/master/docs/mapdl/images/vplot_vtk_small.png

Loading and Plotting an ANSYS Archive File

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

import pyansys
from pyansys 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
import pyansys
from pyansys 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/akaszynski/pyansys/raw/master/docs/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/akaszynski/pyansys/raw/master/docs/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)

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)
https://github.com/akaszynski/pyansys/raw/master/docs/images/beam_mode_shape_small.gif

Reading a Full File

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

# Load the reader from pyansys
import pyansys
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

Additional Tools

There are additional tools created by @natter1 at pyansysTools which include the following features:

  • Inline class: Implementing the ANSYS inline functions

  • Macros class: Macros for repeating tasks

  • The geo2d class: Easily create 2d geometries

You can also install pyansystools with

` pip install pyansystools `

Citing this Module

If you use pyansys for research and would like to cite the module and source, you can visit pyansys Zenodo and generate the correct citation. For example, the BibTex citation is:

@software{alexander_kaszynski_2020_4009467,
  author       = {Alexander Kaszynski},
  title        = {{pyansys: Python Interface to MAPDL and Associated
                   Binary and ASCII Files}},
  month        = aug,
  year         = 2020,
  publisher    = {Zenodo},
  version      = {0.43.2},
  doi          = {10.5281/zenodo.4009467},
  url          = {https://doi.org/10.5281/zenodo.4009467}
}

Please visit the link above for the most recent citation as the citation here may not be current.

License and Acknowledgments

pyansys is licensed under the MIT license.

This module, pyansys makes no commercial claim over ANSYS whatsoever. This tool extends the functionality of ANSYS by adding a Python interface in both file interface as well as interactive scripting without changing the core behavior or license of the original software. The use of the interactive APDL control of pyansys requires a legally licensed local copy of ANSYS.

To get a copy of ANSYS, please visit ANSYS

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

pyansys-0.43.4.tar.gz (2.1 MB view details)

Uploaded Source

Built Distributions

pyansys-0.43.4-cp38-cp38-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.8 Windows x86-64

pyansys-0.43.4-cp38-cp38-manylinux1_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.8

pyansys-0.43.4-cp38-cp38-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyansys-0.43.4-cp37-cp37m-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.7m Windows x86-64

pyansys-0.43.4-cp37-cp37m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.7m

pyansys-0.43.4-cp37-cp37m-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pyansys-0.43.4-cp36-cp36m-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.6m Windows x86-64

pyansys-0.43.4-cp36-cp36m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.6m

pyansys-0.43.4-cp36-cp36m-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pyansys-0.43.4-cp35-cp35m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.5m Windows x86-64

pyansys-0.43.4-cp35-cp35m-manylinux1_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.5m

File details

Details for the file pyansys-0.43.4.tar.gz.

File metadata

  • Download URL: pyansys-0.43.4.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for pyansys-0.43.4.tar.gz
Algorithm Hash digest
SHA256 cd1c56eb1aca4a802d3fecfd179eaeca8a01ff4315d2893d8aaa37fa1c4db399
MD5 6d406467c9da0b1c69aa1d393047feb1
BLAKE2b-256 fd4b5787ef627c1ceeea6c1f19c9c8c3f26b607508fa3f05866ca68a99cab1d2

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for pyansys-0.43.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 024af2cf9a6a5bafd3a8f84cbb50057d8159518b4ce22cebf4319f3498a2b221
MD5 bc874773d49a4c36d2f28c627b8195e7
BLAKE2b-256 cd3ea8fba481b6a23d6fd331b328f135501ff9b67ddd510731b4aec2dbe9ca1f

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for pyansys-0.43.4-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b281e370f531b318488838c26cde8a05be4bef7aaefc630a85582b47630b3932
MD5 5385e03c6ed42b7b8437fc803641eb18
BLAKE2b-256 29df9a419da827b6a0fa10ac2db5f511a7cb77cc0d45eb12e1f9f6d2dda5ba47

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for pyansys-0.43.4-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6027bd4a12c2759bd0e9edba79b73ba43d44e31efb5f60f0bedffca8b0980828
MD5 c50f2aa3c63c28d5a95c30d1bcc93f5d
BLAKE2b-256 c8994eb50950c5dfedc4066b92cdf29e3d2ce7d008e48294c69ba715e07f0be8

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for pyansys-0.43.4-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e479a888c2f206dba9d7ea3e206c56b170d37bb0541a5281316f013a1824bc25
MD5 fa5ba4336257c6b388ed4899d9eee83b
BLAKE2b-256 52f4140b8ed64bbcbb392b9b21c8ab51a92a3839c8c3089987af9c990225e473

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for pyansys-0.43.4-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a4acee57866eb7d1a30e6092d7753dd4281c6a73f84c891523b47269338e5251
MD5 ed0e6042dedd9811492220108e8a077e
BLAKE2b-256 98aa2aa3eedc76deb7c91b4f2a81a0f3223c1ce07329fcdb81939a37bee98bc1

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for pyansys-0.43.4-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2d486a22e28ee418bedcb33ba6e837debb313d52fcf70168d54f3bf0db808799
MD5 30701603ae121cf3051178b391f9cb92
BLAKE2b-256 9f94722629f82e71a7aacc1d08e306b91d85b1d2c76c81fd4e7c1e789be1f9aa

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for pyansys-0.43.4-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 c0bb8f992b37032fdeea5f1d438989020c68770fcab85f6cf6d670b3dab52d9f
MD5 366c0ddc90fbcf43e19ec2f41f984fa7
BLAKE2b-256 8a163af9357cce1b62cef5e878bb19c904ef3be260a6c81c3bce7205d6c97293

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.12

File hashes

Hashes for pyansys-0.43.4-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 89f2714ce784acf1b36239a08e497a564fc606c5abdd99fc281fb71bb2ff171a
MD5 b756cd22b8769b3080e71e5ce1c6bb50
BLAKE2b-256 277fea773c7c13060f0f38869760a3750a0fe672401a2b4fce41638dadf505c6

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for pyansys-0.43.4-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f4ace5633fff18b950cb2418bc119cc7f36cfe4d8d642a5424a3dbf762627f67
MD5 65a89318a950e2271fcdbaaab769d7a4
BLAKE2b-256 e8e1ad165df4ade188f478ae823e1e8a280d6b5241338937e80ad32de86a9295

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.5.4

File hashes

Hashes for pyansys-0.43.4-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 54abf924839d94d56e99282b516ae11e7199727d04336a36583846a3f82368a3
MD5 1f6e59f987bd14bc15989a9cb0ecf792
BLAKE2b-256 d074b588b30fac006552ef0cebc7bb9bb6f455ec9b8e4472a599141dde6bfcd3

See more details on using hashes here.

File details

Details for the file pyansys-0.43.4-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.43.4-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.5.9

File hashes

Hashes for pyansys-0.43.4-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d0c758306a04f0b01fd235c4d51b18ca938bfaec58b9bc13e6409c9645e9d0d9
MD5 88d4194797bc2b8dbdc9f8fb6345261e
BLAKE2b-256 cfd4467f17e37bf7f1f8624e9a142728a0800cde2c677514fc5dc416eb23d15e

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