
连续梁桥的建模在ANSYS里做整体分析大家习惯性想到的就是beam188、beam189或者直接在Workbench里拉一个梁单元模型。这套流程算位移、算支座反力、算弯矩包络图确实顺手但一碰到业主想看看顶板上缘应力分布腹板剪应力在支座附近到底怎么过渡这种局部问题梁单元就完全使不上劲了。最近我做了一个3跨变截面连续箱梁的复核被迫把模型从梁格直接升级成了板壳单元全桥模型在APDL里用Shell63把整个桥建了出来。做完之后复盘发现这套变截面连续梁快速建模的思路其实特别值得整理出来因为它解决的不只是这一次复核而是一整类整体刚度要看、局部应力也要看的桥梁分析需求。这篇文章就把完整的建模路径、关键命令流片段、以及我在实操里踩过的坑都写出来。适合正在用ANSYS做桥梁分析的工程师也适合想从梁单元升级到板壳单元的土木方向研究生。先说结论用APDL命令流做变截面连续梁桥的Shell63模型只要几何组织方式对从建模到出结果完全可以控制在一天之内而且算完的结构内力和梁单元模型能对得上局部应力又能额外看得到效率和精度都是梁单元模型给不了的。1. 从梁单元到板壳单元连续梁桥分析的一次被迫升级1.1 为什么全桥分析最终绕不开Shell63很多做桥梁设计的人对Shell63的第一反应是这单元不是老掉牙了吗ANSYS官方后来都推荐Shell181了怎么还在用它。说实话我一开始也是这么想的但实际做下来发现Shell63在桥梁方向的生命力比想象中顽强得多。原因是多方面的而且每个理由都很实际。第一桥梁分析里绝大多数量要做的是正常使用阶段的线弹性分析。混凝土梁在正常使用状态下处于弹性工作范围应力水平远低于屈服强度Shell63作为一个4节点弹性壳单元数学上完全够用而且它计算稳定、收敛快、不太挑网格这对全桥模型这种动辄几万十几万单元规模的场景是非常友好的。第二存量代码和教科书资源实在太丰富了。随便翻开一本ANSYS有限元分析的土木类教材不管是清华大学出版社的还是各大高校的课件桥梁或者板壳部分的示例基本都是Shell63写的。网上能搜到的连续梁桥、连续刚构桥的APDL命令流十份里有八份是Shell63。这意味着跟同事对代码、找参考案例、排查模型问题都特别方便。第三也是最重要的从复核工程师的角度看模型的物理解释要清晰。Shell63每个节点6个自由度含义直观提取顶板应力、底板应力、腹板主应力时单元的上下表面应力输出shell top/bottom非常明确不容易搞混。我这次做的是3跨变截面连续箱梁跨径布置35m50m35m单箱双室顶板厚度从跨中到支点基本不变但底板和腹板在支点附近都加厚了。如果用梁单元箱梁顶底板的横向应力分布、支座位置腹板的剪应力集中、中支点负弯矩区的顶板拉应力这些统统看不到。做复核不是只给一个弯矩包络图就交差你得回答业主这个应力水平正不正常的问题那就必须在板壳模型里算。1.2 Shell63的适用边界什么时候别用它逞强当然Shell63也不是万能的。做全桥模型之前得想清楚这个单元的能力边界在哪里免得白忙活一场。首先Shell63不支持材料非线性它是纯弹性单元。如果要做极限承载力分析、钢筋屈服后的塑性重分布、混凝土开裂后的刚度退化Shell63都干不了。这种工况老老实实换Shell181配合混凝土材料模型或者直接上Solid65实体单元。其次Shell63的几何假设是厚度远小于面内尺寸也就是经典的薄壳/中厚壳假设。对桥梁箱梁来说顶板厚度通常0.25到0.4米相对于板跨和梁高来说满足这个假设。但如果某个构件是厚板比如0.5米厚的横隔板和1.0米高的短梁段混在一起局部厚跨比过大shell单元的输出就会被扭曲。遇到这种局部我一般会在改模型的时候把横隔板单独用实体单元处理或者接受一定误差不在厚横隔板区域过度解读应力数值。另外一个实际问题是Shell63对单元翘曲比较敏感。所谓翘曲就是四个节点不在同一个平面内的情况。桥梁的变截面箱梁底板有纵坡、腹板有倾斜、顶板有横坡如果网格划分得不讲究翘曲单元会成片出现。ANSYS在求解时会自动加一个很小的人工刚度去稳定翘曲单元但这个人工刚度会轻微污染计算结果应力可能在局部出现不太合理的花纹。所以后面网格那一节我花了很大篇幅处理这个问题值得仔细看一下。总结一下Shell63和Shell181的取舍我自己的判断标准是对比维度Shell63Shell181单元阶次线性4节点线性/二次4节点或8节点自由度每个节点6个每个节点6个材料非线性不支持支持大变形/应力刚化有限支持完整支持变厚度定义实常数支持4节点不同厚度截面/实常数更灵活计算速度快收敛稳稍慢但可接受桥梁方向存量资料极多相对少所以我的结论是正常使用阶段的全桥弹性分析Shell63依然是性价比极高的选择尤其在APDL命令流环境里它的实常数定义简单粗暴给每个区段配一个厚度编号就行后处理也直观。真正的分水岭是——如果这个模型后面要扩展成非线性分析那一开始就老老实实用Shell181免得中途迁移单元类型还得重新处理收敛问题。2. 变截面连续梁建模的核心难点先把形造出来再造网2.1 变截面信息的落地方式从设计图纸到APDL坐标连续梁桥的变截面最常见的形式是支点处梁高最大跨中处梁高最小梁底按抛物线过渡。设计图纸上一般给的是两个控制值加一个曲线公式比如梁底抛物线指数1.6或者直接给折线。到了APDL里最关键的一步就是把这条纵向变高线变成可建模的几何线。我采用的方法是在每一个控制截面支点、跨中、L/4、L/8这些位置上按横断面图布置好关键点然后用BSPLINE样条曲线把同一纵向位置上的关键点连成纵桥向轮廓线。比如顶板边缘线、底板边缘线、腹板转折线这些轮廓线决定了整个箱梁的外壳形状。实际操作中要注意的是变截面连续梁的腹板通常是倾斜的而且在不同梁高区段腹板斜率是随梁高连续变化的。这意味着你在每个控制截面上布置的腹板与底板交线关键点它的横桥向坐标其实也是变化的。有些初学者只把梁高方向坐标Y做了抛物线插值横向坐标Z却按等值点连结果建出来的箱梁是歪肚子的网格一划就出畸形单元。我自己的做法是先在Excel或者Matlab里把全桥各控制截面的关键点坐标做成一张表每一行是一个关键点编号每一列是X、Y、Z坐标。抛物线变高公式写进公式里横向坐标按截面实际尺寸内插。然后把这张表粘贴进APDL命令流用*VREAD或者直接赋值数组的方式读进来。这样做还有一个额外好处以后想改跨径、改梁高只需要改表格里的几个控制值整条命令流重跑一遍新模型就出来了效率极高。2.2 关键点编号策略一组好编号能让命令流省一半事做全桥模型最怕什么最怕关键点、线、面的编号乱成一团。尤其是变截面箱梁几十个截面、每个截面十几二十个关键点如果编号没有规律后面写循环和网格划分命令的时候会当场崩溃。我习惯的编号规则是同一个横断面的关键点编成连续区间。比如1号截面的关键点是1到202号截面是21到403号截面是41到60以此类推。这样在写*DO循环的时候第i个截面的关键点编号起点是 (i-1)*201直接可以用循环变量算出来一行命令覆盖所有截面根本不用手动敲几百个点。纵桥向的截面间距也要规划好。变截面段加密一些等截面段可以放宽。以我这次355035的桥为例中支点两侧各8米范围内是变高段我每隔1米放一个控制截面跨中附近两米一个也够用。这样做出来的几何体光顺程度已经足够保证后续网格质量了。关键点生成之后就是连线。纵向轮廓线用BSPLINE把相邻截面对应的关键点串起来横桥向的轮廓线用LARC或者直线连。这一步有个小技巧BSPLINE生成的样条曲线端点的切线方向受端部关键点位置影响很大如果首末两端的截面坐标有突变比如连续梁的顶板在支点处突然变厚样条曲线会overshoot出现一个不合理的鼓包。解决办法是在突变位置前后各加一个辅助控制截面让几何过渡更平缓或者干脆不用样条改用两段直线加一段圆弧去拟合变高曲线。2.3 面、体和网格的关系拓扑一致比几何美观重要关键点和线建好之后下一步是由线生成面再生成体。这一步是最考验耐心的也是最容易出错的地方。很多初学者在GUI里用鼠标点着建模看起来界面挺友好但实际上面的编号、线的方向稍微一乱体就生成不出来或者生成出负体积。我的原则是几何体只是网格的容器真正关心的是相邻体之间的共享面。在APDL里用V命令由面生成体或者VEXT拉伸面成体的时候一定要确保相邻体共享的面是同一个几何面而不是两个重合但不共享的面。如果共享关系断了网格划出来在交界处就是不连续的相当于两段梁之间没有连接结果完全错误。为了保证共享我通常的做法是分段建体然后VGLUE粘接。比如每跨建一个体三跨三个体最后用VGLUE全部粘起来。VGLUE之后公共面上的边界是共享的网格划分时节点自然连续。这个操作在命令流里就一行但很多人会漏掉结果就是模型看着完整算完之后发现位移场在跨中位置不连续检查半天才发现是体没粘接。还有一个建议是不要在已经划好网格之后再去改几何。APDL的几何和网格是关联的划完网格再动几何会导致整个模型需要重划。正确流程是关键点到位、线到位、面到位、体到位、体粘接到位然后统一进入网格划分环节。3. 命令流逐段拆解从材料定义到网格生成3.1 材料参数与Shell63实常数厚度管理的基本功Shell63在APDL里通过ET命令定义单元类型实常数R命令设置厚度。这里有个值得花两分钟说清楚的点Shell63的实常数可以定义四个厚度值分别对应单元的I、J、K、L四个节点。当这四个值不相等时单元内部的厚度是线性变化的。这意味着什么呢意味着你甚至不需要把几何建得很细就能模拟顶底板厚度的渐变。比如箱梁底板从跨中的0.28米渐变到支点的0.55米如果你网格在纵向每段长度足够短可以在每个单元上定义不同的实常数厚度编号或者直接利用这个四点变厚度特性让单元自己过渡厚度。不过我在实际项目中很少用这个功能因为变厚度的同时几何边界也在变两个因素叠加容易让结果不好解释。我的习惯是几何按实际尺寸建厚度取所在区段的平均厚度分两三个区段就够用了。材料参数方面C50混凝土给出弹性模量、泊松比和密度。单位制统一用国际单位制米、千克、牛顿、帕斯卡。密度2500 kg/m³弹性模量3.45e10 Pa泊松比0.2。这里要提醒一下APDL本身不强制单位制但如果你密度和弹性模量对不上自重算出来就会差好几个数量级这个错误在结果里很难察觉特别坑。3.2 建模命令流核心片段关键点、样条线、拉伸成体下面这段命令流是我这次建模的主干我做了适当简化去掉了一些和具体桥型绑定的坐标值保留的是组织逻辑。finish /clear /prep7 ! 1. 材料参数C50混凝土 mp,ex,1,3.45e10 mp,prxy,1,0.2 mp,dens,1,2500 ! 2. 单元类型与实常数 et,1,63 r,1,0.30,0.30,0.30,0.30 ! 实常数1顶板厚0.30m r,2,0.28,0.28,0.28,0.28 ! 实常数2跨中底板厚0.28m r,3,0.55,0.55,0.55,0.55 ! 实常数3支点底板厚0.55m r,4,0.45,0.45,0.45,0.45 ! 实常数4腹板厚0.45m ! 3. 用数组存放各控制截面的关键点坐标 ! 这里假设已经由外部表格生成 sec_coord(截面号, 关键点号, 坐标分量) ! 然后循环生成关键点 *do,sec,1,21 *do,kp,1,20 x sec_coord(sec,kp,1) y sec_coord(sec,kp,2) z sec_coord(sec,kp,3) k, (sec-1)*20kp, x, y, z *enddo *enddo ! 4. 生成纵向轮廓线同一纵向位置的点用BSPLINE连接 ! 以底板左腹板下缘为例每一个截面上对应关键点编号是7 *do,sec,1,20 kl (sec-1)*20 7 kr sec*20 7 l, kl, kr *enddo ! 根据实际情况逐个创建纵向线、横向线 ! 5. 由线生成面由面生成体 ! 每个梁段由8条线围成4个面再生成体 ! 示例仅展示命令结构 ! lsel,... 选择某段起止线 ! al,... 由线生成面 ! va,... 由面生成体 ! 6. 体粘接保证网格连续 vglue,all这个流程看起来不复杂但真正写起来最耗时的就是第四步到第五步之间逐段组织面的边界线选择。我的经验是在模型开始之前先把每根线的作用画个草图标好编号区间再动手写命令流。否则光靠记性去理几十根线的编号一定会乱。3.3 网格划分参数设置与Shell63单元质量把控网格划分直接决定Shell63模型算得准不准。我这次全桥用映射网格Mapped纵向每0.5米一个单元横向每0.3到0.5米一个单元腹板高度方向划分2到3个单元。全桥下来大约4万个单元普通工作站两三分钟就能算完。网格尺寸控制用LESIZE命令对每条线单独设置。变截面段支点附近梁高变化剧烈的区段纵向单元加密到0.3米等截面段放款到0.6米也行。这里有一个技巧在设计网格尺寸时一定要考虑厚度方向的问题。Shell63是壳单元厚度本身不用划分网格几何上壳就是一层面但面的面内尺寸和厚度之间的比例要合理。如果某个单元边长2米厚度只有0.25米这个单元的面内刚度和弯曲刚度比例会失调可能出现剪切锁死或者薄膜锁死导致的应力失真。经验值单元面内最大尺寸不要超过板厚的10到15倍。顶板0.3米厚单元长度控制在0.5米以内比较稳妥。网格划完之后的检查我用三个指标长宽比Aspect Ratio控制在5以内超过8的单元要处理。翘曲角WarpingShell63对这个敏感超过15度就建议改网格。雅可比Jacobian不低于0.7否则单元畸形。APDL里可以用CHECK命令做单元形状检查也可以在求解之前先跑一次模态分析只取前几阶看看有没有局部振型明显异常的假模态——比如某个支座附近的单元出现局部高频振动那多半是网格畸变或者约束出了问题。4. 边界条件与荷载施加连续梁桥最容易出错的两个环节4.1 支座模拟到底该约束哪几个自由度连续梁桥的支座布置比简支梁复杂常见的是固定支座纵向活动支座横向活动支座组合。具体到APDL里就是用D命令在支座节点上约束平动自由度。Shell63节点有UX、UY、UZ、ROTX、ROTY、ROTZ六个自由度支座约束一般只约束平动转动自由度要放开。但这里有一个Shell63特有的坑在支座位置如果只约束一个节点的三个平动自由度这个节点处于局部点支撑状态转动自由度虽然没有被约束但单元在该点的弯曲刚度响应是不真实的结果就是支座处的局部应力会出现一个尖锐的峰值。这个峰值不是真实应力是点约束的应力奇异性。我的处理办法是在每个支座位置把该处纵桥向一小段范围比如支座垫石长度方向0.8米内的节点做一个刚域耦合用一个主节点代表支座垫石主节点上加约束从节点和主节点之间用CERIG或者*DO循环写CP耦合方程关联。这样应力扩散效果真实支座反力也提取得非常干净。具体的耦合范围根据支座垫石实际尺寸来这个参数对局部应力影响比较大值得认真取。还有一个经常翻车的地方是刚体位移。桥跨结构如果没有足够的约束求解器会报Nonpositive/Zero pivot错误这就是欠约束。检查方法是求解前先做一次模态分析如果第一阶频率接近0说明有刚体位移检查UZ、UX约束是不是漏了某个方向。4.2 自重、二期恒载、车道荷载怎么加到Shell63模型上荷载施加是连续梁桥模型里最容易看着简单做起来乱的环节。我的做法分三类自重用ACEL命令施加重力加速度材料密度已经在MP,DENS里定义了程序会自动积分质量。这里要强调单位国际单位制下ACEL,0,9.81,0指向-Y方向。注意重力方向别设反了我第一次建模就因为这个闹过笑话算出来的位移是向上的还以为是约束问题查了半天才发现是ACEL的正负号。二期恒载桥面铺装、防撞护栏、中央分隔带这些重量我习惯用压力等效到顶板单元上。用SF命令选择顶板表面所有单元面施加PRES压力。单位是Pa所以要自己把铺装厚度、密度换算成均布压力。这个做法比附加质量准确因为压力不参与刚度只影响荷载效应和实际物理过程一致。车道荷载/车辆荷载规范车道荷载是均布荷载加集中荷载。均布部分和二期恒载一样用面压力集中部分如果直接施加到一个节点上会在该节点周围产生极为夸张的应力集中。我的做法是在集中力作用点做一个局部刚域把周围几个节点耦合到一个加载点上或者用一个尺寸很小的矩形区域均布力来代替真正的点荷载。这个技巧在板壳模型里特别重要直接决定你读出的应力结果是否可信。温度荷载整体升降温、梯度温度我这次没做但提一句Shell63可以定义参考温度TREF和线膨胀系数ALPX梯度温度用BFE施加到节点上做体荷载。步骤不复杂就是选择节点后再施加。5. 求解与后处理板单元模型怎么读结果5.1 位移和应力你看到的到底是哪一层应力求解用默认的稀疏求解器就行全桥模型自由度规模不大几秒到几分钟就算完。后处理才是真正花时间的地方。位移结果最直观查UY方向的挠度值。连续梁桥正常使用状态挠度一般控制在L/600以内我这次算出来的中跨最大挠度和梁单元模型对得上误差在3%以内基本验证了板壳模型的正确性。应力结果就要小心了。Shell63输出的应力是中面应力吗不是它输出的是壳体的顶面和底面应力。在ANSYS后处理里用Shell Top和Shell Bottom选项可以切换查看。比如箱梁顶板你要看的是顶板上缘的应力Shell Top负弯矩区顶板上缘是受拉的设计关心的主拉应力就看这个。混凝土结构查看应力时结构工程师一般看第一主应力S1和第三主应力S3以及最大剪应力。在APDL里用*GET或者PLNSOL,S,1提取第一主应力云图。要注意的是支座位置和集中荷载位置附近会出现应力奇异点这些位置的主应力数值明显偏大但它是局部约束和荷载处理方式造成的不是真实应力。经验做法是在这些区域把云图范围上限调整到规范允许值附近或者干脆把这些区域从显示中屏蔽掉否则云图整体颜色都会被峰值拉走中间段真正关心的应力反而看不出梯度。5.2 从壳单元结果中提取截面内力建模时就要留好后手板壳模型的一个痛点就是算出来的是一堆应力但桥梁设计习惯用的是截面内力弯矩、剪力、轴力。怎么把应力积分成内力这是很多人做板壳模型时最头疼的问题。我的做法是在建模阶段就预设验算截面。具体来说在每一个需要提取内力的位置比如边跨跨中、中支点、中跨跨中在几何上设置一个横向切割面把这个位置前后的体分开建但仍然VGLUE粘接。这样后处理的时候用FS截面面选择这个切割面上的所有单元再用FSUM命令对这些单元的节点力求和得到的就是通过该截面的合力。再配合截面的面心位置可以进一步算出弯矩。这个方法非常可靠但要求你在建模的时候就想到哪些位置要提取内力否则模型建完了再切截面就比较麻烦。这里还有一个省事的办法ANSYS的SICE命令可以定义截面面配合SECTYPE和SECSTOP等命令提取截面内力。不过SICE主要面向实体单元和梁单元对壳单元的支持不如自己用FSUM来得直接。我这次的工程复核当场就是FSUM一把梭合力的思路配合自己算力矩臂结果和梁单元模型几乎完全一致。我建议每个做桥梁板壳模型的人都养成一个习惯建模的时候把关键截面处做上标记比如在切割面位置定义命名选择NSEL/SNAME这样后处理脚本可以循环处理批量提取所有关键截面的内力效率会高很多。6. 实测踩坑记录与快速建模经验补充6.1 绕不开的报错Nonpositive/Zero pivot 到底是什么意思这个报错在ANSYS经典界面里几乎是每个新手都会碰到的。字面意思是零主元本质是刚度矩阵奇异求解器无法求解。对应到连续梁桥模型十有八九是约束出问题。最常见的场景支座位置的刚域耦合没有做对。比如我想用CERIG把几个节点刚性连接到主节点上但CERIG对每个从节点自动约束了所有自由度包括转动自由度这就和Shell63本来自由转动的物理特性冲突了结果导致局部刚度矩阵出现零行或者负主元。这种报错的诡异之处在于它不一定出现在支座位置本身而可能出现在距离很远的地方排查起来相当折磨人。我的排查流程是固定的第一步做模态分析看前10阶频率如果出现0频率或者接近0的频率说明有机构自由度第二步用D命令列表检查所有约束确认每个支座节点的约束方向第三步逐个屏蔽刚域耦合命令二分的排查。这套流程走下来基本两小时内能定位问题。另一个频繁碰到的警告是Shell element XXXXX has a warping factor of...。这就是前面说的Shell63对翘曲敏感的问题。处理办法是回到网格划分阶段对翘曲严重的区域重新划分把纵向网格加密让相邻节点的高程差减小或者把翘曲区域的四边形单元改为三角形单元注意Shell63也支持三角形退化形式但是精度会下降只是作为过渡补救。完整项目里如果翘曲单元比例控制在1%以内结果基本不受影响。6.2 变截面过渡段的网格畸形加密不是唯一解决方案变截面连续梁桥支点附近梁高从支点的3.5米渐变到跨中的2.0米这个过程在几何上是平滑的但如果网格划分策略不对就会出现锯齿状过渡应力在转折点出现虚假集中。我吃过一次亏最开始图省事纵向网格间距统一0.6米结果在变高最剧烈的梁底抛物线斜率最大区段相邻两个截面的梁高差超过0.2米单元看起来是斜的算出来的底板应力在每一格都有一条台阶线。后来我把变高段纵向网格加密到0.25米台阶线就消失了。这里要分享一个更本质的理解对于变截面桥网格尺寸的变化率可能比绝对尺寸更重要。相邻单元的尺寸比尽量控制在1.5以内如果从加密区突然过渡到稀疏区即使加密区本身很细也会在边界处产生应力扰动。用LESIZE命令的SPACE参数可以控制网格从一端到另一端的疏密过渡比这个参数用好了网格质量会提升一个档次。6.3 一套提高全桥建模效率的心法最后分享几个我多年做APDL建模总结出来的工作习惯这些习惯帮我在项目交期紧的时候省了大量时间第一命令流永远按模块组织不要写成一坨。我的模板固定是五段几何参数、建模、网格、边界与荷载、求解与后处理。每段用!注释隔开参数全部集中在文件头部。改参数比改模型快得多这是APDL最强大的地方。改一个梁高、改一个板厚、改一个支座位置全部只动头部几行重新跑一遍就行。第二变截面数据不要手输坐标。哪怕你现在项目小只有二十个截面我也建议用表格或者数组的方式管理坐标。因为复核项目往往面临方案调整桥型一变几十个截面的坐标全要重算如果没有自动化工具辅助光改坐标就能耗掉一整天。第三先用等截面模型跑通流程再去折腾变截面。这个建议听起来有点绕但实际效率提升巨大。等截面模型简单网格规则容易验证边界条件、荷载、后处理脚本是否正确跑通之后再改变截面只需要替换几何层面那一段命令流其他环节全部复用排查问题的范围瞬间缩小80%。第四也是很多人忽略的一点模型跑完之后立刻执行CDWRITE命令把模型和结果写成交互文件存盘。这个文件以后想在APDL里改模型、ANSYS版本升级后重新打开模型全靠它。我有一次电脑系统崩溃GUI里保存的.db文件打不开反而是CDWRITE存下来的文本文件让我在半天内重建了全套模型从那以后每次建模必存。做完整套变截面连续梁桥的Shell63模型之后最大的感受是APDL并没有过时相反在桥梁工程复核这种既要整体又要局部的场景里命令流的可控性和可重复性是任何GUI操作都替代不了的。板壳模型跑出来的应力分布图比梁单元的弯矩包络图信息量大了不止一个量级而且当我把提取出来的截面内力和传统梁单元结果放在一起对比时两种方法之间微小的差异反而让我对整个模型的可信度更有底。如果你正要接一个变截面连续梁或者类似桥梁的板壳分析任务希望这篇文章能帮你少走几天弯路。