与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第三方库


热门话题
java集合属性值   java字符串==运算符是否比较引用?   java是否存在过太多的ListView或适配器?   json获取java中类路径中下载的文件   我可以用java代码解决数据库并发问题吗?   在多个线程中使用forEach()或使用forEach()和lambdas进行java集合迭代   java输出JFrame中的整个循环   java禁用高度详细的日志记录   java在没有特定属性的对象中访问模型的值   java Smack xmpp建立连接   处理过时域对象引起的并发问题的java策略(Grails/GORM/Hibernate)   java从ObservableList中提取元素   使用图像进行java相似图像搜索   java ListView和图像:我快疯了   在Java中,如何从毫秒时间戳中提取一天的周期?   java我需要这样的设计,但我面临两个问题   java如何获取JGoodies FormLayout中的单元格大小   Spring引导生成的java War文件未部署到Weblogic 12c