找回密码
 注册
Simdroid-非首页
查看: 9726|回复: 319

[断裂与失效] 【教程】批量插入2-3D COHESIVE 单元的思路方法代码详解,包...

[复制链接]
发表于 2017-3-16 23:23:35 | 显示全部楼层 |阅读模式 来自 广东深圳
本帖最后由 278069641 于 2018-3-31 10:48 编辑

本人发此贴目的在于分享自己在探索利用CFEM法研究不同材料组织结构对裂纹扩展影响过程中遇到的cohesive elements 插入问题的解决心得与遗留的问题,本人空闲时间有限,不能一次性把这个问题讲清楚,但会慢慢更新自己的帖子。希望对大家有所帮助.
通过修改inp文件来插入cohesive 单元首先就要了解inp文件,我想通过做小例子的方法来为大家讲解如何修改inp文件来插入cohesive elements。
1. 先创建一个可变形的part,并利用partition功能划分出开裂区域,为了方便后来网格划分的好看,我多partition了一条斜线。

2. 创建材料,截面属性,并赋予给整个part。如图


3.划分网格,由于裂纹扩展一般都不是直线传播的,为了增加裂纹扩展方向的随机性(网格越细,效果越好),我们把裂纹扩展区的网格划分为纯三角形的,非扩展区的网格划分为纯四边形的以示区别。

一般网格划分默认为混合型的,这个时候要用到菜单栏的mesh——contral来设置element形状:



最后效果如图:

4.在设置边界条件和分析步,创建job后提交分析,就可以生产inp文件以及计算结果

本例中采用固定下边,给上边赋予一个向上位移载荷的边界条件。

获得inp文件后,用可以以txt文本格式打开,本例子的inp文件上传到附件
游客,如果您要查看本帖隐藏内容请回复
在inp文件中我们可以看到模型的各种参数和约束条件。
本例子中模型的node、element信息在inp文件中如图:

*Node下面的数据给出了Part1-1中node的编号和坐标信息,node是在mesh后产生的,node的数据信息分为三列,第一列为node的编号,第二、三列分别代表了node的x、y的坐标值。即第一列给出了node的身份信息,第二、三列给出了node的位置信息。
*Element表示后面给出的是单元信息,type=后面给出的是单元种类信息。其中CPE3表示3节点平面应变三角形单元,下面列出的单元数据信息对应于模型中部的三角形单元。CPE4R代表4节点平面应变四边形单元,对应与模型两端的四边形单元。
单元数据中第一列为单元编号,编号为整数,且连续。后面几列是组成这个单元的node的编号,例如1号element是由7号、5号、3号node连接而成的三角形单元。9号element是由4、8、14、10号node连接成的四边形单元。
*Nset 是node set 的意思,表示这部分数据给出了一个node集的信息。nset=Set-10表示这个node集的名称为Set-10,   generate的意思是说这个node集是按一定间隔规律生成的,下面的数据1,15,1就给出了这个规律,意思是说这个node集是从1到15号node,他们按间隔为1的规律生成,也就是说这个node集包括1、2、3、4、5、6、7、8、9、10、11、12、13、14、15这15个node。如果是generate      1,15,2  那么这个node集就包括1、3、5、7、9、11、13、15,他们的间隔为2,范围是从1到15。
*Elset是element set 的意思,表示这部分是单元集的信息。数据表达方式同*Nset
我们研究inp文件数据格式的目的在于在模型的开裂区的单元之间插入0厚度的cohesive单元,那么如何生成cohesive单元呢?注意inp文件以txt形式打开后是可以直接编辑的,那么我们只需要在inp文件中添加一行字符:*Element, type=COH2D4,表示我下面还要给出一部分单元的数据信息,单元类型为COH2D4,即2维的4节点cohesive单元,然后再给出cohesive的数据信息,就可以了。
那么如何添加cohesive单元的数据信息呢?
根据inp文件给出的数据,我们把各node的编号用红色数字标在模型的网格图上,把element的编号用黑色数字标在模型的网格图上。如图所示

