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 https://img.shields.io/discord/412182089279209474.svg?label=Discord&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2
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.

Be sure to visit the discord channel at pyansys Discord Channel

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.44.17.tar.gz (2.1 MB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8 macOS 10.9+ x86-64

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

Uploaded CPython 3.7m Windows x86-64

pyansys-0.44.17-cp37-cp37m-manylinux1_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.7m

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

Uploaded CPython 3.7m macOS 10.9+ x86-64

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

Uploaded CPython 3.6m Windows x86-64

pyansys-0.44.17-cp36-cp36m-manylinux1_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.6m

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

Uploaded CPython 3.6m macOS 10.9+ x86-64

pyansys-0.44.17-cp35-cp35m-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.5m Windows x86-64

File details

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

File metadata

  • Download URL: pyansys-0.44.17.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.5.4

File hashes

Hashes for pyansys-0.44.17.tar.gz
Algorithm Hash digest
SHA256 126ffbff80ab7b6aa2b5942706e5bffac467888706bf33718d1e10624204d216
MD5 2b90e596c11ada50b738547ee3aad392
BLAKE2b-256 e063e740b8f161f6de4b4d9e8593679b6545a6fa46c9f1234af16d11cbc12884

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.8.6

File hashes

Hashes for pyansys-0.44.17-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d2a7fe483e58f0c4ccb6a648d0617d91ac5de838c7665178a389f73b4e3b394e
MD5 911f6b6909196eb11a26f09d7a879afb
BLAKE2b-256 011fb43e57837feeb92b0a0db35d16ac2545d2a7d27b40dac69d0573bb3242a4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.8.6

File hashes

Hashes for pyansys-0.44.17-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 bfe264ee75f0fc5f4b3e914401524b82cb4a7676826f225d63bc21b7315aac13
MD5 6c0ef51a9c6e81bc8495279bc8745e2f
BLAKE2b-256 a7cf83cce1f1f934266541fb4e476d5955950d01586968c6ac460a1ee3de88be

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.8.5

File hashes

Hashes for pyansys-0.44.17-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a8649572ece9151b927f9f8f1d9cb0d8d254effe5687ca404721fe27a8b4e22b
MD5 2ccced8943ffdd2a5bea34a6f4638927
BLAKE2b-256 b76c2103d1fce8bc5b3fcb948b7c32f5d5b0661be39cf8fd1f621c8430abdf90

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for pyansys-0.44.17-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d3ceaa10e4b2566af313f134897fd834e29fce68488eda43e0305b69193737a6
MD5 878c341ab63c17fe7d946e101692d7da
BLAKE2b-256 95fe1aa69ffed6d2096d342b59f53a337b39b9177fd8dc45741afa6ce3461703

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pyansys-0.44.17-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9016a4b84188aa6f8814bc312f116c96661833eb5ff2a446de33cc73cc12bb3f
MD5 6b67cae28071ac8839d5cae556e7c5c5
BLAKE2b-256 5ad7c7d05d4380542bf35a7577a388cc9344ac9b6a2c81465d29c69952777fe9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for pyansys-0.44.17-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a6f9cc65dc85c9311c41fbe55d47f0437665e9d73b837d4210b43adc32f57bc4
MD5 5f4d1ccc96debdee0219c1e66585fc2d
BLAKE2b-256 2150a930e7ff88ae1f433f052e91fdf82f6dac6d58e78d93eb9cb3662a283ba9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.6.8

File hashes

Hashes for pyansys-0.44.17-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7dcfe605930c8cca7b588330f5c4ff81f347351a08e76163a3017627d69bd3b6
MD5 50f17b57ef621afe9e354618e55524f1
BLAKE2b-256 67e555a9358f7d2e02ecb32357b7c84d052c5c5ebf3b95d0246ae15d71bbff7c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.6.12

File hashes

Hashes for pyansys-0.44.17-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 650d71b75883ff49bf2ac707d5570bafda5d1b2af93ff271b092df7d6ac3caef
MD5 5bd4f50cd29193d4f9400cea0033fc4a
BLAKE2b-256 cc46b93ebb10176a9998edf7c7ca5417e5f5113808d04a88647b3a05fd6450c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-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.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.6.8

File hashes

Hashes for pyansys-0.44.17-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 14cdcb0bb3b02d5eb402f046daa1902754bf03870b999f545e2efcafbadd05fe
MD5 b424c165b87c9c66de1573224180d4cd
BLAKE2b-256 a1d368e370c7500ad1c23b4c522c03d0ee64153a5f7a9021826df4f97bd96b80

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.44.17-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.5.4

File hashes

Hashes for pyansys-0.44.17-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 5c7fbe3cb85238ace3953008cc23eccd4fc2b0198840867bb2a618086ac8844c
MD5 b04d4458deca4546ec84b0683a1e3c52
BLAKE2b-256 b97696ea8d2156c82b631dd61d21b357448c468b9cae38c386d7a03f8f22f889

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