poles are colored according using IPF coloring and resized proportionally to each grain volume. """ # create a microstructure with a random texture and 200 grains micro = Microstructure.random_texture(n=200) micro.autodelete = True # set random values for the grain volumes np.random.seed(22) for g in micro.grains: g['volume'] = 100 * np.random.random()**3 g.update() micro.grains.flush() # first pole figure pf = PoleFigure(microstructure=micro) pf.resize_markers = True pf.set_hkl_poles('001') pf.axis = 'Z' pf.set_map_field('ipf') pf.plot_pole_figures(plot_sst=True, display=False, save_as='png') del pf del micro image_name = os.path.splitext(__file__)[0] + '.png' print('writing %s' % image_name) from matplotlib import image image.thumbnail(image_name, 'thumb_' + image_name, 0.2)
A PoleFigure object is then created using this microstructure and the pole figures (both direct and inverse) are drawn by calling the plot_pole_figures() method. ''' micro = Microstructure(name='Au_6grains', overwrite_hdf5=True) micro.autodelete = True gid_list = [1158, 1349, 1585, 1805, 1833, 2268] euler_list = [(344.776, 52.2589, 53.9933), (344.899, 125.961, 217.330), (228.039, 57.4791, 143.171), (186.741, 60.333, 43.311), (151.709, 55.0406, 44.1051), (237.262, 125.149, 225.615), ] micro.add_grains(euler_list, grain_ids=gid_list) # create pole figure (both direct and inverse) pf = PoleFigure(hkl='111', axis='Z', proj='stereo', microstructure=micro) pf.mksize = 100 pf.set_map_field('grain_id') pf.pflegend = True # this works well for a few grains pf.plot_pole_figures(plot_sst=True, display=False, save_as='png') del pf del micro image_name = os.path.splitext(__file__)[0] + '.png' print('writing %s' % image_name) from matplotlib import image image.thumbnail(image_name, 'thumb_' + image_name, 0.2)
from pymicro.crystal.microstructure import Microstructure, Grain, Orientation from pymicro.crystal.texture import PoleFigure from matplotlib import pyplot as plt, colors, cm if __name__ == '__main__': ''' 111 Pole figure of a copper sample containing 10000 grains with a fibre texture. ''' eulers = Orientation.read_euler_txt('../data/Cu_111.dat') micro = Microstructure(name='Cu_111') for index in eulers: micro.grains.append(Grain(index, eulers[index])) # create pole figure (both direct and inverse) pf = PoleFigure(hkl='111', proj='stereo', microstructure=micro, verbose=False) pf.color_by_grain_id = False pf.mksize = 5 pf.pflegend = False pf.plot_pole_figures(plot_sst=True, display=False, save_as='png') image_name = os.path.splitext(__file__)[0] + '.png' print('writting %s' % image_name) from matplotlib import image image.thumbnail(image_name, 'thumb_' + image_name, 0.2)
import os, numpy as np from pymicro.crystal.microstructure import Microstructure from pymicro.crystal.texture import PoleFigure if __name__ == '__main__': ''' 200 Pole figure of a copper sample containing 10000 grains with a fibre texture. ''' euler_list = np.genfromtxt('../data/Cu_200.dat', usecols=(0, 1, 2), max_rows=1000) micro = Microstructure(name='Cu_200', autodelete=True) micro.add_grains(euler_list) # create pole figure (both direct and inverse) pf = PoleFigure(hkl='200', proj='stereo', microstructure=micro) pf.color_by_grain_id = False pf.mksize = 5 pf.pflegend = False pf.plot_pole_figures(plot_sst=True, display=False, save_as='png') del pf del micro image_name = os.path.splitext(__file__)[0] + '.png' print('writing %s' % image_name) from matplotlib import image image.thumbnail(image_name, 'thumb_' + image_name, 0.2)
from pymicro.crystal.microstructure import Microstructure, Grain, Orientation from matplotlib import pyplot as plt, colors, colorbar, cm ''' An inverse pole figure with symboled colored by the grain size. ''' eulers = Orientation.read_orientations('../data/EBSD_20grains.txt', data_type='euler', usecols=[1, 2, 3]) grain_sizes = np.genfromtxt('../data/EBSD_20grains.txt', usecols=[9]) micro = Microstructure(name='test') for i in range(20): micro.grains.append(Grain(i + 1, eulers[i + 1])) micro.get_grain(i + 1).volume = grain_sizes[i] # build a custom pole figure pf = PoleFigure(microstructure=micro, hkl='001') #, lattice=Ti7Al) #pf.resize_markers = True pf.mksize = 100 pf.set_map_field('strain', grain_sizes, field_min_level=0.0, field_max_level=1000., lut='jet') fig = plt.figure(figsize=(8, 5)) ax1 = fig.add_axes([0.05, 0.05, 0.8, 0.9], aspect='equal') pf.plot_sst(ax=ax1, mk='o') ax1.set_title('%s-axis SST inverse %s projection' % (pf.axis, pf.proj)) # to add the color bar ax2 = fig.add_axes([0.85, 0.05, 0.05, 0.9]) norm = colors.Normalize(vmin=0., vmax=1000.)
from pymicro.crystal.microstructure import Orientation, Grain from pymicro.crystal.texture import PoleFigure from pymicro.view.scene3d import Scene3D from pymicro.view.vtk_utils import pole_figure_3d, axes_actor, setup_camera ''' Create a 3d scene with a cubic crystal lattice at the center. Hkl planes are added to the lattice and their normal displayed. A sphere is added to show how a pole figure can be constructed. ''' base_name = os.path.splitext(__file__)[0] s3d = Scene3D(display=False, ren_size=(800, 800), name=base_name) orientation = Orientation.from_euler(numpy.array([142.8, 32.0, 214.4])) pf = PoleFigure(hkl='111') pf.microstructure.grains.append(Grain(1, orientation)) pole_figure = pole_figure_3d(pf, radius=1.0, show_lattice=True) # add all actors to the 3d scene s3d.add(pole_figure) axes = axes_actor(1.0, fontSize=60) s3d.add(axes) # set up camera cam = setup_camera(size=(1, 1, 1)) cam.SetViewUp(0, 0, 1) cam.SetPosition(0, -4, 0) cam.SetFocalPoint(0, 0, 0) s3d.set_camera(cam) s3d.render()
from pymicro.crystal.microstructure import Microstructure, Orientation, Grain from pymicro.crystal.texture import PoleFigure from matplotlib import pyplot as plt # read data from Z-set calculation (50% tension load) data = np.genfromtxt('../data/R_1g.dat') t, R11, R22, R33, R12, R23, R31, R21, R32, R13, _, _, _, _ = data.T step = 1 # plot every step point max_step = data.shape[0] # create a microstructure with the initial grain orientation micro = Microstructure(name='1g', autodelete=True) g = Grain(50, Orientation.from_euler((12.293, 149.266, -167.068))) micro.add_grains([(12.293, 149.266, -167.068)], grain_ids=[50]) ipf = PoleFigure(proj='stereo', microstructure=micro) ipf.mksize = 100 ipf.set_map_field('grain_id') fig = plt.figure(1, figsize=(6, 5)) # for IPF ax1 = fig.add_subplot(111, aspect='equal') print('** plotting the initial orientation (with label for legend) **') ipf.plot_sst(ax=ax1, mk='.', col='k', ann=False) ax1.set_title('grain rotation in tension') axis = np.array([0, 0, 1]) grain = micro.get_grain(50) cgid = Microstructure.rand_cmap().colors[grain.id] # color by grain id g = grain.orientation_matrix() axis_rot_sst_prev = np.array(ipf.sst_symmetry_cubic(g.dot(axis))) print('** plotting ipf loading axis trajectory **')