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
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.

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 matplotlib.

import os
import pyansys

path = os.getcwd()
ansys = pyansys.Mapdl(run_location=path, interactive_plotting=True)

# create a square area using keypoints
ansys.prep7()
ansys.k(1, 0, 0, 0)
ansys.k(2, 1, 0, 0)
ansys.k(3, 1, 1, 0)
ansys.k(4, 0, 1, 0)
ansys.l(1, 2)
ansys.l(2, 3)
ansys.l(3, 4)
ansys.l(4, 1)
ansys.al(1, 2, 3, 4)
ansys.aplot()
ansys.save()
ansys.exit()
https://github.com/akaszynski/pyansys/raw/master/docs/images/aplot.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')
https://github.com/akaszynski/pyansys/raw/master/docs/images/hexbeam.png

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.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.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.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 `

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 Distributions

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

Built Distributions

pyansys-0.39.13-cp37-cp37m-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.7m Windows x86-64

pyansys-0.39.13-cp37-cp37m-manylinux1_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.7m

pyansys-0.39.13-cp37-cp37m-macosx_10_9_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pyansys-0.39.13-cp36-cp36m-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.6m Windows x86-64

pyansys-0.39.13-cp36-cp36m-manylinux1_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.6m

pyansys-0.39.13-cp36-cp36m-macosx_10_9_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pyansys-0.39.13-cp35-cp35m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.5m Windows x86-64

pyansys-0.39.13-cp35-cp35m-manylinux1_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.5m

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for pyansys-0.39.13-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b4e931c58a7c76109ad6cbaa1b85868b59b14c42643f0f2ae00961eabf991b90
MD5 d9b996f577c8ee9df967e30c11b7198f
BLAKE2b-256 a13ce21d41511730304c532a7394f445e3ab2159cbe36763dc341acf933e1480

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.8 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for pyansys-0.39.13-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2087913bded2835a16f47417bcda591c5daea9c481eb1fa2a74a5a4e89dfe016
MD5 2f720fdba2dd1163bedbb478397c7428
BLAKE2b-256 7aa04de64ab5396503704d5f0c9ee5b510299401343abecf91dd136ae652b50b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.3

File hashes

Hashes for pyansys-0.39.13-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a7bdfcb2acc6f79b32e6a94e25d684df1284a473b0436920fb9c7082af900ebd
MD5 bd98cd30cc85f9529ab74fec05483806
BLAKE2b-256 c9e8fae1d90c7413bc2533ded8e94d54973891cafcf0d5e8c1e5cebefac32946

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for pyansys-0.39.13-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 5e8cfd14fda98dc149ce58f53bebc522e130d86d0a55bb41b96af7a3119048b8
MD5 86566b8c7e257845460b15e07a0c6722
BLAKE2b-256 79158abfa80e1fa6f94e20a0abeecb8b76380e5c7986a0a683df05edaad17af8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.8 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for pyansys-0.39.13-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9ddae987c29955864a701f196a9ad45f98876752d25da08866866422a8fd8ca8
MD5 32d335e34dac65c0470c8a6103ee6c90
BLAKE2b-256 e3cb50a8d40c99669c09f1658d31d5aa59bd6a37cc2e1109687659f7ac70b0a2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for pyansys-0.39.13-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8b1c5f5c29260b64ed71332b01ff8bd715107d09b8ef57908b2defef101fdb50
MD5 ade98538063cd9b88b0648c8050aabdd
BLAKE2b-256 85ddf6fcff85d6501c9b1c2e0b838009dda869e7e40a6470b3597db07e306d22

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 2.0 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.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.5.4

File hashes

Hashes for pyansys-0.39.13-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 fb9e808f5ddf2e18090173f3ae810bb2c59b80e2e3d0265958f2263d0ef51ba6
MD5 f13cc7e0668ecc562d0f492ceb22c4f3
BLAKE2b-256 5677fbf6f572b4f06b2b351ebc6f54b5026a7e9bebd44b54aef7a430d7fb4599

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.39.13-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.7 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6

File hashes

Hashes for pyansys-0.39.13-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 692583e4bd53c1b38c6f2900b635db407f197165bdb38a7da9a09d0f7dc14336
MD5 cf3f4ca4f358207074eb86b4793b7b42
BLAKE2b-256 bc562053ce1fb01d40ba23316cfa823199693f647d9f5075908476674f59a6dc

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