我正在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?默认设置为只读,您无法在其中保存内容,因此您的行将不在其中。这就是为什么abaqus总是告诉您本地输出只存储在当前会话中
此外,在代码片段上,您不能简单地使用名称,而必须在odb中创建集合,例如
并在区域中使用此集合。 集合必须存在于组件中
对!!将
odb
打开为可编辑,创建感兴趣的路径并将其保存在odb中。使用脚本使用创建的路径读取感兴趣的变量。查看文档中的Viewing results along a path
以创建路径并获得xy结果相关问题 更多 >
编程相关推荐