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)