首页/文章/ 详情

《Mechanics of Solid Polymers》 Horgan和Saccomandi模型

4月前浏览577

5.3.13 Horgan和Saccomandi模型

        Horgan和Saccomandi开发了一个模型[33, 34],该模型是Gent模型的扩展。这个模型,以下称为HS模型,同样涉及三个材料参数。Gent模型和HS模型之间的主要区别在于,后者依赖于第一和第二应变不变量,因此在某些情况下可能与实验数据更为吻合。此外,HS模型中的限制链参数直接与最大允许拉伸相关,因此比Gent模型中依赖于第一不变量最大值的对应参数更容易从物理角度理解[33]。
        可压缩版本的HS模型的单位参考体积Helmholtz自由能由以下公式给出:

其中μ是剪切模量,λmax是链最大拉伸,κ是体积模量。

可压缩HS模型的Cauchy应力由以下公式给出:

在这个模型中,max(λ₁, λ₂, λ₃) < λmax。当λmax → ∞时,该模型变为NH模型。不可压缩HS模型在单轴、平面和等双轴变形下的Cauchy应力由以下表达式给出:

HS模型预测弹性体行为的准确性在图5.23中得到了展示。

HS模型的一个良好特性是,当μ > 0且λmax > 1时,该模型是无条件稳定的。

以下Matlab代码示例展示了如何实现可压缩单轴加载的HS材料模型。

defHS_3D(stretch, param):
"""Horgan-Saccomandi. 3D加载由拉伸指定。
    param: mu, lamMax, kappa. 返回真实应力。"""

    L1 = stretch[0]
    L2 = stretch[1]
    L3 = stretch[2]
    F = array([[L1,0,0], [0,L2,0], [0,0,L3]])
    J = det(F)
    bstar = J**(-2.0/3.0) * dot(F, F.T)
    bstar2 = dot(bstar, bstar)
    I1s = trace(bstar)
    I2s = 0.5 * (I1s**2 - trace(bstar2))
    mu = param[0]
    lamM = param[1]
    kappa = param[2]
    fac = mu * lamM**4 / J
    den = lamM**6 - lamM**4 * I1s + lamM**2 * I2s - 1
return fac/den * ((lamM**2 - I1s)*bstar + bstar2 - \
           (lamM**2*I1s-2*I2s)/3*eye(3)) + kappa*(J-1) * eye(3)

        这段代码实现了Horgan-Saccomandi (HS) 3D模型,考虑了材料的可压缩性。该函数使用拉伸比来描述变形,并返回真实应力张量。

使用以下Python代码来应用可压缩单轴加载的HS模型:

from pylab import *
from Polymer_Mechanics_Chap05 import *

trueStrain = linspace(00.7100)
trueStress = uniaxial_stress(HS_3D, trueStrain, [1.02.51000])

plot(trueStrain, trueStress, 'b-')
xlabel('真实应变')
ylabel('真实应力 (MPa)')
grid('on')
show()


        这段代码使用了先前定义的HS_3D函数来计算可压缩单轴加载下的应力-应变关系,并绘制了相应的曲线图。参数[1.0, 2.5, 1000]分别代表剪切模量μ、限制链拉伸λmax和体积模量κ。绘制的曲线如下:

图5.23 Treloar[16]的实验数据和Horgan-Saccomandi模型的预测结果对比


Reference:

[33] C.O. Horgan, G. Saccomandi. Constitutive modeling of rubber—like and biological materials with limiting chain extensibility. Math. Mech. Solids, 7 2002 353-371. 

[34] C.O. Horgan, J.G. Schwartz. Constitutive modeling and the trousers test for fracture of rubber-like materials. J. Mech. Phys. Solids, 53 2005 545-564.

来源:ABAQUS仿真世界
ACTMATLABpython材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-04-28
最近编辑:4月前
yunduan082
硕士 | 仿真主任工程... Abaqus仿真世界
获赞 203粉丝 392文章 486课程 0
点赞
收藏
作者推荐

用Python脚本读取ODB材料数据,你还在一个一个手动查吗