例如1号三角形单元就是由节点7、5、3逆时针连接而成。11号四边形单元由节点3、6、15、12逆时针连接而成。我们要在让裂纹能在中间的开裂区发生开裂,就需要在三角形单元与三角形单元之间、三角形单元与四边形单元之间插入0厚度的cohesive element。例如1号和3号三角形单元之间插入0厚度的cohesive单元,那么这个0厚度的cohesive单元应该由两个3号节点和两个5号节点逆时针方向连接而成。通过本人验证,这个0厚度的cohesive单元的节点顺序必须是3,5,5,3或者5,3,3,5;而不能是5,5,3,3或3,3,5,5,规律是节点逆时针连接形成的第一条边必须是cohesive单元的有长度的一边,第二条边是0厚度的边,以此类推。但当我们用3,5,5,3或者5,3,3,5作为1号和3号三角形单元之间cohesive单元的节点信息时,依然存在问题,因为ABAQUS不允许一个element中出现相同的节点,但是ABAQUS允许编号不同坐标相同的两个节点存在并出现在同一个element中,这位插入0厚度cohesive element创造了条件。我们把出现在同一个cohesive上相同的节点分别赋予两个不同的序号,我称之为分裂(同一个节点变成两个序号不同,但位置相同的两个节点)。同样以3号节点为例,因为它要参与构成1号和3号三角形单元之间的cohesive element,所以3号节点需要分裂1次,由于3号节点还要参与构成3号单元与11号单元之间的cohesive element,所以它还需要分裂一次。这样它总共分裂了2次,产生了3个位置相同但编号不同的节点。以此类推,7、9号节点只需要分裂一次,得到2个位置相同但编号不同的节点。5号节点需要分裂8次,但只产生了8个位置相同但编号不同的节点,因为最后一次分裂用到了最原始的节点。那么这些分裂出来的节点该如何编号呢?本人想到一个办法,就是看原模型的节点编号最大达到了几位数,然后再所有分裂得到的新节点员编号前再添加一位数,这位数从0-9变化以表示产生的次序。例如,本例中最大节点编号是15,那么编号最大达到了二位数字,我将新产生的节点统一添加一个百位数,这样可以避免新的序号与旧的序号重复。例如3号节点,原编号为3,分裂一次产生一个新节点,编号为103,再分裂一次产生一个新节点,编号为203,最后这个位置存在3个节点:3,103,203。这样既保留了原编号的信息(通过103可以看出原编号为3),又避免了重复。再比如5号节点,插入cohesive element 后的所有节点为5,105,205,305,405,505,605,705。表明这个位置最后有8个节点,它们都是有5号节点分裂而来。为了便于大家理解,假设cohesive 单元在视觉上是有厚度的,那么在这些单元之间插入cohesive单元后,效果如图下图所示:

这样,我们就知道该如何修改inp文件来产生cohesive element了。
第一步:
由于分裂产生了新编号的节点,所以我们需要将新的node数据添加到inp文,本例添加新增节点后inp文件如图

第二步:
分裂后,开裂区的单元的节点也发生了变化,如1号三角形单元原node编号是7、5、3,插入cohesive element后变为了7、205、203. 这个变化也要在inp文件中改过来,如图所示:


第三步:
添加cohesive element的数据信息,在原inp文件的*Element数据后面添加一行字符:*Element, type=COH2D4,然后根据前面的讲解,把所有的cohesive element 数据信息列举出来,如图所示:

注意:在修改inp文件时最好切换到英文输入法,有些中文输入法输入的字符会导致inp文件导入ABAQUS时发生错误。输入的数据严格按照原inp文件的格式。
到此cohesive element就算是插入成功了。但这时的inp文件还不能用。
第四步:
由于添加了cohesive element,还需要为这些单元设置材料属性和截面属性。
首先为新添加的cohesive element 定义一个单元集,集合名称为COHESIVE:


然后定义一个cohesive性质的section



