如何使用python创建路径并从中提取数据?

如何使用python创建路径并从中提取数据?,python,abaqus,Python,Abaqus,我正在Abaqus中进行模拟,包括两个板块的撞击。假设模拟有100帧,我想要的是沿着特定帧的路径提取数据。我编写这个Python脚本是为了从所有帧的所有节点提取velocity和mises数据(txt文件非常庞大),但我只想在给定帧的一组节点上执行此操作。有人知道如何创建节点集或路径,然后沿着该集或路径提取特定帧的数据吗 从abaqus导出数据的脚本: import time import numpy as np from numpy import savetxt import math fro

我正在Abaqus中进行模拟,包括两个板块的撞击。假设模拟有100帧,我想要的是沿着特定帧的路径提取数据。我编写这个Python脚本是为了从所有帧的所有节点提取velocity和mises数据(txt文件非常庞大),但我只想在给定帧的一组节点上执行此操作。有人知道如何创建节点集或路径,然后沿着该集或路径提取特定帧的数据吗

从abaqus导出数据的脚本:

import time
import numpy as np
from numpy import savetxt
import math
from odbAccess import *
from textRepr import *
import os, sys
#import matplotlib.pyplot

start_time = time.time()
path = (os.getcwd())
odbName = '%s/Job-1.odb'%path
odb = openOdb(odbName, readOnly=True)
myAssembly = odb.rootAssembly.instances['FIXED-1']
newpath = 'results'
if not os.path.exists(newpath):
    os.makedirs(newpath)
steps1 = odb.steps['Step-1'].frames
currentframe1 = []

for c_elem in range(len(steps1)):
    currentframe1 = steps1[c_elem]
    mises = []
    velocity = []
    strain = []
    displacement = []
    fieldvalues_mises = currentframe1.fieldOutputs['S']
    fieldvalues_velocity = currentframe1.fieldOutputs['V']
    fieldvalues_displacement = currentframe1.fieldOutputs['U']
    fieldvalues_strain = currentframe1.fieldOutputs['LE']
    vel_set = fieldvalues_velocity.values
    disp_set = fieldvalues_displacement.values
    mises_set = fieldvalues_mises.values
    strain_set = fieldvalues_strain.values
    for v in vel_set:
        velocity.append(v.data)
    for s in strain_set:
        strain.append(s.data)
    for m in mises_set:
        mises.append(m.data)
    for d in disp_set:
        displacement.append(d.data)

# Vector of frames
vector_frame = c_elem*[1]

with open('velocityFile.txt', 'w') as f:
    for i in range(1,len(vector_frame)+1):
        f.write('\n\n')
        for j in velocity:
            f.write(str(j) + 3*' ')
        

with open('misesFile.txt', 'w') as f:
    for i in range(1,len(vector_frame)+1):
        f.write('\n\n')
        for j in mises:
            f.write(str(j) + 3*' ')


对!!打开可编辑的
odb
,创建感兴趣的路径并将其保存在odb中。使用脚本使用创建的路径读取感兴趣的变量。查看路径创建和获取xy结果文档中沿路径查看结果的

是否以可编辑状态打开odb?默认设置为只读,您无法在其中保存内容,因此您的行将不在其中。这就是为什么abaqus总是告诉您本地输出只存储在当前会话中

此外,在代码片段上,您不能简单地使用名称,而必须在odb中创建集合,例如

odb.rootAssembly.nodeSets['LINE_1']
并在区域中使用此集合。
集合中必须有集合。

我理解你的意思,但我不知道怎么做。在进行模拟时(在后处理之前),我创建了一个名为LINE_1的节点集。但是,当我想要获取给定帧的该集合的坐标时,我使用了以下形式:resultcord=steps1[6]。fieldOutputs[“COORD”].getSubset(region=LINE_1)。value。它给了我一条错误消息,说行_1不存在。因此,我认为最好的方法是在python脚本中创建节点集或路径,然后提取数据。你知道怎么做吗?谢谢这并不能回答这个问题。一旦你有足够的钱,你将能够;相反这从技术上回答了这个问题。