Exemple #1
0
    def execute(self):

        # water depth
        d = self.z_surface - self.z_floor

        # design wave height
        h = 1.1 * self.hs

        # circular frequency
        omega = 2.0 * math.pi / self.T

        # compute wave number from dispersion relationship
        k = brentq(lambda k: omega**2 - self.g * k * math.tanh(d * k), 0,
                   10 * omega**2 / self.g)

        # zero at surface
        z_rel = self.z - self.z_surface

        # maximum velocity
        self.U = h / 2.0 * omega * np.cosh(k * (z_rel + d)) / math.sinh(
            k * d) + self.Uc
        self.U0 = h / 2.0 * omega * np.cosh(k * (0. + d)) / math.sinh(
            k * d) + self.Uc

        # check heights
        self.U[np.logical_or(self.z < self.z_floor,
                             self.z > self.z_surface)] = 0.

        # acceleration
        self.A = self.U * omega
        self.A0 = self.U0 * omega
        # angles
        self.beta = self.betaWave * np.ones_like(self.z)
        self.beta0 = self.betaWave

        # derivatives
        dU_dz = h / 2.0 * omega * np.sinh(k *
                                          (z_rel + d)) / math.sinh(k * d) * k
        dU_dUc = np.ones_like(self.z)
        idx = np.logical_or(self.z < self.z_floor, self.z > self.z_surface)
        dU_dz[idx] = 0.0
        dU_dUc[idx] = 0.0
        dA_dz = omega * dU_dz
        dA_dUc = omega * dU_dUc

        self.J = vstack([
            hstack([np.diag(dU_dz), dU_dUc]),
            hstack([np.diag(dA_dz), dA_dUc])
        ])
Exemple #2
0
    def provideJ(self):

        # rename
        z = self.z
        zref = self.zref
        z0 = self.z0
        z_roughness = self.z_roughness/1e3
        Uref = self.Uref

        n = len(z)

        dU_dUref = np.zeros(n)
        dU_dz_diag = np.zeros(n)
        dU_dzref = np.zeros(n)

        idx = [z - z0 > z_roughness]
        lt = np.log((z[idx] - z0)/z_roughness)
        lb = math.log((zref - z0)/z_roughness)
        dU_dUref[idx] = lt/lb
        dU_dz_diag[idx] = Uref/lb / (z[idx] - z0)
        dU_dzref[idx] = -Uref*lt / math.log((zref - z0)/z_roughness)**2 / (zref - z0)

        J = hstack([dU_dUref, np.diag(dU_dz_diag), dU_dzref])

        return J
Exemple #3
0
    def provideJ(self):

        # rename
        z = self.z
        zref = self.zref
        z0 = self.z0
        z_roughness = self.z_roughness / 1e3
        Uref = self.Uref

        n = len(z)

        dU_dUref = np.zeros(n)
        dU_dz_diag = np.zeros(n)
        dU_dzref = np.zeros(n)

        idx = [z - z0 > z_roughness]
        lt = np.log((z[idx] - z0) / z_roughness)
        lb = math.log((zref - z0) / z_roughness)
        dU_dUref[idx] = lt / lb
        dU_dz_diag[idx] = Uref / lb / (z[idx] - z0)
        dU_dzref[idx] = -Uref * lt / math.log(
            (zref - z0) / z_roughness)**2 / (zref - z0)

        J = hstack([dU_dUref, np.diag(dU_dz_diag), dU_dzref])

        return J
Exemple #4
0
    def execute(self):

        # water depth
        #CJB z_surface = wdepth+z_floor, so d = wdepth
        d = self.z_surface - self.z_floor

        # design wave height
        h = self.hmax

        # circular frequency
        omega = 2.0*math.pi/self.T

        # compute wave number from dispersion relationship
        k = brentq(lambda k: omega**2 - self.g*k*math.tanh(d*k), 0, 10*omega**2/self.g)

        # zero at surface
        z_rel = self.z - self.z_surface

        # maximum velocity
        self.U = h/2.0*omega*np.cosh(k*(z_rel + d))/math.sinh(k*d) + self.Uc
        self.U0 = h/2.0*omega*np.cosh(k*(0. + d))/math.sinh(k*d) + self.Uc

        # check heights
        self.U[np.logical_or(self.z < self.z_floor, self.z > self.z_surface)] = 0.

        # acceleration
        self.A  = self.U * omega
        self.A0 = self.U0 * omega
        # angles
        self.beta = self.betaWave*np.ones_like(self.z)
        self.beta0 =self.betaWave

        # derivatives
        dU_dz = h/2.0*omega*np.sinh(k*(z_rel + d))/math.sinh(k*d)*k
        dU_dUc = np.ones_like(self.z)
        idx = np.logical_or(self.z < self.z_floor, self.z > self.z_surface)
        dU_dz[idx] = 0.0
        dU_dUc[idx] = 0.0
        dA_dz = omega*dU_dz
        dA_dUc = omega*dU_dUc

        dU0 = np.zeros(len(self.z) + 1)
        dU0[-1] = 1.0
        dA0 = omega * dU0

        self.J = vstack([hstack([np.diag(dU_dz), dU_dUc]), hstack([np.diag(dA_dz), dA_dUc]), np.transpose(dU0), np.transpose(dA0)])