其中**Section是在声明这部分数据是定义section,冒号后面是section的名称,*cohesive section是在声明这个section的性质是cohesive的,这个section的范围是elset=COHESIVE(即我们事先定义好的单元集),它满足controls=EC-1的控制条件,这个section上用的的材料名称是COHESIVE(后面会定义),响应方式是response=TRACTION SEPARATION,厚度是人为指定的(SPECIFIED),数值是0.001 。inp文件中的这段代码在ABAQUS的交互界面对应于下图的对话框:


接着为cohesive section定义材料:
在inp文件中输入下列代码:


其中*Material 是在声明此部分定义材料。name=COHESIVE材料名是COHESIVE,Damage Initiation 判据是最大应力(MAXS),数值1.2、1.2、1.2.
Damage Evolution 采用位移模式(DISPLACEMENT),数值0.0005。这行代码对应于GUI界面的对话框如图:


这些属性全部通过修改inp文件添加完成后,就可以将inp文件导入ABAQUS生成带有cohesive element,并赋予了截面属性和材料属性的模型了。
这里,将本例修改完的inp文件上传至附件
游客,如果您要查看本帖隐藏内容请回复



接下来我们将本算利导入ABAQUS生成模型。
先把修改好的inp文件放入abaqus的Temp文件夹,运行ABAQUS,点击菜单栏中的File


在下拉菜单中选择Import,然后在下级菜单中选择Model...


然后弹出对话框,选择导入的文件类别为inp


点击OK键确认后弹出对话框,选择要导入的inp文件,最后点击OK键确认


生成模型后,确认没有错误信息,基本就算成功了


然后我又修改了一下本例的load,把载荷改为集中在右上角的两个方向的力,如图所示:


最后提交运算,得到了开裂的结果


由于这个算例是通过手动修改inp文件来插入cohesive element,所以本人为了减小工作量,将网格画的十分粗大,所以才得到了上面畸形的结果,但最后还是发生了cohesive element 的失效开裂,说明cohesive element的插入还是成功。
********************************************************************************************

以上是分割线,到此我们的问题才解决一半,即弄明白了通过修改inp文件插入cohesive element的原理,接下来的任务是解决当网格数量很多,数据量很大时,如何编写程序脚本来帮助我们修改inp文件,批量插入cohesive element。经过本人努力,已经做了一个利用python编程,来修改inp文件,实现在3D模型中任意实体单元之间批量插入0厚度cohesive单元的视频教程,视频通过我多次更新和补充,已经比较完善,可以实现任意复杂模型2D、3D四面体、六面体单元以及界面之间的cohesive单元插入网址是http://www.jishulink.com/college/video/c10771,大家赶快去学习吧, 本课程手把手教你python的基础与入门语法,然后把批量插入cohesive单元的代码逐句详细讲解出来,可以避免拿到代码不适合自己使用的情况。本课程直接把inp文件和代码作为附件上传,保证你学会自己编程插入单元,适合想自主学习的同学,避免了插件只能使用,不懂原理的尴尬。大家想学习一下python语法的也可以跟着学习
********************************************************************************************
程序部分讲解
一、首先我想先说一下python
       Abaqus入门者都知道python对abaqus的重要性,我们在CAE中做的前后处理指令都是转化成python代码来实现的,所以想玩转abaqus的前后处理,二次开发都离不开python。如果想自己动手制作小插件,也离不开python。
       1.python的安装
        可以直接去官网下载python,网址是www.python.org。如下图


        然后点击download

    选择下载python 3.6.4,python有2个版本,python2和python3,python2已经停止更新了,所以建议大家直接学习使用python3,其实两个版本差别微乎其微。下载完成以后直接设置路劲安装就可以了,安装完成以后直接打开python的交互程序IDLE,然后就可以使用了。

      不过这个交互界面过于简洁,现在有人开发了更为好用的界面软件pycharm以及python的集成安装包anaconda,我推荐大家安装这两个软件作为组合。这样对编程的体验会更好。pycharm和anaconda直接去官方网站下载即可,pycharm有2个版本,comunnity是免费的。anaconda也是开源的资源。详细配置过程可以去看我的视频教程。

