首页/文章/ 详情

层合板多层损伤投影叠加后处理工具

9月前浏览736


一般我们做仿真,往往前处理工作占40%,后处理工作占40%。中间搞本构的时间反而最短。


     

对于一些特殊仿真工况来说,尤其是模拟多工况,一些参数需要在不同工况之前传递。这可能需要同时用到前处理和后处理方法。


     

除此之外,我们还需要掌握一些后处理渲染技术,以便充分对结果进行分析和解读。


     

以层合板失效为例,当我们模拟出不同的层、不同的失效模式的分布,我们无法只管从表面一眼看出损伤的具体分布。当然ABAQUS提供的单元透明模式可以完成一些观察,但是总是不太清晰。尤其当我们还需要统计失效面积,或者与CT扫描等结果对比的时候。      


     

   

搞力学,十分有必要掌握一些编程技术。哪怕处理试验数据,都比别人处理的快。


     

前后处理本身倒是不难。难的是我们需要熟悉对应软件的数据格式,搞清楚数据结构,才能知道怎么获取数据,获取哪些数据,又怎么利用这些数据。


     

静界有限元针对层合板多层损伤投影叠加问题,开发了专门的后处理工具(见下图),将ABAQUS仿真得到的多层损伤在面内进行投影叠加,并且自动统计不同失效模式的覆盖面积。      


 

层合板多层损伤投影叠加后处理工具


   

思路倒是不复杂:      

(1)根据层合板面内投影网格一致原理,直接绘制初始网格图;      

(2)逐层识别每个单元损伤失效情况,当识别到某个网格失效后,将其投影位置所谓二维网格设置为红色;如果该区域已经被其他层失效占据了,则跳过。      

(3)完成全部层识别。


     

当然,对于复杂模型,我们可以在现有平板模型基础上进一步拓展,定制解决。     


来源:静界有限元
Abaqus二次开发渲染试验
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-20
最近编辑:9月前
静界有限元
博士 签名征集中
获赞 27粉丝 5文章 64课程 0
点赞
收藏
作者推荐

基于Python的遗传算法实现

