def plot_forces(self, gui=False, put_in_Excel=True, open_Excel=False): import desicos.abaqus.utils as utils sheet_names = ['load_short_curves','load_short_curves_norm'] x_labels = ['End-Shortening, mm', 'Normalized End-Shortening'] y_labels = ['Reaction Load, kN' , 'Normalized Reaction Load'] for curve_num in range(2): curves = [] names = [] for cc in self.ccs: ok = cc.read_outputs() if not ok: continue curve = cc.plot_forces(gui=gui)[curve_num] curves.append(curve) names.append(cc.model_name) if put_in_Excel: sheet_name = sheet_names[curve_num] book, sheet = utils.get_book_sheet(self.excel_name, sheet_name) for i,curve in enumerate(curves): sheet.write(0, 0 + i*2, names[i]) sheet.write(1, 0 + i*2, x_labels[curve_num]) sheet.write(1, 1 + i*2, y_labels[curve_num]) for j, xy in enumerate(curve): sheet.write(j+2, 0 + i*2, xy[0]) sheet.write(j+2, 1 + i*2, xy[1]) book.save(self.excel_name) del book if put_in_Excel and open_Excel: self.open_excel()
def plot(self, configure_session = False, gui = False, put_in_Excel = True, open_Excel = False, global_second = False): import desicos.abaqus.utils as utils import abaqus_functions for cc in self.ccs: cc.outputs_ok = cc.read_outputs() laminate_t = sum(t for t in self.ccs[0].plyts) session = __main__.session numcharts = 4 if self.calc_Pcr == False: calc_Pcr = False numcharts = 2 start = 0 else: calc_Pcr = True pcr_kN = 0.001*self.ccs[0].zload[0] start = 1 curves_dict = {} limit = len(self.ccs[start].impconf.imperfections) for i in range(limit): imp_ref = self.ccs[start].impconf.imperfections[i] if not any(cc.impconf.imperfections[i] for cc in self.ccs[start:]): warn("imperfection '{0}' is zero for all ConeCyl objects, skipping...".format( imp_ref.name)) continue xaxis_label = imp_ref.xaxis_label for pre in ['fb','gb']: curve = [] curve_amp = [] for cc in self.ccs[start:]: # if cc.check_completed() and cc.outputs_ok: if pre == 'fb': b_load = utils.find_fb_load(cc.zload) else: b_load = max(cc.zload) if i < len(cc.impconf.imperfections): imp = cc.impconf.imperfections[i] imp_xaxis = getattr(imp, imp.xaxis) amplitude = imp.calc_amplitude() else: imp_xaxis = getattr(imp_ref, imp_ref.xaxis) amplitude = 0. # curve.append((imp_xaxis, 0.001 * b_load)) curve_amp.append((amplitude, 0.001 * b_load)) elif not cc.outputs_ok: warn('error in {0}.odb, skipping...'.format( cc.model_name)) # # sorting curves curve.sort(key = lambda x: x[0]) curve_amp.sort(key = lambda x: x[0]) # # yaxis_label = 'Reaction Load, kN' name = '{0}_imp_{1:02d}_KD_curve_{2}'.format(self.name, i, pre) curves_dict[name] = [xaxis_label, yaxis_label, curve] session.XYData( name = name, data = curve, xValuesLabel = xaxis_label, yValuesLabel = yaxis_label, legendLabel = imp_ref.name) name = '{0}_imp_{1:02d}_KD_curve_{2}_amplitude'.format( self.name, i, pre) curves_dict[name] = ['Imperfection amplitude, mm', yaxis_label, curve_amp] session.XYData(name=name, data=curve_amp, xValuesLabel='Imperfection amplitude, mm', yValuesLabel=yaxis_label, legendLabel=imp_ref.name,) if calc_Pcr: yaxis_label = 'Knock-Down Factor (P/Pcr)' name = '{0}_imp_{1:02d}_norm_KD_curve_{2}'.format( self.name, i, pre) norm_curve = np.array(curve) norm_curve[:,1] /= pcr_kN curves_dict[name] = [xaxis_label, yaxis_label, norm_curve] session.XYData(name=name, data=norm_curve, xValuesLabel=xaxis_label, yValuesLabel=yaxis_label, legendLabel=imp_ref.name) name = ('{0}_imp_{1:02d}_norm_KD_curve_{2}_amplitude'. format(self.name, i, pre)) norm_curve_amp = np.array(curve_amp) norm_curve_amp[:,0] /= laminate_t norm_curve_amp[:,1] /= pcr_kN curves_dict[name] = ['Imperfection amplitude / laminate thickness', yaxis_label, norm_curve_amp] session.XYData(name=name, data=norm_curve_amp, xValuesLabel='Imperfection amplitude / laminate thickness', yValuesLabel=yaxis_label, legendLabel=imp_ref.name) if configure_session: abaqus_functions.configure_session(session=session) if put_in_Excel: sheet_name = 'kd_curves' keys = curves_dict.keys() keys.sort() book, sheet = utils.get_book_sheet(self.excel_name, sheet_name) for i, name in enumerate(keys): value = curves_dict[name] xaxis_label = value[0] yaxis_label = value[1] curve = value[2] sheet.write(0,0 + i*2, name) sheet.write(1,0 + i*2, xaxis_label) sheet.write(1,1 + i*2, yaxis_label) for j, xy in enumerate(curve): sheet.write(j+2,0 + i*2,xy[0]) sheet.write(j+2,1 + i*2,xy[1]) book.save(self.excel_name) del book if open_Excel: self.open_excel() self.kd_curves = curves_dict