//  [python]
def plot_results(self, file_name):
        import matplotlib.pyplot as plt
        ribs, shell_thick, max_stress, max_disp, weight = self.read_data_file(file_name, use_abaqus=True)
        # max_stress = max_stress_fixed
        n_rib = len(ribs)
        n_thick = len(shell_thick)
        opti_ribs = []
        opti_shell = []
        opti_weight = []
        rib_mat, shell_mat = np.meshgrid(ribs, shell_thick)
        # interpol weight
        f_weight = interpolate.interp2d(rib_mat, shell_mat, weight, kind='linear')

        plot1 = PlotHelper(['ribs', 'max stress'])
        for i in range(0, len(shell_thick)):
            stress = max_stress[i]
            # if np.min(stress) < max_shear_strength and np.max(stress) > max_shear_strength:
            #   optRibs = np.interp(max_shear_strength, stress, ribs)
            #   f = interp1d(stress, ribs, kind='linear')
            #   plot1.ax.plot([f(max_shear_strength)], [max_shear_strength], 'go')
            #   opti_ribs.append(f(max_shear_strength))
            #   opti_shell.append(shellThick[i])
            plot1.ax.plot(ribs, max_stress[i], label='shell= {:03f}'.format(shell_thick[i]))
        plot1.ax.plot(ribs, np.full((len(ribs), 1), max_shear_strength), 'r--', label='Limit-Load')
        plot1.finalize(legendNcol=2, tighten_layout=False)
        # plot1.show()

        plot2 = PlotHelper(['shellthickness in mm', 'max stress'])
        for i in range(0, len(ribs)):
            stress = max_stress[:, i]
            plot2.ax.plot(shell_thick, stress, label='ribs= {:f}'.format(ribs[i]))
            if np.min(stress) < max_shear_strength and np.max(stress) > max_shear_strength:
                # optRibs = np.interp(max_shear_strength, stress, ribs)
                f = interp1d(stress, shell_thick, kind='linear')
                plot2.ax.plot([f(max_shear_strength)], [max_shear_strength], 'go')
                opti_ribs.append(ribs[i])
                opti_shell.append(f(max_shear_strength))
                opti_weight.append(f_weight(ribs[i], f(max_shear_strength))[0])
        plot2.ax.plot(shell_thick, np.full((len(shell_thick), 1), max_shear_strength), 'r--', label='Limit-Load')
        # plot2.ax.set_xlim((min([x * 1000 for x in shellThick]), max([x * 1000 for x in shellThick])))

        plot2.finalize(legendNcol=2)
        plot2.show()

        opti_min_index = opti_weight.index(min(opti_weight))
        print('opt wight {:03f}'.format(opti_weight[opti_min_index]))
        print('@ {:00f} ribs'.format(opti_ribs[opti_min_index]))
        print('@ {:05f} shell-thickness'.format(opti_shell[opti_min_index]))

        plot3d = PlotHelper(['ribs', 'shell thickness in m', 'mises stress'])
        max_stress[max_stress > 1.2 * max_shear_strength] = np.nan
        color_map = plt.cm.jet(weight / np.max(weight))
        surf = plot3d.ax.plot_surface(rib_mat, shell_mat, max_stress, facecolors=color_map,
                                      cstride=1,
                                      rstride=1)
        optiLine = plot3d.ax.plot(opti_ribs, opti_shell, max_shear_strength, 'k--', label='Limit-Load')
        optiPoint = plot3d.ax.plot([opti_ribs[opti_min_index]], [opti_shell[opti_min_index]], max_shear_strength, 'ro',
                                   label='glob. optimum')
        m = cm.ScalarMappable(cmap=cm.jet)
        m.set_array(weight)
        cbar = plt.colorbar(m)
        cbar.set_label('structure weight in kg', rotation=270)
        limit = np.full((n_thick, n_rib), max_shear_strength)
        plot3d.ax.plot_wireframe(rib_mat, shell_mat, limit, color='r', alpha=0.1)
        plot3d.ax.set_zlim3d(0, max_shear_strength)
        plot3d.finalize()
        plot3d.show()