示例#1
0
def reader3(fn="igstrain_unloads_avg.out", isort=False):
    """
    Reader for files in the 'igstrain_unloads_avg.out' template.

    Arguments
    =========
    fn    = 'igstrain_unloads_avg.out'
    isort = False
    """
    from MP.ssort import sh as sort

    # from sff_converter import condition
    # difl, nphi, phis, nbeta, neps, eps = condition(difile)
    ds = open(fn, "r").read()
    blocks = ds.split("--")[1::]
    nstp = len(blocks)
    print "nstp:", nstp
    # file structure
    phis = []
    psis = []
    lines = blocks[0].split("\n")[1:-1]
    for il in xrange(len(lines)):
        phi, psi, eps, f11, f22, f33, f23, f13, f12 = map(float, lines[il].split())

        if not (phi in phis):
            phis.append(phi)
        if len(phis) == 1:
            psis.append(psi)

    dat = np.zeros((nstp, len(phis), len(psis)))
    fij = np.zeros((nstp, len(phis), len(psis), 6))
    for ist in xrange(nstp):
        ablock = blocks[ist]
        lines = ablock.split("\n")[1:-1]
        for iphi in xrange(len(phis)):
            x = []
            y = []
            z = []
            for ipsi in xrange(len(psis)):
                l = len(psis) * iphi + ipsi
                ph, ps, ep, f1, f2, f3, f4, f5, f6 = map(float, lines[l].split())
                x.append(ps)
                y.append(ep)
                z.append([f1, f2, f3, f4, f5, f6])
                if not (isort):
                    dat[ist, iphi, ipsi] = ep
                    fij[ist, iphi, ipsi, :] = z[0][:]
            if isort:
                sx, sy, sz = sort(x, y, z)
                for ix in xrange(len(sx)):
                    dat[ist, iphi, ix] = sy[ix]
                    fij[ist, iphi, ix, :] = sz[ix][:]

    if isort:
        psis = sort(psis)
    psis = np.array(psis)
    return dat, psis, fij
示例#2
0
def reader3(fn='igstrain_unloads_avg.out',isort=False):
    """
    Reader for files in the 'igstrain_unloads_avg.out' template.

    Arguments
    =========
    fn    = 'igstrain_unloads_avg.out'
    isort = False
    """
    from MP.ssort import sh as sort
    # from sff_converter import condition
    # difl, nphi, phis, nbeta, neps, eps = condition(difile)
    ds = open(fn,'r').read()
    blocks = ds.split('--')[1::]
    nstp = len(blocks)
    print 'nstp:', nstp
    # file structure
    phis = []; psis = []
    lines = blocks[0].split('\n')[1:-1]
    for il in xrange(len(lines)):
        phi,psi,eps,f11,f22,f33,f23,f13,f12 = \
            map(float,lines[il].split())

        if not(phi in phis): phis.append(phi)
        if len(phis)==1: psis.append(psi)

    dat = np.zeros((nstp,len(phis),len(psis)))
    fij = np.zeros((nstp,len(phis),len(psis),6))
    for ist in xrange(nstp):
        ablock = blocks[ist]
        lines = ablock.split('\n')[1:-1]
        for iphi in xrange(len(phis)):
            x=[]; y=[]; z=[]
            for ipsi in xrange(len(psis)):
                l = len(psis) * iphi + ipsi
                ph,ps,ep,f1,f2,f3,f4,f5,f6 = \
                    map(float, lines[l].split())
                x.append(ps); y.append(ep); z.append([f1,f2,f3,f4,f5,f6])
                if not(isort):
                    dat[ist,iphi,ipsi] = ep
                    fij[ist,iphi,ipsi,:] = z[0][:]
            if isort:
                sx, sy, sz = sort(x,y,z)
                for ix in xrange(len(sx)):
                    dat[ist,iphi,ix] = sy[ix]
                    fij[ist,iphi,ix,:] = sz[ix][:]

    if isort: psis = sort(psis)
    psis=np.array(psis)
    return dat, psis, fij
示例#3
0
文件: pepshkl.py 项目: youngung/rs
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]
示例#4
0
文件: pepshkl.py 项目: youngung/rs
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]
示例#5
0
文件: pepshkl.py 项目: youngung/rs
def ex02(fn='int_eps_ph1.out',istep=0,iphi=0,ax01=None,
         ax01x=None,ax02=None,
         label=None,ls=['-x','--o'],color='r'):
    """
    Arguments
    =========
    fn    = 'int_eps_ph1.out'
    istep = 0
    iphi  = 0
    ax01  = None
    ax01x = None
    ax02  = None
    label = None
    ls    = ['-x','--o']
    """
    import MP.ssort as sort
    sort = sort.shellSort
    psi1,psi2,eps1,eps2,sig1,sig2,\
        vol1,vol2,s11,s22,e11,e22,ngr1,ngr2=\
        reader(fn,istep,iphi,skiprows=2,iopt=3)

    sin2psi1 = np.sin(psi1*np.pi/180.)**2
    sin2psi2 = np.sin(psi2*np.pi/180.)**2

    if ax01==None or ax01x==None:
        fig01 = plt.figure(1)
        ax01  = fig01.add_subplot(211)
        ax02  = fig01.add_subplot(212)
        ax01x = ax01.twinx()
    if label==None:
        sin2psi1 = np.sin(psi1*np.pi/180.)**2
        sin2psi2 = np.sin(psi2*np.pi/180.)**2

        l0, = ax01.plot(sin2psi1,eps1,'r-x')
        ax01.plot(sin2psi2,eps2,'b-x')
        l1, = ax01x.plot(sin2psi1,sig1,'r--o')
        ax01x.plot(sin2psi2,sig2,'b--o')

