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 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
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
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[::]
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]
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]
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')
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'
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'
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]
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]
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')
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[
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")