本文导读 1为什么要从ODB里读材料数据?真实痛点2ODB文件结构速览:它到底藏了哪些宝贝3核心脚本拆解:三步读取全部材料属性4我的踩坑实录:18年老鸟踩过的那些坑5工程应用场景与选型建议62025–2027趋势展望7资源与交流01 / 引言 引你是不是也遇到过这种窒息的场景?前几天,部门一个刚入职不到两年的工程师找我求救,满脸愁苦地说:他接手了一个包含37种材料定义的整车碰撞模型,甲方要求提交一份材料参数核查报告。结果他打开Abaqus/CAE,一个一个点开&quot;Materials&quot;树状列表,手动复 制弹性模量、泊松比、密度……光截图就截了两个小时,还差点把高分子材料的温度相关弹性模量表给漏了。 📌真实痛点:在大型有限元模型里,手动查找、核查、汇总材料参数是一件极其低效且容易出错的事。当模型有几十甚至上百种材料时,这种重复劳动会消耗工程师大量宝贵的时间。这其实是CAE后处理中一个被长期忽视的效率黑洞。材料数据不仅存在于.inp输入文件里,在Abaqus完成计算后,结果数据库(ODB文件)同样完整保存了整个模型的材料定义信息。而Abaqus内置的Python脚本接口,完全可以帮我们在几秒钟内把这些数据全部提取出来,自动生成报告。今天这篇文章,我就把这个方法彻底讲透——从ODB文件结构、Python脚本的核心逻辑,到我在实际项目里踩过的各种坑,全部摊开来说。读完之后,你可以直接把脚本带回去用,把那两个小时的手工活压缩到30秒之内。02 / 技术背景 析ODB文件结构速览:它到底藏了哪些宝贝很多工程师对ODB(Output DataBase)的印象就是&quot;存结果的文件&quot;——打开Visualization模块看云图、查询节点位移。但实际上,ODB是一个结构层次非常丰富的数据库,除了场变量和历史变量,还完整保留了模型的几何、单元、截面、材料等全套定义信息。ODB的三层核心对象①session(会话层)Abaqus/CAE当前运行环境的顶层对象,所有打开的ODB都挂载在这里。通过session.odbs可以获取当前所有已打开的ODB文件字典。 ②odb(数据库层)具体某个ODB文件的对象。包含rootAssembly、materials、sections、steps等子对象,是材料数据的实际存放位置。 ③materials(材料层)一个存储所有材料定义的字典仓库。通过材料名称作为键,可以直接访问每种材料的全部属性:弹性、塑性、热传导、密度、电导率……应有尽有。 💡 专业提示 Abaqus的Python API遵循&quot;一切皆对象&quot;的设计哲学。每一个GUI操作背后都对应着一个Python命令,在CAE命令行界面(CLI)里输入任何操作,Abaqus都会自动在.rpy文件里记录对应的Python语句——这是学习API最快的方式。03 / 核心内容拆解 码三步读取所有材料属性第一步:定位当前视口的ODB文件在Abaqus/CAE中,脚本首先需要知道&quot;我现在看的是哪个ODB&quot;。通过session.viewports拿到当前视口,进而获得正在显示的ODB文件对象和路径。 PYTHONStep 1 · 获取当前视口ODB # ── 获取当前视口 ──────────────────────────────────CV = session.viewports[session.currentViewportName]# ── 从视口中取出当前显示的ODB对象 ──────────────────current_odb = CV.displayedObject# ── 获取ODB文件的完整路径(含文件名)──────────────odb_path = current_odb.pathprint(&#39;当前ODB路径:&#39;, odb_path) Abaqus/CAE命令行界面(CLI)截图,显示print语句输出的ODB路径信息第二步:遍历所有材料,查看有哪些材料拿到ODB对象后,通过.materials属性拿到全部材料的字典,然后用.keys()列出所有材料名称——这一步就像是把模型的&quot;材料清单&quot;全部打印出来。 PYTHONStep 2 · 列出全部材料名称 # ── 获取材料字典对象 ──────────────────────────────Used_Mats = current_odb.materials# ── 打印所有材料名称 ──────────────────────────────print(&#39;模型中包含的所有材料:&#39;)format_nameinUsed_Mats.keys():print(&#39; ·&#39;, mat_name)# ── 查看单个材料的可用属性(以STEEL为例)─────────print(dir(Used_Mats.materials[&#39;STEEL&#39;]))# 输出示例:thermal conductivity, density,# elastic, electricalConductivity ... ⚠️ 重要细节 方括号内的材料名称必须用引号括起来,且大小写完全匹配Abaqus模型定义时的原始写法。如果你的材料名称含有中文或特殊符号,在某些Abaqus版本中可能引发编码问题——这是我踩过的真实坑,后面会专门说。第三步:读取具体的材料属性数据知道了材料有哪些属性,就可以精确读取了。以弹性属性为例,直接访问材料对象的.elastic子对象,拿到表格形式的数值数据: PYTHONStep 3 · 读取弹性、密度等属性 mat = Used_Mats.materials[&#39;STEEL&#39;]# ── 弹性属性(Young&#39;s Modulus + Poisson&#39;s Ratio)──print(&#39;弹性模量与泊松比:&#39;, mat.elastic.table)# ── 密度 ───────────────────────────────────────────print(&#39;密度:&#39;, mat.density.table)# ── 热传导系数 ─────────────────────────────────────print(&#39;热传导系数:&#39;, mat.conductivity.table)# ── 塑性(如有)────────────────────────────────────ifhasattr(mat, &#39;plastic&#39;):print(&#39;塑性应力应变曲线:&#39;, mat.plastic.table)# ── 批量导出所有材料到CSV ──────────────────────────import csvwithopen(&#39;material_report.csv&#39;, &#39;w&#39;) asf:writer = csv.writer(f)writer.writerow([&#39;材料名&#39;, &#39;弹性模量(Pa)&#39;, &#39;泊松比&#39;, &#39;密度(kg/m³)&#39;])forname, minUsed_Mats.materials.items():E = m.elastic.table[0][0] ifhasattr(m, &#39;elastic&#39;) else&#39;N/A&#39;nu = m.elastic.table[0][1] ifhasattr(m, &#39;elastic&#39;) else&#39;N/A&#39;rho = m.density.table[0][0] ifhasattr(m, &#39;density&#39;) else&#39;N/A&#39; writer.writerow([name, E, nu, rho]) ✅执行效果:运行完整脚本后,会在Abaqus工作目录下生成material_report.csv,包含所有材料的关键参数,可直接用Excel打开进行审查或提交给甲方。常用材料属性速查表属性类别Python访问路径返回数据格式是否常见弹性模量 / 泊松比 mat.elastic.table((E, nu), ...) 必有材料密度 mat.density.table((rho,), ...) 必有塑性应力应变 mat.plastic.table((σ, ε_pl), ...) 金属必有热传导系数 mat.conductivity.table((λ, T), ...) 热分析必有比热容 mat.specificHeat.table((Cp, T), ...) 热分析必有电导率 mat.electricalConductivity.table((σ_e,), ...) 电磁分析用超弹性(Hyperelastic) mat.hyperelastic对象属性集 合 橡胶/软组织04 / 实战经验 坑18年老鸟踩过的那些坑,一次性告诉你理论讲完了,接下来才是真正有价值的部分。下面这些是我和我团队在实际项目里反复踩中的坑,保证你看了能少走弯路。💥坑一:材料名称大小写陷阱Abaqus材料名称是区分大小写的。&#39;Steel&#39;和&#39;STEEL&#39;是两种不同的材料。在脚本里批量处理时,建议先用.upper()统一转换,或者直接从.keys()动态获取材料名,绝对不要手动硬编码材料名称。💥坑二:温度相关属性的table结构如果材料属性是温度相关的(如弹性模量随温度变化),.elastic.table返回的不是一个简单的(E, nu)元组,而是多行(E, nu, T)的嵌套结构。直接用table[0][0]只能拿到第一个温度点的数值,务必做完整遍历。💥坑三:hasattr检查不能省并非每种材料都定义了所有属性——橡胶件可能没有塑性,连接件可能没有热传导定义。直接访问未定义的属性会抛出AttributeError导致脚本中断。对每个属性访问都用hasattr(mat, &#39;plastic&#39;)做预判断,这是工程脚本鲁棒性的基本要求。💥坑四:在nogui模式下路径需要显式传入如果你是通过abaqus cae -noGUI yourscript.py在后台批量运行脚本,session.viewports的方式就失效了,因为根本没有视口。这时候要改用openOdb(path=&#39;your.odb&#39;, readOnly=True)直接打开ODB文件。💥坑五:中文材料名编码问题Abaqus内嵌的Python是2.x版本(不同版本略有差异),对中文字符的处理非常脆弱。如果模型里有中文命名的材料(我见过某些国内设计院的模型),print输出时很可能乱码甚至报错。解决方案:在脚本开头加# -*- coding: utf-8 -*-并用encode(&#39;gbk&#39;)处理输出。🔦 老鸟独家洞见 #1 在批量处理多个ODB的场景下(比如DOE参数研究有50个工况的结果),我建议不要让脚本在CAE的GUI环境里跑——用nogui模式批量处理,速度能快3~5倍,而且不占用Abaqus License的CAE Token。只有在需要交互操作的场景,才用GUI模式。🔦 老鸟独家洞见 #2 很多工程师读取材料参数是为了做&quot;材料参数核查&quot;——检查实际计算用的材料和设计规范是否一致。建议把材料数据库的&quot;标准值&quot;存成一个JSON文件,让脚本自动比对,超出容差就标红报警。我们部门现在已经把这套流程集成到CI/CD管道里了,新提交的模型自动触发材料核查,再也不会出现&quot;用错材料算了三天&quot;这种悲剧。🔦 老鸟独家洞见 #3 ODB里的材料数据和.inp文件里的材料定义并非100%一致——如果在分析过程中使用了USDFLD或UMAT子程序动态修改了材料参数,ODB里存的是初始定义值,而非实际计算用的演化值。这个坑在复合材料渐进损伤分析里特别容易踩,读取时一定要结合.inp文件和子程序逻辑一起看。05 / 工程应用 用工程应用场景与选型建议明确了技术原理,来看看这个方法在什么场景下最有价值,以及选用哪种方式执行脚本最合适。高价值应用场景📋 材料合规审查 大型项目交付时,自动生成材料参数报告,与企业标准或客户规范的材料库自动比对,输出差异报告。 🔄 模型迁移验证 将旧版Abaqus模型迁移到新版本或其他软件时,自动提取并验证材料参数是否完整保留,防止静默错误。 📊 DOE批量后处理 参数研究时50+个工况各用不同材料参数,脚本自动汇总所有ODB里的材料配置,生成设计矩阵对照表。 🔗 数字主线集成 将仿真模型的材料数据自动推送到PDM/PLM系统,实现CAE与BOM的材料数据一致性管理。 执行方式选型建议执行方式适用场景速度License消耗CAE GUI → Run Script 单个ODB,调试阶段,需要即时查看 中CAE Token abaqus cae -noGUI 单个ODB,正式运行,不需要界面 快CAE Token abaqus viewer -noGUI 只读ODB,不需要修改模型 快Viewer Token 批处理脚本循环调用 50+个ODB批量提取,DOE后处理 最快Viewer Token × 1 💡 License成本提醒 Abaqus Viewer的Token比CAE Token便宜很多,读取ODB数据完全可以用Viewer模式跑脚本。在公司License资源紧张时,这一个选择可以让多个工程师同时并行跑后处理脚本,而不必争抢昂贵的CAE Token。06 / 趋势展望 望2025–2027,这个方向值得持续关注2025 Abaqus Python API + 大模型联动 已经有团队在尝试将GPT/Claude接入Abaqus脚本生成流程:工程师用自然语言描述&quot;提取所有钢材的温度相关弹性模量&quot;,AI自动生成并验证Python脚本。这个方向在2025年会快速成熟,降低脚本编写门槛。2025 3DEXPERIENCE平台深度集成 达索正在将Abaqus功能迁移到3DEXPERIENCE平台,ODB数据的读取接口正在向REST API演进,未来可以在浏览器端直接通过Web API访问仿真材料数据,不再需要本地Abaqus环境。2026 材料数字孪生与仿真闭环 材料参数将不再是静态表格,而是与实验数据库、材料信息平台(如Granta MI)实时同步的动态数据流。ODB里的材料数据会自动关联到材料的全生命周期数字档案,支撑产品的全链条合规验证。2027 机器学习驱动的材料参数反演 通过ODB结果(应变场、位移场)结合优化算法反演材料本构参数,这条路线正在从学术研究走向工程实用。Abaqus ODB的Python读取能力,是这套流程的关键数据接口。作者推荐的3个进阶学习资源1Abaqus Scripting User&#39;s Guide(官方文档)达索官方的Python脚本手册,ODB访问相关章节是最权威的参考。推荐重点阅读&quot;Accessing output databases&quot;和&quot;Reading from an output database&quot;两节,配合本文食用效果更佳。2GitHub · Abapy 开源库abapy是专门为Abaqus后处理设计的Python库,提供了大量封装好的ODB数据读取工具函数,特别是在批处理和数据序列化方面设计非常成熟。适合有一定Python基础的工程师进阶使用。3ScienceDirect · &quot;Visualizing Abaqus output database in ParaView&quot;(2023)这篇论文详细介绍了用Python+C++将ODB数据转化为ParaView可视格式的完整方案,对于需要与开源后处理生态打通的工程师有很高的参考价值。来源:ABAQUS仿真世界

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