#        l0, = ax01.plot(psi1,eps1,'r-x')
#        ax01.plot(psi2,eps2,'b-x')
#        l1, = ax01x.plot(psi1,sig1,'r--o')
#        ax01x.plot(psi2,sig2,'b--o')
    else:
        x = sin2psi1
        x,ind = sort(x)

        eps1 = ss(ind, eps1)

        ax01.plot(sin2psi2,eps2,'b'+ls[0],label=label)

        ngr1 = ss(ind, ngr1)
        l1, = ax01x.plot(
            x,ngr1,color+ls[0],label=label)
        #ax01x.plot(sin2psi2,sig2,'b'+ls[0],label=r'')
        vol1 = ss(ind, vol1)
        l2, = ax02.plot(
            x,vol1,color+ls[0],label=label)
        #ax02.plot(sin2psi2,vol2,'b'+ls[0],label=r'')

#        l0, = ax01.plot(psi1,eps1,'r'+ls[0],label=label)
#        ax01.plot(psi2,eps2,'b'+ls[0],label=r'')
#        l1, = ax01x.plot(psi1,sig1,'r'+ls[1],label=label)
#        ax01x.plot(psi2,sig2,'b'+ls[0],label=r'')
#        l2, = ax02.plot(psi1,vol1,'r'+ls[0],label=r'')
#        ax02.plot(psi2,vol2,'b'+ls[0],label=r'')

    if ax01==None or ax01x==None:
        ax01.legend([l0,l1],[r'$\varepsilon^2$',r'$\sigma^2$'])\
            .get_frame().set_alpha(0.5)
        ax01.set_xlabel(r'$\sin^2{\psi}$',dict(fontsize=28))
示例#6
0
文件: pepshkl.py 项目: youngung/rs
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')
示例#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 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]
示例#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 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]
示例#9
0
def ex02(fn='int_eps_ph1.out',istep=0,iphi=0,ax01=None,
         ax01x=None,ax02=None,
         label=None,ls=['-x','--o'],color='r'):
    """
    Arguments
    =========
    fn    = 'int_eps_ph1.out'
    istep = 0
    iphi  = 0
    ax01  = None
    ax01x = None
    ax02  = None
    label = None
    ls    = ['-x','--o']
    """
    import MP.ssort as sort
    sort = sort.shellSort
    psi1,psi2,eps1,eps2,sig1,sig2,\
        vol1,vol2,s11,s22,e11,e22,ngr1,ngr2=\
        reader(fn,istep,iphi,skiprows=2,iopt=3)

    sin2psi1 = np.sin(psi1*np.pi/180.)**2
    sin2psi2 = np.sin(psi2*np.pi/180.)**2

    if ax01==None or ax01x==None:
        fig01 = plt.figure(1)
        ax01  = fig01.add_subplot(211)
        ax02  = fig01.add_subplot(212)
        ax01x = ax01.twinx()
    if label==None:
        sin2psi1 = np.sin(psi1*np.pi/180.)**2
        sin2psi2 = np.sin(psi2*np.pi/180.)**2

        l0, = ax01.plot(sin2psi1,eps1,'r-x')
        ax01.plot(sin2psi2,eps2,'b-x')
        l1, = ax01x.plot(sin2psi1,sig1,'r--o')
        ax01x.plot(sin2psi2,sig2,'b--o')

#        l0, = ax01.plot(psi1,eps1,'r-x')
#        ax01.plot(psi2,eps2,'b-x')
#        l1, = ax01x.plot(psi1,sig1,'r--o')
#        ax01x.plot(psi2,sig2,'b--o')
    else:
        x = sin2psi1
        x,ind = sort(x)

        eps1 = ss(ind, eps1)

        ax01.plot(sin2psi2,eps2,'b'+ls[0],label=label)

        ngr1 = ss(ind, ngr1)
        l1, = ax01x.plot(
            x,ngr1,color+ls[0],label=label)
        #ax01x.plot(sin2psi2,sig2,'b'+ls[0],label=r'')
        vol1 = ss(ind, vol1)
        l2, = ax02.plot(
            x,vol1,color+ls[0],label=label)
        #ax02.plot(sin2psi2,vol2,'b'+ls[0],label=r'')

#        l0, = ax01.plot(psi1,eps1,'r'+ls[0],label=label)
#        ax01.plot(psi2,eps2,'b'+ls[0],label=r'')
#        l1, = ax01x.plot(psi1,sig1,'r'+ls[1],label=label)
#        ax01x.plot(psi2,sig2,'b'+ls[0],label=r'')
#        l2, = ax02.plot(psi1,vol1,'r'+ls[0],label=r'')
#        ax02.plot(psi2,vol2,'b'+ls[0],label=r'')

    if ax01==None or ax01x==None:
        ax01.legend([l0,l1],[r'$\varepsilon^2$',r'$\sigma^2$'])\
            .get_frame().set_alpha(0.5)
        ax01.set_xlabel(r'$\sin^2{\psi}$',dict(fontsize=28))
示例#10
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')
示例#11
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")