技术邻 > CAE仿真 > Abaqus 在abaqus中如何将损耗模量的值代入子程序中? 浏览:2404 回答:3 abaqus拟合prony级数来表示材料的粘弹性,也会自动的生成损耗模量和储存模量。如果我要在子程序中使用损耗模量参与计算,请问该如何调用这个材料属性?
你这个问法有点问题啊,得先理清楚Abaqus里粘弹性参数的底层逻辑。Prony级数本来就是时间域的松弛模量展开,而损耗模量是频域里的概念,这俩不是直接等价的。你要在子程序里调用损耗模量,得先搞明白两件事:
第一,Abaqus自动生成的损耗模量存哪了?在材料库里选好Prony级数后,软件确实会根据你输入的瞬时模量E0和各Prony项系数,通过傅里叶变换算出存储模量E'和损耗模量E''。但这些频域参数不会直接塞进材料属性数组里,而是藏在材料定义的后台数据里。你要在子程序里调用,得通过*MATERIAL定义里手动输入的参数名来索引,比如用props(1)到props(n)传你自定义的模量值。
第二,你确定要用损耗模量参与计算?如果子程序是UMAT或VUMAT,默认处理的是应力更新,而粘弹性本构在时间域里用松弛模量更直接。要是非得用损耗模量,得先做频时转换。这时候得在子程序里自己实现Prony级数到复模量的转换公式:E*(ω)=E'+iE''=E0[1+Σ(gi/(1+iωτj))],其中gi和τj是Prony项的系数和松弛时间。
不过这里有个坑——Abaqus生成的E'和E''是基于你指定的频率范围离散计算的,直接调用的话得先搞清楚软件用了多少个频率点。你检查过.inp文件里*VISCOELASTIC选项卡的FREQUENCY参数没?要是没指定,软件默认用10个对数等分频率点,从1e-3到1e3 rad/s。这时候你的子程序里得预先知道这些频率点,或者动态获取频率数组。
再问个关键问题:你写的子程序是用于显式还是隐式分析?隐式求解器(Standard)里可以用*FREQUENCY提取模量数据,但显式(Explicit)里得自己处理时间积分。要是用UMATHT做热粘弹性耦合,那又得考虑温度场的影响。
最后给你个实操建议:在子程序开头用GETVRM函数读取材料参数,像这样CALL GETVRM('E',ARRAY=e_array,JARRAY=jarray,JRCD=jrcd),但这个只能拿到瞬时模量E0。损耗模量得你自己根据Prony系数算,或者提前在材料定义里用*USER MATERIAL把E''作为自定义参数传进去。比如:
*USER MATERIAL, CONSTANTS=3
1.0, 0.3, 0.1 ! 这里第三个参数就是E''
然后在子程序里通过props(3)调用。不过这么做就绕开了Abaqus自动生成的E'',你得自己保证参数一致性。