【问题标题】:How to create a path and extract data from it using python?如何使用 python 创建路径并从中提取数据?
【发布时间】:2021-02-03 08:22:49
【问题描述】:

我正在 Abaqus 中执行由两个板的影响组成的模拟。假设模拟有 100 帧,我想要的是沿着特定帧的路径提取数据。我编写了这个 Python 脚本来从所有帧的所有节点中提取速度和 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*' ')

【问题讨论】:

    标签: python abaqus


    【解决方案1】:

    您是否将 odb 打开为可编辑?默认是只读的,你不能在里面保存一些东西,所以你的线路不会在那里。这就是为什么 abaqus 总是会告诉你本地输出只存储在当前会话中。

    还引用了您的代码 sn-p,您不能简单地使用名称,而必须在 odb 中创建集合,例如

    odb.rootAssembly.nodeSets['LINE_1']
    

    并在区域中使用此集合。 该集合必须存在于程序集中。

    【讨论】:

    • 这在技术上回答了这个问题。
    【解决方案2】:

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

    【讨论】:

    • 我明白你的意思,但我不知道该怎么做。在进行模拟时(在后处理之前),我创建了一个名为 LINE_1 的节点集。但是,当我想获取给定框架的该集合的坐标时,我使用了以下形式:resultCoord = steps1[6].fieldOutputs["COORD"].getSubset(region=LINE_1).values。它给了我一条错误消息,说 LINE_1 不存在。因此,我认为最好的方法是在python脚本中创建节点集或路径,然后提取数据。你知道怎么做吗?谢谢
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多