首页/文章/ 详情

ANSA二次开发:模型结构树重构(2)

15小时前浏览3
在基于ANSA的二次开发中,许多功能开发都需要利用到模型的结构树,如模型任务分发功能定制,连接(焊点、粘胶、焊缝等)的自动化生成都需要用到结构树。下面介绍三种结构树构造方法并对每种方案的性能进行说明。

方法二

主要思路:获取原始结构树中的所有节点,并通过关键字Hierarchy读取其原始节点链字符串构建一个一一对应的字典,然后从根节点开始从上向下一个分支一个分支的逐层构建。前期将原始节点链字符串进行保存,获取若由于某种原因(如网格划分)导致结构树破坏,利用该方法再将原始结构树进行复原。针对一个完整的车身(BIW)CAD数据,进行构造,64核电脑用时0.12秒。















































































from ansa import guitkfrom ansa import basefrom typing import ListTupleDictUnion
deck = base.CurrentDeck()PARTTYPETUPLE:Tuple[str] = ('ANSAPART''ANSAGROUP')VIEWCOLNAMETUPLE:Tuple[str] = ('Module Id''Name''Status'# ListView列名称
def setItemText(item:object, name:strid:str='')->None:  '''  对输入的item设置名称和ID  '''  guitk.BCListViewItemSetText(item, VIEWCOLNAMETUPLE.index('Name'), name)  if id:    guitk.BCListViewItemSetText(item, VIEWCOLNAMETUPLE.index('Module Id'), id)  return None  def createItem(parentItem:object, part:base.Entity, isTop:bool=False)->object:  '''  功能:    为输入的part在parentItem下创建一个新的item    参数:    parentItem object 准备新创建item的父节点,为item或listView类型    part: Entity 一个part或group对象    isTop bool 判断需要创建节点是否为根节点的判断器    返回值:  返回生成的item对象  '''    if not isTop: item:object = guitk.BCListViewItemAddChild(parentItem)  else: item:object = guitk.BCListViewAddTopLevelItem(parentItem)  if part.ansa_type(deck)==PARTTYPETUPLE[0]:    partId: str = part.get_entity_values(deck, ['Module Id', ])['Module Id']  else:    partId: str = ''  setItemText(item, part._name.strip(), id=partId)  guitk.BCListViewItemSetUserData(item, part)  return item
def loadModelTree02()->None:  partIter:List[base.Entity] = base.CollectEntitiesI(deck, None, PARTTYPETUPLE)  hierToPartDict:Dict[str,List[base.Entity]] = dict()  for part in partIter:    tree:str = part.get_entity_values(deck, ['Hierarchy', ])['Hierarchy']    tree = tree.strip()    try: hierToPartDict[tree].append(part)    except KeyError: hierToPartDict[tree] = [part]  crtTreeBranch(leftModelView, '', hierToPartDict, isTop=True)
def crtTreeBranch(parent:object, name:str, hierToPartDict:Dict[str,List[base.Entity]], isTop:bool=False)->None:  children:List[base.Entity] = hierToPartDict.get(name, None)  if not children: return None    for child in children:    item = leftPartToItemDict.get(child, None)    if not item:      item = createItem(parent, child, isTop=isTop)      leftPartToItemDict[child] = item    if child.ansa_type(deck)==PARTTYPETUPLE[0]:continue    crtTreeBranch(item, f'{name}{child._name.strip()}/', hierToPartDict)  return None
if __name__ == '__main__':  # 用于存储结构树数据,实现part和新创建的item一一对应  leftPartToItemDict:Dict[strList[object]] = dict()   mainWindow:object = guitk.BCWindowCreate('结构树构造', guitk.constants.BCOnExitDestroy)  mainBox:object = guitk.BCVBoxCreate(mainWindow)  leftModelView:object = guitk.BCListViewCreate(mainBox, 3, VIEWCOLNAMETUPLE, True)  guitk.BCListViewSetIsRootDecorated(leftModelView, True)  guitk.BCListViewSetFilterEnabled(leftModelView, True)  guitk.BCListViewSetSelectionMode(leftModelView, guitk.constants.BCMulti)  loadModelTree02()  guitk.BCShow(mainWindow)
未经作者同意,不得转载该文!!!

来源:檐苔
二次开发ANSA
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-26
最近编辑:15小时前
青瓦松
硕士 签名征集中
获赞 12粉丝 0文章 45课程 0
点赞
收藏
作者推荐

深度解析 | LS-DYNA中的Mat24材料与Von Mises准则:汽车碰撞仿真的“黄金拍档”

开篇:一场被算法预言的生死危机2024年某新势力车型在50km/h正面碰撞测试中,B柱出现异常弯折——工程师调取LS-DYNA的仿真日志,发现一个被忽视的细节:Mat24材料模型中硬化曲线的斜率偏差了7%。正是这7%的误差,让Von Mises准则在某个临界时刻做出了错误的屈服判断,最终导致结构失效。本文将带您穿透代码与公式的表象,揭示这对"数值计算灵魂伴侣"在碰撞安全领域的隐秘对话。一、Von Mises屈服准则1.1 教科书不会告诉你的三个真相真相1:"静水压力无关性"在超高强度钢中可能失效真相2:Mises应力云图中隐藏着"塑性流动优先路径",这是吸能结构优化的黄金地图。真相3:Von Mises准则的二次函数形式,本质是Lode参数为零时的特解,这解释了其在平面应变状态的误差来源。1.2 碰撞工程师的"应力翻译器"实战场景:当某车型在25%小偏置碰撞中出现A柱撕裂时,通过Mises应力场反推: 步骤1:提取撕裂路径上的 σeq时间序列步骤2:对比相邻单元的应力梯度突变点步骤3:定位到某个焊点周围出现12%的应力振荡——最终发现是网格尺寸与积分点分布的耦合误差1.3 理论基础:能量决定屈服1913年,Richard von Mises提出一个颠覆性观点:材料是否屈服,取决于其内部因形状改变(剪切变形)积累的能量是否达到临界值,而非某单一方向的应力。这一理论完美解释了金属在复杂应力下的屈服行为。核心公式:物理意义:将三维主应力(σ1、σ2、σ3)转换为等效的单轴应力σeq,当σeq>=σy(材料屈服强度)时,材料进入塑性变形。1.4 碰撞仿真中的应用逻辑变形预测:通过计算车身部件的Mises应力分布,预判纵梁折叠、车门凹陷等变形模式。能量管理:高Mises应力区域对应主要的能量吸收区,指导结构优化(如加强筋布局)。失效预警:结合等效塑性应变,预测钣金开裂或焊点断裂风险。二、畸变能与Von Mises屈服准则2.1 能量分解:体积改变能与畸变能材料在受力时存储的应变能(Utotal)可分为两部分:体积改变能(Uvol):由静水压力(平均应力)引起,对应材料体积变化。畸变能(Udist):由偏应力张量(剪切应力)引起,对应形状改变。畸变能公式:其中, E为弹性模量,ν为泊松比。2.2 畸变能与Von Mises准则的关联Von Mises应力σeq可直接通过畸变能密度推导:当σeq>=σy时,畸变能超过临界值,材料发生屈服。 2.3 畸变能与Tresca准则的对比准则理论基础能量关联性Von Mises畸变能密度 直接基于畸变能临界值 Tresca最大剪应力 无直接能量关联,仅依赖应力差值 实验支持:Von Mises准则因考虑全部主应力差,对多数金属材料的预测更准确。2.4 工程意义:从理论到设计的桥梁吸能结构优化:保险杠、前纵梁的畸变能分布决定材料厚度和截面形状设计。多材料匹配:不同材料的畸变能阈值差异(如钢 vs 铝)影响碰撞力传递路径。失效判据补充:高畸变能区域常伴随局部颈缩或开裂,需结合应变失效模型三、Mat24材料模型与Von Mises屈服准则3.1 Mat24模型的核心架构作为LS-DYNA中最常用的弹塑性材料模型,Mat24通过以下模块实现Von Mises准则的工程化:功能模块参数定义工程意义屈服强度SIGY(初始屈服强度)定义材料何时开始塑性流动 硬化曲线LCSS(分段线性应力-应变曲线)描述塑性硬化行为(强化或软化) 应变率效应C和P(Cowper-Symonds系数)捕捉高速碰撞下的动态强化效应 失效判据FAIL(等效塑性应变阈值)预测单元删除或材料失效 3.2 Mat24与Von Mises的深度耦合屈服条件判定:每个计算步中,LS-DYNA根据当前应力状态计算Mises等效应力σeq,并与动态屈服强度σdynamic对比;若σeq>=σy,触发塑性应变累积。动态屈服强度修正:通过Cowper-Symonds模型反映应变率效应: 典型值:车身钢材常取C=40,P=5,高速碰撞下屈服强度可提升20%~50%。 3. 硬化行为定义:支持各向同性硬化(塑性变形后屈服面均匀扩展)或随动硬化(屈服面平移,考虑包辛格效应)。通过LCSS输入实验数据,精确匹配材料真实应力-应变曲线。 四、Von Mises准则的“能力边界”4.1 优势:为什么成为金属仿真的首选?精度与效率平衡:对钢、铝等金属的屈服预测误差普遍小于5%,且计算效率高。全面性:考虑中间主应力影响,比Tresca准则更贴近实际。动态适应性:结合应变率模型,覆盖碰撞、冲击等高速场景。4.2 局限性:何时需要“更换裁判”?静水压力敏感材料:如泡沫、土壤,需切换至Drucker-Prager准则(MAT_63)。各向异性材料:如高强度轧制钢板,需Hill48准则(MAT_122)描述方向依赖性。极端加载条件:如超高速冲击(弹道侵彻),需Johnson-Cook模型(MAT_224)耦合温度效应。4.3 不同屈服准则的对比与选型准则理论核心适用场景碰撞案例Von Mises畸变能密度 各向同性金属(钢、铝) 车身结构碰撞、电池包防护 Tresca最大剪应力 简单剪切主导变形(螺栓剪切) 较少用于整车级仿真 Drucker-Prager静水压力修正 岩土、泡沫材料 电池包底部抗碎石冲击设计 Hill48各向异性屈服 轧制板材、复合材料 碳纤维车门防撞梁仿真 结语:在微观与宏观之间架起安全的桥梁从Richard von Mises的数学公式到LS-DYNA中的Mat24材料卡,从实验室的拉伸试样到碰撞试验场的整车变形,这对“黄金组合”始终守护着汽车安全设计的核心逻辑。无论是车身轻量化的极限挑战,还是电池安全的新战场,理解Von Mises准则与Mat24的配合机理,都是每一位碰撞仿真工程师的必修课。未经作者同意,不得转载该文!!!来源:檐苔

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