本文摘要:(由ai生成)
本文介绍了基于Python的ANSYS结果文件自动后处理流程,特别是在前交叉韧带(ACL)仿真分析中的应用。Python实现了数据深度处理、自动化报告生成和优化软件联合等功能。通过ACL仿真分析案例,展示了Python读取ANSYS结果文件、绘制应力-应变曲线的过程。此外,还介绍了ACL材料属性和受力变化,以及通过Python进行材料参数拟合优化分析的方法。最后,提供了ANSYS批处理提交命令和pyansys库的安装使用指南,为研究者提供了高效的后处理工具。
前面讲到了基于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语言等都可以进行二次开发。这里只是简单介绍一下另外一个思路)。
Anterior Cruciate Ligament (ACL) 前交叉韧带仿真分析
背景:运动和汽车事故是韧带损伤的重要原因,前交叉韧带(ACL)的损伤是最常见的韧带损伤。在将人的膝盖关节固定在一起的许多韧带中,ACL尤为重要,因为它可以保持膝盖的稳定性,并通过限制关节运动来帮助防止对膝盖的伤害。ACL主要由连接股骨和胫骨的密集堆积的胶原纤维组成。ACL位于膝盖关节内部,如下图所示:
问题描述:由于较大的变形和旋转,ACL表现出高度的非线性和各向异性,并表现出明显的应变率相关性。各向异性行为是由排列在柔软材料基质中的胶原纤维族引起的。韧带是粘弹性的,因此表现出与时间有关和与载荷历史有关的机械性能。韧带的粘弹性行为具有临床意义,因为它们有助于防止韧带的疲劳衰竭。
有限元模型:ACL使用SOLID187单元进行网格画分。股骨使用刚性面的。在股骨表面和ACL之间定义了标准接触(KEYOPT(12)= 0)。
材料模型:使用各向异性超弹性材料模型用于ACL仿真。各向异性超弹性是一种基于势的函数,具有用于定义体积部分,等容部分和材料方向的参数。各向异性超弹性的应变能势由下式给出:
各向异性超弹材料模型常数:
ANSYS求解文件材料模型参数化:
边界条件和载荷:ACL模型的胫骨(底部)侧保持固定,并约束所有自由度。膝关节可弯曲,伸展和旋转。因此,分析考察了ACL在单轴弯曲,拉伸和旋转下的行为这三个工况。
在最大应力处容易发生损伤撕裂。
Anterior Cruciate Ligament (ACL) 前交叉韧带参数优化
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 12 09:38:40 2021
@author: Ansyent
"""
import pyansys as pa
import numpy as np
import matplotlib.pyplot as plt
rst = 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_results
stresslist = []
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]))
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)
这里将应力应变写到stresslist和strainlist列表中。
width,height=10,7
plt.rcParams['figure.figsize'] = width, height
plt.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中运行的效果,优化联合时后台运行即可。
注:
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的,均为在后处理软件中完成的。