为了反映一个新的计算变量,比如说,'SF-1',对于从 excel sheet 到 ABAQUS 模型可视化等高线图上的节点的每个节点。
To reflect a new calculated variable,say, 'SF-1', for each nodes from excel sheet, to nodes on ABAQUS model visualisation contour plot.?
让我向您解释一下我的任务,然后我会问您是否可以在 ABAQUS 中这样做。 ABAQUS是一款仿真软件工具,适用于python环境
请假设我正在对滑轮(或圆柱体)进行模拟,单步作为外表面上的负载。
我在滑轮的选定表面上的每个节点收集必要的应力值(S22、von mises 等)。
我还收集了该节点的圆柱坐标。现在,我使用应力值(最大主应力、最小主应力、S22 等)在 excel 中进行一些计算,并 找出每个节点的安全系数。
所以,对于每个节点,我都有一个名为 SF(安全系数)的新变量。
我将使用 ABAQUS PYHTON 的 CSV 模块在内核命令行界面中显示此 SF 值。
希望你明白我解释的内容,如果你有什么不明白的地方,请随时问我。
一旦我在内核命令行界面中反映了 CSV 值,我有兴趣在 Pulley 的可视化模块中的各个节点上显示这个 SF 值。
我很想知道你们能否对此有所了解,因为在此之后我该如何进行?我能够在命令行中打印包含坐标和安全系数的表格值。
如果可能的话,我将非常感谢你们的解决方案?如果不是,请告诉我什么是替代解决方案。
示例 table 在 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
[['节点; ; ; ;顺丰],
['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
要在 Abaqus 中可视化数据,您需要在输出数据库中创建一个新的字段输出对象。该对象只能在框架内创建。因此,由于ODB结构,你需要:
- 创建一个新的步骤对象或选择一个现有的步骤对象
- 创建新的框架对象或使用步骤中已有的框架对象
- 创建一个新的字段输出对象
- 向字段输出对象添加数据
所有这些都可以使用 Abaqus Python 脚本界面创建。
在下面的代码中,我假设 table
已经定义并填充了来自 CSV 的 table。
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()
让我向您解释一下我的任务,然后我会问您是否可以在 ABAQUS 中这样做。 ABAQUS是一款仿真软件工具,适用于python环境
请假设我正在对滑轮(或圆柱体)进行模拟,单步作为外表面上的负载。
我在滑轮的选定表面上的每个节点收集必要的应力值(S22、von mises 等)。
我还收集了该节点的圆柱坐标。现在,我使用应力值(最大主应力、最小主应力、S22 等)在 excel 中进行一些计算,并 找出每个节点的安全系数。
所以,对于每个节点,我都有一个名为 SF(安全系数)的新变量。 我将使用 ABAQUS PYHTON 的 CSV 模块在内核命令行界面中显示此 SF 值。
希望你明白我解释的内容,如果你有什么不明白的地方,请随时问我。
一旦我在内核命令行界面中反映了 CSV 值,我有兴趣在 Pulley 的可视化模块中的各个节点上显示这个 SF 值。
我很想知道你们能否对此有所了解,因为在此之后我该如何进行?我能够在命令行中打印包含坐标和安全系数的表格值。
如果可能的话,我将非常感谢你们的解决方案?如果不是,请告诉我什么是替代解决方案。 示例 table 在 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
[['节点; ; ; ;顺丰],
['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
要在 Abaqus 中可视化数据,您需要在输出数据库中创建一个新的字段输出对象。该对象只能在框架内创建。因此,由于ODB结构,你需要:
- 创建一个新的步骤对象或选择一个现有的步骤对象
- 创建新的框架对象或使用步骤中已有的框架对象
- 创建一个新的字段输出对象
- 向字段输出对象添加数据
所有这些都可以使用 Abaqus Python 脚本界面创建。
在下面的代码中,我假设 table
已经定义并填充了来自 CSV 的 table。
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()