Export Beam Results
This code exports SMISC results beam connections in the model at all time steps. The results are written to a .CSV file inside user_files.
def after_post(this, solution):# Do not edit this line
import os
import wbjn
import time
#Provide the name of the CSV file
fileName = 'Beam_Forces_and_Moments.csv'
#Select Analysis by Id
#analysis = DataModel.AnalysisList[1]
analysis = solution.Parent
#Function to write a CSV file from the gathered data
def writeCSV(t1,fileName):
ExtAPI.Log.WriteMessage('my File name ' + fileName)
with open(fileName , 'w') as f:
for line in t1:
for col in line:
#For point as decimal symbol
#f.write(str(col) + ', ')
#For comma as decimal symbol
f.write(str(col).replace('.',',') + '; ')
f.write('\n')
#Find the user files directory for saving the data
UserFilesDir = wbjn.ExecuteCommand(ExtAPI,"returnValue(GetUserFilesDirectory())")
saveName = os.path.join(UserFilesDir,fileName)
first_solution = analysis.Solution
solver_data = first_solution.SolverData
allBeams = DataModel.GetObjectsByType(DataModelObjectCategory.Beam)
allBeamElements = []
allBeamData = []
allData = []
startTime = time.time()
for beam in allBeams:
beamData = solver_data.GetObjectData(beam)
beamMatid = beamData.MaterialId
beamElem = solver_data.ElementIdsByMaterialId(str(beamMatid))
allBeamElements.extend(beamElem)
allBeamData.append([beamMatid] + list(beamElem))
#allBeamData.append(list(beamElem))
import mech_dpf
import Ans.DataProcessing as dpf
dataSource = dpf.DataSources(analysis.Solution.ResultFilePath)
# Read mesh in results file
mesh_op = dpf.operators.mesh.mesh_provider()
mesh_op.inputs.data_sources.Connect(dataSource)
my_mesh = mesh_op.outputs.mesh.GetData()
#scoping
my_scoping = dpf.Scoping()
my_scoping.Location = "Elemental"
my_scoping.Ids = allBeamElements
timelist = dpf.operators.metadata.time_freq_provider(data_sources=dataSource).outputs.gettime_freq_support().TimeFreqs.Data
my_time_scoping = range(1, len(timelist)+1)
Fxi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 1,mesh_scoping=my_scoping).outputs.fields_container.GetData()
Fxj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 14,mesh_scoping=my_scoping).outputs.fields_container.GetData()
SFzi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 5,mesh_scoping=my_scoping).outputs.fields_container.GetData()
SFzj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 18,mesh_scoping=my_scoping).outputs.fields_container.GetData()
SFyi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 6,mesh_scoping=my_scoping).outputs.fields_container.GetData()
SFyj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 19,mesh_scoping=my_scoping).outputs.fields_container.GetData()
Myi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 2,mesh_scoping=my_scoping).outputs.fields_container.GetData()
Myj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 15,mesh_scoping=my_scoping).outputs.fields_container.GetData()
Mzi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 3,mesh_scoping=my_scoping).outputs.fields_container.GetData()
Mzj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 16,mesh_scoping=my_scoping).outputs.fields_container.GetData()
TQi = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 4,mesh_scoping=my_scoping).outputs.fields_container.GetData()
TQj = dpf.operators.result.smisc(time_scoping=my_time_scoping,data_sources=dataSource,item_index = 17,mesh_scoping=my_scoping).outputs.fields_container.GetData()
allData.append(["ID","Name","Time/Freq","FX_i","FX_j","SFz_i","SFz_j","SFy_i","SFy_j","My_i","My_j","Mz_i","Mz_j","TQ_i","TQ_j"])
if str(analysis.AnalysisType) == "Harmonic":
i = 0
for beam in allBeams:
t = 0
for setnum in range(0,len(timelist)*2,2):
beamMatid = allBeamData[i][0]
beamName = beam.Name
resultSetTime = timelist[t]
Fxi_beam = Fxi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Fxj_beam = Fxj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
SFzi_beam = SFzi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
SFzj_beam = SFzj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
SFyi_beam = SFyi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
SFyj_beam = SFyj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
Myi_beam = Myi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Myj_beam = Myj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
Mzi_beam = Mzi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Mzj_beam = Mzj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
TQi_beam = TQi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
TQj_beam = TQj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
allData.append([beamMatid, beamName, resultSetTime , Fxi_beam, Fxi_beam, SFzi_beam, SFzj_beam, SFyi_beam, SFyj_beam, Myi_beam, Myj_beam, Mzi_beam, Mzj_beam, TQi_beam, TQj_beam])
t += 1
i += 1
else:
i = 0
for beam in allBeams:
for setnum in range(len(timelist)):
beamMatid = allBeamData[i][0]
beamName = beam.Name
resultSetTime = timelist[setnum]
Fxi_beam = Fxi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Fxj_beam = Fxj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
SFzi_beam = SFzi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
SFzj_beam = SFzj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
SFyi_beam = SFyi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
SFyj_beam = SFyj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
Myi_beam = Myi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Myj_beam = Myj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
Mzi_beam = Mzi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
Mzj_beam = Mzj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
TQi_beam = TQi[setnum].GetEntityDataById(min(allBeamData[i][1:]))[0]
TQj_beam = TQj[setnum].GetEntityDataById(max(allBeamData[i][1:]))[0]
allData.append([beamMatid, beamName, resultSetTime , Fxi_beam, Fxi_beam, SFzi_beam, SFzj_beam, SFyi_beam, SFyj_beam, Myi_beam, Myj_beam, Mzi_beam, Mzj_beam, TQi_beam, TQj_beam])
i += 1
writeCSV(allData,saveName)