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

2024-03-29 06:41:18 发布

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

我正在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*' ')


Tags: 数据inimportfortimeossetvelocity
2条回答

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

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

odb.rootAssembly.nodeSets['LINE_1']

并在区域中使用此集合。 集合必须存在于组件中

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

相关问题 更多 >