def plot(self, nbin_sin2psi=2, iopt=0, ylim=None, mxnphi=None, hkl='211'): from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.cm as cm if hasattr(self, 'vf'): nh = 2 else: nh = 1 if mxnphi == None: mxnphi = self.nphi figs = wide_fig(nw=mxnphi, nh=nh, w0=0, w1=0, left=0.2, right=0.15) # mx = max(self.flow.epsilon_vm) # mn = min(self.flow.epsilon_vm) mx = 1. mn = 0. norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx, mn=mn) colors = [] self.flow.nstp = len(self.flow.epsilon_vm) for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) if i == 0: colors.append(cl) y = self.ig[j, i, :] figs.axes[i].plot(np.sign(self.psi) * sin(self.psi * np.pi / 180.)**2, y, '-x', color=cl) if j == 0: figs.axes[i].set_title(r'$\phi: %3.1f^\circ{}$' % self.phi[i]) deco = axes_label.__deco__ rm_inner = mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u deco(figs.axes[0], iopt=2, ipsi_opt=1) for i in xrange(len(figs.axes)): figs.axes[i].set_xlim(-0.5, 0.5) mpl_lib.tune_xy_lim(figs.axes) rm_inner(figs.axes) ticks_bin_u(figs.axes, n=4) # color bar b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88, b.y0, 0.03, b.y1 - b.y0]) mpl_lib.add_cb(ax=axcb, filled=False, norm=norm, levels=self.flow.epsilon_vm, colors=colors, ylab='Equivalent strain')
def plot_all(self): """ Plot dhkl against psi """ from MP.lib import mpl_lib wide_fig = mpl_lib.wide_fig tune_xy_lim = mpl_lib.tune_xy_lim from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl deco = axes_label.__deco__ rm_inner =mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u figs = wide_fig(nw=self.nphi,nh=2,w0=0,w1=0, left=0.2,right=0.15, useOffset=False) mx = max(self.flow.epsilon_vm) mn = min(self.flow.epsilon_vm) norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx = mx, mn=mn) for i in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[i] cl = c.to_rgba(eps) for j in xrange(self.nphi): X = self.psi Y = [] for ipsi in xrange(self.npsi): y = self.P_scan[i].protophi[j].\ ppscans[ipsi].dspc Y.append(y) figs.axes[j].plot(X,Y,'-x',color=cl) _Y_=np.array(Y).copy() _Y_ = (_Y_+_Y_[::-1])/2. # _Y_ = _Y_[:len(_Y_)/2+1] figs.axes[j+self.nphi].plot(X,_Y_,'-x',color=cl) if i==0: figs.axes[j].set_title( r'$\phi: %3.1f^\circ{}$'%self.phi[j]) figs.axes[j+self.nphi].set_title( r'$\phi: %3.1f^\circ{}$'%self.phi[j]) ticks_bin_u(figs.axes,n=4) deco(figs.axes[0+self.nphi],iopt=4) tune_xy_lim(figs.axes) rm_inner(figs.axes) b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88,b.y0,0.03,b.y1-b.y0]) mpl_lib.add_cb(axcb,cmap=cmap,filled=True, ylab='Equivalent Strain', norm=norm,format='%5.3f')
def plot(self, nbin_sin2psi=2, iopt=0,ylim=None, mxnphi=None,hkl='211'): from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.cm as cm if hasattr(self,'vf'): nh = 2 else: nh = 1 if mxnphi==None: mxnphi = self.nphi figs = wide_fig(nw=mxnphi,nh=nh,w0=0,w1=0, left=0.2,right=0.15) # mx = max(self.flow.epsilon_vm) # mn = min(self.flow.epsilon_vm) mx = 1. mn = 0. norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx,mn=mn) colors=[] self.flow.nstp = len(self.flow.epsilon_vm) for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) if i==0: colors.append(cl) y = self.ig[j,i,:] figs.axes[i].plot( np.sign(self.psi)*sin(self.psi*np.pi/180.)**2, y,'-x',color=cl) if j==0: figs.axes[i].set_title( r'$\phi: %3.1f^\circ{}$'%self.phi[i]) deco = axes_label.__deco__ rm_inner =mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u deco(figs.axes[0],iopt=2,ipsi_opt=1) for i in xrange(len(figs.axes)): figs.axes[i].set_xlim(-0.5,0.5) mpl_lib.tune_xy_lim(figs.axes) rm_inner(figs.axes) ticks_bin_u(figs.axes,n=4) # color bar b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88,b.y0,0.03,b.y1-b.y0]) mpl_lib.add_cb(ax=axcb,filled=False,norm=norm, levels=self.flow.epsilon_vm, colors=colors,ylab='Equivalent strain')
def plot_xy_disc_e33dot( dat, istp=-1, ax=None, icol=11, fang=90, dist_bb=[5, 10], ## backbone dist_rb=[1, 5]): """ Extract DIC data from 'disc' area """ from MP.lib.mpl_lib import wide_fig as wf from MP.lib.mpl_lib import rm_all_lab as ral import matplotlib as mpl from MP.lib import mpl_lib from MP import ssort sort = ssort.shellSort d = dat[istp, :, :] dz = np.log10(abs(d[:, icol])) for i in range(len(dz)): if dz[i] == np.inf or dz[i] == -np.inf: dz[i] = np.nan mn = min(dz) mx = max(dz) norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, m = mpl_lib.norm_cmap(mn=mn, mx=mx, cm_name='brg') n = d.shape[0] ## find values in the back-bone branch shape ids = [] xs = [] ys = [] zs = [] for i in range(n): x, y, z = d[i, 0], d[i, 1], -d[i, icol] if np.isnan(z): pass else: zs.append(d[i, icol]) ids.append(i) xs.append(d[i, 0]) ys.append(d[i, 1]) c = m.to_rgba(np.log10(z)) ax.plot(x, y, 'o', ms=1.5, color=c, mfc=c, mec='None') val, ind = sort(zs) imn = ids[ind[0]] ax.plot(d[imn, 0], d[imn, 1], 'g.') ## minimum ## draw a backbone grid x0, y0 = d[imn, 0], d[imn, 1] # center of backbone db = np.array(dist_bb) dr = np.array(dist_rb) DB = [] DR = [] for i in range(len(db)): DB.append(-db[-i - 1]) DB.append(0) for i in range(len(db)): DB.append(db[i]) for i in range(len(dr)): DR.append(-dr[-i - 1]) DR.append(0) for i in range(len(dr)): DR.append(dr[i]) db = DB[::] dr = DR[::] xy_db_dr = np.zeros((len(db), len(dr), 2)) for i in range(len(db)): for j in range(len(dr)): xy_db_dr[i, j, :] = db[i], dr[j] ## rotate xy by fang for i in range(len(db)): for j in range(len(dr)): y, x = xy_db_dr[i, j, :] xy_db_dr[i, j, :] = rot_xy([x, y], fang) ## translate xy_db_dr[:, :, 0] = xy_db_dr[:, :, 0] + x0 xy_db_dr[:, :, 1] = xy_db_dr[:, :, 1] + y0 ## print xy_db_dr.shape ## return xy_db_dr if len(db) > 3: nw = len(db) / 3 nh = 4 fig = wf(nw=nw, nh=nh, w0=0.0, ws=1.0, w1=0.0, h0=0.0, hs=1.0, h1=0.0, uw=2.3, uh=2.3, left=0.2, up=0.1, down=0.2, iarange=True) fig1 = wf(nw=2, nh=2, w0=0.1, ws=0.7, w1=0.2, h0=0.1, hs=0.7, h1=0.2, uw=2.3, uh=2.3, left=0.2, up=0.1, down=0.2, iarange=True) iax = 0 sym = [ 'k^', 'k+', 'kd', 'kx', 'k<', 'k>', 'k*', 'k1', 'k2', 'k3', 'k4', 'k8', 'ks', 'kp', 'kh', 'kH', 'kD' ] ## thickness strain rate epst_dot_av = [] epst_dot_std = [] ## epsxx exx_av = [] exx_std = [] ## epsyy eyy_av = [] eyy_std = [] for i in range(len(db)): indices_along_ribs = [] for j in range(len(dr)): x, y = xy_db_dr[i, j, :] ind = find_nearest([x, y], xs, ys, err=2) if not (np.isnan(ind)): indices_along_ribs.append(ids[ind]) epsx = [] epsy = [] epst_dot = [] coord = [] for k in range(len(indices_along_ribs)): indx = indices_along_ribs[k] x = d[indx, 0] y = d[indx, 1] coord.append([x, y]) ## ax.plot(x,y,sym[i],ms=3) ex = dat[:, indx, 3] ey = dat[:, indx, 4] et = dat[:, indx, 12] ex_d = dat[:, indx, 9] ey_d = dat[:, indx, 10] ez_d = ex_d + ey_d ## positive value epst_dot.append(ez_d) epsx.append(ex) epsy.append(ey) fig.axes[iax].plot(ez_d) iax = iax + 1 x, y = np.array(coord).T[:] ax.plot(x, y, '-', color='k', alpha=0.5) epst_dot = np.array(epst_dot).T epsx = np.array(epsx).T epsy = np.array(epsy).T D = [] D_e = [] E_ex = [] E_exe = [] E_ey = [] E_eye = [] for j in range(len(epst_dot)): ## number of ribs D.append(np.mean(epst_dot[j])) D_e.append(np.std(epst_dot[j])) E_ex.append(np.mean(epsx[j])) E_exe.append(np.std(epsx[j])) E_ey.append(np.mean(epsy[j])) E_eye.append(np.std(epsy[j])) ## fig1.axes[0].plot(D,label=db[i]) epst_dot_av.append(D) epst_dot_std.append(D_e) exx_av.append(E_ex) exx_std.append(E_exe) eyy_av.append(E_ey) eyy_std.append(E_eye) ## find maximum D value's index to trim the data ndat = (len(epst_dot_av) - 1) / 2 + 1 ref = epst_dot_av[ndat - 1] ## data at necking center spot _ref_ = [] _ind_ = [] for i in range(len(ref)): if not (np.isnan(ref[i])): _ref_.append(ref[i]) _ind_.append(i) _val_, _i_ = sort(_ref_) ix = _ind_[_i_[-1]] mdat = np.zeros((2, 2, ndat)) c = [] for i in range(ndat): i0 = i i1 = -i - 1 ## thickness strain rate d1 = epst_dot_av[i0] d2 = epst_dot_av[i1] e1 = epst_dot_std[i0] e2 = epst_dot_std[i1] d = [] e = [] ## epsilon xx ex1 = exx_av[i0] ex2 = exx_av[i1] exe1 = exx_std[i0] exe2 = exx_std[i1] ex = [] exe = [] ## epsilon yy ey1 = eyy_av[i0] ey2 = eyy_av[i1] eye1 = eyy_std[i0] eye2 = eyy_std[i1] ey = [] eye = [] for j in range(len(d1)): # along the time axis d.append((d1[j] + d2[j]) / 2.) e.append((e1[j] + e2[j]) / 2.) ex.append((ex1[j] + ex2[j]) / 2.) exe.append((exe1[j] + exe2[j]) / 2.) ey.append((ey1[j] + ey2[j]) / 2.) eye.append((eye1[j] + eye2[j]) / 2.) xind = np.arange(len(d)) + 1 p = 0.7 i0 = int(float(len(xind)) * p) ## find maximum value and index? l, = fig1.axes[0].plot(xind, d, '-', label=abs(db[-i - 1])) fig1.axes[1].plot(xind[i0:ix + 1], d[i0:ix + 1], '+') fig1.axes[2].errorbar(xind[i0:ix + 1], d[i0:ix + 1], yerr=e1[i0:ix + 1], fmt='+') l, = fig1.axes[3].plot(ex[i0:ix + 1], ey[i0:ix + 1]) fig1.axes[3].errorbar(ex[ix], ey[ix], color=l.get_color(), xerr=exe[ix], yerr=eye[ix]) mdat[0, 0, i] = ex[ix] mdat[0, 1, i] = ey[ix] mdat[1, 0, i] = exe[ix] mdat[1, 1, i] = eye[ix] c.append(l.get_color()) ## deco from MP.lib.mpl_lib import tune_xy_lim tune_xy_lim(fig.axes) fig1.axes[2].set_yscale('log') fig1.axes[2].set_ylim(1e-3) fig1.axes[0].legend(loc='best',ncol=2,fontsize=5).\ get_frame().set_alpha(0.5) return fig, fig1, mdat, c
def plot_xy_disc_e33dot( dat,istp=-1,ax=None,icol=11,fang=90, dist_bb=[5,10], ## backbone dist_rb=[1,5]): """ Extract DIC data from 'disc' area """ from MP.lib.mpl_lib import wide_fig as wf from MP.lib.mpl_lib import rm_all_lab as ral import matplotlib as mpl from MP.lib import mpl_lib from MP import ssort sort=ssort.shellSort d=dat[istp,:,:] dz = np.log10(abs(d[:,icol])) for i in range(len(dz)): if dz[i]==np.inf or dz[i]==-np.inf: dz[i] = np.nan mn=min(dz);mx=max(dz) norm=mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, m = mpl_lib.norm_cmap( mn=mn,mx=mx,cm_name='brg') n=d.shape[0] ## find values in the back-bone branch shape ids = []; xs = []; ys = []; zs = [] for i in range(n): x,y,z=d[i,0],d[i,1],-d[i,icol] if np.isnan(z): pass else: zs.append(d[i,icol]) ids.append(i) xs.append(d[i,0]) ys.append(d[i,1]) c = m.to_rgba(np.log10(z)) ax.plot(x,y,'o',ms=1.5, color=c,mfc=c,mec='None') val, ind = sort(zs) imn = ids[ind[0]] ax.plot(d[imn,0],d[imn,1],'g.') ## minimum ## draw a backbone grid x0,y0=d[imn,0],d[imn,1] # center of backbone db=np.array(dist_bb); dr=np.array(dist_rb) DB=[]; DR=[] for i in range(len(db)): DB.append(-db[-i-1]) DB.append(0) for i in range(len(db)): DB.append(db[i]) for i in range(len(dr)): DR.append(-dr[-i-1]) DR.append(0) for i in range(len(dr)): DR.append(dr[i]) db=DB[::];dr=DR[::] xy_db_dr = np.zeros((len(db),len(dr),2)) for i in range(len(db)): for j in range(len(dr)): xy_db_dr[i,j,:] = db[i], dr[j] ## rotate xy by fang for i in range(len(db)): for j in range(len(dr)): y,x = xy_db_dr[i,j,:] xy_db_dr[i,j,:] = rot_xy([x,y],fang) ## translate xy_db_dr[:,:,0] = xy_db_dr[:,:,0] + x0 xy_db_dr[:,:,1] = xy_db_dr[:,:,1] + y0 ## print xy_db_dr.shape ## return xy_db_dr if len(db)>3: nw = len(db)/3 nh = 4 fig=wf(nw=nw,nh=nh,w0=0.0,ws=1.0,w1=0.0, h0=0.0,hs=1.0,h1=0.0,uw=2.3,uh=2.3, left=0.2,up=0.1,down=0.2,iarange=True) fig1=wf(nw=2,nh=2,w0=0.1,ws=0.7,w1=0.2, h0=0.1,hs=0.7,h1=0.2,uw=2.3,uh=2.3, left=0.2,up=0.1,down=0.2,iarange=True) iax=0 sym=['k^','k+','kd','kx','k<','k>','k*', 'k1','k2','k3','k4','k8','ks','kp', 'kh','kH','kD'] ## thickness strain rate epst_dot_av = []; epst_dot_std = [] ## epsxx exx_av = []; exx_std = [] ## epsyy eyy_av = []; eyy_std = [] for i in range(len(db)): indices_along_ribs = [] for j in range(len(dr)): x,y = xy_db_dr[i,j,:] ind = find_nearest([x,y],xs,ys,err=2) if not(np.isnan(ind)): indices_along_ribs.append(ids[ind]) epsx = []; epsy = []; epst_dot = [] coord = [] for k in range(len(indices_along_ribs)): indx = indices_along_ribs[k] x = d[indx,0]; y = d[indx,1] coord.append([x,y]) ## ax.plot(x,y,sym[i],ms=3) ex=dat[:,indx,3] ey=dat[:,indx,4] et=dat[:,indx,12] ex_d=dat[:,indx,9] ey_d=dat[:,indx,10] ez_d=ex_d+ey_d ## positive value epst_dot.append(ez_d) epsx.append(ex) epsy.append(ey) fig.axes[iax].plot(ez_d) iax = iax + 1 x,y = np.array(coord).T[:] ax.plot(x,y,'-',color='k',alpha=0.5) epst_dot=np.array(epst_dot).T epsx =np.array(epsx).T epsy =np.array(epsy).T D = []; D_e = []; E_ex = []; E_exe = []; E_ey = []; E_eye = []; for j in range(len(epst_dot)): ## number of ribs D.append(np.mean(epst_dot[j])) D_e.append(np.std(epst_dot[j])) E_ex.append(np.mean(epsx[j])) E_exe.append(np.std(epsx[j])) E_ey.append(np.mean(epsy[j])) E_eye.append(np.std(epsy[j])) ## fig1.axes[0].plot(D,label=db[i]) epst_dot_av.append(D) epst_dot_std.append(D_e) exx_av.append(E_ex) exx_std.append(E_exe) eyy_av.append(E_ey) eyy_std.append(E_eye) ## find maximum D value's index to trim the data ndat = (len(epst_dot_av)-1)/2+1 ref=epst_dot_av[ndat-1] ## data at necking center spot _ref_=[]; _ind_ =[] for i in range(len(ref)): if not(np.isnan(ref[i])): _ref_.append(ref[i]); _ind_.append(i) _val_, _i_ = sort(_ref_) ix = _ind_[_i_[-1]] mdat = np.zeros((2,2,ndat)) c = [] for i in range(ndat): i0 = i i1 = -i -1 ## thickness strain rate d1=epst_dot_av[i0]; d2=epst_dot_av[i1] e1=epst_dot_std[i0]; e2=epst_dot_std[i1] d =[]; e=[] ## epsilon xx ex1 = exx_av[i0]; ex2 = exx_av[i1] exe1 = exx_std[i0]; exe2 = exx_std[i1] ex=[]; exe=[] ## epsilon yy ey1 = eyy_av[i0]; ey2 = eyy_av[i1] eye1 = eyy_std[i0]; eye2 = eyy_std[i1] ey=[]; eye=[] for j in range(len(d1)): # along the time axis d.append((d1[j]+d2[j])/2.) e.append((e1[j]+e2[j])/2.) ex.append((ex1[j]+ex2[j])/2.) exe.append((exe1[j]+exe2[j])/2.) ey.append((ey1[j]+ey2[j])/2.) eye.append((eye1[j]+eye2[j])/2.) xind=np.arange(len(d))+1 p = 0.7 i0 = int(float(len(xind))*p) ## find maximum value and index? l, =fig1.axes[0].plot(xind,d,'-',label=abs(db[-i-1])) fig1.axes[1].plot(xind[i0:ix+1],d[i0:ix+1],'+') fig1.axes[2].errorbar(xind[i0:ix+1],d[i0:ix+1], yerr=e1[i0:ix+1],fmt='+') l, =fig1.axes[3].plot(ex[i0:ix+1],ey[i0:ix+1]) fig1.axes[3].errorbar( ex[ix],ey[ix],color=l.get_color(), xerr=exe[ix],yerr=eye[ix]) mdat[0,0,i] = ex[ix] mdat[0,1,i] = ey[ix] mdat[1,0,i] = exe[ix] mdat[1,1,i] = eye[ix] c.append(l.get_color()) ## deco from MP.lib.mpl_lib import tune_xy_lim tune_xy_lim(fig.axes) fig1.axes[2].set_yscale('log') fig1.axes[2].set_ylim(1e-3) fig1.axes[0].legend(loc='best',ncol=2,fontsize=5).\ get_frame().set_alpha(0.5) return fig,fig1,mdat,c
def plot(self,nbin_sin2psi=2,iopt=0,ylim=None, mxnphi=None,hkl='211'): """ Arguments ========= nbin_sin2psi = 2 iopt = iopt ylim = None mxnphi = None hkl = '211' """ from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.cm as cm import matplotlib.pyplot as plt if hasattr(self, 'vf'): nh = 3 else: nh = 2 if type(mxnphi)==type(None): mxnphi = self.nphi figs = wide_fig(nw=mxnphi,nh=nh,w0=0,w1=0, left=0.2,right=0.15) mx = max(self.flow.epsilon_vm) mn = min(self.flow.epsilon_vm) #mx = 1. #mn = 0. norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx,mn=mn) colors=[] self.flow.nstp = len(self.flow.epsilon_vm) for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) if i==0: colors.append(cl) y = self.sf[j,i,:,0].copy() * 1e12 l, = figs.axes[i].plot( np.sign(self.psi)*sin(self.psi*np.pi/180.)**2, y,'-x',color=cl) y = self.sf[j,i,:,1].copy() * 1e12 figs.axes[i+mxnphi].plot( np.sign(self.psi)*sin(self.psi*np.pi/180.)**2, y,'-+',color=cl) if j==0: figs.axes[i].set_title( r'$\phi: %3.1f^\circ{}$'%self.phi[i]) if nh==3: for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) y = self.vf[j,i,:] figs.axes[i+mxnphi*2].plot( np.sign(self.psi)*sin(self.psi*np.pi/180.)**2, y,'-',color=cl) deco = axes_label.__deco__ rm_inner =mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u rm_inner(figs.axes[:mxnphi*2]) if nh==3: rm_inner(figs.axes[mxnphi*2:mxnphi*3]) deco(figs.axes[0],iopt=1,ipsi_opt=1,hkl=hkl) if nh==3: deco(figs.axes[mxnphi*2],iopt=7,ipsi_opt=1,hkl=hkl) mpl_lib.tune_xy_lim(figs.axes[:mxnphi*2]) if ylim!=None: for i in xrange(len(figs.axes[:mxnphi*2])): figs.axes[i].set_ylim(ylim) if nh==3: mpl_lib.tune_xy_lim(figs.axes[mxnphi*2:mxnphi*3]) ticks_bin_u(figs.axes[:mxnphi*2],n=4) if nh==3: ticks_bin_u(figs.axes[mxnphi*2:mxnphi*3],n=4) # color bar b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88,b.y0,0.03,b.y1-b.y0]) mpl_lib.add_cb(ax=axcb,filled=False,norm=norm, levels=self.flow.epsilon_vm, format='%5.3f', colors=colors,ylab='Equivalent strain') if nh==1 or nh==2: return """ SF(phi,psi) vs plastic strain """ ## binning sin2psi nbin = nbin_sin2psi indx = self.__binning__(nbin=nbin,mx=0.5) for i in xrange(len(indx)): print '%i bin'%(i+1) for j in xrange(len(indx[i])): print '%4i'%indx[i][j], print '%4.2f'%(self.sin2psi[indx[i][j]]), print if mxnphi!=None: mxnphi=self.nphi figs_p = wide_fig(nw=mxnphi,nh=nbin, w0=0,w1=0,left=0.2,right=0.15) eps = self.flow.epsilon_vm for i in xrange(mxnphi): for j in xrange(nbin): ax = figs_p.axes[i+mxnphi*j] if j==nbin-1: ax.set_title( r'$\phi: %3.1f^\circ{}$'%self.phi[i]) idx = indx[j] for k in xrange(len(idx)): y = self.sf[:,i,[idx[k]],0][::] ax.plot(eps,y,'x') for i in xrange(nbin): axes=[] for j in xrange(mxnphi*2): axes.append(figs_p.axes[j+mxnphi*i]) #mpl_lib.tune_xy_lim(axes) if i==0 and j==0: rm_inner(axes[1:]) else: rm_inner(axes) deco(figs_p.axes[0],iopt=6,hkl=hkl) mpl_lib.tune_xy_lim(figs_p.axes) #print 'no' ticks_bin_u(figs_p.axes,n=3) if ylim!=None: for i in xrange(len(figs_p.axes)): figs_p.axes[i].set_ylim(ylim) if iopt==1: for i in xrange(len(figs.axes)): figs.axes[i].set_xlim(0.0,0.5) for i in xrange(3): figs.axes[i].set_ylim(-2,2) figs.axes[3+i].set_ylim(0.,0.1) plt.draw();plt.show()
def main( path="../dat/BB/", fref="Bsteel_fref_DIC.txt", fn_sf="YJ_BB_10times.sff", fexp=None, iso_SF=False, ishow=False, ind_plot=False, psi_offset=0.0, psi_sym=False, fc=None, fn_str=None, ifix_d0=False, d0_ref=1.17025, iwgt=False, ): """ Arguments ========= path fref fn_sf fexp iso_SF ishow ind_plot psi_offset psi_sym fc fn_str ifix_d0 d0_ref=1.17025 iwgt=False """ from MP.mat import mech from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages eqv = axes_label.__eqv__ tune_xy_lim = mpl_lib.tune_xy_lim deco = axes_label.__deco__ rm_inner = mpl_lib.rm_inner rm_lab = mpl_lib.rm_lab ticks_bin_u = mpl_lib.ticks_bins_ax_u plt.ioff() if type(fexp) == type(None): fexp = ("/Users/yj/repo/evpsc-dev/" "exp_dat/Bsteel/bulge/EXP_BULGE_JINKIM.txt",) RS_graphs = PdfPages("RS_Graphs.pdf") mystress = StressAnalysis(path=path, fref=fref, fn_sf=fn_sf, isym=psi_sym, fc_sf=fc, fn_str=fn_str) if psi_offset != 0: mystress.put_psi_offset(psi_offset) if psi_sym: print "psi symmetry has been applied." mystress.apply_sym() mystress.nstp mystress.EXP.plot_all() RS_graphs.savefig(plt.gcf()) # isotropic stress factor? if iso_SF: mystress.SF.get_iso_sf(E=204e9, nu=0.3) # calc stress eps_vm = mystress.EXP.flow.epsilon_vm dknot = [] s11 = [] s22 = [] # s12 = [] Eis = [] eps = [] igs = [] d_ehkl = np.zeros((mystress.EXP.nphi)) for istp in xrange(mystress.nstp): stress, d0 = mystress.find_sigma(ivo=[0, 1], istp=istp, iplot=False, iwgt=iwgt, ifix_d0=ifix_d0, d0=d0_ref) dknot.append(d0) s11.append(stress[0]) s22.append(stress[1]) Eis.append(mystress.Ei) # fitted Ei ehkl = mystress.EXP.ehkl[istp] # experimental eps_hkl ig = mystress.IG.ig[istp] # experimental eps_ig eps.append(ehkl.copy()) igs.append(ig.copy()) if istp == 0: for iphi in xrange(mystress.EXP.nphi): d_ehkl[iphi] = np.array(ehkl[iphi][::]).std() print "-----------------------------------" print "Standard deviation in d_ehkl at istp=0\n" print "phi:", for iphi in xrange(mystress.EXP.nphi): print "%7.0f " % mystress.EXP.phis[iphi], print "avg" print "std:", for iphi in xrange(mystress.EXP.nphi): print "%7.1e " % d_ehkl[iphi], print "%7.1e " % d_ehkl.mean() # macro flow object mystress.flow = mech.FlowCurve() mystress.flow.get_stress(s11, 0, 0) mystress.flow.get_stress(s22, 1, 1) mystress.flow.set_zero_sigma_ij(i=2, j=2) # mystress.flow.get_stress(s12,0,1) # mystress.flow.get_stress(s12,1,0) mystress.flow.set_zero_sigma_ij(i=0, j=1) mystress.flow.set_zero_sigma_ij(i=1, j=0) mystress.flow.set_zero_sigma_ij(i=2, j=1) mystress.flow.set_zero_sigma_ij(i=1, j=2) mystress.flow.set_zero_sigma_ij(i=0, j=2) mystress.flow.set_zero_sigma_ij(i=2, j=0) mystress.flow.get_vm_stress() # ------------------------------------------------------------# # plots that illustrate the fitted curves... Eis = np.array(Eis) eps = np.array(eps) igs = np.array(igs) figs = wide_fig(nw=mystress.EXP.nphi, w0=0, w1=0, left=0.2, right=0.15) from MP.lib import mpl_lib # mx = eps_vm[mystress.EXP.flow.nstp-1], # mn = eps_vm[0]) mx = 1.0 mn = 0.0 norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx, mn=mn) # c.to_rbga() for iphi in xrange(mystress.EXP.nphi): x = mystress.EXP.psi ax = figs.axes[iphi] ax.set_title(r"$\phi: %3.1f^\circ{}$" % mystress.EXP.phi[iphi]) for istp in xrange(mystress.EXP.flow.nstp): y_fit = Eis[istp, iphi] y1 = eps[istp, iphi] # e^{hkl} y0 = igs[istp, iphi] # e^{ig} y_exp = y1 - y0 ax.plot(x, y_fit, "--", color=c.to_rgba(eps_vm[istp])) ax.plot(x, y_exp, "x", color=c.to_rgba(eps_vm[istp])) deco(ax=figs.axes[0], iopt=5) rm_inner(figs.axes) ticks_bin_u(figs.axes) tune_xy_lim(figs.axes) b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88, b.y0, 0.03, b.y1 - b.y0]) mpl_lib.add_cb(axcb, cmap=cmap, filled=True, ylab="Equivalent Strain", norm=norm) RS_graphs.savefig(plt.gcf()) # ------------------------------------------------------------# # Save fitted curves into individual plots to pdf files if ind_plot: from matplotlib.backends.backend_pdf import PdfPages pdf_pages = PdfPages("Fit_results.pdf") x = mystress.EXP.psi for istp in xrange(mystress.EXP.flow.nstp): figx = wide_fig(nw=mystress.EXP.nphi + 1, w0=0, w1=0, left=0.2, right=0.15) for iphi in xrange(mystress.EXP.nphi): x = mystress.EXP.psi ax = figx.axes[iphi] ax.set_title(r"$\phi: %3.1f^\circ{}$" % mystress.EXP.phi[iphi]) y_fit = Eis[istp, iphi] y1 = eps[istp, iphi] # e^{hkl} y0 = igs[istp, iphi] # e^{ig} y_exp = y1 - y0 ax.plot(x, y_fit, "r-", label="Fitting") ax.plot(x, y_exp, "bx", label=r"$\varepsilon^{hkl}" "-\varepsilon^{IG}$") ax = figx.axes[-1] eqv(ax, ft=8, zero_xy=False) ax = ax.twinx() eqv(ax, ft=8, zero_xy=False) ax.plot(eps_vm, mystress.flow.sigma_vm, "b-") ax.plot(eps_vm[istp], mystress.flow.sigma_vm[istp], "ro") # for i in xrange(len(figx.axes)-2): # figx.axes[i].set_ylim(-0.0010,0.0006) fancy_legend(figx.axes[0]) rm_inner(figx.axes[:4]) ticks_bin_u(figx.axes[:4]) # tune_xy_lim(figx.axes) ax.set_xlim(0.0, 1) rm_lab(ax=figx.axes[-2], axis="y") deco(figx.axes[0], iopt=5) pdf_pages.savefig(figx) plt.close(figx) pdf_pages.close() plt.ion() # ------------------------------------------------------------# ## flow stress curve plotting figs = wide_fig(nw=2, w1=0.2) figs.axes[0].plot(eps_vm, mystress.flow.sigma_vm, "x") figs.axes[0].plot( mystress.SF_orig.flow.epsilon_vm, np.zeros((mystress.SF_orig.flow.nstp)), "o", ms=8, mfc="None", mec="r" ) figs.axes[1].plot(eps_vm, dknot, "o") eqv(figs.axes[0], ft=8, zero_xy=True) eqv(figs.axes[1], ft=8, zero_xy=False) figs.axes[1].set_ylabel(r"$\mathrm{d}_o$", dict(fontsize=12)) RS_graphs.savefig(plt.gcf()) # ------------------------------------------------------------# ## flow stress in plane stress space figs = wide_fig(nw=2) figs.axes[0].plot(mystress.flow.sigma[0, 0], mystress.flow.sigma[1, 1], "-x") figs.axes[1].plot(mystress.EXP.flow.epsilon[0, 0], mystress.EXP.flow.epsilon[1, 1], "-x") axes_label.__plane__(ax=figs.axes[0], ft=10, iopt=0) axes_label.__plane__(ax=figs.axes[1], ft=10, iopt=1) RS_graphs.savefig(plt.gcf()) RS_graphs.close() if not (ishow): plt.close("all") plt.ion() return mystress
def plot(self, nbin_sin2psi=2, iopt=0, ylim=None, mxnphi=None, hkl='211'): """ Arguments ========= nbin_sin2psi = 2 iopt = iopt ylim = None mxnphi = None hkl = '211' """ from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.cm as cm import matplotlib.pyplot as plt if hasattr(self, 'vf'): nh = 3 else: nh = 2 if type(mxnphi) == type(None): mxnphi = self.nphi figs = wide_fig(nw=mxnphi, nh=nh, w0=0, w1=0, left=0.2, right=0.15) mx = max(self.flow.epsilon_vm) mn = min(self.flow.epsilon_vm) #mx = 1. #mn = 0. norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx, mn=mn) colors = [] self.flow.nstp = len(self.flow.epsilon_vm) for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) if i == 0: colors.append(cl) y = self.sf[j, i, :, 0].copy() * 1e12 l, = figs.axes[i].plot(np.sign(self.psi) * sin(self.psi * np.pi / 180.)**2, y, '-x', color=cl) y = self.sf[j, i, :, 1].copy() * 1e12 figs.axes[i + mxnphi].plot(np.sign(self.psi) * sin(self.psi * np.pi / 180.)**2, y, '-+', color=cl) if j == 0: figs.axes[i].set_title(r'$\phi: %3.1f^\circ{}$' % self.phi[i]) if nh == 3: for i in xrange(mxnphi): for j in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[j] cl = c.to_rgba(eps) y = self.vf[j, i, :] figs.axes[i + mxnphi * 2].plot( np.sign(self.psi) * sin(self.psi * np.pi / 180.)**2, y, '-', color=cl) deco = axes_label.__deco__ rm_inner = mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u rm_inner(figs.axes[:mxnphi * 2]) if nh == 3: rm_inner(figs.axes[mxnphi * 2:mxnphi * 3]) deco(figs.axes[0], iopt=1, ipsi_opt=1, hkl=hkl) if nh == 3: deco(figs.axes[mxnphi * 2], iopt=7, ipsi_opt=1, hkl=hkl) mpl_lib.tune_xy_lim(figs.axes[:mxnphi * 2]) if ylim != None: for i in xrange(len(figs.axes[:mxnphi * 2])): figs.axes[i].set_ylim(ylim) if nh == 3: mpl_lib.tune_xy_lim(figs.axes[mxnphi * 2:mxnphi * 3]) ticks_bin_u(figs.axes[:mxnphi * 2], n=4) if nh == 3: ticks_bin_u(figs.axes[mxnphi * 2:mxnphi * 3], n=4) # color bar b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88, b.y0, 0.03, b.y1 - b.y0]) mpl_lib.add_cb(ax=axcb, filled=False, norm=norm, levels=self.flow.epsilon_vm, format='%5.3f', colors=colors, ylab='Equivalent strain') if nh == 1 or nh == 2: return """ SF(phi,psi) vs plastic strain """ ## binning sin2psi nbin = nbin_sin2psi indx = self.__binning__(nbin=nbin, mx=0.5) for i in xrange(len(indx)): print '%i bin' % (i + 1) for j in xrange(len(indx[i])): print '%4i' % indx[i][j], print '%4.2f' % (self.sin2psi[indx[i][j]]), print if mxnphi != None: mxnphi = self.nphi figs_p = wide_fig(nw=mxnphi, nh=nbin, w0=0, w1=0, left=0.2, right=0.15) eps = self.flow.epsilon_vm for i in xrange(mxnphi): for j in xrange(nbin): ax = figs_p.axes[i + mxnphi * j] if j == nbin - 1: ax.set_title(r'$\phi: %3.1f^\circ{}$' % self.phi[i]) idx = indx[j] for k in xrange(len(idx)): y = self.sf[:, i, [idx[k]], 0][::] ax.plot(eps, y, 'x') for i in xrange(nbin): axes = [] for j in xrange(mxnphi * 2): axes.append(figs_p.axes[j + mxnphi * i]) #mpl_lib.tune_xy_lim(axes) if i == 0 and j == 0: rm_inner(axes[1:]) else: rm_inner(axes) deco(figs_p.axes[0], iopt=6, hkl=hkl) mpl_lib.tune_xy_lim(figs_p.axes) #print 'no' ticks_bin_u(figs_p.axes, n=3) if ylim != None: for i in xrange(len(figs_p.axes)): figs_p.axes[i].set_ylim(ylim) if iopt == 1: for i in xrange(len(figs.axes)): figs.axes[i].set_xlim(0.0, 0.5) for i in xrange(3): figs.axes[i].set_ylim(-2, 2) figs.axes[3 + i].set_ylim(0., 0.1) plt.draw() plt.show()
def main(path='../dat/BB/', fref='Bsteel_fref_DIC.txt', fn_sf='YJ_BB_10times.sff', fexp=None, iso_SF=False, ishow=False, ind_plot=False, psi_offset=0.0, psi_sym=False, fc=None, fn_str=None, ifix_d0=False, d0_ref=1.17025, iwgt=False): """ Arguments ========= path fref fn_sf fexp iso_SF ishow ind_plot psi_offset psi_sym fc fn_str ifix_d0 d0_ref=1.17025 iwgt=False """ from MP.mat import mech from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages eqv = axes_label.__eqv__ tune_xy_lim = mpl_lib.tune_xy_lim deco = axes_label.__deco__ rm_inner = mpl_lib.rm_inner rm_lab = mpl_lib.rm_lab ticks_bin_u = mpl_lib.ticks_bins_ax_u plt.ioff() if type(fexp) == type(None): fexp='/Users/yj/repo/evpsc-dev/'\ 'exp_dat/Bsteel/bulge/EXP_BULGE_JINKIM.txt', RS_graphs = PdfPages('RS_Graphs.pdf') mystress = StressAnalysis(path=path, fref=fref, fn_sf=fn_sf, isym=psi_sym, fc_sf=fc, fn_str=fn_str) if psi_offset != 0: mystress.put_psi_offset(psi_offset) if psi_sym: print 'psi symmetry has been applied.' mystress.apply_sym() mystress.nstp mystress.EXP.plot_all() RS_graphs.savefig(plt.gcf()) # isotropic stress factor? if iso_SF: mystress.SF.get_iso_sf(E=204e9, nu=0.3) # calc stress eps_vm = mystress.EXP.flow.epsilon_vm dknot = [] s11 = [] s22 = [] # s12 = [] Eis = [] eps = [] igs = [] d_ehkl = np.zeros((mystress.EXP.nphi)) for istp in xrange(mystress.nstp): stress, d0 = mystress.find_sigma(ivo=[0, 1], istp=istp, iplot=False, iwgt=iwgt, ifix_d0=ifix_d0, d0=d0_ref) dknot.append(d0) s11.append(stress[0]) s22.append(stress[1]) Eis.append(mystress.Ei) # fitted Ei ehkl = mystress.EXP.ehkl[istp] # experimental eps_hkl ig = mystress.IG.ig[istp] # experimental eps_ig eps.append(ehkl.copy()) igs.append(ig.copy()) if istp == 0: for iphi in xrange(mystress.EXP.nphi): d_ehkl[iphi] = np.array(ehkl[iphi][::]).std() print '-----------------------------------' print 'Standard deviation in d_ehkl at istp=0\n' print 'phi:', for iphi in xrange(mystress.EXP.nphi): print '%7.0f ' % mystress.EXP.phis[iphi], print 'avg' print 'std:', for iphi in xrange(mystress.EXP.nphi): print '%7.1e ' % d_ehkl[iphi], print '%7.1e ' % d_ehkl.mean() # macro flow object mystress.flow = mech.FlowCurve() mystress.flow.get_stress(s11, 0, 0) mystress.flow.get_stress(s22, 1, 1) mystress.flow.set_zero_sigma_ij(i=2, j=2) # mystress.flow.get_stress(s12,0,1) # mystress.flow.get_stress(s12,1,0) mystress.flow.set_zero_sigma_ij(i=0, j=1) mystress.flow.set_zero_sigma_ij(i=1, j=0) mystress.flow.set_zero_sigma_ij(i=2, j=1) mystress.flow.set_zero_sigma_ij(i=1, j=2) mystress.flow.set_zero_sigma_ij(i=0, j=2) mystress.flow.set_zero_sigma_ij(i=2, j=0) mystress.flow.get_vm_stress() #------------------------------------------------------------# # plots that illustrate the fitted curves... Eis = np.array(Eis) eps = np.array(eps) igs = np.array(igs) figs = wide_fig(nw=mystress.EXP.nphi, w0=0, w1=0, left=0.2, right=0.15) from MP.lib import mpl_lib # mx = eps_vm[mystress.EXP.flow.nstp-1], # mn = eps_vm[0]) mx = 1.0 mn = 0.0 norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx, mn=mn) # c.to_rbga() for iphi in xrange(mystress.EXP.nphi): x = mystress.EXP.psi ax = figs.axes[iphi] ax.set_title(r'$\phi: %3.1f^\circ{}$' % mystress.EXP.phi[iphi]) for istp in xrange(mystress.EXP.flow.nstp): y_fit = Eis[istp, iphi] y1 = eps[istp, iphi] # e^{hkl} y0 = igs[istp, iphi] # e^{ig} y_exp = y1 - y0 ax.plot(x, y_fit, '--', color=c.to_rgba(eps_vm[istp])) ax.plot(x, y_exp, 'x', color=c.to_rgba(eps_vm[istp])) deco(ax=figs.axes[0], iopt=5) rm_inner(figs.axes) ticks_bin_u(figs.axes) tune_xy_lim(figs.axes) b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88, b.y0, 0.03, b.y1 - b.y0]) mpl_lib.add_cb(axcb, cmap=cmap, filled=True, ylab='Equivalent Strain', norm=norm) RS_graphs.savefig(plt.gcf()) #------------------------------------------------------------# # Save fitted curves into individual plots to pdf files if ind_plot: from matplotlib.backends.backend_pdf import PdfPages pdf_pages = PdfPages('Fit_results.pdf') x = mystress.EXP.psi for istp in xrange(mystress.EXP.flow.nstp): figx = wide_fig(nw=mystress.EXP.nphi + 1, w0=0, w1=0, left=0.2, right=0.15) for iphi in xrange(mystress.EXP.nphi): x = mystress.EXP.psi ax = figx.axes[iphi] ax.set_title( r'$\phi: %3.1f^\circ{}$'%\ mystress.EXP.phi[iphi]) y_fit = Eis[istp, iphi] y1 = eps[istp, iphi] # e^{hkl} y0 = igs[istp, iphi] # e^{ig} y_exp = y1 - y0 ax.plot(x, y_fit, 'r-', label='Fitting') ax.plot(x,y_exp,'bx', label=r'$\varepsilon^{hkl}'\ '-\varepsilon^{IG}$') ax = figx.axes[-1] eqv(ax, ft=8, zero_xy=False) ax = ax.twinx() eqv(ax, ft=8, zero_xy=False) ax.plot(eps_vm, mystress.flow.sigma_vm, 'b-') ax.plot(eps_vm[istp], mystress.flow.sigma_vm[istp], 'ro') # for i in xrange(len(figx.axes)-2): # figx.axes[i].set_ylim(-0.0010,0.0006) fancy_legend(figx.axes[0]) rm_inner(figx.axes[:4]) ticks_bin_u(figx.axes[:4]) #tune_xy_lim(figx.axes) ax.set_xlim(0., 1) rm_lab(ax=figx.axes[-2], axis='y') deco(figx.axes[0], iopt=5) pdf_pages.savefig(figx) plt.close(figx) pdf_pages.close() plt.ion() #------------------------------------------------------------# ## flow stress curve plotting figs = wide_fig(nw=2, w1=0.2) figs.axes[0].plot(eps_vm, mystress.flow.sigma_vm, 'x') figs.axes[0].plot(mystress.SF_orig.flow.epsilon_vm, np.zeros((mystress.SF_orig.flow.nstp)), 'o', ms=8, mfc='None', mec='r') figs.axes[1].plot(eps_vm, dknot, 'o') eqv(figs.axes[0], ft=8, zero_xy=True) eqv(figs.axes[1], ft=8, zero_xy=False) figs.axes[1].set_ylabel(r'$\mathrm{d}_o$', dict(fontsize=12)) RS_graphs.savefig(plt.gcf()) #------------------------------------------------------------# ## flow stress in plane stress space figs = wide_fig(nw=2) figs.axes[0].plot(mystress.flow.sigma[0, 0], mystress.flow.sigma[1, 1], '-x') figs.axes[1].plot(mystress.EXP.flow.epsilon[0, 0], mystress.EXP.flow.epsilon[1, 1], '-x') axes_label.__plane__(ax=figs.axes[0], ft=10, iopt=0) axes_label.__plane__(ax=figs.axes[1], ft=10, iopt=1) RS_graphs.savefig(plt.gcf()) RS_graphs.close() if not (ishow): plt.close('all') plt.ion() return mystress
def main(path='/Users/yj/repo/rs_pack/dat/11Jul12', fref='Bsteel_BB_00.txt',fn_sf='YJ_BB_10times.sff', fexp=None,iso_SF=False,ishow=False,ind_plot=False, psi_offset=0.0,psi_sym=False,fc=None,fn_str=None, iwgt=False): """ Arguments ========= path fref fn_sf fexp iso_SF ishow ind_plot psi_offset psi_sym fc fn_str """ from MP.mat import mech from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages eqv = axes_label.__eqv__ tune_xy_lim = mpl_lib.tune_xy_lim deco = axes_label.__deco__ rm_inner =mpl_lib.rm_inner rm_lab = mpl_lib.rm_lab ticks_bin_u = mpl_lib.ticks_bins_ax_u plt.ioff() if type(fexp)==type(None): fexp='/Users/yj/repo/evpsc-dev/'\ 'exp_dat/Bsteel/bulge/EXP_BULGE_JINKIM.txt', RS_graphs = PdfPages('RS_Graphs.pdf') mystress = StressAnalysis(path=path,fref=fref, fn_sf=fn_sf,isym=psi_sym, fc_sf=None,fn_str=fn_str) if psi_offset!=0: mystress.put_psi_offset(psi_offset) if psi_sym: print 'psi symmetry has been applied.' mystress.apply_sym() mystress.nstp mystress.EXP.plot_all() RS_graphs.savefig(plt.gcf()) # isotropic stress factor? if iso_SF: mystress.SF.get_iso_sf(E=204e9,nu=0.3) # calc stress eps_vm = mystress.EXP.flow.epsilon_vm dknot = [] s11 = []; s22 = [] Eis = []; eps = []; igs = [] d_ehkl = np.zeros((mystress.EXP.nphi)) for istp in range(mystress.nstp): stress, d0 = mystress.find_sigma( ivo=[0,1],istp=istp,iplot=False,iwgt=iwgt) dknot.append(d0) s11.append(stress[0]) s22.append(stress[1]) Eis.append(mystress.Ei) # fitted Ei ehkl = mystress.EXP.ehkl[istp] # experimental eps_hkl ig = mystress.IG.ig[istp] # experimental eps_ig eps.append(ehkl.copy()) igs.append(ig.copy()) if istp==0: for iphi in range(mystress.EXP.nphi): d_ehkl[iphi] = np.array(ehkl[iphi][::]).std() print '-----------------------------------' print 'Stard deviation in d_ehkl at istp=0\n' print 'phi:', for iphi in range(mystress.EXP.nphi): print '%7.0f '%mystress.EXP.phis[iphi], print 'avg' print 'std:', for iphi in range(mystress.EXP.nphi): print '%7.1e '%d_ehkl[iphi], print '%7.1e '%d_ehkl.mean() # macro flow object mystress.flow = mech.FlowCurve() mystress.flow.get_stress(s11,0,0) mystress.flow.get_stress(s22,1,1) mystress.flow.set_zero_sigma_ij(i=2,j=2) mystress.flow.set_zero_shear_stress() mystress.flow.get_vm_stress() #------------------------------------------------------------# # plots that illustrate the fitted curves... Eis = np.array(Eis) eps = np.array(eps) igs = np.array(igs) figs = wide_fig(nw=mystress.EXP.nphi,w0=0,w1=0,left=0.2, right=0.15) from MP.lib import mpl_lib # mx = eps_vm[mystress.EXP.flow.nstp-1], # mn = eps_vm[0]) mx = 1.0; mn = 0.0 norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap( mx=mx,mn=mn) # c.to_rbga() for iphi in range(mystress.EXP.nphi): x = mystress.EXP.psi ax = figs.axes[iphi] ax.set_title( r'$\phi: %3.1f^\circ{}$'%mystress.EXP.phi[iphi]) for istp in range(mystress.EXP.flow.nstp): y_fit = Eis[istp,iphi] y1=eps[istp,iphi] # e^{hkl} y0=igs[istp,iphi] # e^{ig} y_exp = y1-y0 ax.plot(x,y_fit,'--',color=c.to_rgba(eps_vm[istp])) ax.plot(x,y_exp,'x',color=c.to_rgba(eps_vm[istp])) deco(ax=figs.axes[0],iopt=5) rm_inner(figs.axes) ticks_bin_u(figs.axes) tune_xy_lim(figs.axes) b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88,b.y0,0.03,b.y1-b.y0]) mpl_lib.add_cb(axcb,cmap=cmap,filled=True, ylab='Equivalent Strain',norm=norm) RS_graphs.savefig(plt.gcf()) #------------------------------------------------------------# # Save fitted curves into individual plots to pdf files if ind_plot: from matplotlib.backends.backend_pdf import PdfPages pdf_pages = PdfPages('Fit_results.pdf') x = mystress.EXP.psi for istp in range(mystress.EXP.flow.nstp): figx = wide_fig(nw=mystress.EXP.nphi+1, w0=0,w1=0,left=0.2, right=0.15) for iphi in range(mystress.EXP.nphi): x = mystress.EXP.psi ax = figx.axes[iphi] ax.set_title( r'$\phi: %3.1f^\circ{}$'%\ mystress.EXP.phi[iphi]) y_fit = Eis[istp,iphi] y1=eps[istp,iphi] # e^{hkl} y0=igs[istp,iphi] # e^{ig} y_exp = y1-y0 ax.plot(x,y_fit,'r-',label='Fitting') ax.plot(x,y_exp,'bx', label=r'$\varepsilon^{hkl}'\ '-\varepsilon^{IG}$') ax = figx.axes[-1] eqv(ax,ft=8,zero_xy=False) ax = ax.twinx() eqv(ax,ft=8,zero_xy=False) ax.plot(eps_vm,mystress.flow.sigma_vm,'b-') ax.plot(eps_vm[istp], mystress.flow.sigma_vm[istp],'ro') for i in range(len(figx.axes)-2): figx.axes[i].set_ylim(-0.0010,0.0006) fancy_legend(figx.axes[0]) rm_inner(figx.axes[:4]) ticks_bin_u(figx.axes[:4]) #tune_xy_lim(figx.axes) ax.set_xlim(0.,1) rm_lab(ax=figx.axes[-2],axis='y') deco(figx.axes[0],iopt=5) pdf_pages.savefig(figx) plt.close(figx) pdf_pages.close() plt.ion() #------------------------------------------------------------# ## flow stress curve plotting figs = wide_fig(nw=2,w1=0.2) figs.axes[0].plot(eps_vm, mystress.flow.sigma_vm,'x') figs.axes[0].plot(mystress.SF_orig.flow.epsilon_vm, np.zeros((mystress.SF_orig.flow.nstp)), 'o',ms=8,mfc='None',mec='r') figs.axes[1].plot(eps_vm, dknot,'o') eqv(figs.axes[0],ft=8,zero_xy=True) eqv(figs.axes[1],ft=8,zero_xy=False) figs.axes[1].set_ylabel(r'$\mathrm{d}_o$',dict(fontsize=12)) RS_graphs.savefig(plt.gcf()) #------------------------------------------------------------# ## flow stress in plane stress space figs = wide_fig(nw=2) figs.axes[0].plot( mystress.flow.sigma[0,0], mystress.flow.sigma[1,1],'-x') figs.axes[1].plot( mystress.EXP.flow.epsilon[0,0], mystress.EXP.flow.epsilon[1,1],'-x') axes_label.__plane__(ax=figs.axes[0],ft=10,iopt=0) axes_label.__plane__(ax=figs.axes[1],ft=10,iopt=1) RS_graphs.savefig(plt.gcf()) RS_graphs.close() if not(ishow): plt.close('all') plt.ion() return mystress
def plot_all(self): """ Plot dhkl against psi """ from MP.lib import mpl_lib wide_fig = mpl_lib.wide_fig tune_xy_lim = mpl_lib.tune_xy_lim from MP.lib import axes_label from MP.lib import mpl_lib import matplotlib as mpl deco = axes_label.__deco__ rm_inner = mpl_lib.rm_inner ticks_bin_u = mpl_lib.ticks_bins_ax_u figs = wide_fig(nw=self.nphi, nh=2, w0=0, w1=0, left=0.2, right=0.15, useOffset=False) mx = max(self.flow.epsilon_vm) mn = min(self.flow.epsilon_vm) norm = mpl.colors.Normalize(vmin=mn, vmax=mx) cmap, c = mpl_lib.norm_cmap(mx=mx, mn=mn) for i in xrange(self.flow.nstp): eps = self.flow.epsilon_vm[i] cl = c.to_rgba(eps) for j in xrange(self.nphi): X = self.psi Y = [] for ipsi in xrange(self.npsi): y = self.P_scan[i].protophi[j].\ ppscans[ipsi].dspc Y.append(y) figs.axes[j].plot(X, Y, '-x', color=cl) _Y_ = np.array(Y).copy() _Y_ = (_Y_ + _Y_[::-1]) / 2. # _Y_ = _Y_[:len(_Y_)/2+1] figs.axes[j + self.nphi].plot(X, _Y_, '-x', color=cl) if i == 0: figs.axes[j].set_title(r'$\phi: %3.1f^\circ{}$' % self.phi[j]) figs.axes[j + self.nphi].set_title( r'$\phi: %3.1f^\circ{}$' % self.phi[j]) ticks_bin_u(figs.axes, n=4) deco(figs.axes[0 + self.nphi], iopt=4) tune_xy_lim(figs.axes) rm_inner(figs.axes) b = figs.axes[-1].get_position() axcb = figs.add_axes([0.88, b.y0, 0.03, b.y1 - b.y0]) mpl_lib.add_cb(axcb, cmap=cmap, filled=True, ylab='Equivalent Strain', norm=norm, format='%5.3f')