Exemple #5
0
    def provideJ(self):

        G = self.G
        nu = self.nu
        h = self.depth
        r0 = self.r0

        # vertical
        eta = 1.0 + 0.6 * (1.0 - nu) * h / r0
        deta_dr0 = -0.6 * (1.0 - nu) * h / r0**2
        dkz_dr0 = 4 * G / (1.0 - nu) * (eta + r0 * deta_dr0)

        deta_dh = 0.6 * (1.0 - nu) / r0
        dkz_dh = 4 * G * r0 / (1.0 - nu) * deta_dh

        # horizontal
        eta = 1.0 + 0.55 * (2.0 - nu) * h / r0
        deta_dr0 = -0.55 * (2.0 - nu) * h / r0**2
        dkx_dr0 = 32.0 * (1.0 - nu) * G / (7.0 - 8.0 * nu) * (eta +
                                                              r0 * deta_dr0)

        deta_dh = 0.55 * (2.0 - nu) / r0
        dkx_dh = 32.0 * (1.0 - nu) * G * r0 / (7.0 - 8.0 * nu) * deta_dh

        # rocking
        eta = 1.0 + 1.2 * (1.0 - nu) * h / r0 + 0.2 * (2.0 - nu) * (h / r0)**3
        deta_dr0 = -1.2 * (1.0 - nu) * h / r0**2 - 3 * 0.2 * (2.0 - nu) * (
            h / r0)**3 / r0
        dkthetax_dr0 = 8.0 * G / (3.0 * (1.0 - nu)) * (3 * r0**2 * eta +
                                                       r0**3 * deta_dr0)

        deta_dh = 1.2 * (1.0 - nu) / r0 + 3 * 0.2 * (2.0 - nu) * (1.0 /
                                                                  r0)**3 * h**2
        dkthetax_dh = 8.0 * G * r0**3 / (3.0 * (1.0 - nu)) * deta_dh

        # torsional
        dkphi_dr0 = 16.0 * G * 3 * r0**2 / 3.0
        dkphi_dh = 0.0

        dk_dr0 = np.array(
            [dkx_dr0, dkthetax_dr0, dkx_dr0, dkthetax_dr0, dkz_dr0, dkphi_dr0])
        dk_dr0[self.rigid] = 0.0
        dk_dh = np.array(
            [dkx_dh, dkthetax_dh, dkx_dh, dkthetax_dh, dkz_dh, dkphi_dh])
        dk_dh[self.rigid] = 0.0

        J = hstack((dk_dr0, dk_dh))

        return J
Exemple #6
0
    def provideJ(self):

        # gradients
        dPbar_dPa = dPbar_dPbar1 * dPbar1_dPbar0 / rated_power
        dPbar_dPr = -dPbar_dPbar1 * dPbar1_dPbar0 * aero_power / rated_power**2

        deff_dPa = dPbar_dPa * (constant / Pbar**2 - quadratic)
        deff_dPr = dPbar_dPr * (constant / Pbar**2 - quadratic)

        dP_dPa = eff + aero_power * deff_dPa
        dP_dPr = aero_power * deff_dPr

        self.J = hstack([np.diag(dP_dPa), dP_dPr])

        return self.J