二、代码实现方法。
      1.思路:

  2.读取inp文件:
      打开文件:open(‘文件名’,‘打开方式’)
      逐行读取:f.readlinse()
      读取节点数据:
        L=Inp_line.replace(' ','').replace('\n','').split(',')
        Node_dic[L[0]]=L[1:]    读取单元数据:              ele=Inp_line.replace(' ','').replace('\n','').split(',')
       if int(ele[0]) in range(Unfracture_start,Unfracture_end+1):
           Unfracture_dic[ele[0]]=ele[1:5]
       elif int(ele[0]) in range(Fracture_start,Fracture_end+1):
           Fracture_dic[ele[0]]=ele[1:5]
  3.节点分裂分配:   分裂:  New_node_dic={}
for i in Node_dic:
    if i not in Node_fracture_lis:
        New_node_dic=Node_dic
    if i in Node_fracture_lis:
        for j in range(Node_appeartimes+1):
            New_node_dic[str(j*(10**(len(str(max_node))))+int(i))]=Node_dic
分配:   for i in Fracture_dic:
    for j in range(4):
        for k in New_node_assign:
            if New_node_assign[k]!=0 and yu(k)==Fracture_dic[j]:
                Fracture_dic[j]=k
                New_node_assign[k]=0 4.产生cohesive单元
二维单元的节点编号是逆时针顺序排列的,三维单元的节点编号顺序是:四面体ABCA1B1C1 六面体ABCDA1B1C1D1。

四面体单元的代码是
Cohesive_dic={}
k=Fracture_end+1
for i in Fracture_dic:
    for j in Unfracture_dic:
        l=[]
        for m in Fracture_dic:
            if yu(m) in Unfracture_dic[j]:
                l.append([m,yu(m)])
        if len(l)==3:
            Cohesive_dic[str(k)]=[l[0][0],l[1][0],l[2][0],l[0][1],l[1][1],l[2][1]]
            k+=1
k1=k
Fracture_dic_sort=sorted([int(i) for i in Fracture_dic.keys()])
for i in Fracture_dic_sort:
    for j in range(i+1,Fracture_end+1):
        l=[]
        for m in Fracture_dic[str(i)]:
            for n in Fracture_dic[str(j)]:
                if yu(m)==yu(n):
                    l.append([m,n])
        if len(l)==3:
            Cohesive_dic[str(k)]=[l[0][0],l[1][0],l[2][0],l[0][1],l[1][1],l[2][1]]
            k+=1
