Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)