基于Python的CAE后处理二次开发-ANSYS篇

      前面讲到了基于Python进行Nastran .pch结果文件的自动后处理过程。可用于如IPI、VTF、NTF等自动后处理。原计划继续介绍Nastran结果文件.op2自动后处理的内容。但有朋友问到了ANSYS结果文件.rst的后处理内容。今天简单介绍下基于Python的ANSYS结果自动后处理内容。这里用Python做后处理主要有以下几个原因:1.可以进行数据深度处理,尤其是对于大量分析数据可以进行基于机器学习等内容的研究。2.可以完成商用后处理软件无法完成的数据处理工作。3.可自动化后处理包括自动出报告等。4.可用于优化软件的联合。(诚然无论是ANSYS自带的后处理模块还是商业后处理软件hyperview/hypergraph/meta/Animator4等都可以进行丰富的后处理工作,亦可以进行二次开发完成结果处理和自动报告生成。ANSYS经典界面的参数化编程语言APDL,Hyperworks的tcl语言,meta自带的Python接口,Animator4的tcl语言等都可以进行二次开发。这里只是简单介绍一下另外一个思路)。
      为了不过于单调,这里选了一个比较有意思的小例子介绍基于Python的ANSYS结果文件自动后处理过程。

Anterior Cruciate Ligament (ACL) 前交叉韧带仿真分析

背景:运动和汽车事故是韧带损伤的重要原因,前交叉韧带(ACL)的损伤是最常见的韧带损伤。在将人的膝盖关节固定在一起的许多韧带中,ACL尤为重要,因为它可以保持膝盖的稳定性,并通过限制关节运动来帮助防止对膝盖的伤害。ACL主要由连接股骨和胫骨的密集堆积的胶原纤维组成。ACL位于膝盖关节内部,如下图所示:

基于Python的CAE后处理二次开发-ANSYS篇的图1

      研究表明,ACL极限抗张力强度(2020±264)N,最大形变(15.9±3.5)mm。ACL刚度为240N/mm,弹性模量为278MPa,极限抗张强度为35MPa[9]。所受应力变化与膝关节屈伸位置、肌肉收缩状态、负重或者非负重都有关系。ACL材料属性的研究不能全面反映运动状态下ACL受力变化。研究表明,ACL应力变化在不同外力大小、屈曲角度下及不同分束之间是不相同的。屈伸运动中,110N和22N胫骨前向外力下,当屈曲15°时ACL应力最大,为(110.6±14.8)N和(25.7±3.7)N;在屈曲90°时应力最小,为(71.1±29.5)N和(12.8±7.3)N。不同分束在屈伸过程中应力变化也不相同。

       日常活动中ACL最大应力均小于极限应力,一般为极限应力0.0%~44%。正常情况下以股四头肌收缩为主、屈曲度较小情况下(如股四头肌等长收缩、蹲起、主动伸膝等)ACL受力较大;而以腘绳肌收缩为主、屈曲度较大情况下(如腘绳肌等长收缩、60°和90°时股四头肌的等长收缩和股四头肌、腘绳肌协同收缩等)ACL应力则很小。步态循环中早期阶段(脚离地过程)ACL所受剪切力较大,在单脚离地时刻产生最大应力303N。后期阶段(脚着地过程)由于肌肉收缩、地面反作用以及胫骨-股骨之间相互作用,此时ACL受力较小。了解生理活动下ACL受力变化规律,对术后正确康复,避免ACL危险位置和动作,防止负荷过大有重要意义。

问题描述:由于较大的变形和旋转,ACL表现出高度的非线性和各向异性,并表现出明显的应变率相关性。各向异性行为是由排列在柔软材料基质中的胶原纤维族引起的。韧带是粘弹性的,因此表现出与时间有关和与载荷历史有关的机械性能。韧带的粘弹性行为具有临床意义,因为它们有助于防止韧带的疲劳衰竭。

      本文的研究内容是使用具有粘弹性的各向异性超弹性材料模型来建模各向异性,非线性行为,大应变,对弯曲载荷的高顺应性和不可压缩性。
      ACL是膝盖的四个主要稳定韧带之一。当受到弯曲,拉伸和旋转时,它限制了胫骨相对于股骨的运动。

有限元模型:ACL使用SOLID187单元进行网格画分。股骨使用刚性面的。在股骨表面和ACL之间定义了标准接触(KEYOPT(12)= 0)。


基于Python的CAE后处理二次开发-ANSYS篇的图2

材料模型:使用各向异性超弹性材料模型用于ACL仿真。各向异性超弹性是一种基于势的函数,具有用于定义体积部分,等容部分和材料方向的参数。各向异性超弹性的应变能势由下式给出:

基于Python的CAE后处理二次开发-ANSYS篇的图3

各向异性超弹材料模型常数:

基于Python的CAE后处理二次开发-ANSYS篇的图4

ANSYS求解文件材料模型参数化:

基于Python的CAE后处理二次开发-ANSYS篇的图5

