该函数可以通过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 openOdb
- from textRepr import prettyPrint
- from abaqusConstants import *
- file = r"W:\temp\Job-gzdemo.odb"
- o = openOdb(path = file)
- steps = o.steps
- # 根据step名称获取对应的step
- step = steps["Step-test"]
- # 假设我们只关心该step最后一个增量步的结果
- # 如果希望获得自定义结果随载荷步的变化,可以遍历frames
- f1 = step.frames[-1]
- # 获取目标instance,同理,可以使用遍历
- inst = o.rootAssembly.instances["PART-1-1"]
- labels = [] # 存放元素ID
- data = [] # 存放计算数据
- fop = f1.fieldOutputs
- f_S = fop["S"]
- es = inst.elements
- for 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))
复制代码通过addData方法可以将在分析结果的基础上计算得到的你所想要关注的指标写入Odb,进行后处理可视化。