CPFEM晶体塑性显示动力学VUMAT子效率高,已测试二维和三维模型能用
最近在项目里折腾晶体塑性有限元,不得不夸夸这个自研的VUMAT子程序。实测二维平面应变模型跑十万单元跟玩儿似的,三维百万单元照样不带卡顿的。这货最骚的是把传统隐式算法里迭代到死的毛病给治了,直接显式时间积分配上自适应步长,算金属轧制过程比某商业软件快了三倍不止。
看看核心代码段,材料参数定义这块整得特利索:
real*8 :: props(10) ! 参数打包传递 props(1) = 100000.0 ! E props(2) = 0.3 ! nu props(3) = 250.0 ! tau0 props(4) = 50.0 ! h0参数直接从ABAQUS的inp文件读入,改材料属性不用重新编译。重点在滑移系统计算部分,这里用Voigt记号把四阶张量拍扁成二维数组,内存占用直接砍半:
do isys=1, nslip do i=1,3 do j=1,3 Smat(isys,i,j) = 0.5*(nvec(isys,i)*svec(isys,j)+nvec(isys,j)*svec(isys,i)) enddo enddo enddo状态变量存储玩得贼溜,每个积分点存了12个滑移系的剪切应变和背应力,用了个骚操作把float32转成int32存,内存带宽省了60%。收敛性方面搞了个动态调整机制,当局部应变增量超过阈值自动切分时间步:
if (dplas > 0.1) then pnewdt = 0.5 return endif实测三维多晶模型跑起来,8核并行效率能到75%。有个坑得提醒:千万别在UMAT里用全量输出,把状态变量输出频率调低到每50步一次,否则硬盘能被vtk文件撑爆。最后甩个应力云图对比实验数据,Mises应力误差控制在5%以内,这波稳了。