Exemple #1
0
def eps_sin2psi(difile=None, istep=0, phi=0, iph=1, ax=None,iopt=0):
    """
    Arguments
    =========
    difile : diffraction input file name
    istep  : i-th step      (starts from 0)
    phi    : phi angle (0, 45, 90, 135, 180 ... )
    iph    : i-th phase     (starts from 1)
    ax     : None
    iopt   : 0->int_eps_ph%i.out;  1-> int_els_ph%i.out
    """
    from sff_converter import condition
    difl, nphi, phis, nbeta, neps, eps = condition(difile)
    dat = intepsphiout(istep=istep,phi=phi,iph=iph,isort=True,iopt=iopt)
    psi, eps, sig, ms11, ms22, ms33, ms23, ms13, ms12 = dat[0:9]
    #me11, me22, me33, me23, me13, me12 = dat[9:15]
    sin2psi = np.sin(psi*np.pi/180.)**2
    print 'psi', psi
    print 'sin2psi', sin2psi
    print 'eps', eps
    if ax==None: ax = plt.gca()

#    if iopt==1: label=r'$\sigma_{11}=$%7.3f'%ms11
#    elif iopt==1: label=r'$\sigma_{11}=$%7.3f'%ms11
    label=None

    ax.plot(sin2psi,eps*10**3,'o-',label=label)
    ax.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=28))
    ax.set_ylabel(r'$\varepsilon^{hkl}\times10^{3}$', dict(fontsize=28))
    if label!=None:
        ax.legend(loc='lower right',fancybox=True).get_frame().set_alpha(0.5)
    plt.tight_layout()
    plt.show()
def eps_sin2psi(difile=None, istep=0, phi=0, iph=1, ax=None,iopt=0):
    """
    Arguments
    =========
    difile : diffraction input file name
    istep  : i-th step      (starts from 0)
    phi    : phi angle (0, 45, 90, 135, 180 ... )
    iph    : i-th phase     (starts from 1)
    ax     : None
    iopt   : 0->int_eps_ph%i.out;  1-> int_els_ph%i.out
    """
    from sff_converter import condition
    difl, nphi, phis, nbeta, neps, eps = condition(difile)
    dat = intepsphiout(istep=istep,phi=phi,iph=iph,isort=True,iopt=iopt)
    psi, eps, sig, ms11, ms22, ms33, ms23, ms13, ms12 = dat[0:9]
    #me11, me22, me33, me23, me13, me12 = dat[9:15]
    sin2psi = np.sin(psi*np.pi/180.)**2
    print 'psi', psi
    print 'sin2psi', sin2psi
    print 'eps', eps
    if ax==None: ax = plt.gca()

#    if iopt==1: label=r'$\sigma_{11}=$%7.3f'%ms11
#    elif iopt==1: label=r'$\sigma_{11}=$%7.3f'%ms11
    label=None

    ax.plot(sin2psi,eps*10**3,'o-',label=label)
    ax.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=28))
    ax.set_ylabel(r'$\varepsilon^{hkl}\times10^{3}$', dict(fontsize=28))
    if label!=None:
        ax.legend(loc='lower right',fancybox=True).get_frame().set_alpha(0.5)
    plt.tight_layout()
    plt.show()
Exemple #3
0
def ex_igb_bix_t(fn="igstrain_bix_ph1.out", fnout="igstrain_loads_avg.out", flow=None):
    """
    Default input fn is 'igstrain_bix_ph1.out':
     this output file contains diffraction data measured
     prior to the 'interruption' by unloading. Note that
     this unloading is to elastically and uniaixally
     deform the polycrystal in order to obtain 'stress factor'
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np

    difl, nphi, phis, nbeta, dum, eps = condition(fn=None)

    if flow != None:
        eps = flow.epsilon_vm[::]
    else:
        eps = eps * 2

    # rst[2,nst,nphi,npsi], sf2[2,nst,nphi,npsi]
    rst, sf2 = ex_igb_bix(fn=fn, ifig=123, flow=flow)

    f = open(fnout, "w")
    f.writelines(
        "%3s %8s %13s %14s %14s %14s %14s %14s %14s\n"
        % ("phi", "psi", "eps0", "F11", "F22", "F33", "F23", "F13", "F12")
    )

    for ist in xrange(len(rst[0])):
        f.writelines("-- eps^{eff}: %5.3f\n" % eps[ist])
        for iphi in xrange(nphi):
            phi = phis[iphi]
            psi = rst[0, ist, iphi, :]
            ep = rst[1, ist, iphi, :]
            for i in xrange(len(psi)):
                ps = psi[i]
                e = ep[i]
                f11 = sf2[0, ist, iphi, i]
                f22 = sf2[1, ist, iphi, i]
                f.writelines("%3.0f %+7.2f %+12.7e" % (phi, ps, e))
                f.writelines(" %+12.7e %+12.7e" % (f11, f22))
                for j in xrange(4):
                    f.writelines(" %+12.7e" % 0.0)
                f.writelines("\n")
    f.close()
    plt.close("all")
    return rst
Exemple #4
0
def ex_igb_bix_t(fn='igstrain_bix_ph1.out',
                 fnout='igstrain_loads_avg.out',
                 flow=None):
    """
    Default input fn is 'igstrain_bix_ph1.out':
     this output file contains diffraction data measured
     prior to the 'interruption' by unloading. Note that
     this unloading is to elastically and uniaixally
     deform the polycrystal in order to obtain 'stress factor'
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    difl, nphi, phis, nbeta, dum, eps = condition(fn=None)

    if flow!=None: eps = flow.epsilon_vm[::]
    else: eps = eps * 2

    #rst[2,nst,nphi,npsi], sf2[2,nst,nphi,npsi]
    rst, sf2 = ex_igb_bix(fn=fn,ifig=123,flow=flow)

    f   = open(fnout,'w')
    f.writelines('%3s %8s %13s %14s %14s %14s %14s %14s %14s\n'
                 %('phi','psi','eps0','F11','F22',
                   'F33','F23','F13','F12'))

    for ist in xrange(len(rst[0])):
        f.writelines('-- eps^{eff}: %5.3f\n'%eps[ist])
        for iphi in xrange(nphi):
            phi = phis[iphi]
            psi = rst[0,ist,iphi,:]
            ep = rst[1,ist,iphi,:]
            for i in xrange(len(psi)):
                ps = psi[i]
                e  = ep[i]
                f11 = sf2[0,ist,iphi,i]
                f22 = sf2[1,ist,iphi,i]
                f.writelines('%3.0f %+7.2f %+12.7e'%(phi,ps,e))
                f.writelines(' %+12.7e %+12.7e'%(f11,f22))
                for j in xrange(4): f.writelines(' %+12.7e'%0.)
                f.writelines('\n')
    f.close()
    plt.close('all')
    return rst
Exemple #5
0
def ex_igb_t(fn='igstrain_fbulk_ph1.out',
             fnout='igstrain_unloads_avg.out',
             mxnst=None,flow=None):
    """

    Arguments
    =========
    fn   ='igstrain_fbulk_ph1.out'
    fnout='igstrain_unloads_avg.out'
    mxnst=None
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    difl, nphi, phis, nbeta, dum1, dum2 = condition(fn=None)
    if flow==None: raise IOError, 'Flow should be given'
    elif flow!=None:
        flow.get_eqv()
        eps = flow.epsilon_vm[::]
Exemple #6
0
def ex_igb_t(fn='igstrain_fbulk_ph1.out',
             fnout='igstrain_unloads_avg.out',
             mxnst=None,flow=None):
    """

    Arguments
    =========
    fn   ='igstrain_fbulk_ph1.out'
    fnout='igstrain_unloads_avg.out'
    mxnst=None
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    difl, nphi, phis, nbeta, dum1, dum2 = condition(fn=None)
    if flow==None: raise IOError, 'Flow should be given'
    elif flow!=None:
        flow.get_eqv()
        eps = flow.epsilon_vm[::]
