Esempio n. 1
0
    def derivative(self, x, **kwargs):
        """
        Parameters:
            x - value between 0 and 1
        """
        x = x*self.L
        expC = np.exp(np.polyval(self.C1, x)/np.polyval(self.C2, x))
        C1x = np.polyder(self.C1)
        C2x = np.polyder(self.C2)

        if kwargs['dim'] == 'x':
            Cx = (np.polyval(C1x, x)*np.polyval(self.C2, x) -
                  np.polyval(self.C1, x)*np.polyval(C2x, x))/np.polyval(self.C2, x)**2
            return 1000*Cx*expC

        elif kwargs['dim'] == 'xx':
            C1xx = np.polyder(C1x)
            C2xx = np.polyder(C2x)
            Cx = (np.polyval(C1x, x)*np.polyval(self.C2, x) -
                  np.polyval(self.C1, x)*np.polyval(C2x, x))/np.polyval(self.C2, x)**2
            Cxx = (np.polyval(C1xx, x)*np.polyval(self.C2, x)**2 +
                   2*np.polyval(self.C1, x)*np.polyval(C2x, x)**2 -
                   2*np.polyval(C1x, x)*np.polyval(self.C2, x)*np.polyval(C2x, x) -
                   np.polyval(self.C1, x)*np.polyval(self.C2, x)*np.polyval(C2xx, x)) / np.polyval(self.C2, x)**3
            return 1000*(Cx**2 + Cxx)*expC
        else:
            FunctionBase.derivative(self)
            return
Esempio n. 2
0
    def derivative(self, x, **kwargs):
        if kwargs.get('dim') == 'x':
            coef = self.data.v('coef', x=x)
            H = self.data.v('grid', 'low', 'z', x=x) - self.data.v('grid', 'high', 'z', x=x)
            coefx = self.data.d('coef', x=x, dim='x')
            Hx = self.data.d('grid', 'low', 'z', x=x, dim='x') - self.data.d('grid', 'high', 'z', x=x, dim='x')

            val = coefx * ((H / self.H0) ** self.m) + coef * (self.m * Hx * (H / self.H0) ** self.m / H)
        elif kwargs.get('dim') == 'xx':
            coef = self.data.v('coef', x=x)
            H = self.data.v('grid', 'low', 'z', x=x) - self.data.v('grid', 'high', 'z', x=x)
            coefx = self.data.d('coef', x=x, dim='x')
            Hx = self.data.d('grid', 'low', 'z', x=x, dim='x') - self.data.d('grid', 'high', 'z', x=x, dim='x')
            coefxx = self.data.d('coef', x=x, dim='xx')
            Hxx = self.data.d('grid', 'low', 'z', x=x, dim='xx') - self.data.d('grid', 'high', 'z', x=x, dim='xx')

            val = coefxx * (H / self.H0) ** self.m + 2. * coefx * self.m * Hx * H ** (
            self.m - 1) / self.H0 ** self.m + coef * self.m * (self.m - 1) * Hx ** 2 * H ** (
            self.m - 2) / self.H0 ** self.m + coef * self.m * Hxx * H ** (self.m - 1) / self.H0 ** self.m

        elif 'z' in kwargs.get('dim'):
            val = 0.
        else:
            val = None
            FunctionBase.derivative(self)
        return val
Esempio n. 3
0
    def derivative(self, x, f, **kwargs):
        if kwargs['dim'] == 'x':
            x = np.asarray(x*self.L)
            f = [1-bool(j) for j in toList(f)]
            f = np.asarray(f).reshape(1,len(f))

            sx = self.ssea/2.*(np.tanh((x-self.xc)/self.xl)**2-1)/self.xl
            sx = sx.reshape(len(sx),1)*f
        else:
            sx = None
            FunctionBase.derivative(self)
        return sx
