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()
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()
mapdl.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.41.1-cp38-cp38-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.8 Windows x86-64

pyansys-0.41.1-cp38-cp38-manylinux1_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.8

pyansys-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

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

Uploaded CPython 3.7m Windows x86-64

pyansys-0.41.1-cp37-cp37m-manylinux1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.7m

pyansys-0.41.1-cp37-cp37m-macosx_10_9_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

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

Uploaded CPython 3.6m Windows x86-64

pyansys-0.41.1-cp36-cp36m-manylinux1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.6m

pyansys-0.41.1-cp36-cp36m-macosx_10_9_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

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

Uploaded CPython 3.5m Windows x86-64

pyansys-0.41.1-cp35-cp35m-manylinux1_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.5m

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.8, 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.46.1 CPython/3.8.3

File hashes

Hashes for pyansys-0.41.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 374161928985698c0fd038aaec3de2e97858ceb5e74f98cc4aa907160708682b
MD5 28d14fa3c9de480cd0d7e110190583cf
BLAKE2b-256 06b0845898b456193b06b71be97e807b4299f858b09092e9a88c2e253da2e8de

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.8
  • 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.46.1 CPython/3.8.3

File hashes

Hashes for pyansys-0.41.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6727662ee0662038cc3edee0b421f4cb82296463e73382bb015dd4a4d18571c4
MD5 82a8a388e88e781e3d64fec4e616126a
BLAKE2b-256 fb9b791ce95af8a0a1e7e68703c9c0f93922f151874ca783fda23872c578ca81

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.8, 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/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for pyansys-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 559ed82cd8c181b76c6bbc46fc946c15e035288daca02a88471c93313efcd1f6
MD5 493f79d76362087f14bfdb7eed6d380c
BLAKE2b-256 21f496e2fd6f07b439a36f67d85fb8dbc417634f266fa469c623a48a31665119

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-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.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pyansys-0.41.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 74c0dda8763f303699fad3b667896d21da0627a6d7ff184b6c1231ee64bba89e
MD5 95c7e8c60e0cbc26f8fe67500bb3d236
BLAKE2b-256 c16cb02022855d4a21b4b38eb58fcf95b79a04a4aca6376d37bc53e886d54ff2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.3 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.46.1 CPython/3.7.7

File hashes

Hashes for pyansys-0.41.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a45bb4c52af8379b0f306456414a9fad15d3ed0b38144322e1aa332026d3e7e2
MD5 94a13ed69cbe0d6f46d97aced2c375e4
BLAKE2b-256 825b9b98ea03f947d9a2aa66abab5040b2eb8e20719559365ae351cf12ea0b78

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.1 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/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pyansys-0.41.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 637d956c46727c04b514cede34ab92081ff0351558cb765361e4d9660f062ea0
MD5 8387b236455fc02c2e6071566c6636ef
BLAKE2b-256 0da4c354cf555e97e830fcdf8d30c82ba1bffe8a3ce51e5ddd14f348a128ddab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-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.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.8

File hashes

Hashes for pyansys-0.41.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 908623b54af9b2a8153d70790c422216c86c4ec61d63c6a2c3d79432469ea907
MD5 c97dbe3a79c7c3ee18515e19057cbd95
BLAKE2b-256 762724fc6b60eea645d1827e7e4cec28bba1b57219d71f952e941146ba40a1c8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.3 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/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.10

File hashes

Hashes for pyansys-0.41.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ef831e11b2f46e918068ef24f210f2f8fc4230afdb26c842ae4fe4180b5325cc
MD5 36d918f71e12f5e5cdec0c71882ab008
BLAKE2b-256 3bb9ef4e2685f406903f61f029ba5a3f1b7aac966cd31e148488121b8a2e1718

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.1 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/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.8

File hashes

Hashes for pyansys-0.41.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2310c4e2a48b48f70c931ed16cc7546ede20e9ff19eb33bffa8b9bbaa20f29c7
MD5 2a0eeff27b840ea17f3c5a18499bd413
BLAKE2b-256 79eb1b9ccbd2ac399050ab4d0ef52ac3829e2009b00b8958dce545f1292ed232

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-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.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.5.4

File hashes

Hashes for pyansys-0.41.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 da78aea2fee383dacc8d4a0da8ef1fd8dd4d1af65cbace2e892dd4ce69d00553
MD5 ea8531143cd4a1dfbd61d57133a6c9ac
BLAKE2b-256 17462915442987acdbff8d77229583d9b7b6909f0f293fabcb219e2e31598ca1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.41.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/28.8.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.5.9

File hashes

Hashes for pyansys-0.41.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 88aee1f61513751b3e1dc4b7448ba0848b7737b0051dd586e2a70254e20d018e
MD5 9ac00a807a7cdc8d5ce51e5009484fed
BLAKE2b-256 8f909e26dbca09a32ec921412174e20b247c1e2811bd2b21da3d8b46afcc4f03

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