k2=k
5.数据输出
    数据输出用f=open(‘文件名’,‘w’)方法打开文件
    f.write('要写入的字符‘)的方法写入

6. 在inp文件中添加cohesive单元的mateiral,section等信息
    这个帖子的上半部分已经说过了
7.效果图:
   

结语,这个系列的帖子我已经更新完了,由于文章的表述能力有限,实在没法详细讲解python语法基础与代码含义,读者如果想自己学习一下编程并解决自己的问题的话,就去学习我的视频教程,多多支持一下我,谢谢!在这里预告一下,我还会发一个python进行前后处理的帖子,大家可以多多关注

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2017-5-10 12:20:09 | 显示全部楼层 来自 加拿大
Simdroid开发平台
回来反馈,感谢楼主的分享。我看了链接的视频教程,在没有Python基础的情况下,视频讲解加上楼主的耐心答疑,3天内实现独立生成C3D8R的零厚度cohesive单元。强烈推荐,太赞了!!
回复 1 不支持 0

使用道具 举报

发表于 2017-3-18 16:30:46 | 显示全部楼层 来自 湖南
楼主厉害 看完 对inp文件有了进一步的认识   谢谢分享   期待更新
回复 不支持

使用道具 举报

发表于 2017-3-25 21:44:02 | 显示全部楼层 来自 天津
我是通过MATLAB来改变节点坐标添加0厚度单元的,要对inp文件操作两次。看楼主帖子学习了,考虑在三维单元里面批量添加0厚度的单元,论坛里有人做了三角形的,三维的不知道有没有,局限于三角形的,能不能扩展到六面体单元呢?
回复 不支持

使用道具 举报

发表于 2017-3-25 21:45:26 | 显示全部楼层 来自 天津
希望楼主继续更新帖子,定一下!
回复 不支持

使用道具 举报

发表于 2017-3-26 08:57:18 | 显示全部楼层 来自 山东济南
谢谢提供分享
回复 不支持

使用道具 举报

发表于 2017-4-6 21:30:55 | 显示全部楼层 来自 湖北武汉
楼主你好,可以讲解一下,批量建立cohesive的方法吗,思路?
回复 不支持

使用道具 举报

发表于 2017-4-6 22:59:48 | 显示全部楼层 来自 上海卢湾区

谢谢提供分享
回复 不支持

使用道具 举报

发表于 2017-4-7 08:46:32 | 显示全部楼层 来自 湖北武汉
节点6和8好像各少复制了一次,应该被复制三次,例子中只复制了两次
回复 不支持

使用道具 举报

 楼主| 发表于 2017-4-16 19:06:45 | 显示全部楼层 来自 中国
glove831 发表于 2017-3-25 21:44
我是通过MATLAB来改变节点坐标添加0厚度单元的,要对inp文件操作两次。看楼主帖子学习了,考虑在三维单元里 ...

可以扩展到六面体单元啊,但最好单元类型要单一,不要各种类型的单元混在一起,这样会为插入cohesive element 带来麻烦。我最近把4面体单元的做出来了
回复 不支持

使用道具 举报

 楼主| 发表于 2017-4-16 19:07:43 | 显示全部楼层 来自 中国
caswly 发表于 2017-4-6 21:30
楼主你好,可以讲解一下,批量建立cohesive的方法吗,思路?

思路不就在帖子里吗?不过我最近在做一个教学视频,做好了把链接发给你
回复 不支持

使用道具 举报

 楼主| 发表于 2017-4-16 19:09:10 | 显示全部楼层 来自 中国
caswly 发表于 2017-4-7 08:46
节点6和8好像各少复制了一次,应该被复制三次,例子中只复制了两次

如果复制3次,你可以试着像我那样画个连接图给我看看,可能你会画不出来哦
回复 不支持

使用道具 举报

 楼主| 发表于 2017-4-16 19:10:34 | 显示全部楼层 来自 中国
zhongbaowang 发表于 2017-3-18 16:30
楼主厉害 看完 对inp文件有了进一步的认识   谢谢分享   期待更新

会更新的,最近有很多人问我3D的该如何解决,所以我最近在着手解决3D模型插入cohesive element的方法,我会做一个教学视频。
回复 不支持

使用道具 举报

发表于 2017-4-16 21:38:21 | 显示全部楼层 来自 湖北武汉
楼主你好,我重新做了一遍,发现确实是少复制点了,。我还有一个疑问,如果要嵌入很多单元的话,需要将每个单元复制多少次都判断一遍吗
回复 不支持

使用道具 举报

 楼主| 发表于 2017-4-19 22:33:39 | 显示全部楼层 来自 广东广州
caswly 发表于 2017-4-16 21:38
楼主你好,我重新做了一遍,发现确实是少复制点了,。我还有一个疑问,如果要嵌入很多单元的话,需要将每个 ...

你把节点的逻辑连接图像我那样画出来给我看看,还有,你的疑问我已经在一个专门讲解3D模型任意实体单元之间批量插入0厚度的cohesive单元的python实现方法中详细讲解了,想进一步研究的话,快来看视频吧http://www.jishulink.com/college/video/c10771
回复 不支持

使用道具 举报

发表于 2017-5-10 16:13:38 | 显示全部楼层 来自 浙江
感谢楼主的分享。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-24 14:13 , Processed in 0.051666 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表