abaqus python,为什么提取的位移值不同?

时间:2018-01-09 11:44:18

标签: python abaqus

我正在尝试使用abaqus-ython脚本来提取节点坐标。 在这样做时,我首先提取原始节点位置,然后添加位移值。

但是对于我的一个abaqus模型,我注意到我提取的位移值与我在abaqus中找到的位移值不同(见附图)

我不知道这是怎么发生的。 有人可以帮助我吗? 你可以在下面找到我的代码。

=IFERROR(QUERY(UniqueLast!$A$3:X;"select * where dateDiff(A, now())=0"))

Abaqus displacement

python extracted displacement

2 个答案:

答案 0 :(得分:1)

您应该直接从字段数据中提取节点标签:

     curNodeLabel=dispField.values[i].nodeLabel

然后你需要用它来获取节点:

     curNode=instance.getNodeFromLabel(curNodeLabel)

不要假设节点索引与字段数据索引相同。

为了保持一致性,我要进行for循环:

 for i in range( len(dispField.values)  ):

答案 1 :(得分:0)

尽管有标题,我假设您想要最终坐标而不是位移。正如Daniel F所提到的,你应该添加COORDS作为字段输出。在这种情况下,下面的代码应该是有用的。

def findCoordSet(OdbName,StepName,InstanceName,SetName):
    """
    This ODB reading script does the following:
    -Retrieves coordinates at SetName
    """
    Coordinates={'x':[],'y':[]}
    # Open the output database.
    odbName = OdbName + '.odb'

    odb = visualization.openOdb(odbName)
    lastFrame = odb.steps[StepName].frames[-1]

    coordset = odb.rootAssembly.instances[InstanceName.upper()].nodeSets[SetName.upper()]

    # Retrieve Y-displacements at the splines/connectors
    dispField = lastFrame.fieldOutputs['COORD']

    dFieldpTip = dispField.getSubset(region=coordset)

    for i in range(len(dFieldpTip.values)):
        Coordinates['x'].append(dFieldpTip.values[i].data[0])
        Coordinates['y'].append(dFieldpTip.values[i].data[1])
    odb.close()

    return Coordinates