边界条件和载荷:ACL模型的胫骨(底部)侧保持固定,并约束所有自由度。膝关节可弯曲,伸展和旋转。因此,分析考察了ACL在单轴弯曲,拉伸和旋转下的行为这三个工况。

工况一 :在ACL的上表面施加单轴位移载荷,总拉伸率为1.12。
工况二 :ACL发生45度弯曲(膝盖弯曲)
工况三 :在1.5秒的时间内使股骨表面旋转11.25度。
分析 结果:
工况一:拉伸
基于Python的CAE后处理二次开发-ANSYS篇的图6
基于Python的CAE后处理二次开发-ANSYS篇的图7
(注:这种云图不是PS的,是在后处理软件中完成的)

工况二:弯曲

基于Python的CAE后处理二次开发-ANSYS篇的图8

基于Python的CAE后处理二次开发-ANSYS篇的图9

在最大应力处容易发生损伤撕裂。

基于Python的CAE后处理二次开发-ANSYS篇的图10

工况三:旋转

基于Python的CAE后处理二次开发-ANSYS篇的图11


基于Python的CAE后处理二次开发-ANSYS篇的图12

Anterior Cruciate Ligament (ACL) 前交叉韧带参数优化

       这里主要用于ACL各向异性超弹材料模型的参数拟合。即材料模型中的四个参数a1、c1、c2、d。通过Python直接读取rst结果文件,并将ACL的应力应变结果输出,用于材料参数拟合优化分析。关于材料参数优化本文就不做过多介绍,具体方法可以参考公众号以往文章。包括基于LSOPT、Isight、Heeds、Optimus、Modefrontier的都已经备全了。当然,也可以直接在Python中进行拟合优化。
点击以下链接查看:
Optimus:Material calibration using Optimus (and ABAQUS)
LSOPT:Material calibration using LSOPT (and ABAQUS)
Heeds:Material calibration using HEEDS (and ABAQUS)
modefrontier:Material calibration using modeFRONTIER (and ABAQUS)
Isight:Material calibration using Isight (and ABAQUS)
基于Python的ANSYS结果自动后处理开发

基于Python的CAE后处理二次开发-ANSYS篇的图13

# -*- coding: utf-8 -*-"""Created on Fri Mar 12 09:38:40 2021@author: Ansyent"""import pyansys as paimport numpy as npimport matplotlib.pyplot as pltrst = pa.read_binary('F:/06_SoftWare_Temp/31_Python_CAE_Temp/python-ansys/ansys_case/acl_tension.rst')
def VonMises(s): stressmatrix = np.array([[s[0],s[3],s[5]],[-s[3],s[1],s[4]],[-s[5],-s[4],s[2]]]) ps = np.linalg.eig(stressmatrix)[0] misesstress = (((ps[0]-ps[1])**2 + (ps[1]-ps[2])**2 + (ps[2]-ps[0])**2)/2)**0.5 return misesstress

这里定义了一个求米塞斯应力强度的函数,因为通过Python直接读取的rst结果中只有基础解,即节点的6分应力分量。如果需要考察主应力、等效应力强度等需要对基础解进行计算即可。

numresults = rst.n_resultsstresslist = []strainlist = []stresslist1 = []nnum, stress = rst.nodal_stress(-1)
for i in range(len(nnum)): if np.isnan(stress[i][0]): stresslist1.append(0) else: stresslist1.append(VonMises(stress[i]))
这里的stresslist1为最后一个子步所有节点的应力强度结果,从中找到最大应力的节点,用于后续输出该节点的应力应变数据和曲线。
maxnodeid = stresslist1.index(max(stresslist1))
for i in range(numresults): stre = VonMises(rst.nodal_stress(i)[1][maxnodeid]) stra = rst.nodal_elastic_strain(i)[1][maxnodeid][6] stresslist.append(stre) strainlist.append(stra)

这里将应力应变写到stressliststrainlist列表中。


width,height=10,7plt.rcParams['figure.figsize'] = width, heightplt.plot(strainlist,stresslist,'r',label='simulation-stress',marker='o')plt.title("Stress-Strain")plt.xlabel("Strain[-]")plt.ylabel("Stress[Mpa]")plt.legend()plt.show()

在spyder中运行的效果,优化联合时后台运行即可。

基于Python的CAE后处理二次开发-ANSYS篇的图14

基于Python的CAE后处理二次开发-ANSYS篇的图15
在优化联合时,只需要将应力应变数据输出到结果文件即可。

注:

1.ANSYS批处理提交命令语法为:“ANSYS_Install_Path\ANSYSxxx.exe” -np 2 -b -i acl_tension.dat -o acl_tension.out。

2.读取ANSYS输入文件、结果文件需要安装pyansys库。库功能介绍:

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

3.文中云图不是PS的,均为在后处理软件中完成的。

(1条)
默认 最新
评论 点赞
点赞 4 评论 1 收藏 9
关注