Что я хочу: значения деформации LE11, LE22, LE12 в узловых точках
Мой сценарий:
#!/usr/local/bin/python
# coding: latin-1
# making the ODB commands available to the script
from odbAccess import*
import sys
import csv
odbPath = "my *.odb path"
odb = openOdb(path=odbPath)
assembly = odb.rootAssembly
# count the number of frames
NumofFrames = 0
for v in odb.steps["Step-1"].frames:
NumofFrames = NumofFrames + 1
# create a variable that refers to the reference (undeformed) frame
refFrame = odb.steps["Step-1"].frames[0]
# create a variable that refers to the node set ‘Region Of Interest (ROI)’
ROINodeSet = odb.rootAssembly.nodeSets["ROI"]
# create a variable that refers to the reference coordinate ‘REFCOORD’
refCoordinates = refFrame.fieldOutputs["COORD"]
# create a variable that refers to the coordinates of the node
# set in the test frame of the step
ROIrefCoords = refCoordinates.getSubset(region=ROINodeSet,position= NODAL)
# count the number of nodes
NumofNodes =0
for v in ROIrefCoords.values:
NumofNodes = NumofNodes +1
# looping over all the frames in the step
for i1 in range(NumofFrames):
# create a variable that refers to the current frame
currFrame = odb.steps["Step-1"].frames[i1+1]
# looping over all the frames in the step
for i1 in range(NumofFrames):
# create a variable that refers to the strain 'LE'
Str = currFrame.fieldOutputs["LE"]
ROIStr = Str.getSubset(region=ROINodeSet, position= NODAL)
# initialize list
list = [[]]
# loop over all the nodes in each frame
for i2 in range(NumofNodes):
strain = ROIStr.values [i2]
list.insert(i2,[str(strain.dataDouble[0])+";"+str(strain.dataDouble[1])+\
";"+str(strain.dataDouble[3]))
# write the list in a new *.csv file (code not included for brevity)
odb.close()
Я получаю сообщение об ошибке:
напряжения = ROIStr.values [i2]
IndexError: Индекс последовательности вне допустимого диапазона
Дополнительная информация:
Подробная информация о ROIStr:
ROIStr.name
'LE'
ROIStr.type
TENSOR_3D_FULL
OIStr.description
'Логарифмические компоненты деформации'
ROIStr.componentLabels
('LE11', 'LE22' , 'LE33', 'LE12', 'LE13', 'LE23')
ROIStr.getattribute
'getattribute of openOdb(r'путь к .odb').steps['Шаг-1' ].frames[1].fieldOutputs['LE'].getSubset(position=INTEGRATION_POINT, region=openOdb(r'путь к.odb').rootAssembly.nodeSets['ROI'])'
Когда я использую один и тот же код для объектов VECTOR, например 'U' для узлового смещения или 'COORD' для узловых координат, все работает без проблем.
Ошибка возникает в первом цикле. Таким образом, это не тот случай, когда он выполняет несколько циклов, прежде чем произойдет ошибка.
Вопрос. Кто-нибудь знает, что вызывает ошибку в приведенном выше коде?
NumofFrames = 0 for v in odb.steps["Step-1"].frames: NumofFrames = NumofFrames + 1
можно сократить доNumofFrames = len(odb.steps["Step-1"].frames)
. - person David   schedule 08.08.2017strain = ROIStr.values[0]
, где индекс0
жестко запрограммирован. - person Matt P   schedule 08.08.2017ELEMENT_NODAL
- person David   schedule 09.08.2017