Пример #1
0
def main(ngrains=100,
         sigma=15.,
         c2a=1.6235,
         mu=0.,
         prc='cst',
         isc=False,
         tilt_1=0.,
         tilts_about_ax1=0.,
         tilts_about_ax2=0.):
    """
    Arguments
    =========
    ngrains = 100
    sigma   = 15.
    c2a     = 1.6235
    prc     = 'cst' or 'ext'
    tilts_about_ax1   = 0.   -- Systematic tilting abount axis 1
    tilts_about_ax2   = 0.   -- Systematic tilting abount axis 2
    tilt_1  = 0.   -- Tilt in the basis pole. (systematic tilting away from ND)
    """
    if isc:
        h = mmm()
    else:
        h = np.array([np.identity(3)])
    gr = []
    for i in xrange(ngrains):
        dth = random.uniform(-180., 180.)
        if prc == 'cst':
            g = gen_gr_fiber(th=dth, sigma=sigma, mu=mu, tilt=tilt_1,
                             iopt=0)  # Basal//ND
        elif prc == 'ext':
            g = gen_gr_fiber(th=dth, sigma=sigma, mu=mu, tilt=tilt_1,
                             iopt=1)  # Basal//ED
        else:
            raise IOError, 'Unexpected option'
        for j in xrange(len(h)):
            temp = np.dot(g, h[j].T)

            ## tilts_about_ax1
            if abs(tilts_about_ax1) > 0:
                g_tilt = rd_rot(tilts_about_ax1)
                temp = np.dot(temp, g_tilt.T)
            ## tilts_about_ax2?
            elif abs(tilts_about_ax2) > 0:
                g_tilt = td_rot(tilts_about_ax2)
                temp = np.dot(temp, g_tilt.T)
            elif abs(tilts_about_ax2) > 0 and abs(tilts_about_ax2) > 0:
                raise IOError, 'One tilt at a time is allowed.'

            phi1, phi, phi2 = euler(a=temp, echo=False)
            gr.append([phi1, phi, phi2, 1. / ngrains])

    mypf = upf.polefigure(grains=gr, csym='hexag', cdim=[1, 1, c2a])
    mypf.pf_new(poles=[[0, 0, 0, 2], [1, 0, -1, 0]],
                cmap='jet',
                ix='TD',
                iy='RD')
    return np.array(gr)
Пример #2
0
def to909090(gr):
    """
    Reduce a grain in the full range angules to 90x90x90 cube
    """

    # if gr[0]<0.:
    #     gr[0] = 360 + gr[0]

    from sym import __mmm__ as mmm
    from sym import cubic
    sam = mmm() # orthorhombic sample symmetry
    crm = cubic() # cubic crystal symmetry

    a = euler(ph=gr[0], th=gr[1], tm=gr[2], echo=False) # ca<-sa
    mats = []
    newa = []
    for i in range(len(sam)):
        dum = np.dot(a, sam[i].T) # ca<-sa H
        for j in range(len(crm)):
            nnewa = np.dot(crm[j], dum)  # H_ca ca<-sa H_sa
            mats.append(nnewa)

    #print len(mats)

    eul_angs = []
    n = 0 
    for i in range(len(mats)):
        angs = euler(a=mats[i], echo=False)
        if all(angs[k]<=90. for k in range(3)) and \
           all(angs[k]>=0.  for k in range(3)):
            n = n + 1
            #print angs
            eul_angs.append(angs)

    temp_gr = []
    for i in range(len(eul_angs)):
        temp_gr.append([eul_angs[i][0],
                       eul_angs[i][1],
                       eul_angs[i][2]])

    temp_gr = np.around(temp_gr, decimals=3)
        
    temp_gr = unique2d(np.array(temp_gr))

    new_gr = []
    for i in range(len(temp_gr)):
        dgr = [temp_gr[i][0],temp_gr[i][1],temp_gr[i][2],gr[-1]/len(temp_gr)]
        new_gr.append(dgr)
    return np.array(new_gr)
