以下是全部python代码,因为导入到abaqus中时,代码中出现中文后会出现报错(即使在注释内也会)。
代码块
Python
自动换行
复制代码
import numpy
from abaqusConstants import *
import odbAccess
import csv
import os
def odb_data_of_select_frame(odbpath,csv_path,TransformPath,SelectFrame,Path_Name,Path_Node,Outputdata):
# open
o1 = session.openOdb(name=odbpath)
path = session.Path(name=Path_Name, type=NODE_LIST, expression=(('PART-1-1', (Path_Node,)),))
data_dict = {}
#select output data
if Outputdata == 's11':
s11 = session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='S',
outputPosition=INTEGRATION_POINT,
refinement=(COMPONENT, 'S11'), )
elif Outputdata == 's22':
s22 = session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='S',
outputPosition=INTEGRATION_POINT,
refinement=(COMPONENT, 'S22'), )
elif Outputdata == 'sm':
sMises = session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='S',
outputPosition=INTEGRATION_POINT,
refinement=(INVARIANT, 'Mises'))
elif Outputdata == 'cfm':
cfm = session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='CF', outputPosition=NODAL,
refinement=(INVARIANT, 'Magnitude'), )
elif Outputdata == 'cf3':
cf3 = session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='CF', outputPosition=NODAL,
refinement=(COMPONENT, 'CF3'), )
#Generate data and write it to data_dict
for i in range(0, len(SelectFrame), 1):
# name
XY_DateName = 'Frame' + str(SelectFrame[i])
# select Frame
session.viewports['Viewport: 1'].odbDisplay.setFrame(step=0, frame=SelectFrame[i])
# Data
pth = session.paths[Path_Name] # path name
session.XYDataFromPath(name=XY_DateName, path=pth, includeIntersections=False,
projectOntoMesh=False, pathStyle=PATH_POINTS, numIntervals=10,
projectionTolerance=0, shape=DEFORMED, labelType=TRUE_DISTANCE,
removeDuplicateXYPairs=True, includeAllElements=False)
xy = session.xyDataObjects[XY_DateName]
data_dict[XY_DateName] = xy
# Write data to CSV, each dataset as a separate column
f = open(csv_path, "w", )
for i in range(0, len(SelectFrame), 1):
XY_Name = 'Frame' + str(SelectFrame[i])
if i == 0:
for j in range(0, len(data_dict[XY_Name]), 1):
f.write(str(data_dict[XY_Name][i][0]) + ',')
f.write('\n')
for j in range(0, len(data_dict[XY_Name]), 1):
f.write(str(data_dict[XY_Name][i][1]) + ',')
f.write('\n')
elif i == len(data_dict):
for z in range(0, len(data_dict[XY_Name]), 1):
f.write(str(data_dict[XY_Name][i][1]) + ',')
else:
for z in range(0, len(data_dict[XY_Name]), 1):
f.write(str(data_dict[XY_Name][i][1]) + ',')
f.write('\n')
f.close()
with open(csv_path, 'rb') as infile:
reader = csv.reader(infile)
data = list(reader)
# transform
transposed_data = zip(*data)
# output
with open(TransformPath, 'wb') as outfile:
writer = csv.writer(outfile)
for row in transposed_data:
writer.writerow(row)
# delect
for i in range(0, len(SelectFrame), 1):
DelectName = 'Frame' + str(SelectFrame[i])
del session.xyDataObjects[DelectName]
del session.paths[Path_Name]
# Delete the redundant files and obtain the target file
os.remove(csv_path)
os.rename(TransformPath, csv_path)
#Modify the variables as required
OutputFileName = 'bottom'#This is output csv name.
odbname = 'YourFile.odb'
FilePath = 'F:/Progressive_collapse_behaviour/obd/'#modify to your path
SelectFrame = [12,435,233,423]#target frame
Path_Node = '42175:42225:1'#create path
Outputdata = 's11'
# Don't modify the following variables
Path_Name = 'P2'
TransformName = OutputFileName+'TT'
odbpath = FilePath + odbname
csv_path = FilePath + 'output/' + OutputFileName + '.csv'
TransformPath = FilePath + 'output/' + TransformName + '.csv'
#run
odb_data_of_select_frame(odbpath,csv_path,TransformPath,SelectFrame,Path_Name,Path_Node,Outputdata)
复制成功
程序会在odb所在的文件中,生成一个output文件夹,输出的csv文件在里面。

通过运行脚本来启动代码

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删