Example #1
0
    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()
Example #2
0
    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