Exemple #7
0
def ex_igb_bix(fn='igstrain_bix_ph1.out',ifig=1,iphi=0,
               mxnst=None,flow=None):
    """
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    from MP.ssort import sh as sort
    difl, nphi, phis, nbeta, neps, eps = condition(fn=None)

    if flow!=None: eps = flow.epsilon_vm[::]
    else:          eps = eps * 2. ## Under condition balanced biaxial

    fig01 = plt.figure(ifig,figsize=(15.5,8.5))
    ax01=fig01.add_subplot(231)
    ax02=fig01.add_subplot(232)
    ax03=fig01.add_subplot(233)
    ax04=fig01.add_subplot(234)
    ax05=fig01.add_subplot(235)
    axes01 = [ax01,ax02,ax03,ax04,ax05]

    fig02 = plt.figure(ifig+1,figsize=(15.5,8.5))
    ax01=fig02.add_subplot(231)
    ax02=fig02.add_subplot(232)
    ax03=fig02.add_subplot(233)
    ax04=fig02.add_subplot(234)
    ax05=fig02.add_subplot(235)
    axes02 = [ax01,ax02,ax03,ax04,ax05]

    tdat = reader2(fn,iopt=2,isort=False)
    nst = len(tdat[0])
    npsi=len(tdat[0,0,0])

    rst = np.zeros((2,nst,nphi,npsi))
    sf2 = np.zeros((2,nst,nphi,npsi)) # f11 and f22

    markers=['o','x','+','^','d','*','o','x','+','^','d','*']
    colors =['r','g','b','k','m','y','r','g','b','k','m','y']
    axe_lab = [r'(a) $\varepsilon-F_{ij}\bar{\Sigma}_{ij}$',
               r'(b) $\bar{E}^{el}(\phi,\psi)$',
               r'(c) $\varepsilon^{hkl}$ and $F_{ij}\bar{\Sigma}_{ij}$',
               r'(d) $F_{ij}$',
               r'(e) $\bar{\Sigma}_{ij}$','(f)','(g)']

    if mxnst!=None: nst=mxnst

    for i in range(nst):
        ehkl  = tdat[0,i,iphi,:] #e(hkl)
        e     = tdat[1,i,iphi,:] #macro
        ehkle = tdat[2,i,iphi,:] #e-macro
        ige   = tdat[3,i,iphi,:] #e(hkl) - F^hkl_ij * Sij (ij=1,1 and 2,2)
        f11   = tdat[4,i,iphi,:] #F^hkl_11
        f22   = tdat[5,i,iphi,:] #F^hkl_22
        s11   = tdat[6,i,iphi,:] #S11
        s22   = tdat[7,i,iphi,:] #S22
        psi   = tdat[8,i,iphi,:] #psi
        sin2psi = np.sin(psi*np.pi/180.)**2

        x = np.sin(psi*np.pi/180.)**2
        y0 = ehkl-e; y1=e; y2=f11*s11+f22*s22; y3=f11; y4=f22;
        y5 = s11; y6= s22; y7=ehkl
        newx, Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7 = sort(
            x,y0,y1,y2,y3,y4,y5,y6,y7)
        ## ax01
        l, = axes01[0].plot(newx,Y0*1e6,markers[i])
        dum = ehkl - (f11*s11 + f22*s22)
        x = np.sin(psi*np.pi/180.)**2
        newx, newy = sort(x, dum)
        axes01[0].plot(newx,newy*1e6,'-',color=l.get_color())
        ## ax02
        axes01[1].plot(newx,Y1*1e6,markers[i],
           label=r'$\bar{E}^{\mathrm{eff}}$=%4.2f'%eps[i])
        ## ax03
        l, = axes01[2].plot(newx,Y7*1e6,markers[i])
        axes01[2].plot(newx,Y2*1e6,'-',color=l.get_color())
        ## ax04
        l, = axes01[3].plot(newx,Y3*1e6,markers[i])
        axes01[3].plot(newx,Y4*1e6,'-',color=l.get_color())
        ## ax05
        l, = axes01[4].plot(newx,Y5,markers[i])
        axes01[4].plot(newx,Y6,'-',color=l.get_color())
        if i==0:
            axes01[0].text(0.25,0.1,
                r'lines: $\varepsilon-(F_{11}\bar{\Sigma}_{11}$'+\
                r'$+F_{22}\bar{\Sigma}_{22})$',
                transform=axes01[0].transAxes)
            axes01[0].text(0.25,0.2,r'symbols: $\varepsilon-\bar{E}^{el} $',
                           transform = axes01[0].transAxes)
            axes01[2].text(0.6,0.3,r'symbols: $\varepsilon^{hkl}$',
                transform=axes01[2].transAxes)
            axes01[2].text(0.6,0.2,r'lines: $F_{ij}\bar{\Sigma_{ij}}$',
                 transform=axes01[2].transAxes)
            axes01[3].text(0.5,0.5,r'symbols: $F_{11}$',transform=
                           axes01[3].transAxes)
            axes01[3].text(0.5,0.4,r'lines: $F_{22}$',transform=
                           axes01[3].transAxes)
            axes01[4].text(0.5,0.5,r'symbols: $\bar{\Sigma}_{11}$',
                           transform=axes01[4].transAxes)
            axes01[4].text(0.5,0.4,r'lines: $\bar{\Sigma}_{22}$',
                           transform=axes01[4].transAxes)
            axes01[0].set_ylabel(r'IG strain $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[1].set_ylabel(r'Macro strain $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[2].set_ylabel(r'$\varepsilon^{hkl}(\phi,\psi)$'+\
                                     r' and $F_{ij}\bar{\Sigma}_{ij}$'+\
                                     r' $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[3].set_ylabel(r'$F_{11}$ and $F_{22}$'+\
                                     r' $ [TPa^{-1}]$',
                                 dict(fontsize=15))
            axes01[4].set_ylabel(r'$\bar{\Sigma}_{11}$'+\
                                     r' and $\bar{\Sigma}_{22}$ [MPa]',
                                 dict(fontsize=15))

        for j in range(nphi):
            ehkl  = tdat[0,i,j,:] #e(hkl)
            e     = tdat[1,i,j,:] #macro
            ehkle = tdat[2,i,j,:] #e-macro
            ige   = tdat[3,i,j,:] #e(hkl) - F^hkl_ij * Sij (ij=1,1 and 2,2)
            f11   = tdat[4,i,j,:] #F^hkl_11
            f22   = tdat[5,i,j,:] #F^hkl_22
            s11   = tdat[6,i,j,:] #S11
            s22   = tdat[7,i,j,:] #S22
            psi   = tdat[8,i,j,:] #psi

            dum = ehkl - (f11*s11 + f22*s22)
            rst[0,i,j,:] = psi[:]
            rst[1,i,j,:] = dum[:]

            sf2[0,i,j,:]=f11[:]
            sf2[1,i,j,:]=f22[:]

            sin2psi = np.sin(psi*np.pi/180.)**2
            x = sin2psi
            y = ige*1e6

            newx, newy = sort(x,y)
            axes02[j].plot(newx,newy,'-')

            if i==0:
                axes02[j].set_title(r'$\phi=%3.0f^\circ$'%phis[j])
#    axes01[0].legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
    axes01[1].legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)

    for i in range(len(axes01)):
        #axes01[i].set_title(axe_lab[i])
        axes01[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes01[i].grid('on')

    for i in range(len(axes02)):
        axes02[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes02[i].set_ylabel(r'IG strain $[\mu\varepsilon]$', dict(fontsize=20))
        axes02[i].grid('on')
    fig01.tight_layout()
    fig02.tight_layout()
    fig01.savefig('bix_analysis.pdf')
    fig02.savefig('bix_eps0_at_phis.pdf')
    return rst, sf2 #rst[2,nst,nphi,npsi], sf2[2,nst,nphi,npsi]
Exemple #8
0
def ex_igb(fn='igstrain_fbulk_ph1.out',ifig=2,iphi=0,isf=0,
           mxnst=None,flow=None):
    """
    Read ig strain file and analyze... (igstrain_fbulk_ph1.out)

    igstrain_fbulk_ph1.out contains diffraction for each and every
    reloading from 'unloaded' polycrystal.

    Arguments
    =========
    fn = 'igstrain_fbulk_ph1.out'
    ifig = 2
    iphi=0
    isf=0
    mxnst=None
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    from MP.ssort import sh as sort
    from MP.mat import voigt
    from MP.lib.mpl_lib import wide_fig as wf

    difl, nphi, phis, nbeta, dum1, dum2 = condition(fn=None)

    if flow==None: raise IOError, 'Flow stress is missing'
    eps = flow.epsilon_vm[::]
    neps = flow.nstp

    nw = 4
    remainder = np.mod(neps,nw)
    if remainder==0:
        nh = neps/nw
    elif remainder>0:
        nh = neps/nw + 1

    fig  =wf(nw=2, nh=2,ifig=ifig,iarange=True);  axes  =fig.axes
    ax01, ax02, ax03, ax04 = axes
    fig01=wf(nw=nw,nh=nh,ifig=ifig+1,iarange=True,nfig=neps);axes01=fig01.axes
    fig02=wf(nw=nw,nh=nh,ifig=ifig+2,iarange=True,nfig=neps);axes02=fig02.axes
    fig03=wf(nw=nw,nh=nh,ifig=ifig+3,iarange=True,nfig=neps);axes03=fig03.axes
    fig04=wf(nw=nw,nh=nh,ifig=ifig+4,iarange=True,nfig=neps);axes04=fig04.axes

    tdat, usf = reader2(fn,iopt=1)
    print tdat.shape
    nsf = len(usf); nst = len(tdat[0]); npsi = len(tdat[0,0,0,0,:])
    if nst!=neps: raise IOError, 'Inconsistency between neps and nst'
    markers = ['o','x','+','^','d','*','o','x','+','^','d','*''o','x','+','^','d','*']
    colors  = ['r','g','b','k','m','y','r','g','b','k','m','y','r','g','b','k','m','y']
    from string import ascii_lowercase as alphabet
    axe_lab=[]
    for ab in alphabet: axe_lab.append('(%s)'%ab)
    yl = 0; yh = 0
    avg = np.zeros((2,nst,npsi)) #
    sft  = np.zeros((6,nst,npsi)) # f^{hkl}
    rsqt = np.zeros((6,nst,npsi)) # f^{hkl}

    if mxnst!=None: nst=mxnst
    for i in range(nst):
        ehkl  = tdat[0,i,isf,iphi,:] # e(hkl,phi,psi)
        e     = tdat[1,i,isf,iphi,:] # macro
        ehkle = tdat[2,i,isf,iphi,:] # e - macro
        fhkl  = tdat[3,i,isf,iphi,:] # Fhkl
        fbulk = tdat[4,i,isf,iphi,:] # Fbulk
        ige   = tdat[5,i,isf,iphi,:] # e - F_ij *Sij
        sij   = tdat[6,i,isf,iphi,:] # Sij
        psi   = tdat[8,i,isf,iphi,:]
        rsq   = tdat[9,i,isf,iphi,:]
        sin2psi = np.sin(psi*np.pi/180.)**2
        axes01[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes02[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes03[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes04[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        igys = []; igos = []; igts = []
        for j in range(nsf): ## Number of elastic loading for stress factor calc.
            ehkl_ = tdat[0,i,j,iphi,:] # e(hkl,phi,psi)
            e_    = tdat[1,i,j,iphi,:] # macro
            fhkl_ = tdat[3,i,j,iphi,:] # Fhkl
            fbulk_= tdat[4,i,j,iphi,:] # Fbulk
            sij_  = tdat[6,i,j,iphi,:] # Sij
            rsq_  = tdat[6,i,j,iphi,:] # R^2

            sft[j,i,:]  = fhkl_[::] #
            rsqt[j,i,:] = rsq_[::]

            i1,i2 = usf[j]
            igo = ehkl_ - e_ ## old way
            igt = []
            m = 0
            for k in range(len(fbulk_)):
                if fbulk_[k]==0:
                    m=m+1
                    igt.append(0.)
                else: igt.append(
                        ehkl_[k] - \
                        fhkl_[k] / fbulk_[k] * e_[k])

            if m!=0: print m, 'case of fbulk'+\
               '(phi,psi)=0 happened'

            igt = np.array(igt)
            igy = ehkl_ - fhkl_ * sij_ ## new way (YJ)
            if j==0:
                igy_avg = igy/nsf
                igo_avg = igo/nsf
                igt_avg = igt/nsf
            else:
                igy_avg = igy_avg + igy/nsf
                igo_avg = igo_avg + igo/nsf
                igt_avg = igt_avg + igt/nsf
            igys.append(igy);igos.append(igo);igts.append(igt)

            # The old method
            if j==4: m = markers[j]
            else: m= '--'
            y = igo
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes01[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes01[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes01[i].grid('on')
            yl0, yh0 = axes01[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            # GHT
            y = igt
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes02[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes02[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes02[i].grid('on')
            yl0, yh0 = axes02[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            # YJ
            y = igy
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes03[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes03[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes03[i].grid('on')
            yl0, yh0 = axes03[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            pass # over nsf

        # errors for 6 cases of SF loading
        igos = np.array(igos).swapaxes(0,1)
        igys = np.array(igys).swapaxes(0,1)
        igts = np.array(igts).swapaxes(0,1)
        igoe=[]; igye=[]; igte=[]
        for m in range(len(igo_avg)):
            igoe.append(igos[m].std())
            igte.append(igts[m].std())
            igye.append(igys[m].std())
        igoe,igte,igye = np.array(igoe),np.array(igte),np.array(igye)
        ##

        # average old
        y = igo_avg
        ye= igoe
        x = np.sin(psi[:]*np.pi/180.)**2
        newx, newy, newye = sort(x,y,ye)
        axes04[i].errorbar(
            x=newx,y=newy*1e6,yerr=newye*1e6,
            ls='-',color='r',label='old')

        # average YU
        y  = igy_avg
        avg[0,i,:] = psi[:]; avg[1,i,:] = y[:]

        ye = igye
        x  = np.sin(psi[:]*np.pi/180.)**2

        newx, newy, newye = sort(x,y,ye)

        axes04[i].errorbar(
            x=newx,y=newy*1e6,yerr=newye*1e6,
            ls='-',ms=3,color='b',label='YJ')
        axes04[i].grid('on')
        axes04[0].legend(loc='best',fancybox=True)\
            .get_frame().set_alpha(0.5)

        i1,i2 = voigt.ijv[:,isf]
        sin2psi = np.sin(psi*np.pi/180.)**2

        ax01.plot(sin2psi,ige*1e6,markers[i]#,color='k',
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        ax02.plot(sin2psi,ehkle*1e6,markers[i]#,color='k'
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        l, = ax04.plot(sin2psi,fhkl*1e6,markers[i]#,color='k'
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        if i==0: ax04.plot(sin2psi,fbulk*1e6,'-',alpha=0.2,color='k')
        # ax03.plot(sin2psi,e*1e6,markers[i],
        #           label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        ax03.plot(sin2psi,(ehkl-fhkl/fbulk*e)*1e6,markers[i]
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        sin2psi = np.sin(psi*np.pi/180.)**2

    ## Deco the axes
    for i in range(nst):
        axes01[i].set_ylim(yl,yh)
        axes02[i].set_ylim(yl,yh)
        axes03[i].set_ylim(yl,yh)
        #axes04[i].set_ylim(yl,yh)
        axes01[i].set_xlim(0.,); axes02[i].set_xlim(0.,)
        axes03[i].set_xlim(0.,); axes04[i].set_xlim(0.,)
    for i in range(len(axes)):
        axes[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes01[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes02[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes03[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes04[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
    for i in range(len(axes)): axes[i].grid('on')
    for i in range(len(axes)): axes[i].set_xlim(0.,0.5)
    ax01.set_ylabel(
        r'$\varepsilon^{hkl} - F^{hkl}_{ij}\bar{\Sigma}_{ij}$'+\
        r'  $[\mu\varepsilon]$',dict(fontsize=15))
    ax02.set_ylabel(
        r'$\varepsilon^{hkl} - E$  $[\mu\varepsilon]$',dict(fontsize=15))
    ax03.set_ylabel(r'$\varepsilon^{hkl} - $'+
        r'$F_{ij}^{hkl}/F^{\mathrm{bulk}}_{ij}$'+
        r'$ \bar{E} $  $[\mu \varepsilon]$',dict(fontsize=15))
    ax04.set_ylabel(r'$F_{ij}^{hkl}, F^{\mathrm{bulk}}_{ij}$  $[TPa^{-1}]$',
        dict(fontsize=15))
    ax01.set_title(r'(a) $\varepsilon(hkl,%3.0f^\circ,\psi)$'\
        r'$ - F_{%1i%1i}(hkl,%3.0f^\circ,\psi)$'\
        r'$\bar{\Sigma}_{%1i%1i}$'%(phis[iphi],i1,i2,phis[iphi],i1,i2),
        dict(fontsize=13))
    ax02.set_title(
        r'(b) $\varepsilon(hkl,%3.0f^\circ,\psi)$'%(phis[iphi])+\
            r'$ - \bar{E}(%3.0f^\circ,\psi)$'%\
            (phis[iphi]),dict(fontsize=13))
    ax03.set_title(
        r'(c) $\varepsilon(hkl,%3.0f^\circ,\psi)$'%(phis[iphi])+
        r'$-F_{%1i%1i}(hkl,%3.0f^\circ,\psi)/$'%(i1,i2,phis[iphi])+
        r'$F_{%1i%1i}^{\mathrm{bulk}}(%3.0f^\circ,\psi)$'%(
            i1,i2,phis[iphi])+
        r'$\bar{E}(%3.0f^\circ,\psi)$'%(phis[iphi]),dict(fontsize=13))
    ax04.set_title(r'(d) $F^{hkl}_{%1i%1i}$ and '%(i1,i2)+\
                       r'$F^{\mathrm{bulk}}_{%1i%1i}$'%
                   (i1,i2), dict(fontsize=13))
    ax04.legend(loc='lower right',fancybox=True).get_frame().set_alpha(0.5)
    # fig.tight_layout(); fig01.tight_layout(); fig02.tight_layout()
    # fig03.tight_layout(); fig04.tight_layout()
    fig.savefig('ig_bulk.pdf');fig01.savefig('ig_bulk_Old.pdf')
    fig02.savefig('ig_bulk_GHT.pdf'); fig03.savefig('ig_bulk_YJ.pdf')
    fig04.savefig('ig_bulk_avg.pdf')
    ## save the averaged IG strain

    return avg, sft # avg[2,nst,npsi], sft[6,nst,npsi]
Exemple #9
0
def ex_igb_cf(fnu='igstrain_fbulk_ph1.out',
              fnl='igstrain_bix_ph1.out'):
    """
    compare the ig strain at load and unloads.
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    from MP.ssort import sh as sort
    difl, nphi, phis, nbeta, neps, eps = condition(fn=None)

    plt.ioff()
    avgu,sfs,rsqs=ex_igb_t(fn=fnu,fnout='igstrain_unloads_avg.out')   # at unlaods
    avgl=ex_igb_bix_t(fn=fnl,fnout='igstrain_loads_avg.out') # at loads

    print avgu.shape#[2,nst,nphi,nspi]
    print avgl.shape#[2,nst,iphi,npsi]

    plt.close('all'); plt.ion()

    fig = plt.figure(2,figsize=(15.5,8.5))
    fig02 = plt.figure(203); ax_dum=fig02.add_subplot(111)
    at = ['(a)','(b)','(c)','(d)','(e)','(f)']
    markers=['x','o','.','d','*']
    ls     =['--x','--o','--.','--d','--*']
    axes=[]
    for i in range(nphi):
        axes.append(fig.add_subplot(2,3,i+1))
    for ist in range(len(avgu[0])):
        for iphi in range(len(avgu[0][ist])):
            ax = axes[iphi]
            phi = phis[iphi]
            psi = avgu[0,ist,iphi,:]
            eu  = avgu[1,ist,iphi,:]
            el  = avgl[1,ist,iphi,:]
            sin2psi = np.sin(psi*np.pi/180.)**2

            x = sin2psi
            y0 = eu*1e6
            y1 = el*1e6
            newx,Y0,Y1 = sort(x,y0,y1)
            if iphi==0:
                l, = ax.plot(newx,Y0,'x',
                    label=r'$\bar{E}^{\mathrm{eff}}=%4.2f$'%(eps[ist]*2.0))
                ax_dum.plot(newx,Y0,markers[ist],color='k',
                            label=r'$\bar{E}^{\mathrm{eff}}=%4.2f$'%(eps[ist]*2.0))
                ax_dum.plot(newx,Y1,ls[ist],color='k')
            elif iphi!=0:
                l, = ax.plot(newx,Y0,'x')
            ax.plot(newx,Y1,'-',color=l.get_color())

    ax_dum.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
    ax_dum.set_ylabel(r'IG strains $[\mu\varepsilon]$', dict(fontsize=20))
    ax_dum.legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
    ax_dum.text(0.1, 0.85, 'Lines: at loads',transform=ax_dum.transAxes)
    ax_dum.text(0.1, 0.92, 'Symbols: at unloads',transform=ax_dum.transAxes)
    ax_dum.grid('on')
    fig02.tight_layout()
    fig02.savefig('ige_cf_phi1.pdf')

    for i in range(len(axes)):
        ax = axes[i]
        ph = phis[i]
        #ax.set_title(r'%s $\phi=%3.0f^\circ$'%(at[i],ph))
        ax.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        ax.set_ylabel(r'IG strains $[\mu\varepsilon]$', dict(fontsize=20))
        if i==0:
            ax.legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
            ax.text(0.1, 0.85, 'Lines: at loads',transform=ax.transAxes)
            ax.text(0.1, 0.92, 'Symbols: at unloads',transform=ax.transAxes)
        ax.grid('on')
    fig.tight_layout()
    fig.savefig('ige_cf.pdf')
Exemple #10
0
def intepsphiout(istep=0, phi=0, iphi=0, iph=1, isort=False, iopt=0):
    """
    Arguments
    =========
    istep = 0 (starts from 0)
    phi   = -90 or iphi as index for iopt 4 and 5.
    iph   = 1 (phase starts from 1)
    isort = False
    iopt  =
            0: ('int_eps_ph%i.out') - at unloads,
            1: ('int_els_ph%i.out') - at loads
            2: ('igstrain_load_ph%i.out') - at
            3: ('igstrain_unload_ph%i.out') - at
            4: ('igstrain_unloads_avg.out') at unloads
            5: ('igstrain_loads_avg.out')   at loads
    """
    from ssort import shellSort as ssort
    from ssort import sh
    from ssort import ind_swap

    eps, sig, psi = [], [], []
    if iopt==0:   filename='int_eps_ph%i.out'%iph
    elif iopt==1: filename='int_els_ph%i.out'%iph
    elif iopt==2: filename='igstrain_load_ph%i.out'%iph
    elif iopt==3: filename='igstrain_unload_ph%i.out'%iph
    elif iopt==4: filename='igstrain_unloads_avg.out'
    elif iopt==5: filename='igstrain_loads_avg.out'
    fc(filename)

    if iopt<4:
        dl = open(filename, 'r').readlines()
        npb = int(dl[1].split()[0])
        dat = dl[2:]
        dat = dat[(istep)*npb: (istep)*npb + npb]
        if len(dat)==0: raise IOError, 'empty dat is returned ..'
        for i in range(len(dat)):
            temp = map(float, dat[i].split())
            step, p, beta, psi1, psi2, eps1, eps2,\
                sig1, sig2, n1, n2, v1, v2 = temp[:13]

            ms11, ms22, ms33, ms23, ms13, ms12 = temp[13:19]
            me11, me22, me33, me23, me13, me12 = temp[19:25]

            if p==phi:
                eps.append(eps1); eps.append(eps2)
                sig.append(sig1); sig.append(sig2)
                psi.append(psi1) # detector 1
                psi.append(psi2) # detector 2
        if isort:
            temp1, temp2 = [], []
            sortedarray, ind = ssort(psi)#, len(psi))
            for k in range(len(sortedarray)):
                temp1.append(eps[ind[k]-1])
                temp2.append(sig[ind[k]-1])

            eps = temp1
            sigma = temp2
            psi = sortedarray

        return np.array(psi), np.array(eps), np.array(sig),\
            ms11, ms22, ms33, ms23, ms13, ms12

    if iopt==4 or iopt==5:
        from sff_converter import condition
        from pepshkl import reader3 as reader
        difl, nphi, phis, nbeta, neps, eps = condition()
        tdat, psi = reader(filename,isort) #[ist,iphi,ipsi]
        sin2psi = np.sin(psi*np.pi/180.)**2
        npsi = len(psi)
        eps = tdat[istep, iphi]
        return psi, eps

    raise IOError, 'Unexpected ioption give in intepsphiout'
Exemple #11
0
def intepsphiout(istep=0, phi=0, iphi=0, iph=1, isort=False, iopt=0):
    """
    Arguments
    =========
    istep = 0 (starts from 0)
    phi   = -90 or iphi as index for iopt 4 and 5.
    iph   = 1 (phase starts from 1)
    isort = False
    iopt  =
            0: ('int_eps_ph%i.out') - at unloads,
            1: ('int_els_ph%i.out') - at loads
            2: ('igstrain_load_ph%i.out') - at
            3: ('igstrain_unload_ph%i.out') - at
            4: ('igstrain_unloads_avg.out') at unloads
            5: ('igstrain_loads_avg.out')   at loads
    """
    from MP import ssort
    sh=ssort.sh
    ind_swap=ssort.ind_swap
    ssort=ssort.shellSort

    #from ssort import shellSort as ssort
    #from ssort import sh
    #from ssort import ind_swap

    eps, sig, psi = [], [], []
    if iopt==0:   filename='int_eps_ph%i.out'%iph
    elif iopt==1: filename='int_els_ph%i.out'%iph
    elif iopt==2: filename='igstrain_load_ph%i.out'%iph
    elif iopt==3: filename='igstrain_unload_ph%i.out'%iph
    elif iopt==4: filename='igstrain_unloads_avg.out'
    elif iopt==5: filename='igstrain_loads_avg.out'
    fc(filename)

    if iopt<4:
        dl = open(filename, 'r').readlines()
        npb = int(dl[1].split()[0])
        dat = dl[2:]
        dat = dat[(istep)*npb: (istep)*npb + npb]
        if len(dat)==0: raise IOError, 'empty dat is returned ..'
        for i in xrange(len(dat)):
            temp = map(float, dat[i].split())
            step, p, beta, psi1, psi2, eps1, eps2,\
                sig1, sig2, n1, n2, v1, v2 = temp[:13]

            ms11, ms22, ms33, ms23, ms13, ms12 = temp[13:19]
            me11, me22, me33, me23, me13, me12 = temp[19:25]

            if p==phi:
                eps.append(eps1); eps.append(eps2)
                sig.append(sig1); sig.append(sig2)
                psi.append(psi1) # detector 1
                psi.append(psi2) # detector 2
        if isort:
            temp1, temp2 = [], []
            sortedarray, ind = ssort(psi)#, len(psi))
            for k in xrange(len(sortedarray)):
                temp1.append(eps[ind[k]-1])
                temp2.append(sig[ind[k]-1])

            eps = temp1
            sigma = temp2
            psi = sortedarray

        return np.array(psi), np.array(eps), np.array(sig),\
            ms11, ms22, ms33, ms23, ms13, ms12

    if iopt==4 or iopt==5:
        from sff_converter import condition
        from pepshkl import reader3 as reader
        difl, nphi, phis, nbeta, neps, eps = condition()
        tdat, psi = reader(filename,isort) #[ist,iphi,ipsi]
        sin2psi = np.sin(psi*np.pi/180.)**2
        npsi = len(psi)
        eps = tdat[istep, iphi]
        return psi, eps

    raise IOError, 'Unexpected ioption give in intepsphiout'
Exemple #12
0
def ex_igb_bix(fn='igstrain_bix_ph1.out',ifig=1,iphi=0,
               mxnst=None,flow=None):
    """
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    from MP.ssort import sh as sort
    difl, nphi, phis, nbeta, neps, eps = condition(fn=None)

    if flow!=None: eps = flow.epsilon_vm[::]
    else:          eps = eps * 2. ## Under condition balanced biaxial

    fig01 = plt.figure(ifig,figsize=(15.5,8.5))
    ax01=fig01.add_subplot(231)
    ax02=fig01.add_subplot(232)
    ax03=fig01.add_subplot(233)
    ax04=fig01.add_subplot(234)
    ax05=fig01.add_subplot(235)
    axes01 = [ax01,ax02,ax03,ax04,ax05]

    fig02 = plt.figure(ifig+1,figsize=(15.5,8.5))
    ax01=fig02.add_subplot(231)
    ax02=fig02.add_subplot(232)
    ax03=fig02.add_subplot(233)
    ax04=fig02.add_subplot(234)
    ax05=fig02.add_subplot(235)
    axes02 = [ax01,ax02,ax03,ax04,ax05]

    tdat = reader2(fn,iopt=2,isort=False)
    nst = len(tdat[0])
    npsi=len(tdat[0,0,0])

    rst = np.zeros((2,nst,nphi,npsi))
    sf2 = np.zeros((2,nst,nphi,npsi)) # f11 and f22

    markers=['o','x','+','^','d','*','o','x','+','^','d','*']
    colors =['r','g','b','k','m','y','r','g','b','k','m','y']
    axe_lab = [r'(a) $\varepsilon-F_{ij}\bar{\Sigma}_{ij}$',
               r'(b) $\bar{E}^{el}(\phi,\psi)$',
               r'(c) $\varepsilon^{hkl}$ and $F_{ij}\bar{\Sigma}_{ij}$',
               r'(d) $F_{ij}$',
               r'(e) $\bar{\Sigma}_{ij}$','(f)','(g)']

    if mxnst!=None: nst=mxnst

    for i in xrange(nst):
        ehkl  = tdat[0,i,iphi,:] #e(hkl)
        e     = tdat[1,i,iphi,:] #macro
        ehkle = tdat[2,i,iphi,:] #e-macro
        ige   = tdat[3,i,iphi,:] #e(hkl) - F^hkl_ij * Sij (ij=1,1 and 2,2)
        f11   = tdat[4,i,iphi,:] #F^hkl_11
        f22   = tdat[5,i,iphi,:] #F^hkl_22
        s11   = tdat[6,i,iphi,:] #S11
        s22   = tdat[7,i,iphi,:] #S22
        psi   = tdat[8,i,iphi,:] #psi
        sin2psi = np.sin(psi*np.pi/180.)**2

        x = np.sin(psi*np.pi/180.)**2
        y0 = ehkl-e; y1=e; y2=f11*s11+f22*s22; y3=f11; y4=f22;
        y5 = s11; y6= s22; y7=ehkl
        newx, Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7 = sort(
            x,y0,y1,y2,y3,y4,y5,y6,y7)
        ## ax01
        l, = axes01[0].plot(newx,Y0*1e6,markers[i])
        dum = ehkl - (f11*s11 + f22*s22)
        x = np.sin(psi*np.pi/180.)**2
        newx, newy = sort(x, dum)
        axes01[0].plot(newx,newy*1e6,'-',color=l.get_color())
        ## ax02
        axes01[1].plot(newx,Y1*1e6,markers[i],
           label=r'$\bar{E}^{\mathrm{eff}}$=%4.2f'%eps[i])
        ## ax03
        l, = axes01[2].plot(newx,Y7*1e6,markers[i])
        axes01[2].plot(newx,Y2*1e6,'-',color=l.get_color())
        ## ax04
        l, = axes01[3].plot(newx,Y3*1e6,markers[i])
        axes01[3].plot(newx,Y4*1e6,'-',color=l.get_color())
        ## ax05
        l, = axes01[4].plot(newx,Y5,markers[i])
        axes01[4].plot(newx,Y6,'-',color=l.get_color())
        if i==0:
            axes01[0].text(0.25,0.1,
                r'lines: $\varepsilon-(F_{11}\bar{\Sigma}_{11}$'+\
                r'$+F_{22}\bar{\Sigma}_{22})$',
                transform=axes01[0].transAxes)
            axes01[0].text(0.25,0.2,r'symbols: $\varepsilon-\bar{E}^{el} $',
                           transform = axes01[0].transAxes)
            axes01[2].text(0.6,0.3,r'symbols: $\varepsilon^{hkl}$',
                transform=axes01[2].transAxes)
            axes01[2].text(0.6,0.2,r'lines: $F_{ij}\bar{\Sigma_{ij}}$',
                 transform=axes01[2].transAxes)
            axes01[3].text(0.5,0.5,r'symbols: $F_{11}$',transform=
                           axes01[3].transAxes)
            axes01[3].text(0.5,0.4,r'lines: $F_{22}$',transform=
                           axes01[3].transAxes)
            axes01[4].text(0.5,0.5,r'symbols: $\bar{\Sigma}_{11}$',
                           transform=axes01[4].transAxes)
            axes01[4].text(0.5,0.4,r'lines: $\bar{\Sigma}_{22}$',
                           transform=axes01[4].transAxes)
            axes01[0].set_ylabel(r'IG strain $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[1].set_ylabel(r'Macro strain $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[2].set_ylabel(r'$\varepsilon^{hkl}(\phi,\psi)$'+\
                                     r' and $F_{ij}\bar{\Sigma}_{ij}$'+\
                                     r' $[\mu\varepsilon]$',
                                 dict(fontsize=15))
            axes01[3].set_ylabel(r'$F_{11}$ and $F_{22}$'+\
                                     r' $ [TPa^{-1}]$',
                                 dict(fontsize=15))
            axes01[4].set_ylabel(r'$\bar{\Sigma}_{11}$'+\
                                     r' and $\bar{\Sigma}_{22}$ [MPa]',
                                 dict(fontsize=15))

        for j in xrange(nphi):
            ehkl  = tdat[0,i,j,:] #e(hkl)
            e     = tdat[1,i,j,:] #macro
            ehkle = tdat[2,i,j,:] #e-macro
            ige   = tdat[3,i,j,:] #e(hkl) - F^hkl_ij * Sij (ij=1,1 and 2,2)
            f11   = tdat[4,i,j,:] #F^hkl_11
            f22   = tdat[5,i,j,:] #F^hkl_22
            s11   = tdat[6,i,j,:] #S11
            s22   = tdat[7,i,j,:] #S22
            psi   = tdat[8,i,j,:] #psi

            dum = ehkl - (f11*s11 + f22*s22)
            rst[0,i,j,:] = psi[:]
            rst[1,i,j,:] = dum[:]

            sf2[0,i,j,:]=f11[:]
            sf2[1,i,j,:]=f22[:]

            sin2psi = np.sin(psi*np.pi/180.)**2
            x = sin2psi
            y = ige*1e6

            newx, newy = sort(x,y)
            axes02[j].plot(newx,newy,'-')

            if i==0:
                axes02[j].set_title(r'$\phi=%3.0f^\circ$'%phis[j])
#    axes01[0].legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
    axes01[1].legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)

    for i in xrange(len(axes01)):
        #axes01[i].set_title(axe_lab[i])
        axes01[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes01[i].grid('on')

    for i in xrange(len(axes02)):
        axes02[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes02[i].set_ylabel(r'IG strain $[\mu\varepsilon]$', dict(fontsize=20))
        axes02[i].grid('on')
    fig01.tight_layout()
    fig02.tight_layout()
    fig01.savefig('bix_analysis.pdf')
    fig02.savefig('bix_eps0_at_phis.pdf')
    return rst, sf2 #rst[2,nst,nphi,npsi], sf2[2,nst,nphi,npsi]
Exemple #13
0
def ex_igb(fn='igstrain_fbulk_ph1.out',ifig=2,iphi=0,isf=0,
           mxnst=None,flow=None):
    """
    Read ig strain file and analyze... (igstrain_fbulk_ph1.out)

    igstrain_fbulk_ph1.out contains diffraction for each and every
    reloading from 'unloaded' polycrystal.

    Arguments
    =========
    fn = 'igstrain_fbulk_ph1.out'
    ifig = 2
    iphi=0
    isf=0
    mxnst=None
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    from MP.ssort import sh as sort
    from MP.mat import voigt
    from MP.lib.mpl_lib import wide_fig as wf

    difl, nphi, phis, nbeta, dum1, dum2 = condition(fn=None)

    if flow==None: raise IOError, 'Flow stress is missing'
    eps = flow.epsilon_vm[::]
    neps = flow.nstp

    nw = 4
    remainder = np.mod(neps,nw)
    if remainder==0:
        nh = neps/nw
    elif remainder>0:
        nh = neps/nw + 1

    fig  =wf(nw=2, nh=2,ifig=ifig,iarange=True);  axes  =fig.axes
    ax01, ax02, ax03, ax04 = axes
    fig01=wf(nw=nw,nh=nh,ifig=ifig+1,iarange=True,nfig=neps);axes01=fig01.axes
    fig02=wf(nw=nw,nh=nh,ifig=ifig+2,iarange=True,nfig=neps);axes02=fig02.axes
    fig03=wf(nw=nw,nh=nh,ifig=ifig+3,iarange=True,nfig=neps);axes03=fig03.axes
    fig04=wf(nw=nw,nh=nh,ifig=ifig+4,iarange=True,nfig=neps);axes04=fig04.axes

    tdat, usf = reader2(fn,iopt=1)
    print tdat.shape
    nsf = len(usf); nst = len(tdat[0]); npsi = len(tdat[0,0,0,0,:])
    if nst!=neps: raise IOError, 'Inconsistency between neps and nst'
    markers = ['o','x','+','^','d','*','o','x','+','^','d','*''o','x','+','^','d','*']
    colors  = ['r','g','b','k','m','y','r','g','b','k','m','y','r','g','b','k','m','y']
    from string import ascii_lowercase as alphabet
    axe_lab=[]
    for ab in alphabet: axe_lab.append('(%s)'%ab)
    yl = 0; yh = 0
    avg = np.zeros((2,nst,npsi)) #
    sft  = np.zeros((6,nst,npsi)) # f^{hkl}
    rsqt = np.zeros((6,nst,npsi)) # f^{hkl}

    if mxnst!=None: nst=mxnst
    for i in xrange(nst):
        ehkl  = tdat[0,i,isf,iphi,:] # e(hkl,phi,psi)
        e     = tdat[1,i,isf,iphi,:] # macro
        ehkle = tdat[2,i,isf,iphi,:] # e - macro
        fhkl  = tdat[3,i,isf,iphi,:] # Fhkl
        fbulk = tdat[4,i,isf,iphi,:] # Fbulk
        ige   = tdat[5,i,isf,iphi,:] # e - F_ij *Sij
        sij   = tdat[6,i,isf,iphi,:] # Sij
        psi   = tdat[8,i,isf,iphi,:]
        rsq   = tdat[9,i,isf,iphi,:]
        sin2psi = np.sin(psi*np.pi/180.)**2
        axes01[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes02[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes03[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        axes04[i].set_title(r'%s $\bar{E}^{\mathrm{eff}} = %4.2f$'%(
                axe_lab[i],eps[i]))
        igys = []; igos = []; igts = []
        for j in xrange(nsf): ## Number of elastic loading for stress factor calc.
            ehkl_ = tdat[0,i,j,iphi,:] # e(hkl,phi,psi)
            e_    = tdat[1,i,j,iphi,:] # macro
            fhkl_ = tdat[3,i,j,iphi,:] # Fhkl
            fbulk_= tdat[4,i,j,iphi,:] # Fbulk
            sij_  = tdat[6,i,j,iphi,:] # Sij
            rsq_  = tdat[6,i,j,iphi,:] # R^2

            sft[j,i,:]  = fhkl_[::] #
            rsqt[j,i,:] = rsq_[::]

            i1,i2 = usf[j]
            igo = ehkl_ - e_ ## old way
            igt = []
            m = 0
            for k in xrange(len(fbulk_)):
                if fbulk_[k]==0:
                    m=m+1
                    igt.append(0.)
                else: igt.append(
                        ehkl_[k] - \
                        fhkl_[k] / fbulk_[k] * e_[k])

            if m!=0: print m, 'case of fbulk'+\
               '(phi,psi)=0 happened'

            igt = np.array(igt)
            igy = ehkl_ - fhkl_ * sij_ ## new way (YJ)
            if j==0:
                igy_avg = igy/nsf
                igo_avg = igo/nsf
                igt_avg = igt/nsf
            else:
                igy_avg = igy_avg + igy/nsf
                igo_avg = igo_avg + igo/nsf
                igt_avg = igt_avg + igt/nsf
            igys.append(igy);igos.append(igo);igts.append(igt)

            # The old method
            if j==4: m = markers[j]
            else: m= '--'
            y = igo
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes01[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes01[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes01[i].grid('on')
            yl0, yh0 = axes01[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            # GHT
            y = igt
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes02[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes02[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes02[i].grid('on')
            yl0, yh0 = axes02[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            # YJ
            y = igy
            x = np.sin(psi[:]*np.pi/180.)**2
            newx,newy = sort(x,y) # shell sort
            axes03[i].plot(
                newx,newy*1e6,m,color=colors[j],
                label=r'$\Sigma_{%1i%1i}$'%(i1,i2))
            if i==0:axes03[i].legend(loc='best',
                fancybox=True).get_frame().set_alpha(0.5)
            if j==0:axes03[i].grid('on')
            yl0, yh0 = axes03[i].get_ylim()
            if yl0<yl: yl = yl0
            if yh0>yh: yh = yh0

            pass # over nsf

        # errors for 6 cases of SF loading
        igos = np.array(igos).swapaxes(0,1)
        igys = np.array(igys).swapaxes(0,1)
        igts = np.array(igts).swapaxes(0,1)
        igoe=[]; igye=[]; igte=[]
        for m in xrange(len(igo_avg)):
            igoe.append(igos[m].std())
            igte.append(igts[m].std())
            igye.append(igys[m].std())
        igoe,igte,igye = np.array(igoe),np.array(igte),np.array(igye)
        ##

        # average old
        y = igo_avg
        ye= igoe
        x = np.sin(psi[:]*np.pi/180.)**2
        newx, newy, newye = sort(x,y,ye)
        axes04[i].errorbar(
            x=newx,y=newy*1e6,yerr=newye*1e6,
            ls='-',color='r',label='old')

        # average YU
        y  = igy_avg
        avg[0,i,:] = psi[:]; avg[1,i,:] = y[:]

        ye = igye
        x  = np.sin(psi[:]*np.pi/180.)**2

        newx, newy, newye = sort(x,y,ye)

        axes04[i].errorbar(
            x=newx,y=newy*1e6,yerr=newye*1e6,
            ls='-',ms=3,color='b',label='YJ')
        axes04[i].grid('on')
        axes04[0].legend(loc='best',fancybox=True)\
            .get_frame().set_alpha(0.5)

        i1,i2 = voigt.ijv[:,isf]
        sin2psi = np.sin(psi*np.pi/180.)**2

        ax01.plot(sin2psi,ige*1e6,markers[i]#,color='k',
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        ax02.plot(sin2psi,ehkle*1e6,markers[i]#,color='k'
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        l, = ax04.plot(sin2psi,fhkl*1e6,markers[i]#,color='k'
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        if i==0: ax04.plot(sin2psi,fbulk*1e6,'-',alpha=0.2,color='k')
        # ax03.plot(sin2psi,e*1e6,markers[i],
        #           label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        ax03.plot(sin2psi,(ehkl-fhkl/fbulk*e)*1e6,markers[i]
           ,label=r'$\bar{E}^{\mathrm{eff}} = %4.2f$'%eps[i])
        sin2psi = np.sin(psi*np.pi/180.)**2

    ## Deco the axes
    for i in xrange(nst):
        axes01[i].set_ylim(yl,yh)
        axes02[i].set_ylim(yl,yh)
        axes03[i].set_ylim(yl,yh)
        #axes04[i].set_ylim(yl,yh)
        axes01[i].set_xlim(0.,); axes02[i].set_xlim(0.,)
        axes03[i].set_xlim(0.,); axes04[i].set_xlim(0.,)
    for i in xrange(len(axes)):
        axes[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes01[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes02[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes03[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        axes04[i].set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
    for i in xrange(len(axes)): axes[i].grid('on')
    for i in xrange(len(axes)): axes[i].set_xlim(0.,0.5)
    ax01.set_ylabel(
        r'$\varepsilon^{hkl} - F^{hkl}_{ij}\bar{\Sigma}_{ij}$'+\
        r'  $[\mu\varepsilon]$',dict(fontsize=15))
    ax02.set_ylabel(
        r'$\varepsilon^{hkl} - E$  $[\mu\varepsilon]$',dict(fontsize=15))
    ax03.set_ylabel(r'$\varepsilon^{hkl} - $'+
        r'$F_{ij}^{hkl}/F^{\mathrm{bulk}}_{ij}$'+
        r'$ \bar{E} $  $[\mu \varepsilon]$',dict(fontsize=15))
    ax04.set_ylabel(r'$F_{ij}^{hkl}, F^{\mathrm{bulk}}_{ij}$  $[TPa^{-1}]$',
        dict(fontsize=15))
    ax01.set_title(r'(a) $\varepsilon(hkl,%3.0f^\circ,\psi)$'\
        r'$ - F_{%1i%1i}(hkl,%3.0f^\circ,\psi)$'\
        r'$\bar{\Sigma}_{%1i%1i}$'%(phis[iphi],i1,i2,phis[iphi],i1,i2),
        dict(fontsize=13))
    ax02.set_title(
        r'(b) $\varepsilon(hkl,%3.0f^\circ,\psi)$'%(phis[iphi])+\
            r'$ - \bar{E}(%3.0f^\circ,\psi)$'%\
            (phis[iphi]),dict(fontsize=13))
    ax03.set_title(
        r'(c) $\varepsilon(hkl,%3.0f^\circ,\psi)$'%(phis[iphi])+
        r'$-F_{%1i%1i}(hkl,%3.0f^\circ,\psi)/$'%(i1,i2,phis[iphi])+
        r'$F_{%1i%1i}^{\mathrm{bulk}}(%3.0f^\circ,\psi)$'%(
            i1,i2,phis[iphi])+
        r'$\bar{E}(%3.0f^\circ,\psi)$'%(phis[iphi]),dict(fontsize=13))
    ax04.set_title(r'(d) $F^{hkl}_{%1i%1i}$ and '%(i1,i2)+\
                       r'$F^{\mathrm{bulk}}_{%1i%1i}$'%
                   (i1,i2), dict(fontsize=13))
    ax04.legend(loc='lower right',fancybox=True).get_frame().set_alpha(0.5)
    # fig.tight_layout(); fig01.tight_layout(); fig02.tight_layout()
    # fig03.tight_layout(); fig04.tight_layout()
    fig.savefig('ig_bulk.pdf');fig01.savefig('ig_bulk_Old.pdf')
    fig02.savefig('ig_bulk_GHT.pdf'); fig03.savefig('ig_bulk_YJ.pdf')
    fig04.savefig('ig_bulk_avg.pdf')
    ## save the averaged IG strain

    return avg, sft # avg[2,nst,npsi], sft[6,nst,npsi]
Exemple #14
0
def ex_igb_cf(fnu='igstrain_fbulk_ph1.out',
              fnl='igstrain_bix_ph1.out'):
    """
    compare the ig strain at load and unloads.
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    from MP.ssort import sh as sort
    difl, nphi, phis, nbeta, neps, eps = condition(fn=None)

    plt.ioff()
    avgu,sfs,rsqs=ex_igb_t(fn=fnu,fnout='igstrain_unloads_avg.out')   # at unlaods
    avgl=ex_igb_bix_t(fn=fnl,fnout='igstrain_loads_avg.out') # at loads

    print avgu.shape#[2,nst,nphi,nspi]
    print avgl.shape#[2,nst,iphi,npsi]

    plt.close('all'); plt.ion()

    fig = plt.figure(2,figsize=(15.5,8.5))
    fig02 = plt.figure(203); ax_dum=fig02.add_subplot(111)
    at = ['(a)','(b)','(c)','(d)','(e)','(f)']
    markers=['x','o','.','d','*']
    ls     =['--x','--o','--.','--d','--*']
    axes=[]
    for i in xrange(nphi):
        axes.append(fig.add_subplot(2,3,i+1))
    for ist in xrange(len(avgu[0])):
        for iphi in xrange(len(avgu[0][ist])):
            ax = axes[iphi]
            phi = phis[iphi]
            psi = avgu[0,ist,iphi,:]
            eu  = avgu[1,ist,iphi,:]
            el  = avgl[1,ist,iphi,:]
            sin2psi = np.sin(psi*np.pi/180.)**2

            x = sin2psi
            y0 = eu*1e6
            y1 = el*1e6
            newx,Y0,Y1 = sort(x,y0,y1)
            if iphi==0:
                l, = ax.plot(newx,Y0,'x',
                    label=r'$\bar{E}^{\mathrm{eff}}=%4.2f$'%(eps[ist]*2.0))
                ax_dum.plot(newx,Y0,markers[ist],color='k',
                            label=r'$\bar{E}^{\mathrm{eff}}=%4.2f$'%(eps[ist]*2.0))
                ax_dum.plot(newx,Y1,ls[ist],color='k')
            elif iphi!=0:
                l, = ax.plot(newx,Y0,'x')
            ax.plot(newx,Y1,'-',color=l.get_color())

    ax_dum.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
    ax_dum.set_ylabel(r'IG strains $[\mu\varepsilon]$', dict(fontsize=20))
    ax_dum.legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
    ax_dum.text(0.1, 0.85, 'Lines: at loads',transform=ax_dum.transAxes)
    ax_dum.text(0.1, 0.92, 'Symbols: at unloads',transform=ax_dum.transAxes)
    ax_dum.grid('on')
    fig02.tight_layout()
    fig02.savefig('ige_cf_phi1.pdf')

    for i in xrange(len(axes)):
        ax = axes[i]
        ph = phis[i]
        #ax.set_title(r'%s $\phi=%3.0f^\circ$'%(at[i],ph))
        ax.set_xlabel(r'$\sin^2{\psi}$', dict(fontsize=20))
        ax.set_ylabel(r'IG strains $[\mu\varepsilon]$', dict(fontsize=20))
        if i==0:
            ax.legend(loc='best',fancybox=True).get_frame().set_alpha(0.5)
            ax.text(0.1, 0.85, 'Lines: at loads',transform=ax.transAxes)
            ax.text(0.1, 0.92, 'Symbols: at unloads',transform=ax.transAxes)
        ax.grid('on')
    fig.tight_layout()
    fig.savefig('ige_cf.pdf')
Exemple #15
0
def ex_igb_t(fn="igstrain_fbulk_ph1.out", fnout="igstrain_unloads_avg.out", mxnst=None, flow=None):
    """

    Arguments
    =========
    fn   ='igstrain_fbulk_ph1.out'
    fnout='igstrain_unloads_avg.out'
    mxnst=None
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np

    difl, nphi, phis, nbeta, dum1, dum2 = condition(fn=None)
    if flow == None:
        raise IOError, "Flow should be given"
    elif flow != None:
        flow.get_eqv()
        eps = flow.epsilon_vm[::]

    avg = []
    sfs = []
    rsqs = []
    for i in xrange(nphi):
        a, sf, rsq = ex_igb(
            fn=fn, ifig=i * 7 + 1, iphi=i, isf=0, mxnst=mxnst, flow=flow
        )  # a[2,nst,npsi], sf[6,nst,npsi]
        avg.append(a)  # average ieps0
        sfs.append(sf)
        rsqs.append(rsq)

    avg = np.array(avg)  # avg[nphi,2,nst,npsi]
    avg = avg.swapaxes(0, 1)  # avg[2,nphi,nst, npsi]
    avg = avg.swapaxes(1, 2)  # avg[2,nst, nphi,npsi]

    sfs = np.array(sfs)  # sfs[nphi,6,nst,npsi]
    sfs = sfs.swapaxes(1, 3)  # [nphi,npsi,nst, 6]
    sfs = sfs.swapaxes(0, 2)  # [nst, npsi,nphi,6]
    sfs = sfs.swapaxes(1, 2)  # [nst, nphi,npsi,6]

    rsqs = np.array(rsqs)  # rsqs[nphi,6,nst,npsi]
    rsqs = rsqs.swapaxes(1, 3)  # [nphi,npsi,nst, 6]
    rsqs = rsqs.swapaxes(0, 2)  # [nst, npsi,nphi,6]
    rsqs = rsqs.swapaxes(1, 2)  # [nst, nphi,npsi,6]

    f = open(fnout, "w")
    f.writelines(
        "%3s %8s %13s %14s %14s %14s %14s %14s %14s\n"
        % ("phi", "psi", "eps0", "F11", "F22", "F33", "F23", "F13", "F12")
    )

    if mxnst == None:
        nst = len(sfs)
    else:
        nst = mxnst

    for ist in xrange(nst):
        f.writelines("-- eps^{eff}: %5.3f\n" % eps[ist])
        for iphi in xrange(len(avg[0][ist])):
            phi = phis[iphi]
            psi = avg[0, ist, iphi, :]
            ep = avg[1, ist, iphi, :]
            for i in xrange(len(psi)):
                ps = psi[i]
                e = ep[i]
                fij = sfs[ist, iphi, i, :]
                f.writelines("%3.0f %+7.2f %+12.7e" % (phi, ps, e))
                for j in xrange(len(fij)):
                    f.writelines(" %+12.7e" % fij[j])
                f.writelines("\n")
    f.close()
    return avg, sfs, rsqs  # avg[2,nst,nphi,npsi], sfs[
Exemple #16
0
def ex_igb_cf(fnu="igstrain_fbulk_ph1.out", fnl="igstrain_bix_ph1.out"):
    """
    compare the ig strain at load and unloads.
    """
    import matplotlib.pyplot as plt
    from sff_converter import condition
    import numpy as np
    from MP.ssort import sh as sort

    difl, nphi, phis, nbeta, neps, eps = condition(fn=None)

    plt.ioff()
    avgu, sfs, rsqs = ex_igb_t(fn=fnu, fnout="igstrain_unloads_avg.out")  # at unlaods
    avgl = ex_igb_bix_t(fn=fnl, fnout="igstrain_loads_avg.out")  # at loads

    print avgu.shape  # [2,nst,nphi,nspi]
    print avgl.shape  # [2,nst,iphi,npsi]

    plt.close("all")
    plt.ion()

    fig = plt.figure(2, figsize=(15.5, 8.5))
    fig02 = plt.figure(203)
    ax_dum = fig02.add_subplot(111)
    at = ["(a)", "(b)", "(c)", "(d)", "(e)", "(f)"]
    markers = ["x", "o", ".", "d", "*"]
    ls = ["--x", "--o", "--.", "--d", "--*"]
    axes = []
    for i in xrange(nphi):
        axes.append(fig.add_subplot(2, 3, i + 1))
    for ist in xrange(len(avgu[0])):
        for iphi in xrange(len(avgu[0][ist])):
            ax = axes[iphi]
            phi = phis[iphi]
            psi = avgu[0, ist, iphi, :]
            eu = avgu[1, ist, iphi, :]
            el = avgl[1, ist, iphi, :]
            sin2psi = np.sin(psi * np.pi / 180.0) ** 2

            x = sin2psi
            y0 = eu * 1e6
            y1 = el * 1e6
            newx, Y0, Y1 = sort(x, y0, y1)
            if iphi == 0:
                l, = ax.plot(newx, Y0, "x", label=r"$\bar{E}^{\mathrm{eff}}=%4.2f$" % (eps[ist] * 2.0))
                ax_dum.plot(
                    newx, Y0, markers[ist], color="k", label=r"$\bar{E}^{\mathrm{eff}}=%4.2f$" % (eps[ist] * 2.0)
                )
                ax_dum.plot(newx, Y1, ls[ist], color="k")
            elif iphi != 0:
                l, = ax.plot(newx, Y0, "x")
            ax.plot(newx, Y1, "-", color=l.get_color())

    ax_dum.set_xlabel(r"$\sin^2{\psi}$", dict(fontsize=20))
    ax_dum.set_ylabel(r"IG strains $[\mu\varepsilon]$", dict(fontsize=20))
    ax_dum.legend(loc="best", fancybox=True).get_frame().set_alpha(0.5)
    ax_dum.text(0.1, 0.85, "Lines: at loads", transform=ax_dum.transAxes)
    ax_dum.text(0.1, 0.92, "Symbols: at unloads", transform=ax_dum.transAxes)
    ax_dum.grid("on")
    fig02.tight_layout()
    fig02.savefig("ige_cf_phi1.pdf")

    for i in xrange(len(axes)):
        ax = axes[i]
        ph = phis[i]
        # ax.set_title(r'%s $\phi=%3.0f^\circ$'%(at[i],ph))
        ax.set_xlabel(r"$\sin^2{\psi}$", dict(fontsize=20))
        ax.set_ylabel(r"IG strains $[\mu\varepsilon]$", dict(fontsize=20))
        if i == 0:
            ax.legend(loc="best", fancybox=True).get_frame().set_alpha(0.5)
            ax.text(0.1, 0.85, "Lines: at loads", transform=ax.transAxes)
            ax.text(0.1, 0.92, "Symbols: at unloads", transform=ax.transAxes)
        ax.grid("on")
    fig.tight_layout()
    fig.savefig("ige_cf.pdf")