def __windComponents(self, Uinf, Omega, azimuth): """x, y components of wind in blade-aligned coordinate system""" Vx, Vy = _bem.windcomponents(self.r, self.precurve, self.presweep, self.precone, self.yaw, self.tilt, azimuth, Uinf, Omega, self.hubHt, self.shearExp) if not self.derivatives: return Vx, Vy, 0.0, 0.0, 0.0, 0.0 # y = [r, precurve, presweep, precone, tilt, hubHt] (derivative order) n = len(self.r) dy_dy = np.eye(3*n+3) Vxd, Vyd = _bem.windcomponents_dv(self.r, self.precurve, self.presweep, self.precone, self.yaw, self.tilt, azimuth, Uinf, Omega, self.hubHt, self.shearExp, dy_dy[:, :n], dy_dy[:, n:2*n], dy_dy[:, 2*n:3*n], dy_dy[:, 3*n], dy_dy[:, 3*n+1], dy_dy[:, 3*n+2]) dVx_dr = np.diag(Vxd[:n, :]) # off-diagonal terms are known to be zero and not needed dVy_dr = np.diag(Vyd[:n, :]) dVx_dcurve = Vxd[n:2*n, :] # tri-diagonal (note: dVx_j / dcurve_i i==row) dVy_dcurve = Vyd[n:2*n, :] # off-diagonal are actually all zero, but leave for convenience dVx_dsweep = np.diag(Vxd[2*n:3*n, :]) # off-diagonal terms are known to be zero and not needed dVy_dsweep = np.diag(Vyd[2*n:3*n, :]) # w = [r, presweep, precone, tilt, hub] dVx_dw = np.vstack((dVx_dr, dVx_dsweep, Vxd[3*n:, :])) dVy_dw = np.vstack((dVy_dr, dVy_dsweep, Vyd[3*n:, :])) return Vx, Vy, dVx_dw, dVy_dw, dVx_dcurve, dVy_dcurve
def __windComponents(self, Uinf, Omega, azimuth): """x, y components of wind in blade-aligned coordinate system""" Vx, Vy = _bem.windcomponents(self.r, self.precurve, self.presweep, self.precone, self.yaw, self.tilt, azimuth, Uinf, Omega, self.hubHt, self.shearExp) if not self.derivatives: return Vx, Vy, 0.0, 0.0, 0.0, 0.0 # y = [r, precurve, presweep, precone, tilt, hubHt, yaw, azimuth, Uinf, Omega] (derivative order) n = len(self.r) dy_dy = np.eye(3*n+7) _, Vxd, _, Vyd = _bem.windcomponents_dv(self.r, dy_dy[:, :n], self.precurve, dy_dy[:, n:2*n], self.presweep, dy_dy[:, 2*n:3*n], self.precone, dy_dy[:, 3*n], self.yaw, dy_dy[:, 3*n+3], self.tilt, dy_dy[:, 3*n+1], azimuth, dy_dy[:, 3*n+4], Uinf, dy_dy[:, 3*n+5], Omega, dy_dy[:, 3*n+6], self.hubHt, dy_dy[:, 3*n+2], self.shearExp) dVx_dr = np.diag(Vxd[:n, :]) # off-diagonal terms are known to be zero and not needed dVy_dr = np.diag(Vyd[:n, :]) dVx_dcurve = Vxd[n:2*n, :] # tri-diagonal (note: dVx_j / dcurve_i i==row) dVy_dcurve = Vyd[n:2*n, :] # off-diagonal are actually all zero, but leave for convenience dVx_dsweep = np.diag(Vxd[2*n:3*n, :]) # off-diagonal terms are known to be zero and not needed dVy_dsweep = np.diag(Vyd[2*n:3*n, :]) # w = [r, presweep, precone, tilt, hubHt, yaw, azimuth, Uinf, Omega] dVx_dw = np.vstack((dVx_dr, dVx_dsweep, Vxd[3*n:, :])) dVy_dw = np.vstack((dVy_dr, dVy_dsweep, Vyd[3*n:, :])) return Vx, Vy, dVx_dw, dVy_dw, dVx_dcurve, dVy_dcurve