十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于Abaqus的任意孔隙率混凝土拉伸断裂仿真与参数化建模实践

基于Abaqus的任意孔隙率混凝土拉伸断裂仿真与参数化建模实践 做混凝土仿真的人应该都有体会拉伸断裂这个事看着简单真要做准了特别折腾。混凝土是典型的多相非均质材料骨料、砂浆、孔隙、界面过渡区搅在一起外加拉伸破坏时还有个应变软化段一个不留神计算就不收敛。最近我把一个“带任意孔隙率混凝土拉伸断裂模型”的案例整理了出来基于Abaqus做了一套从几何建模到后处理的完整流程模型用Python脚本参数化生成孔隙率可以随意调配套有操作视频。这篇文章我把整个思路、关键设置、踩过的坑全部捋一遍给需要做混凝土细观模拟的朋友一个能直接上手的参考。这个案例适合几类人一是做混凝土材料细观力学研究的学生和工程师需要用数值模型分析孔隙率对抗拉强度、断裂路径的影响规律二是做Abaqus二次开发和参数化建模的人想学怎么用Python脚本驱动CAE自动建模三是刚接触Abaqus损伤断裂分析、想找一个完整案例入门的朋友。整个案例的技术栈是Python脚本参数化建模、Abaqus/Standard求解、混凝土损伤塑性模型CDP加位移加载断裂模拟核心输出是不同孔隙率下的应力-应变曲线、损伤云图和断裂形态。1. 为什么混凝土拉伸断裂必须把孔隙率考虑进去1.1 孔隙是混凝土拉伸破坏的起点混凝土内部的孔隙不是均匀分布的有的来自水泥水化后残留的毛细孔有的是搅拌引入的气泡还有的是振捣不密实留下的孔洞。在细观尺度上这些孔隙实际上就是材料内部的初始缺陷。拉伸载荷作用下应力会在孔隙周围发生集中当局部应力超过材料的抗拉强度微裂纹就从孔隙边缘萌生。这也是为什么混凝土抗拉强度通常只有抗压强度的1/10到1/20孔隙率对拉伸性能的影响比压缩性能更敏感。我做仿真的时候习惯先做一个直观的对比同一块混凝土试件孔隙率从2%提到8%峰值应力能掉30%甚至更多断裂路径也完全不一样。孔隙少的时候裂纹往往呈单条主裂纹扩展路径相对平直孔隙多的时候裂纹会在多个孔洞之间跳跃、汇合形成更曲折的断裂面。这种差别如果不把孔隙明确建出来只靠宏观均匀材料模型是根本模拟不出来的。1.2 连续介质模型与细观模型的区别传统的混凝土宏观仿真通常把材料当作均匀连续介质通过损伤塑性本构来间接反映材料劣化。这样做的好处是计算量小、参数标定相对简单但缺点是无法回答“孔隙率怎么影响强度”这个问题。宏观模型里的材料参数是一个平均结果改变孔隙率在宏观层面很难直接体现。细观模型则是把骨料、砂浆、孔隙这些组分分开建模每个组分赋予独立的材料属性。这样一来孔隙率就可以作为模型的几何输入参数直接控制而不是间接地通过折减材料强度来实现。对于拉伸断裂这种对缺陷极度敏感的问题细观模型给出的裂尖应力场、损伤演化路径和真实试验的契合度要高得多。当然代价就是建模复杂、网格量大、计算时间长。我在这套案例里做了一个折中只建模孔隙和砂浆基体省略骨料细节把重点放在孔隙率对拉伸断裂的影响上。这个简化对研究孔隙率单因素影响是够用的如果后续要同时研究骨料形状和级配可以在现在的脚本基础上继续扩展。2. 模型构建的关键环节解析2.1 参数化几何建模思路这套案例最有价值的部分在我看来就是“任意孔隙率”这几个字。市面上很多混凝土细观模型是手工建的改一次孔隙率就要重新画一遍几何非常痛苦。而用Abaqus自带的Python脚本接口做参数化建模可以把整个建模过程变成一个可调参的函数。核心思路是在指定的长方体或圆柱体试件区域内根据目标孔隙率计算需要生成的孔洞总体积然后随机生成一系列球形孔洞位置不重叠地放进基体区域。这里有个关键点就是随机孔洞的生成算法。如果完全随机投放可能会出现孔隙过于集中的情况导致局部区域网格畸变严重甚至生成失败。我采用的是“随机投放重叠检测”的方案每次生成一个随机坐标检查与已经生成的孔洞是否有重合重合就重新生成坐标直到所有孔洞都投放完成。这样做比较简单也能保证孔洞分布基本均匀模拟出来的断裂路径没有明显的伪周期性。球形孔洞的半径可以固定也可以在一定范围内随机分布。我的脚本里做了两种模式一种是等径孔洞适合研究孔隙率单因素影响另一种是孔径随机分布更接近真实混凝土的孔隙结构。建议做参数研究的时候先用等径孔洞规律性更清晰等确定了基本趋势再用随机孔径模型做验证。2.2 材料本构的选择与参数标定拉伸断裂模拟的核心难点在材料本构。对混凝土材料Abaqus里面主流的选择有三个脆性开裂模型Brittle Cracking、混凝土损伤塑性模型Concrete Damaged Plasticity, CDP和扩展有限元法XFEM。我在这套案例中用得最多的是CDP模型原因是它在拉伸和压缩工况下都能较好地描述材料行为而且是基于损伤力学框架拉伸软化段的表达很灵活。CDP模型需要设置的关键参数包括膨胀角、偏心率、双轴抗压强度与单轴抗压强度之比、拉伸子午面与压缩子午面第二应力不变量之比、粘性系数。膨胀角一般取30到38度偏心率默认0.1Kc默认2/3双轴与单轴强度比默认1.16。这些默认值用于混凝土是经验上比较可靠的起点但如果你模拟的是高性能混凝土或掺纤维混凝土建议重新标定。拉伸损伤行为需要给出应力-开裂位移关系或者应力-非弹性应变关系。这里有个容易被新手忽略的地方就是应力-开裂位移关系的下降段斜率。斜率太陡意味着脆性很强容易造成严重的收敛困难斜率太缓则表示材料延性很大不符合混凝土的真实特性。我的经验是参考CEB-FIP规范中混凝土断裂能Gf的计算公式按试件尺寸和骨料最大粒径估算断裂能再反算软化段的形状。比如C30混凝土断裂能大约在80到120 N/m之间抗拉强度在2.0到3.0 MPa量级软化段峰值位移大约在0.05到0.15 mm范围。2.3 网格划分的要点网格划分在这个模型里是个技术活因为孔隙的存在会让几何变得很碎。我强烈建议使用C3D8R单元或C3D10M单元结合Abaqus/CAE的自动网格划分。C3D10M是修正的四面体单元对复杂几何有很强的适应性在有大量孔洞的模型中收敛性和精度都比较好。但四面体单元的计算量比六面体大如果你对计算效率有要求可以尝试把模型切成规则区域后做六面体网格划分。网格尺寸的选择直接影响结果的精度和计算成本。孔隙周边的应力梯度大网格需要细化远离孔隙的区域可以适当放宽。我一般把孔隙边上最小网格尺寸控制在孔径的1/5到1/10这样能捕捉到孔边应力集中的细节。当然网格尺寸也受计算资源限制。我做过一个边长为100mm的立方体试件、孔隙率5%、孔径1mm的模型网格数量接近80万单次计算耗时在6到8小时左右这个规模用普通工作站就能跑动。网格划分过程中有个很常见的坑孔隙与孔隙之间的距离太近导致两个孔洞之间的基体区域过于狭窄网格质量非常差或者直接生成失败。这个问题在随机投放阶段就要提前规避我在重叠检测时不仅要求孔洞不重叠还要求孔洞中心间距不小于孔径之和的1.2倍相当于保留了最小壁厚。3. 实操过程与核心环节实现3.1 Python脚本快速生成变孔隙率模型我把参数化建模过程写成了Python脚本只要改几个参数就能生成新的模型。这里分享一个简化版的脚本框架你可以根据自己的需要修改。# 导入Abaqus建模相关模块 from abaqus import * from abaqusConstants import * import numpy as np import random # 定义试件尺寸和孔隙率参数 length 100.0 # 试件长度mm width 100.0 # 宽度mm height 100.0 # 高度mm porosity 0.05 # 目标孔隙率5% radius 1.0 # 孔隙半径mm # 创建一个Part名字为Concrete myPart mdb.models[Model-1].Part( nameConcrete, dimensionalityTHREE_D, typeDEFORMABLE_BODY) # 创建基体几何块 myPart.BaseSolidBox( corner1(0.0, 0.0, 0.0), corner2(length, width, height)) # 计算需要生成的孔隙数量 volume_total length * width * height volume_one_pore 4.0 / 3.0 * np.pi * radius**3 num_pores int(porosity * volume_total / volume_one_pore) # 随机投放孔隙并检查重叠 centers [] min_gap 0.2 * radius # 孔间最小间隙 while len(centers) num_pores: x random.uniform(radius*1.5, length - radius*1.5) y random.uniform(radius*1.5, width - radius*1.5) z random.uniform(radius*1.5, height - radius*1.5) candidate (x, y, z) ok True for c in centers: dist np.sqrt((c[0]-x)**2 (c[1]-y)**2 (c[2]-z)**2) if dist 2*radius min_gap: ok False break if ok: centers.append(candidate) # 在基体上切出球形孔洞 myPart.CutSphere( center(x, y, z), radiusradius)这个脚本里需要注意几个细节第一孔隙不能贴着试件表面否则切割后容易产生畸形单元所以坐标范围留出了1.5倍半径的边距第二重叠检查用的是中心距判断这个距离要大于两倍孔径加上一个最小间隙值第三CutSphere这个函数是在已有基体上扣除球体重复调用就能得到多孔结构。脚本执行完成后CAE界面里就能看到带随机球孔的混凝土几何模型。3.2 材料参数与分析步设置几何模型建好之后下一步是材料参数和分析步设置。我以C30混凝土为例给出一份可以直接用的参数表你在做自己的模型时可以按实际材料调整。参数项数值说明弹性模量30000 MPa依据C30混凝土标准泊松比0.2混凝土常规取值范围0.18-0.22抗拉强度2.5 MPa标准立方体抗拉强度换算断裂能100 N/m依据CEB-FIP公式估算膨胀角35度CDP模型关键参数偏心率0.1默认值f_b0/f_c01.16默认值K0.667默认值粘性系数0.0005辅助收敛分析步的设置上我建议直接在Abaqus/Standard里用静力通用分析步开启几何非线性NLGEOMON。如果计算收敛特别困难可以考虑切换到Abaqus/Explicit用准静态加载配合质量缩放。但显式分析对时间增量步和动能控制要求比较高不建议一上来就用。加载方式我推荐用位移控制而不是力控制。原因是混凝土拉伸断裂存在软化段力控制加载在峰值后很容易发生突变导致不收敛位移控制则可以稳定地追踪完整的载荷-位移曲线。加载速率取0.1mm/min的量级对静力分析来说相当于一个准静态过程。边界条件设置成两端夹持或一端固定一端加载都可以关键是加载端要保证刚性避免应力在端部过于集中。3.3 求解控制与收敛性调优混凝土损伤模型在断裂过程中收敛困难这是公认的痛点。我在大量测试中总结了几条比较有效的调优手段。第一是粘性系数。CDP模型里有一个粘性系数Viscosity Parameter默认值是0但完全不推荐用0那样会很容易发散。我的经验是把粘性系数设在0.0001到0.001之间数值小一点能加快收敛数值大一点能提高稳定度。具体取多少需要试验对比从0.0005开始试通常是个不错的起点。第二是增量步设置。把初始增量步设得小一些例如总时长的0.01倍最小增量步设为1e-7量级。这样求解器在接近峰值应力的时候有足够的自我调整空间。如果Abaqus输出“Too many attempts made for this increment”说明增量步反复回退要么是模型本身有问题要么是材料软化段太陡。第三是调整损伤变量与开裂位移的对应关系。CDP模型中的拉伸损伤变量在开裂后迅速趋近于1若下降段曲线过于陡峭会导致单元刚度瞬间变得很小从而引发负特征值或数值不稳定。可以适当延长开裂位移的范围让损伤演化更平缓代价是计算出的峰值位移会略偏大。还有一个小技巧如果模型规模很大可以考虑用子空间法或AMG代数多重网格求解器替代默认的直接求解器对内存占用和计算速度都有改善。这个在Abaqus的Step模块里可以设置缺点是某些情况下精度略微下降但用于趋势性研究足够了。3.4 后处理提取断裂路径和应力-应变曲线计算完成后后处理的工作量其实比建模还大。我习惯从三方面来提取结果应力-应变曲线、损伤变量分布、断裂路径形态。应力-应变曲线直接从加载点的反力和位移数据转换得到。Abaqus的历史变量输出里可以勾选加载点反力RF和位移U计算完成后用Python从ODB文件里提取数据再绘制成应力-应变曲线。这里有个细节应力要用端部面积平均应变要用标距段位移除以原始标距长度不能直接用端部位移除以整个试件长度否则得到的应变值会偏小。损伤变量分布云图可以看SDEG或者DAMAGET这两个量都反映了材料点的损伤程度。当DAMAGET接近1时说明该单元已经完全开裂。把达到损伤阈值的单元集合提取出来用云图可视化就能直观看到断裂面。拉伸断裂模型的断裂路径通常在试件厚度方向上呈“之”字形孔洞密集的地方路径会更弯曲。断裂路径形态的量化分析可以这样做把损伤严重的单元位置坐标导出在三维空间里拟合断裂面的倾斜角度和曲折度。这个方法在写论文时特别有用因为审稿人最喜欢看这种定量结果。4. 常见问题与排查技巧实录4.1 模型生成阶段的失败与对策做参数化建模时最让人抓狂的就是脚本跑了一半报错。我这里把最常遇到的问题整理成了一张速查表你在实际操作中碰到了可以直接对照排查。现象可能原因解决方法CutSphere操作报几何错误孔洞重叠或贴在边界增大重叠检测的距离留足边距孔隙数量明显少于预期目标孔隙率换算有误检查体积公式确保半径单位一致网格划分失败孔间距过小产生薄壁区域在脚本里设置最小间隙下限网格质量警告孔洞附近单元过度扭曲改用C3D10M单元或对孔隙周围局部加密脚本运行极慢重叠检测效率低用空间网格索引替代全量距离计算随机孔洞生成算法有一个效率问题当孔隙率较高时比如超过10%孔隙数量可能是几百甚至上千个逐个检查重叠会非常慢。我的做法是用一个粗网格把空间分成小区域只检查邻近区域内的孔洞计算速度能提升一个数量级。这个优化在做高孔隙率模型时几乎必须用。还有一个容易被忽视的坑是单位制。Abaqus里面没有内置单位系统所有数值都按你选的单位体系理解。如果你在建模时用的是mm和N那弹性模量就要用MPaN/mm2密度用t/mm3时间用s。我在脚本里统一用mm单位体系一旦哪个参数不小心写成了m单位整个模型的力学响应就会完全错乱看起来像是材料属性变了实际上是单位制混乱。4.2 求解不收敛的排查路径求解不收敛是最耗时间的环节但大部分情况都可以通过系统化排查来解决。我的排查顺序是先看网格是否严重畸变再看材料参数是否合理然后是接触和边界条件设置最后是增量步控制参数。网格畸变通常表现为某个区域应力集中异常单元变形过度。打开Abaqus的网格检查功能找到Jacobian为负或者shape factor过低的单元回到模型里把该区域网格重新划分或用网格重划分技术ALE处理。孔隙边上的单元最容易发生畸变因为应力集中导致局部应变过大。材料参数问题一般是软化段设置太陡或者损伤变量演化过快。可以把损伤演化曲线打印出来看一下下降段形状如果从峰值应力到零应力的开裂位移小于0.01mm那确实太脆了需要适当延长。CDP模型的粘性系数也可以微调增大到0.001通常能显著改善收敛。边界条件的问题往往出现在加载端。如果加载端只约束了平移自由度而没有约束旋转自由度试件在加载过程中可能出现刚体转动导致计算发散。我习惯在加载端额外约束一个方向的旋转自由度虽然会引入一点附加约束但对简化模型来说问题不大。增量步控制参数方面把最大增量步数从默认的100改到1000同时把最小增量步设小一个数量级不让求解器过早放弃。这样即使计算卡在软化段求解器也有机会通过不断缩减增量步来穿越最困难的阶段。4.3 结果异常判断与修正有时候计算收敛了但结果看起来不对劲比如应力-应变曲线的形状不符合物理常识。最常见的异常有几个峰值应力很高但曲线非常脆可能是网格太粗导致局部应力集中没有被捕捉到需要细化网格峰值应变明显偏大可能是软化段设置过长或者粘性系数偏大断裂路径完全没有经过孔隙区域可能是随机孔洞分布太稀疏或者损伤实际上是从边界起裂的。我调试这类问题时有个习惯先在Abaqus里查看几个关键时间点的损伤云图从加载开始到完全断裂逐帧观察找到损伤萌生的位置和扩展方向。这样能很快定位问题出在哪个环节。比如如果损伤从加载端开始而不是从孔隙边开始说明端部边界条件产生的应力集中比孔隙处还严重这是不合理的需要调整端部约束或加载方式。还有一次我做高孔隙率模型时发现断裂路径避开了所有孔隙全部沿着试件表面走后来检查发现是孔隙表面在网格划分时被过度光顺等效于孔洞半径被缩小了很多实际应力集中程度低于预期。解决办法是调整网格划分算法把几何容差设小保留孔隙的真实轮廓。5. 从基础案例到研究应用的扩展思路5.1 孔隙率参数扫描与数据拟合这套基础模型最大的优势在于参数化能力可以做孔隙率从1%到15%的批量仿真。我建议用脚本循环执行每个孔隙率算一次最后把所有结果汇总后做统计分析。比如可以拟合孔隙率p与抗拉强度比ft/ft0的关系式常用的形式是ft/ft0 1 - a*p^b其中a和b是拟合参数。不同研究者给出的公式差异很大原因就是孔洞分布、孔径和形状的影响各不相同。用你自己的仿真数据拟合出来的参数具有很好的参考价值也能为后续宏观模型的强度折减提供依据。批量仿真时有个管理技巧给每个孔隙率建独立的Model模型名称里带孔隙率标记这样导出结果时不会混淆。还可以在Python脚本里统一控制ODB文件的命名和输出路径方便后期批量提取数据。5.2 结合XFEM模拟裂纹真实扩展CDP模型模拟的断裂是一种弥散损伤单元损伤累计到一定程度就代表开裂但裂纹的实际路径是用损伤区域来体现的不是一条清晰的几何裂纹面。如果你需要得到明确的裂纹面用于后续分析可以改用XFEM扩展有限元法配合损伤起始和演化准则。XFEM的优势是不需要预制裂纹可以在计算中自动判断裂纹萌生位置和扩展方向。缺点是每个增量步都要追踪裂纹面计算开销显著增大而且对网格质量的要求非常高。我在测试中把XFEM和CDP做了对比发现两者得到的断裂路径整体趋势一致但XFEM的裂纹面更清晰CDP的损伤带更平滑。如果你做的是科研论文建议用XFEM出图如果做的是工程评估CDP的效率更友好。5.3 与试验数据的标定对比再好的仿真模型如果没有试验数据做标定说服力都会大打折扣。在做参数标定时我建议至少准备三组不同孔隙率的混凝土单轴拉伸试验数据用于校准材料的抗拉强度、断裂能和软化段形状。具体做法是先用一组孔隙率的试验数据反推出合理的材料参数然后用同一套材料参数预测另外两组孔隙率的结果。如果预测值和试验值在可接受范围内吻合说明模型有较强的预测能力如果偏差太大就需要检查几何建模的假设是否合理比如是否高估了孔隙的应力集中效应、是否忽略了骨料的影响等。这个过程需要反复迭代但一旦标定完成模型的泛化能力会非常强。根据我个人的使用体验这套参数化建模加CDP的方法在处理5%以下低孔隙率时结果相当稳定5%到12%的区间需要仔细处理收敛问题超过15%的高孔隙率模型建议改用显式求解方案。做研究的朋友可以在基础脚本上继续叠加骨料随机投放、ITZ界面层、纤维增强等复杂因素让模型一步步逼近真实的混凝土细观结构。
返回列表