Esempio n. 4
0
    def derivative(self, x, f, **kwargs):
        if kwargs['dim'] == 'x':
            x = np.asarray(x*self.L)
            f = [1-bool(j) for j in toList(f)]
            f = np.asarray(f).reshape(1, len(f))

            sx = -self.ssea/self.Ls*np.exp(-x/self.Ls)
            sx = sx.reshape(len(sx), 1)*f
        else:
            sx = None
            FunctionBase.derivative(self)
        return sx
Esempio n. 5
0
 def derivative(self, x, **kwargs):
     """
     Parameters:
         x - value between 0 and 1
     """
     if kwargs['dim'] == 'x':
         x = x * self.L
         return -self.C0 / self.Lc * exp(-x / self.Lc)
     elif kwargs['dim'] == 'xx':
         x = x * self.L
         return self.C0 / (self.Lc**2) * exp(-x / self.Lc)
     else:
         FunctionBase.derivative(self)
         return
Esempio n. 6
0
 def derivative(self, x, **kwargs):
     """
     Parameters:
         x - value between 0 and 1
     """
     x = x * self.L
     Cx = np.polyder(self.C)
     if kwargs['dim'] == 'x':
         return np.polyval(Cx, x)
     elif kwargs['dim'] == 'xx':
         Cxx = np.polyder(Cx)
         return np.polyval(Cxx, x)
     else:
         FunctionBase.derivative(self)
         return
Esempio n. 7
0
 def derivative(self, x, **kwargs):
     """
     Parameters:
         x - value between 0 and 1
     """
     if kwargs['dim'] == 'x':
         x = x * self.L
         return self.C1 * (1 - np.tanh(
             (x - self.xc) / self.xl)**2) / self.xl
     elif kwargs['dim'] == 'xx':
         x = x * self.L
         return -self.C1 * 2. * np.tanh(
             (x - self.xc) / self.xl) * (1 - np.tanh(
                 (x - self.xc) / self.xl)**2.) / self.xl**2
     else:
         FunctionBase.derivative(self)
         return
Esempio n. 8
0
    def derivative(self, x, z, f, **kwargs):
        if kwargs.get('dim') == 'z':
            z = z.reshape((1, len(z), 1))
            coef = self.data.v('coef', x=x, z=z, f=f)
            H = self.data.v('grid', 'low', 'z', x=x, z=z, f=f) - self.data.v(
                'grid', 'high', 'z', x=x, z=z, f=f)
            z0_dimless = self.data.v('z0*', x=x, z=z, f=f)
            zs_dimless = self.data.v('zs*', x=x, z=z, f=f)

            Avz = coef / H * (-2. * (-z) - 1. - z0_dimless +
                              zs_dimless) * (H / self.H0)**self.m

        elif kwargs.get('dim') == 'zz':
            coef = self.data.v('coef', x=x, z=z, f=f)
            H = self.data.v('grid', 'low', 'z', x=x, z=z, f=f) - self.data.v(
                'grid', 'high', 'z', x=x, z=z, f=f)

            Avz = -2. * coef / H**2. * (H / self.H0)**self.m
        else:
            Avz = None
            FunctionBase.derivative(
                self)  # derivatives in other directions not implemented
        return Avz
Esempio n. 9
0
 def derivative(self, x, **kwargs):
     """
     Parameters:
         x - value between 0 and 1
     """
     x = x * self.L
     Cx = np.polyder(self.C)
     Cx_lin = np.polyder(self.C_lin)
     p = np.zeros(len(x))
     if kwargs['dim'] == 'x':
         p[np.where(x <= self.XL)] = np.polyval(Cx,
                                                x[np.where(x <= self.XL)])
         p[np.where(x > self.XL)] = np.polyval(
             Cx_lin, x[np.where(x > self.XL)] - self.XL)
         return p
     elif kwargs['dim'] == 'xx':
         Cxx = np.polyder(Cx)
         p[np.where(x <= self.XL)] = np.polyval(Cxx,
                                                x[np.where(x <= self.XL)])
         return p
     else:
         FunctionBase.derivative(self)
         return