Пример #3
0
def main(ngrains=100,sigma=15.,c2a=1.6235,mu=0.,
         prc='cst',isc=False,tilt_1=0.,
         tilts_about_ax1=0.,tilts_about_ax2=0.):
    """
    Arguments
    =========
    ngrains = 100
    sigma   = 15.
    c2a     = 1.6235
    prc     = 'cst' or 'ext'
    tilts_about_ax1   = 0.   -- Systematic tilting abount axis 1
    tilts_about_ax2   = 0.   -- Systematic tilting abount axis 2
    tilt_1  = 0.   -- Tilt in the basis pole. (systematic tilting away from ND)
    """
    if isc:
        h  = mmm()
    else:
        h=np.array([np.identity(3)])
    gr = []
    for i in xrange(ngrains):
        dth = random.uniform(-180., 180.)
        if prc=='cst':   g = gen_gr_fiber(th=dth,sigma=sigma,mu=mu,tilt=tilt_1,iopt=0) # Basal//ND
        elif prc=='ext': g = gen_gr_fiber(th=dth,sigma=sigma,mu=mu,tilt=tilt_1,iopt=1)  # Basal//ED
        else:
            raise IOError, 'Unexpected option'
        for j in xrange(len(h)):
            temp = np.dot(g,h[j].T)

            ## tilts_about_ax1
            if abs(tilts_about_ax1)>0:
                g_tilt = rd_rot(tilts_about_ax1)
                temp = np.dot(temp,g_tilt.T)
            ## tilts_about_ax2?
            elif abs(tilts_about_ax2)>0:
                g_tilt = td_rot(tilts_about_ax2)
                temp = np.dot(temp,g_tilt.T)
            elif abs(tilts_about_ax2)>0 and abs(tilts_about_ax2)>0:
                raise IOError, 'One tilt at a time is allowed.'

            phi1,phi,phi2 = euler(a=temp, echo=False)
            gr.append([phi1,phi,phi2,1./ngrains])

    mypf=upf.polefigure(grains=gr,csym='hexag',cdim=[1,1,c2a])
    mypf.pf_new(poles=[[0,0,0,2],[1,0,-1,0]],cmap='jet',ix='TD',iy='RD')
    return np.array(gr)
Пример #4
0
def main(ngrains=100, sigma=5.0, iopt=1, ifig=1):
    """
    arguments
    =========
    ngrains = 100
    sigma   = 5.
    iopt    = 1 (1: gauss (recommended); 2: expov; 3: logno; 4: norma)
    ifig    = 1
    """
    import upf
    import matplotlib.pyplot as plt

    h = mmm()
    gr = []
    for i in range(ngrains):
        dth = random.uniform(-180.0, 180.0)
        g = gen_gamma_gr(dth, sigma, iopt=iopt)
        for j in range(len(h)):
            temp = np.dot(g, h[j].T)
            phi1, phi, phi2 = euler(a=temp, echo=False)
            gr.append([phi1, phi, phi2, 1.0 / ngrains])

    fn = "gam_fib_ngr%s_sigma%s.cmb" % (str(len(gr)).zfill(5), str(sigma).zfill(3))
    f = open(fn, "w")
    f.writelines("Artificial gamma fibered polycrystal aggregate\n")
    f.writelines("var_gam_fiber.py python script\n")
    f.writelines("distribution: %s")
    if iopt == 1:
        f.writelines(" gauss")
    if iopt == 2:
        f.writelines(" expov")
    if iopt == 3:
        f.writelines(" logno")
    if iopt == 4:
        f.writelines(" norma")
    f.writelines("\n")
    f.writelines("B %i\n" % ngrains)
    for i in range(len(gr)):
        f.writelines("%7.3f %7.3f %7.3f %13.4e\n" % (gr[i][0], gr[i][1], gr[i][2], 1.0 / len(gr)))

    upf.cubgr(gr=gr, ifig=ifig)
    plt.figure(ifig).savefig("%s.pdf" % (fn.split(".cmb")[0]))

    return np.array(gr)
Пример #5
0
def main(ngrains=100,sigma=5.,iopt=1,ifig=1):
    """
    arguments
    =========
    ngrains = 100
    sigma   = 5.
    iopt    = 1 (1: gauss (recommended); 2: expov; 3: logno; 4: norma)
    ifig    = 1
    """
    import upf
    import matplotlib.pyplot as plt
    h = mmm()
    gr = []
    for i in range(ngrains):
        dth = random.uniform(-180., 180.)
        g = gen_gamma_gr(dth, sigma, iopt=iopt)
        for j in range(len(h)):
            temp = np.dot(g,h[j].T)
            phi1,phi,phi2 = euler(a=temp, echo=False)
            gr.append([phi1,phi,phi2,1./ngrains])

    fn = 'gam_fib_ngr%s_sigma%s.cmb'%(str(len(gr)).zfill(5),str(sigma).zfill(3))
    f = open(fn,'w')
    f.writelines('Artificial gamma fibered polycrystal aggregate\n')
    f.writelines('var_gam_fiber.py python script\n')
    f.writelines('distribution: %s')
    if iopt==1: f.writelines(' gauss')
    if iopt==2: f.writelines(' expov')
    if iopt==3: f.writelines(' logno')
    if iopt==4: f.writelines(' norma')
    f.writelines('\n')
    f.writelines('B %i\n'%ngrains)
    for i in range(len(gr)):
        f.writelines('%7.3f %7.3f %7.3f %13.4e\n'%(
            gr[i][0], gr[i][1], gr[i][2], 1./len(gr)))

    upf.cubgr(gr=gr,ifig=ifig)
    plt.figure(ifig).savefig('%s.pdf'%(fn.split('.cmb')[0]))

    return np.array(gr)