这是一个matlab调用abaqus进行优化的例子
一般来讲,获得材料的应力应变曲线(s-s曲线),需要做单轴拉伸实验(就是车个圆棒夹到拉伸机上去拉一下),学过力学课程的人应该都记得。现在有许多人想用一个硬球把材料压一下,得到球压下的载荷位移曲线(就是球压入的力和行走距离的曲线,L-h曲线)来反求材料的应力应变曲线,因为这样更方便。但是实验的方便意味着需要更好的计算方法来从载荷位移曲线解读出材料的应力应变曲线。国内西南交大的蔡力勋老师,山东大学的王威强老师,以及国外剑桥大学的Clyne教授组都在进行这个工作(还有很多,恕我不能一一列举)。他们建立了很多很好的算法来通过L-h反求s-s,属于科学研究工作。
我的方法就比较简单,直接用abaqus模拟球压痕过程,基于优化算法不断调整输入参数(屈服强度Y和强化指数N),最终达到模拟的L-h与实验的L-h能够尽可能吻合,那么就求出了材料的实际Y和N。这就变成了一个没有科技含量的纯技术编程问题哈哈。
整个程序的执行过程是这样的:
主程序函数:SIITPowerLaw(),输入:弹性模量,压头半径(mm),实验L-h曲线路径,工作路径,优化的初值,上限,下限
优化目标函数:ObjFuncFEM(),输入:x(优化目标量),ElasticModulus,实验L-h曲线,工作路径,abaqus的模型.inp文件或者保存好的.mat
在ObjFuncFEM中,运行过程是这样的:
优化用的是matlab中自带的多点全局优化。由于每个.inp文件,.py文件都与优化目标量的当前值是一一对应的,所以这个优化过程是支持matlab的并行处理的。
i5处理器4核并行,进行一次成功的优化(25个初始点)需要一晚上吧大概,每个abaqu模拟大概耗时30s,为了尽可能不在读取文件上浪费时间,已经把.inp和.py脚本都读入matlab并保存成了.mat,可以直接修改。
目前优化效果合理,有待进一步验证。
改进: