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

2024-04-29 03:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用abaqus-ython脚本来提取节点坐标。 为此,我首先提取原始节点位置,然后添加位移值。在

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

我不知道这是怎么发生的,为什么会这样。 有人能帮帮我吗? 你可以在下面找到我的代码。在

    for ODBname in os.listdir("D:/r0333338/Documents/MP/nodal_files_genereren/OBD"): # directory van waar alle .odb bestanden zitten, hier worden ze allemaal 
    print 'Current File: '+ODBname #checken welke file er gebruikt wordt
    ODBnamefull = 'D:/r0333338/Documents/MP/nodal_files_genereren/OBD/'+ODBname   # Volledig pad naar de .odb file. ander wordt de file in de default work directory gezocht.
    odb = openOdb(path=ODBnamefull)  #openen van het ODB bestand

    ODBalleenNaam = ODBname.rstrip('.odb') #om .odb weg te knippen
    NodalName = ODBalleenNaam + '-nodal.txt' #naam ven het te schrijven bestand

    for name, instance in odb.rootAssembly.instances.items(): #'name' is naam van elke part van in de assembly, zo kan de nodal coordinaten van het onvervormde testobject (part) achterhaald worden
        print name
        type(name)
        name2 = 'DISK-1'
        if name == name2:

            numNodesTotal = len( instance.nodes ) #aantal nodes

            frame = odb.steps[ 'Step-1' ].frames[-1]  #informatie van de laatste frame van Step-1 gebruiken

            dispField = frame.fieldOutputs['U']  #verplaatsingsveld van laatste frame van step-1


            print 'total numer of nodes: '+ str(numNodesTotal)    #checken hoeveel nodes er zijn

            for i in range( numNodesTotal ):   #voor elke node :
                curNode = instance.nodes[i]  #informatie van de huidige node
                #print curNode.label          #nummer van de huidige node

                #2D verplaatsing omzetten naar 3D verplaatsing
                U1 = dispField.values[i].data[0]       #X-verplaatsing aan U1 geven
                U2 = dispField.values[i].data[1]       #Y-verplaatsing aan U2 geven
                array = []                             #maken van een lege array voor invullen van de coordinaten
                array.append(U1)                       #X-verplaatsing toevoegen
                array.append(U2)                       #Y-verplaatsing toevoegen
                array.append(0)                        #Z-verplaatsing toevoegen
                print 'node: '
                print curNode.label
                print 'displacement: '
                print array #checken van 3D verplaatsing
                print 'coordinates: '
                print curNode.coordinates

            odb.close()
        else:
            print 'name is not DISK-1 but: ' + str(name)

Abaqus displacement

python extracted displacement


Tags: nameinnodedearrayvanframenodes
2条回答

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

     curNodeLabel=dispField.values[i].nodeLabel

然后,您需要使用它来获取节点:

^{pr2}$

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

为了保持一致性,我进一步创建for循环:

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

不管标题是什么,我假设你想要的是最终的坐标,而不是位移。正如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

相关问题 更多 >