与ansys二进制文件的pythonic接口

pyansys的Python项目详细描述


https://img.shields.io/pypi/v/pyansys.svghttps://travis-ci.org/akaszynski/pyansys.svg?branch=master
此python模块允许您:
  • 在Linux上使用Python交互控制Ansys v14.5+的实例,>;=17.0在Windows上。
  • 直接从二进制ansys v14.5+文件中提取数据,并显示或动画它们。
  • 快速读取二进制结果(.rst)、二进制质量和刚度(.full)和ascii块存档(.cdb)文件。

有关详细信息,请参见Documentation页。

安装

通过PIP安装:

pip install pyansys

您也可以访问GitHub下载源代码。

快速示例

以下许多示例是内置的,可以从内置运行 示例模块。要快速演示,请运行:

frompyansysimportexamplesexamples.run_all()

控制ansys

创建一个ansys实例并交互地向其发送命令。这是一个直接接口,不依赖于编写临时脚本文件。也可以使用matplotlib生成绘图。

importosimportpyansyspath=os.getcwd()ansys=pyansys.ANSYS(run_location=path,interactive_plotting=True)# create a square area using keypointsansys.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

加载和打印ansys存档文件

包含实体元素(既有传统元素也有当前元素)的ansys存档文件可以使用archive加载,然后转换为vtk对象。

importpyansysfrompyansysimportexamples# Sample *.cdbfilename=examples.hexarchivefile# Read ansys archive filearchive=pyansys.Archive(filename)# Print raw data from cdbforkeyinarchive.raw:print("%s : %s"%(key,archive.raw[key]))# Create a vtk unstructured grid from the raw data and plot itgrid=archive.parse_vtk()grid.plot()# write this as a vtk xml filegrid.Write('hex.vtu')
https://github.com/akaszynski/pyansys/raw/master/docs/images/hexbeam.png

然后,可以使用pyvista或其他使用vtk的程序加载此vtk文件。

# Load this from vtkimportpyvistaaspvgrid=pv.UnstructuredGrid('hex.vtu')grid.plot()

加载结果文件

此示例从ansys读取梁的模态分析的二进制结果。

# Load the reader from pyansysimportpyansysfrompyansysimportexamples# Sample result filerstfile=examples.rstfile# Create result object by loading the result fileresult=pyansys.read_binary(rstfile)# Beam natural frequenciesfreqs=result.time_values
>>>print(freq)[7366.495039697366.4950396911504.8952366417285.7045945617285.7045945720137.19299035]# Get the 1st bending mode shape.  Results are ordered based on the sorted# node numbering.  Note that results are zero indexednnum,disp=result.nodal_solution(0)
>>>print(disp)[[2.89623914e+01-2.82480489e+01-3.09226692e-01][2.89489249e+01-2.82342416e+012.47536161e+01][2.89177130e+01-2.82745126e+016.05151053e+00][2.88715048e+01-2.82764960e+011.22913304e+01][2.89221536e+01-2.82479511e+011.84965333e+01][2.89623914e+01-2.82480489e+013.09226692e-01]...

绘制节点结果

由于模型的几何图形包含在结果文件中,因此可以打印结果,而无需加载任何其他几何图形。下面,使用VTK绘制模态分析梁的第一个模态的位移。

# Plot the displacement of Mode 0 in the x directionresult.plot_nodal_solution(0,'x',label='Displacement')
https://github.com/akaszynski/pyansys/raw/master/docs/images/hexbeam_disp.png

通过设置相机并保存结果,可以以非交互方式打印结果并保存屏幕截图。这有助于批处理结果的可视化和后处理。

首先,从交互式绘图中获取相机位置:

>>>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)]

然后生成绘图:

result.plot_nodal_solution(0,'x',label='Displacement',cpos=cpos,screenshot='hexbeam_disp.png',window_size=[800,600],interactive=False)

也可以使用下面的代码绘制应力。节点应力的计算方法与ansys使用的方法相同,通过平均所有附加单元在该节点处计算的应力来确定每个节点处的应力。目前,只能显示构件应力。

# Display node averaged stress in x direction for result 6result.plot_nodal_stress(5,'Sx')
https://github.com/akaszynski/pyansys/raw/master/docs/images/beam_stress.png

节点应力也可以通过以下非交互方式产生:

result.plot_nodal_stress(5,'Sx',cpos=cpos,screenshot=beam_stress.png,window_size=[800,600],interactive=False)

设置模态解的动画

模态分析中的模态形状可以使用animate_nodal_solution

result.animate_nodal_solution(0)

如果要将动画保存到文件中,请指定电影文件名并使用:

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

读取完整文件

此示例读取与上述示例关联的质量和刚度矩阵。

# Load the reader from pyansysimportpyansysfromscipyimportsparse# load the full filefobj=pyansys.FullReader('file.full')dofref,k,m=fobj.load_km()# returns upper triangle only# make k, m full, symmetric matriciesk+=sparse.triu(k,1).Tm+=sparse.triu(m,1).T

如果安装了scipy,则可以求解其固有频率和振型的本征系统。

fromscipy.sparseimportlinalg# condition the k matrix# to avoid getting the "Factor is exactly singular" errork+=sparse.diags(np.random.random(k.shape[0])/1E20,shape=k.shape)# Solvew,v=linalg.eigsh(k,k=20,M=m,sigma=10000)# System natural frequenciesf=(np.real(w))**0.5/(2*np.pi)print('First four natural frequencies')foriinrange(4):print'{:.3f} Hz'.format(f[i])
First four natural frequencies
1283.200 Hz
1283.200 Hz
5781.975 Hz
6919.399 Hz

许可证和确认

pyansys根据mit许可证获得许可。

Sharcnet提供的html生成的ansys文档和函数。谢谢!

这个模块pyansys对ansys没有任何商业声明。这个工具扩展了ANSYS的功能,在两个文件接口和交互脚本中都添加了一个python接口,而不改变原始软件的核心行为或许可证。使用pyansys的交互式apdl控件需要合法授权的ansys本地副本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何获得@sign,以便在Java代码中键入@override?   java Facebook登录不起作用,我忘了什么?   json如何在java中从MongoDB Atlas获取特定字段?   java如何在Android上的JNI中实现委托/协议(在iOS上)?   java为什么这个循环多次的程序在循环后有一个“println”时需要花费时间?   java无法使组合框正常工作   JavaCQ5。如何为作者显示列表发布者?版本5.5   java我可以要求泛型参数具有泛型参数吗?   JavaOKHTTP无法获取整个JSON   数组Java:用字符减去字符意味着什么?   java为什么Eclipse content assist无法从部分方法名生成方法存根?   java使用线程在Android Studio中一次加载一个多位图   java遍历二叉树并返回一个值