Exemple #7
0
    def provideJ(self):

        G = self.G
        nu = self.nu
        h = self.depth
        r0 = self.r0

        # vertical
        eta = 1.0 + 0.6*(1.0-nu)*h/r0
        deta_dr0 = -0.6*(1.0-nu)*h/r0**2
        dkz_dr0 = 4*G/(1.0-nu)*(eta + r0*deta_dr0)

        deta_dh = 0.6*(1.0-nu)/r0
        dkz_dh = 4*G*r0/(1.0-nu)*deta_dh

        # horizontal
        eta = 1.0 + 0.55*(2.0-nu)*h/r0
        deta_dr0 = -0.55*(2.0-nu)*h/r0**2
        dkx_dr0 = 32.0*(1.0-nu)*G/(7.0-8.0*nu)*(eta + r0*deta_dr0)

        deta_dh = 0.55*(2.0-nu)/r0
        dkx_dh = 32.0*(1.0-nu)*G*r0/(7.0-8.0*nu)*deta_dh

        # rocking
        eta = 1.0 + 1.2*(1.0-nu)*h/r0 + 0.2*(2.0-nu)*(h/r0)**3
        deta_dr0 = -1.2*(1.0-nu)*h/r0**2 - 3*0.2*(2.0-nu)*(h/r0)**3/r0
        dkthetax_dr0 = 8.0*G/(3.0*(1.0-nu))*(3*r0**2*eta + r0**3*deta_dr0)

        deta_dh = 1.2*(1.0-nu)/r0 + 3*0.2*(2.0-nu)*(1.0/r0)**3*h**2
        dkthetax_dh = 8.0*G*r0**3/(3.0*(1.0-nu))*deta_dh

        # torsional
        dkphi_dr0 = 16.0*G*3*r0**2/3.0
        dkphi_dh = 0.0

        dk_dr0 = np.array([dkx_dr0, dkthetax_dr0, dkx_dr0, dkthetax_dr0, dkz_dr0, dkphi_dr0])
        dk_dr0[self.rigid] = 0.0
        dk_dh = np.array([dkx_dh, dkthetax_dh, dkx_dh, dkthetax_dh, dkz_dh, dkphi_dh])
        dk_dh[self.rigid] = 0.0

        J = hstack((dk_dr0, dk_dh))

        return J
Exemple #8
0
    def provideJ(self):

        # rename
        z = self.z
        zref = self.zref
        z0 = self.z0
        shearExp = self.shearExp
        U = self.U
        Uref = self.Uref

        # gradients
        n = len(z)
        dU_dUref = np.zeros(n)
        dU_dz = np.zeros(n)
        dU_dzref = np.zeros(n)

        idx = z > z0
        dU_dUref[idx] = U[idx]/Uref
        dU_dz[idx] = U[idx]*shearExp/(z[idx] - z0)
        dU_dzref[idx] = -U[idx]*shearExp/(zref - z0)


        # # cubic spline region
        # idx = np.logical_and(z > z0, z < zsmall)

        # # d w.r.t z
        # dU_dz[idx] = self.spline.eval_deriv(z[idx])

        # # d w.r.t. Uref
        # df2_dUref = k**shearExp
        # dg2_dUref = k**shearExp*shearExp/(zsmall - z0)
        # dU_dUref[idx] = self.spline.eval_deriv_params(z[idx], 0.0, 0.0, 0.0, df2_dUref, 0.0, dg2_dUref)

        # # d w.r.t. zref
        # dx2_dzref = k
        # dg2_dzref = -Uref*k**shearExp*shearExp/k/(zref - z0)**2
        # dU_dzref[idx] = self.spline.eval_deriv_params(z[idx], 0.0, dx2_dzref, 0.0, 0.0, 0.0, dg2_dzref)

        J = hstack([dU_dUref, np.diag(dU_dz), dU_dzref])

        return J
Exemple #9
0
    def provideJ(self):

        # rename
        z = self.z
        zref = self.zref
        z0 = self.z0
        shearExp = self.shearExp
        U = self.U
        Uref = self.Uref

        # gradients
        n = len(z)
        dU_dUref = np.zeros(n)
        dU_dz = np.zeros(n)
        dU_dzref = np.zeros(n)

        idx = z > z0
        dU_dUref[idx] = U[idx] / Uref
        dU_dz[idx] = U[idx] * shearExp / (z[idx] - z0)
        dU_dzref[idx] = -U[idx] * shearExp / (zref - z0)

        # # cubic spline region
        # idx = np.logical_and(z > z0, z < zsmall)

        # # d w.r.t z
        # dU_dz[idx] = self.spline.eval_deriv(z[idx])

        # # d w.r.t. Uref
        # df2_dUref = k**shearExp
        # dg2_dUref = k**shearExp*shearExp/(zsmall - z0)
        # dU_dUref[idx] = self.spline.eval_deriv_params(z[idx], 0.0, 0.0, 0.0, df2_dUref, 0.0, dg2_dUref)

        # # d w.r.t. zref
        # dx2_dzref = k
        # dg2_dzref = -Uref*k**shearExp*shearExp/k/(zref - z0)**2
        # dU_dzref[idx] = self.spline.eval_deriv_params(z[idx], 0.0, dx2_dzref, 0.0, 0.0, 0.0, dg2_dzref)

        J = hstack([dU_dUref, np.diag(dU_dz), dU_dzref])

        return J