Abaqus中使用Python提取裂缝数据并用matplotlib库绘图
目前在Abaqus中,基于全局或局部嵌入Cohesive单元,以模拟非均质材料的裂缝扩展的方法已经相当普遍。我想POLARIS_InsertCohElem插件起到不小的作用。
后处理方面,也推出的POLARIS_CrackGeo插件提取Cohesive单元和XFEM模拟获得的裂缝数据。但如何出图来展示裂缝形态,成为插件用户的一大痛点。
在Abaqus中,Cohesive单元模拟的裂缝路径可以通过显示特征边的方式进行展示,但这种方法有几个方面的缺点:
虽然可以叠加显示出裂缝周边实体单元的应力、孔压等场量输出,但在表现裂缝自身场量结果时没有线图直观,如下例中显示缝宽的效果对比;
很难像线图那样凸显天然裂缝或颗粒边界以及其它特殊位置的Cohesive单元;
由于全局嵌入Cohesive单元,在单元共节点位置存在孔洞,部件变形后,孔洞呈现出小黑点的形式,无法去除,线图就完全不存在这些问题;
常用的编程绘图工具,目前以Matlab和Python matplotlib为主,Abaqus2021版本之后就已经内置了matplotlib库,因此本文以matplotlib库为基础,带大家绘制POLARIS_CrackGeo插件提取的裂缝线图。
第一步,了解数据文件结构
POLARIS_CrackGeo插件提取odb结果后,在ODB文件所在目录下,会生成两个与ODB文件同名的CSV文件,分别是:“odbName-XFEM/COH-infos.csv”和“odbName-XFEM/COH-Output.csv”:
infos.csv文件
用于存储所有破裂单元的裂缝面的节点坐标、裂缝破裂形式MMIXDMI和裂缝宽度信息;当提取的是XFEM裂缝时,仅输出节点坐标信息;当提取的是Cohesive单元裂缝时可输出MMIXDMI(场量有定义MMIXDMI输出)和裂缝宽度,裂缝宽度排序采用倒序记录:第一个裂缝宽度,为最后一个分析步的最后一帧所对应的宽度,第二个裂缝宽度,为倒数第二帧对应的宽度,依此类推……
读取infos.csv文件代码示例如下:
def readCohesiveInfo(fileName):
### 读取infos.csv文件,获得单元坐标信息
dataDict = {
}
f = open(fileName,'r')
lines = f.readlines()
f.close()
strDatas = lines[0].replace('\n','').split(',')
headDict = {
}