def interp_psi(self,psi=None,iopt=1): """ iopt=0: interpolate along psi iopt=1: interpolate along +- sin2psi """ psi = np.array(psi) from numpy import sign if iopt==0: x = psi x0 = self.psi if iopt==1: x = sign(psi) * sin(psi*np.pi/180.)**2 x0 = sign(self.psi) * sin(self.psi*np.pi/180.)**2 self.sf_old = self.sf.copy() self.psi_old = self.psi.copy() self.npsi # also need change self.sf_new = np.zeros( (self.nstp,self.nphi,len(x),self.nij)) for istp in xrange(self.nstp): for iphi in xrange(self.nphi): for k in xrange(self.nij): y = self.sf_old[istp,iphi,:,k] self.sf_new[istp,iphi,:,k] \ = rs.interpolate(x,x0,y) self.sf = self.sf_new.copy() self.psi = psi.copy() self.npsi = len(self.psi)
def interp_psi(self, psi=None, iopt=1): """ iopt=0: interpolate along psi iopt=1: interpolate along +- sin2psi """ psi = np.array(psi) from numpy import sign if iopt == 0: x = psi x0 = self.psi if iopt == 1: x = sign(psi) * sin(psi * np.pi / 180.)**2 x0 = sign(self.psi) * sin(self.psi * np.pi / 180.)**2 self.sf_old = self.sf.copy() self.psi_old = self.psi.copy() self.npsi # also need change self.sf_new = np.zeros((self.nstp, self.nphi, len(x), self.nij)) for istp in xrange(self.nstp): for iphi in xrange(self.nphi): for k in xrange(self.nij): y = self.sf_old[istp, iphi, :, k] self.sf_new[istp,iphi,:,k] \ = rs.interpolate(x,x0,y) self.sf = self.sf_new.copy() self.psi = psi.copy() self.npsi = len(self.psi)
def interp_strain(self,epsilon_vm, iopt=0): """ Apply a certain interpolation method on the SF with respect to the given VM strain Arguments ========= epsilon_vm = [] iopt=0: NN (piece-wise linear interpolation) =1: Assign nearest data =2: Cubic =3: Quadratic =4: Linear fit =5: Poly2 =6: poly3 =7: Place-holder for power law fit =8: zero =9: slinear """ self.sf_old = self.sf.copy() # self.flow.get_vm_strain() # self.flow.epsilon_vm # self.sf_new = np.zeros( (len(epsilon_vm),self.nphi,self.npsi,self.nij)) for iphi in range(self.nphi): for ipsi in range(self.npsi): for k in range(self.nij): y = self.sf_old[:,iphi,ipsi,k] self.sf_new[:,iphi,ipsi,k] \ = rs.interpolate( xs=epsilon_vm, xp=self.flow.epsilon_vm, fp=y, iopt=iopt) self.sf = self.sf_new # Overwrite the flow? self.nstp also needs change self.flow = fc() self.flow.epsilon_vm = np.array(epsilon_vm) self.nstp = len(self.flow.epsilon_vm)
def interp_strain(self,epsilon_vm,iopt=0): """ Apply a certain interpolation method on the IG with respect to the given VM strain Arguments ========= epsilon_vm = [] iopt=0: NN (piece-wise linear interpolation) =1: Assign nearest data =2: Cubic =3: Quadratic =4: Linear fit =5: Poly2 =6: poly3 =7: Place-holder for power law fit =8: zero =9: slinear """ self.ig_old = self.ig.copy() self.flow.get_vm_strain() self.flow.epsilon_vm # self.ig_new = np.zeros( (len(epsilon_vm),self.nphi,self.npsi)) xp = self.flow.epsilon_vm.copy() for iphi in xrange(self.nphi): for ipsi in xrange(self.npsi): _y_ = self.ig_old[:,iphi,ipsi].copy() ## find non zero not (nan) values inds = [] n_avail_dat = 0 ## in case that IG strain is all zeroes (Brian Lin's case) if (_y_==0).all(): _y_ = _y_.copy() _xp_ = xp.copy() else: for m in xrange(len(_y_)): if _y_[m]!=0 and not(np.isnan(_y_[m])): inds.append(m) n_avail_dat = len(inds) pass if n_avail_dat==0 or n_avail_dat==1: # print 'interpolation is not ', # print 'feasible due to insufficient', # print 'number of data' self.ig_new[:,iphi,ipsi] = 0. # np.nan elif n_avail_dat>=2: _y_ = _y_[inds].copy() _xp_ = xp[inds].copy() try: self.ig_new[:,iphi,ipsi]\ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=iopt) except: print 'failed in ig interpolation' try: self.ig_new[:,iphi,ipsi]\ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=1) ## if fail, try assign nearest data except: nans = np.zeros(len(epsilon_vm)) nans = np.nan * nans self.ig_new[:,iphi,ipsi] = 0. #np.nan else: raise IOError, 'Unexpected case' self.ig = self.ig_new # Overwrite the flow? self.nstp also needs change self.flow = fc() self.flow.epsilon_vm = np.array(epsilon_vm) self.nstp = len(self.flow.epsilon_vm)
def interp_strain(self,epsilon_vm, iopt=0): """ Apply a certain interpolation method on the SF with respect to the given VM strain Arguments ========= epsilon_vm = [] iopt=0: NN (piece-wise linear interpolation) =1: Assign nearest data =2: Cubic =3: Quadratic =4: Linear fit =5: Poly2 =6: poly3 =7: Place-holder for power law fit =8: zero =9: slinear """ print 'epsilon_vm:' print epsilon_vm import warnings self.sf_old = self.sf.copy() # self.flow.get_vm_strain() # self.flow.epsilon_vm # self.sf_new = np.zeros( (len(epsilon_vm),self.nphi,self.npsi,self.nij)) xp = self.flow.epsilon_vm.copy() print 'Strain reference at which sf was measured:' print xp for iphi in xrange(self.nphi): for ipsi in xrange(self.npsi): for k in xrange(self.nij): _y_ = self.sf_old[:,iphi,ipsi,k].copy() ## find non zero not (nan) values inds = [] if (_y_==0).all(): _y_ = _y_.copy() _xp_ = xp.copy() n_avail_dat = 0 else: for m in xrange(len(_y_)): if _y_[m]!=0 and not(np.isnan(_y_[m])): inds.append(m) n_avail_dat = len(inds) pass if n_avail_dat==0 or n_avail_dat==1: if k<2: print 'interpolation is not ', print 'feasible due to insufficient', print 'number of data' self.sf_new[:,iphi,ipsi,k] = np.nan elif n_avail_dat>=2: _y_ = _y_[inds].copy() _xp_ = xp[inds].copy() try: self.sf_new[:,iphi,ipsi,k] \ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=iopt) except: print 'failed, thus using NN interp' try: self.sf_new[:,iphi,ipsi,k] \ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=1) ## if fail, try assign nearest data except: nans = np.zeros(len(epsilon_vm)) nans = np.nan * nans self.sf_new[:,iphi,ipsi] = nans else: raise IOError, 'Unexpected case' if self.sf_new.shape!=(len(epsilon_vm),self.nphi,self.npsi,self.nij): raise IOError, 'something wrong' self.sf = self.sf_new.copy() # Overwrite the flow? self.nstp also needs change self.flow = fc() self.flow.epsilon_vm = np.array(epsilon_vm) self.nstp = len(self.flow.epsilon_vm)
def interp_strain(self, epsilon_vm, iopt=0): """ Apply a certain interpolation method on the IG with respect to the given VM strain Arguments ========= epsilon_vm = [] iopt=0: NN (piece-wise linear interpolation) =1: Assign nearest data =2: Cubic =3: Quadratic =4: Linear fit =5: Poly2 =6: poly3 =7: Place-holder for power law fit =8: zero =9: slinear """ self.ig_old = self.ig.copy() self.flow.get_vm_strain() self.flow.epsilon_vm # self.ig_new = np.zeros((len(epsilon_vm), self.nphi, self.npsi)) xp = self.flow.epsilon_vm.copy() for iphi in xrange(self.nphi): for ipsi in xrange(self.npsi): _y_ = self.ig_old[:, iphi, ipsi].copy() ## find non zero not (nan) values inds = [] n_avail_dat = 0 ## in case that IG strain is all zeroes (Brian Lin's case) if (_y_ == 0).all(): _y_ = _y_.copy() _xp_ = xp.copy() else: for m in xrange(len(_y_)): if _y_[m] != 0 and not (np.isnan(_y_[m])): inds.append(m) n_avail_dat = len(inds) pass if n_avail_dat == 0 or n_avail_dat == 1: # print 'interpolation is not ', # print 'feasible due to insufficient', # print 'number of data' self.ig_new[:, iphi, ipsi] = 0. # np.nan elif n_avail_dat >= 2: _y_ = _y_[inds].copy() _xp_ = xp[inds].copy() try: self.ig_new[:,iphi,ipsi]\ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=iopt) except: print 'failed in ig interpolation' try: self.ig_new[:,iphi,ipsi]\ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=1) ## if fail, try assign nearest data except: nans = np.zeros(len(epsilon_vm)) nans = np.nan * nans self.ig_new[:, iphi, ipsi] = 0. #np.nan else: raise IOError, 'Unexpected case' self.ig = self.ig_new # Overwrite the flow? self.nstp also needs change self.flow = fc() self.flow.epsilon_vm = np.array(epsilon_vm) self.nstp = len(self.flow.epsilon_vm)
def interp_strain(self, epsilon_vm, iopt=0): """ Apply a certain interpolation method on the SF with respect to the given VM strain Arguments ========= epsilon_vm = [] iopt=0: NN (piece-wise linear interpolation) =1: Assign nearest data =2: Cubic =3: Quadratic =4: Linear fit =5: Poly2 =6: poly3 =7: Place-holder for power law fit =8: zero =9: slinear """ print 'epsilon_vm:' print epsilon_vm import warnings self.sf_old = self.sf.copy() # self.flow.get_vm_strain() # self.flow.epsilon_vm # self.sf_new = np.zeros( (len(epsilon_vm), self.nphi, self.npsi, self.nij)) xp = self.flow.epsilon_vm.copy() print 'Strain reference at which sf was measured:' print xp for iphi in xrange(self.nphi): for ipsi in xrange(self.npsi): for k in xrange(self.nij): _y_ = self.sf_old[:, iphi, ipsi, k].copy() ## find non zero not (nan) values inds = [] if (_y_ == 0).all(): _y_ = _y_.copy() _xp_ = xp.copy() n_avail_dat = 0 else: for m in xrange(len(_y_)): if _y_[m] != 0 and not (np.isnan(_y_[m])): inds.append(m) n_avail_dat = len(inds) pass if n_avail_dat == 0 or n_avail_dat == 1: if k < 2: print 'interpolation is not ', print 'feasible due to insufficient', print 'number of data' self.sf_new[:, iphi, ipsi, k] = np.nan elif n_avail_dat >= 2: _y_ = _y_[inds].copy() _xp_ = xp[inds].copy() try: self.sf_new[:,iphi,ipsi,k] \ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=iopt) except: print 'failed, thus using NN interp' try: self.sf_new[:,iphi,ipsi,k] \ = rs.interpolate( xs=epsilon_vm.copy(), xp=_xp_, fp=_y_, iopt=1) ## if fail, try assign nearest data except: nans = np.zeros(len(epsilon_vm)) nans = np.nan * nans self.sf_new[:, iphi, ipsi] = nans else: raise IOError, 'Unexpected case' if self.sf_new.shape != (len(epsilon_vm), self.nphi, self.npsi, self.nij): raise IOError, 'something wrong' self.sf = self.sf_new.copy() # Overwrite the flow? self.nstp also needs change self.flow = fc() self.flow.epsilon_vm = np.array(epsilon_vm) self.nstp = len(self.flow.epsilon_vm)