首页/文章/ 详情

ABAQUS odb数据解析系列文章---addData

1年前浏览1340

场变量内部方法addData简析


getSubset和addData这两个函数,可以说是Abaqus后处理二次开发的两个核心函数。getSubset函数在上一篇文章中已经详细介绍过,这篇文章将主要讲解addData函数的使用方法。

addData函数的主要功能,顾名思义即向Odb文件内写入数据的方法,在Abaqus帮助文档中可以找到该函数的简介,不过该简介过于简略,要想通过学习帮助文档相关内容达到可以使用该函数的目的,还是会走很多弯路的。

以下为基础代码,本文将只对最后一个增量步即frame添加数据,如果有的读者希望得到自定义数据随载荷步变化的情况,可以遍历所有frames,道理上是等同的:

    from odbAccess import openOdbfrom textRepr import prettyPrintfrom abaqusConstants import *file = r"W:\temp\Job-gzdemo.odb"o = openOdb(path = file)steps = o.steps#根据step名称获取对应的stepstep = steps["Step-test"]#假设我们只关心该step最后一个增量步的结果 f1 = step.frames[-1]
       


    既然要向Odb添加数据,那么为了维护数据结构,应新建一个FieldOutput用以存放数据,新建一个FieldOutput的函数位于frame内,上述代码的f1即可调用:

      # 使用FieldOutput创建一个fieldOutput,用于存放二次开发的结果 testf = f1.FieldOutput(name='testdata'                       description='this is a test',                        type=SCALAR)
         

      01

      FieldOutput

          该函数可以通过frame实例进行调用,以定义该frame下的场变量。

          必选参数:

      name:场变量名

      description:关于场变量的描述

      type:数据类型,abaqusConstant :SCALAR,VECTOR,TENSOR_3D_FULL,TENSOR_3D_PLANAR, TENSOR_3D_SURFACE, TENSOR_2D_PLANAR, and TENSOR_2D_SURFACE

           本文以最简单的标量数据进行介绍。

      02


      addData

          该方法用于向调用它的FieldOutput添加数据

          必选参数:

      position:通过abaqusConstant常量指定数据计算或存储的位置:

              NODAL,INTEGRATION_POINT,ELEMENT_NODAL,CENTROID

      instance:Abaqus装配体是以instance的形式进行组织了,其允许各个instance直接节点号相同,所以在此时需要指明是对哪一个instance进行操作,为后面的参数(labels)指定命名空间。

      labels:label的概念看起来像是Abaqus独有的概念,我觉得可以把它理解成节点或者单元的ID。该参数是一个整数(代表节点或单元或积分点或中心点)序列,是一个一维的元组。

      data:将被写入的数据。该参数是一个元素为元组的元组,如果对应的FieldOutput为标量,则子序列应为单元素元组。data的长度必须与labels等长,并且数据时一一对应的,要注意顺序问题。


      第2部分的正文内容从这里开始。

      03


      计算vonMises与MaxPrincipal的插值写入Odb


        from odbAccess import openOdbfrom textRepr import prettyPrintfrom abaqusConstants import *file = r"W:\temp\Job-gzdemo.odb"o = openOdb(path = file)steps = o.steps# 根据step名称获取对应的stepstep = steps["Step-test"]# 假设我们只关心该step最后一个增量步的结果# 如果希望获得自定义结果随载荷步的变化,可以遍历framesf1 = step.frames[-1]# 获取目标instance,同理,可以使用遍历inst = o.rootAssembly.instances["PART-1-1"] labels = [] # 存放元素IDdata = [] # 存放计算数据fop = f1.fieldOutputsf_S = fop["S"]es = inst.elementsfor i in es:    # 使用上一篇文章中介绍的getSubset方法获得单元素数据    fopSFormSet = f_S.getSubset(region=i)     for j in fopSFormSet.values:        maxMises = j.mises        maxPrincipal = j.maxPrincipal        vp = maxMises - maxPrincipal    labels.append(i.label)    data.append((vp,))# 使用FieldOutput创建一个fieldOutput,用于存放二次开发的结果testf = f1.FieldOutput(name='v_sub_p',                        description='vonMises subtract MaxPrincipal',                        type=SCALAR)testf.addData(position=CENTROID,               instance=inst,               labels=tuple(labels),               data=tuple(data))
           

        04


        总结


            通过addData方法可以将在分析结果的基础上计算得到的你所想要关注的指标写入Odb,进行后处理可视化。

        来源:SimCoder
        Abaqus二次开发
        著作权归作者所有,欢迎分享,未经许可,不得转载
        首次发布时间:2023-02-02
        最近编辑:1年前
        签我的导演他姓张
        本科 怕什么真理无穷进一寸有一寸欣喜
        获赞 50粉丝 47文章 44课程 0
        点赞
        收藏
        未登录
        1条评论
        偷影子的人
        签名征集中
        2月前
        您好,有一点关于adddata的问题,可否有偿向您请教一下,手机号:15608001292,如果方便是否可以加一下呢
        回复
        课程
        培训
        服务
        行家
        VIP会员 学习 福利任务 兑换礼品
        下载APP
        联系我们
        帮助与反馈