为了从excel表格的每个节点到ABAQUS模型可视化轮廓图上的节点,反映一个新的计算变量,例如SF-1。

时间:2018-07-06 08:26:36

标签: python excel abaqus

让我向您解释我的任务,我会问您是否可以在ABAQUS中这样做。 ABAQUS是一种用于仿真的软件工具,可在 python 环境下使用。

请,假设我要在滑轮(或圆柱实体)上执行模拟,而外表面上的载荷只有一步。

我在选定滑轮表面上的每个节点上收集必要的应力值(S22,冯·米斯等)。

我还收集了该节点的圆柱坐标。现在,我在Excel中使用应力值(最大主应力,最小主应力,S22等)和找出每个节点的安全系数进行了一些计算。

因此,我为每个节点有了一个名为SF(安全系数)的新变量。 我将使用ABAQUS PYHTON的CSV模块在内核命令行界面中显示此SF值。

希望您能理解我的解释,请随时询问我是否不明白任何一点。

一旦我在内核命令行界面中反映了CSV值,我有兴趣在滑轮可视化模块的各个节点上显示此SF值。

我希望你们能对此有所了解,因为在此之后我该如何进行?我能够在命令行中打印包含坐标和安全系数的表格值。

如果可能,我将非常感谢你们为您提供的解决方案?如果没有,请告诉我什么是替代解决方案。 样品表在excel中是这样的

Node      R       T        Z         SF

27       30,7    0,00     -15,4     1

4970     30,7   0,07      -15,4     1

4971     30,7   0,13      -15,4     1

4973     30    0,27       -15,4     1.3

在内核命令行界面中使用代码对输出进行采样。

import csv
import pprint
infile=open(filename,'r') 
table = [row for row in csv.reader(infile,delimiter=' ')]
pprint.pprint(table)

Output

[['Node; R; T; Z; SF],

['20,7; 30,7; 0分-15,4; 1],

[4970; 30,7; 0,07; -15,4; 1],

['4971,; 30,7; 0,13; -15,4; 1],

['4975; 30; 0.40; -15,4; 1.3],]

非常感谢您的时间和耐心。

问候,

Alluri Sai Preetham Reddy +33755735057

1 个答案:

答案 0 :(得分:2)

要可视化Abaqus中的数据,您需要在输出数据库中创建一个新的字段输出对象。该对象只能在框架内创建。因此,由于ODB结构的原因,您需要:

  • 创建一个新的步骤对象或选择一个现有的对象
  • 创建一个新的框架对象或已在步骤中使用一个框架
  • 创建一个新的字段输出对象
  • 将数据添加到字段输出对象

所有这些都可以使用Abaqus Python脚本界面创建。

在下面的代码中,我假设已经定义并填充了table,其中包含来自CSV的表格。

import odbAccess
from abaqusConstants import NODAL, SCALAR

import numpy as np

odb = odbAccess.openOdb(path='pathToYourOdbContainingResults', readOnly=False)

# In case you run the script multiple times, the step will already be there
if odb.steps.has_key('Step-SF'):
    step = odb.steps['Step-SF']
else:
    step = odb.Step(name='Step-SF', description='Step containing SF values.')

frame = step.Frame(incrementNumber=0, frameValue=1.0, description='SF Frame')
fo = frame.FieldOutput(name='SF', description='Safety factor', type=SCALAR)

# Data being added to a field output must be stored in a contiguous piece of
# memory, which is not something pure Python lists can guarantee
labels = np.array([row[0] for row in table], dtype=np.int32)
values = np.array([row[4] for row in table], dtype=np.float32)

fo.addData(position=NODAL, instance='nameOfInstanceHoldingTheResults', labels=labels,
           data=[[value] for value in values])

odb.save()

# Closing is necessary because the newly created steps, frames, and field 
# outputs are not visible before the ODB is re-opened
odb.close()