1. 废话的一章(可跳过)最近有人问我,说,L老师,发生了肾么事情?公 众号咋不更新了呢。我一看,哦,原来都两个月过去了,确实没更。 没更的原因有很多,一个是最近工作上的变化。另一个就是最近做的单子少,多是可写可不写的。唯一一个描述载荷移动的疲劳分析,我把原先“以静代动”的方法,换成了“动静结合”,算是这两个月的得意之笔吧。 这段时间探索的新技术不多,但是笔杆子没少动。写了好些报告,做了好些ppt,还从其他途径参与到一些有意思的项目,出了很多好点子。嗯,没机会亲手做试验,躲在后面出谋划策的感觉也不错,回头可以考虑买个羽毛扇。 最近总体来说,睡眠也是不错的,敞开了睡,能睡10个小时,这是我这几年都不曾享受到的,朕的头发估计能保住了。 开始学Python,粗略翻了几本书,装上了软件,摸索起来。这是继ANSA之后,又一次开始0基础学新东西,算是给自己的知识库加装了一个新模块。 最近喝酒也不少,不过都不敢喝醉,醉一次太难受了,我这日渐老化的身体可扛不住,只能在醉酒的边缘疯狂试探。 好看的小说也遇到几本。《我的师兄实在太稳健了》、《大奉打更人》,前者轻松娱乐,主角稳如老狗,不稳个几十手,从不出手。后者通篇都是黄色笑话,我严重怀疑作者就是为了讲荤段子才写的这本书,淦。 年初的时候,打死我也想不到年尾的这两个月在自己发生的各类魔幻事件。或许,我离一个真正的工程师越来越近了吧。追求还是在的:上马做撸铁做试验,下马键盘写报告,左手网格做仿真,右手代码搞算法。 总而言之,俺更成熟了。希望明年越来越好! 2. 接触Python的感受 最大的感受,还是源于和MATLAB的对比。首先一个感觉就是乱,列表、元组、字典,常常搞混。应该是我用的太少的原因了吧。 另一个感受就是,很明显,Python能搞的更花哨,与网页交互、与ABAQUS交互、游戏开发等等。干的事情更贴近大众了。 实际上,我学这个软件,应该还是为了更方便地跟ABAQUS交互。之所以第一个算例拿遗传算法练手,也是看后面能不能用到复合材料的优化分析上。 目前,我的要求并不高哈,入门就行。 3. 遗传算法的实现过程老早就想研究下遗传算法,搞搞所谓的优化问题。实际上,这个理论上个世纪就已经很成熟了,随便下载几本老书,一个晚上也就看懂了。房间大灯一关,拉开床边的窗帘,打开床头的看书灯,大窗外月光皎洁,寒风呼啸,我躺在电热毯上,学着学着,嗯也就睡着了。其实好多类似于遗传算法这种上个世纪的东西,在最近这些年被国内追捧的不行。动辄就吹爆的机器学习、人工智能、神经网络、3D打印,都是几十年前的。。。现在大家到处吹,课题里吹,项目里吹,会议里吹,实在搞不懂。也对,技术内卷嘛,口 活先行。 遗传算法是通过模拟自然界的进化过程,达到筛选优化的目的。比如你要求一个函数在某个区间的最大值,先给定一组初始值作为0代祖先,然后设置筛选标准,淘汰一些不好的个体,这些个体自身的值可以转换成二进制的DNA编码,然后随机两两配对,交换DNA片段,形成新的个体,如果再考虑基因变异,让二进制一些位置的0或者1,反置。这样就彻底完成新一代种群的产生。搞个几十代,嗯,最后发现整个种群趋同了,也就是收敛了。 哇,做的时候,可以享受到造物主般的感受。 从上面的过程也看到了,一个简单遗传算法的实现,需要搞出一下东西: (1)订立编码和解码规则。比如二进制来存储信息;(2)订立筛选(基因遗传)规则。比如可以用轮盘赌算法,干掉那些不合格的个体;(3)建立基因交叉算子。随机配对算法、DNA片段交叉算法;(4)建立基因变异算子。DNA片段随机变异算法。 网上讲这些东西的文章很多啦,我这就不说具体算法的实现了。展示下我的算例和结果吧!算例:考虑y=x2在[0.31],区间上的最大值。经过30次迭代的均值结果如下:基本上最后会在30左右浮动。不过这个是我给的比较好的结果。有的时候,它也会收敛在一个不太高的水平上。因为程序里面用了很多随机数,所以是不能保证每次结果都一样的。而且遗传算法对初值的依赖性很强,并且十分“早熟”,很快就达到收敛状态,不管收敛的结果好不好。只负责赶紧生娃制造下一代,不考虑质量! 所以,真正实用的遗传算法还需要根据具体问题,做大量的训练积累经验数据,然后对各个关键算子,做出一定的改进。 果然啊,造物主不好当,上帝造人也不知废了多少劲,说不定也失败了无数次。当然,这一次是不是成功的呢?很难讲。 读者讨论功能目前被禁了,大家有自己好看的科研故事可以投稿给我!算法附后# -*- coding: utf-8 -*-"""SpyderEditorThisis a temporary script file."""importrandomimportnumpy as npimportmathfromnumpy import *importmatplotlib.pyplot as pltn_group=6#群体大小n_gen=30#代数S=[31,0,15,random.randint(0, 31),random.randint(0, 31),random.randint(0, 31)]#初始化种群jnum=0print(S)junzhi=[]junzhi.append(mean(S))number_gen=[]number_gen.append(jnum)while jnum < n_gen:#编码——采用二进制Sb=[]fori in S:zhuanhuanjinzhi = '{:05b}'.format(i)Sb.append(zhuanhuanjinzhi)#计算适应度f=[]fsum=0fzhi=[]fori in S:fs = i**2fsum=fsum+fsfzhi.append(fs)f.append(fs)fp=np.array(fzhi)/fsum #计算个体适应度# print (fp) fpsum=[] fpsumx=0 fori in fp:fpsumx=fpsumx+ifpsum.append(fpsumx)#计算个体累计概率# print (fpsum) fxz=np.zeros((len(fp)),dtype=np.int64)xs=0#---------------------------复 制 --------------------------- whilexs <len(fxz): #———轮盘赌算法random_value = random.random()# print (random_value)forss in range(len(fxz)):ifss==len(fxz)-1:sx=0else:sx=ss+1 iffpsum[ss] <= random_value and fpsum[sx] >= random_value:cind=sxbreakfxz[cind]=fxz[cind]+1 xs=xs+1#根据复 制结果,更新一轮种群Sbb=[]xs=0 whilexs <len(fxz): iffxz[xs] > 0:zhongqunfuzhi=[Sb[xs]]*fxz[xs]foryuansu in zhongqunfuzhi:Sbb.append(yuansu)xs=xs+1 Sb=Sbb#---------------------------交叉---------------------------#随机两两配对——from https://www.jianshu.com/p/d29091e7e37a?from=groupmessage# print(Sb)ifjnum%2 ==0:members = Sbrandom.shuffle(members)d= list(range(0,len(members),2))Sbb=[]jxweizhi=math.floor(len(Sb[1])/2)+1fori in d: Sbb.append(members[i][0:jxweizhi]+members[i+1][jxweizhi:])Sbb.append(members[i+1][0:jxweizhi]+members[i][jxweizhi:])Sb=Sbb#---------------------------变异---------------------------jxweizhi=math.floor(len(Sb[1])/2) ifjnum%10 ==0:ifint(Sb[bianyiw][0]) == 0:Sb[bianyiw] ='1'+Sb[bianyiw][1:]else:Sb[bianyiw] ='0'+Sb[bianyiw][1:]ifjnum%3 ==0: bianyiw=random.randint(0, len(S)-1)ifint(Sb[bianyiw][jxweizhi]) == 0:Sb[bianyiw] =Sb[bianyiw][0:jxweizhi]+'1'+Sb[bianyiw][jxweizhi+1:]else:Sb[bianyiw] =Sb[bianyiw][0:jxweizhi]+'0'+Sb[bianyiw][jxweizhi+1:] #---------------------------解码---------------------------S=[]fori in Sb:zhuanhuanjinzhi = int(i,2)S.append(zhuanhuanjinzhi)junzhi.append(mean(S))jnum=jnum+1number_gen.append(jnum)print(S)#---------------------------画图--------------------------- plt.plot(number_gen,junzhi)来源:静界有限元

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