本文整理汇总了Python中ccblade.CCBlade类的典型用法代码示例。如果您正苦于以下问题:Python CCBlade类的具体用法?Python CCBlade怎么用?Python CCBlade使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CCBlade类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_dpresweepTip3
def test_dpresweepTip3(self):
presweep = np.linspace(1, 10, self.n)
presweepTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, presweep=presweep, presweepTip=presweepTip)
CP, CT, CQ, dCP_ds, dCT_ds, dCQ_ds, dCP_dv, dCT_dv, dCQ_dv = \
rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dpresweepTip = dCT_ds[0, 6]
dCQ_dpresweepTip = dCQ_ds[0, 6]
dCP_dpresweepTip = dCP_ds[0, 6]
pst = float(presweepTip)
delta = 1e-6*pst
pst += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, presweep=presweep, presweepTip=pst)
CPd, CTd, CQd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dpresweepTip_fd = (CTd - CT) / delta
dCQ_dpresweepTip_fd = (CQd - CQ) / delta
dCP_dpresweepTip_fd = (CPd - CP) / delta
np.testing.assert_allclose(dCT_dpresweepTip_fd, dCT_dpresweepTip, rtol=1e-4, atol=1e-8)
np.testing.assert_allclose(dCQ_dpresweepTip_fd, dCQ_dpresweepTip, rtol=1e-4, atol=1e-8)
np.testing.assert_allclose(dCP_dpresweepTip_fd, dCP_dpresweepTip, rtol=1e-4, atol=1e-8)
示例2: test_dtheta2
def test_dtheta2(self):
dT_dtheta = self.dT_dv[0, 2, :]
dQ_dtheta = self.dQ_dv[0, 2, :]
dP_dtheta = self.dP_dv[0, 2, :]
dT_dtheta_fd = np.zeros(self.n)
dQ_dtheta_fd = np.zeros(self.n)
dP_dtheta_fd = np.zeros(self.n)
for i in range(self.n):
theta = np.array(self.theta)
delta = 1e-6*theta[i]
theta[i] += delta
rotor = CCBlade(self.r, self.chord, theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False)
Pd, Td, Qd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dtheta_fd[i] = (Td - self.T) / delta
dQ_dtheta_fd[i] = (Qd - self.Q) / delta
dP_dtheta_fd[i] = (Pd - self.P) / delta
np.testing.assert_allclose(dT_dtheta_fd, dT_dtheta, rtol=7e-5, atol=1e-8)
np.testing.assert_allclose(dQ_dtheta_fd, dQ_dtheta, rtol=7e-5, atol=1e-8)
np.testing.assert_allclose(dP_dtheta_fd, dP_dtheta, rtol=7e-5, atol=1e-8)
示例3: test_dpresweep1
def test_dpresweep1(self):
presweep = np.linspace(1, 10, self.n)
presweepTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, presweep=presweep, presweepTip=presweepTip)
Np, Tp, dNp_dX, dTp_dX, dNp_dprecurve, dTp_dprecurve = \
rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dpresweep = dNp_dX[5, :]
dTp_dpresweep = dTp_dX[5, :]
dNp_dpresweep_fd = np.zeros(self.n)
dTp_dpresweep_fd = np.zeros(self.n)
for i in range(self.n):
ps = np.array(presweep)
delta = 1e-6*ps[i]
ps[i] += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, presweep=ps, presweepTip=presweepTip)
Npd, Tpd = rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dpresweep_fd[i] = (Npd[i] - Np[i]) / delta
dTp_dpresweep_fd[i] = (Tpd[i] - Tp[i]) / delta
np.testing.assert_allclose(dNp_dpresweep_fd, dNp_dpresweep, rtol=1e-5, atol=1e-8)
np.testing.assert_allclose(dTp_dpresweep_fd, dTp_dpresweep, rtol=1e-5, atol=1e-8)
示例4: test_dprecurveTip1
def test_dprecurveTip1(self):
precurve = np.linspace(1, 10, self.n)
precurveTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, precurve=precurve, precurveTip=precurveTip)
Np, Tp, dNp_dX, dTp_dX, dNp_dprecurve, dTp_dprecurve = \
rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
pct = float(precurveTip)
delta = 1e-6*pct
pct += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, precurve=precurve, precurveTip=pct)
Npd, Tpd = rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dprecurveTip_fd = (Npd - Np) / delta
dTp_dprecurveTip_fd = (Tpd - Tp) / delta
np.testing.assert_allclose(dNp_dprecurveTip_fd, 0.0, rtol=1e-4, atol=1e-8)
np.testing.assert_allclose(dTp_dprecurveTip_fd, 0.0, rtol=1e-4, atol=1e-8)
示例5: test_dprecurveTip2
def test_dprecurveTip2(self):
precurve = np.linspace(1, 10, self.n)
precurveTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, precurve=precurve, precurveTip=precurveTip)
P, T, Q, dP_ds, dT_ds, dQ_ds, dP_dv, dT_dv, dQ_dv = \
rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dprecurveTip = dT_ds[0, 5]
dQ_dprecurveTip = dQ_ds[0, 5]
dP_dprecurveTip = dP_ds[0, 5]
pct = float(precurveTip)
delta = 1e-6*pct
pct += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, precurve=precurve, precurveTip=pct)
Pd, Td, Qd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dprecurveTip_fd = (Td - T) / delta
dQ_dprecurveTip_fd = (Qd - Q) / delta
dP_dprecurveTip_fd = (Pd - P) / delta
np.testing.assert_allclose(dT_dprecurveTip_fd, dT_dprecurveTip, rtol=1e-4, atol=1e-8)
np.testing.assert_allclose(dQ_dprecurveTip_fd, dQ_dprecurveTip, rtol=1e-4, atol=1e-8)
np.testing.assert_allclose(dP_dprecurveTip_fd, dP_dprecurveTip, rtol=1e-4, atol=1e-8)
示例6: test_dtheta3
def test_dtheta3(self):
dCT_dtheta = self.dCT_dv[0, 2, :]
dCQ_dtheta = self.dCQ_dv[0, 2, :]
dCP_dtheta = self.dCP_dv[0, 2, :]
dCT_dtheta_fd = np.zeros(self.n)
dCQ_dtheta_fd = np.zeros(self.n)
dCP_dtheta_fd = np.zeros(self.n)
for i in range(self.n):
theta = np.array(self.theta)
delta = 1e-6*theta[i]
theta[i] += delta
rotor = CCBlade(self.r, self.chord, theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False)
CPd, CTd, CQd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dtheta_fd[i] = (CTd - self.CT) / delta
dCQ_dtheta_fd[i] = (CQd - self.CQ) / delta
dCP_dtheta_fd[i] = (CPd - self.CP) / delta
np.testing.assert_allclose(dCT_dtheta_fd, dCT_dtheta, rtol=5e-6, atol=1e-8)
np.testing.assert_allclose(dCQ_dtheta_fd, dCQ_dtheta, rtol=7e-5, atol=1e-8)
np.testing.assert_allclose(dCP_dtheta_fd, dCP_dtheta, rtol=7e-5, atol=1e-8)
示例7: test_dprecurve1
def test_dprecurve1(self):
precurve = np.linspace(1, 10, self.n)
precurveTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, precurve=precurve, precurveTip=precurveTip)
Np, Tp, dNp_dX, dTp_dX, dNp_dprecurve, dTp_dprecurve = \
rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dprecurve_fd = np.zeros((self.n, self.n))
dTp_dprecurve_fd = np.zeros((self.n, self.n))
for i in range(self.n):
pc = np.array(precurve)
delta = 1e-6*pc[i]
pc[i] += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, precurve=pc, precurveTip=precurveTip)
Npd, Tpd = rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dprecurve_fd[i, :] = (Npd - Np) / delta
dTp_dprecurve_fd[i, :] = (Tpd - Tp) / delta
np.testing.assert_allclose(dNp_dprecurve_fd, dNp_dprecurve, rtol=3e-4, atol=1e-8)
np.testing.assert_allclose(dTp_dprecurve_fd, dTp_dprecurve, rtol=3e-4, atol=1e-8)
示例8: test_dhubht1
def test_dhubht1(self):
dNp_dhubht = self.dNp_dX[8, :]
dTp_dhubht = self.dTp_dX[8, :]
hubht = float(self.hubHt)
delta = 1e-6*hubht
hubht += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
hubht, self.nSector, derivatives=False)
Npd, Tpd = rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dhubht_fd = (Npd - self.Np) / delta
dTp_dhubht_fd = (Tpd - self.Tp) / delta
np.testing.assert_allclose(dNp_dhubht_fd, dNp_dhubht, rtol=1e-5, atol=1e-8)
np.testing.assert_allclose(dTp_dhubht_fd, dTp_dhubht, rtol=1e-5, atol=1e-8)
示例9: test_dpresweep2
def test_dpresweep2(self):
presweep = np.linspace(1, 10, self.n)
presweepTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, presweep=presweep, presweepTip=presweepTip)
P, T, Q, dP_ds, dT_ds, dQ_ds, dP_dv, dT_dv, dQ_dv = \
rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dpresweep = dT_dv[0, 4, :]
dQ_dpresweep = dQ_dv[0, 4, :]
dP_dpresweep = dP_dv[0, 4, :]
dT_dpresweep_fd = np.zeros(self.n)
dQ_dpresweep_fd = np.zeros(self.n)
dP_dpresweep_fd = np.zeros(self.n)
for i in range(self.n):
ps = np.array(presweep)
delta = 1e-6*ps[i]
ps[i] += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, presweep=ps, presweepTip=presweepTip)
Pd, Td, Qd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dpresweep_fd[i] = (Td - T) / delta
dQ_dpresweep_fd[i] = (Qd - Q) / delta
dP_dpresweep_fd[i] = (Pd - P) / delta
np.testing.assert_allclose(dT_dpresweep_fd, dT_dpresweep, rtol=3e-4, atol=1e-8)
np.testing.assert_allclose(dQ_dpresweep_fd, dQ_dpresweep, rtol=3e-4, atol=1e-8)
np.testing.assert_allclose(dP_dpresweep_fd, dP_dpresweep, rtol=3e-4, atol=1e-8)
示例10: test_dprecurve3
def test_dprecurve3(self):
precurve = np.linspace(1, 10, self.n)
precurveTip = 10.1
precone = 0.0
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=True, precurve=precurve, precurveTip=precurveTip)
CP, CT, CQ, dCP_ds, dCT_ds, dCQ_ds, dCP_dv, dCT_dv, dCQ_dv = \
rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dprecurve = dCT_dv[0, 3, :]
dCQ_dprecurve = dCQ_dv[0, 3, :]
dCP_dprecurve = dCP_dv[0, 3, :]
dCT_dprecurve_fd = np.zeros(self.n)
dCQ_dprecurve_fd = np.zeros(self.n)
dCP_dprecurve_fd = np.zeros(self.n)
for i in range(self.n):
pc = np.array(precurve)
delta = 1e-6*pc[i]
pc[i] += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False, precurve=pc, precurveTip=precurveTip)
CPd, CTd, CQd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dprecurve_fd[i] = (CTd - CT) / delta
dCQ_dprecurve_fd[i] = (CQd - CQ) / delta
dCP_dprecurve_fd[i] = (CPd - CP) / delta
np.testing.assert_allclose(dCT_dprecurve_fd, dCT_dprecurve, rtol=3e-4, atol=1e-8)
np.testing.assert_allclose(dCQ_dprecurve_fd, dCQ_dprecurve, rtol=3e-4, atol=1e-8)
np.testing.assert_allclose(dCP_dprecurve_fd, dCP_dprecurve, rtol=3e-4, atol=1e-8)
示例11: test_dhubht3
def test_dhubht3(self):
dCT_dhubht = self.dCT_ds[0, 2]
dCQ_dhubht = self.dCQ_ds[0, 2]
dCP_dhubht = self.dCP_ds[0, 2]
hubht = float(self.hubHt)
delta = 1e-6*hubht
hubht += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
hubht, self.nSector, derivatives=False)
CPd, CTd, CQd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=True)
dCT_dhubht_fd = (CTd - self.CT) / delta
dCQ_dhubht_fd = (CQd - self.CQ) / delta
dCP_dhubht_fd = (CPd - self.CP) / delta
np.testing.assert_allclose(dCT_dhubht_fd, dCT_dhubht, rtol=1e-5, atol=1e-8)
np.testing.assert_allclose(dCQ_dhubht_fd, dCQ_dhubht, rtol=5e-5, atol=1e-8)
np.testing.assert_allclose(dCP_dhubht_fd, dCP_dhubht, rtol=5e-5, atol=1e-8)
示例12: test_dhubht2
def test_dhubht2(self):
dT_dhubht = self.dT_ds[0, 2]
dQ_dhubht = self.dQ_ds[0, 2]
dP_dhubht = self.dP_ds[0, 2]
hubht = float(self.hubHt)
delta = 1e-6*hubht
hubht += delta
rotor = CCBlade(self.r, self.chord, self.theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
hubht, self.nSector, derivatives=False)
Pd, Td, Qd = rotor.evaluate([self.Uinf], [self.Omega], [self.pitch], coefficient=False)
dT_dhubht_fd = (Td - self.T) / delta
dQ_dhubht_fd = (Qd - self.Q) / delta
dP_dhubht_fd = (Pd - self.P) / delta
np.testing.assert_allclose(dT_dhubht_fd, dT_dhubht, rtol=1e-5, atol=1e-8)
np.testing.assert_allclose(dQ_dhubht_fd, dQ_dhubht, rtol=5e-5, atol=1e-8)
np.testing.assert_allclose(dP_dhubht_fd, dP_dhubht, rtol=5e-5, atol=1e-8)
示例13: test_dtheta1
def test_dtheta1(self):
dNp_dtheta = self.dNp_dX[2, :]
dTp_dtheta = self.dTp_dX[2, :]
dNp_dtheta_fd = np.zeros(self.n)
dTp_dtheta_fd = np.zeros(self.n)
for i in range(self.n):
theta = np.array(self.theta)
delta = 1e-6*theta[i]
theta[i] += delta
rotor = CCBlade(self.r, self.chord, theta, self.af, self.Rhub, self.Rtip,
self.B, self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp,
self.hubHt, self.nSector, derivatives=False)
Npd, Tpd = rotor.distributedAeroLoads(self.Uinf, self.Omega, self.pitch, self.azimuth)
dNp_dtheta_fd[i] = (Npd[i] - self.Np[i]) / delta
dTp_dtheta_fd[i] = (Tpd[i] - self.Tp[i]) / delta
np.testing.assert_allclose(dNp_dtheta_fd, dNp_dtheta, rtol=1e-6, atol=1e-8)
np.testing.assert_allclose(dTp_dtheta_fd, dTp_dtheta, rtol=1e-4, atol=1e-8)
示例14: setUp
def setUp(self):
# geometry
Rhub = 1.5
Rtip = 63.0
r = np.array([2.8667, 5.6000, 8.3333, 11.7500, 15.8500, 19.9500, 24.0500,
28.1500, 32.2500, 36.3500, 40.4500, 44.5500, 48.6500, 52.7500,
56.1667, 58.9000, 61.6333])
chord = np.array([3.542, 3.854, 4.167, 4.557, 4.652, 4.458, 4.249, 4.007, 3.748,
3.502, 3.256, 3.010, 2.764, 2.518, 2.313, 2.086, 1.419])
theta = np.array([13.308, 13.308, 13.308, 13.308, 11.480, 10.162, 9.011, 7.795,
6.544, 5.361, 4.188, 3.125, 2.319, 1.526, 0.863, 0.370, 0.106])
B = 3 # number of blades
# atmosphere
rho = 1.225
mu = 1.81206e-5
afinit = CCAirfoil.initFromAerodynFile # just for shorthand
basepath = path.join(path.dirname(path.realpath(__file__)), '5MW_AFFiles')
# load all airfoils
airfoil_types = [0]*8
airfoil_types[0] = afinit(path.join(basepath, 'Cylinder1.dat'))
airfoil_types[1] = afinit(path.join(basepath, 'Cylinder2.dat'))
airfoil_types[2] = afinit(path.join(basepath, 'DU40_A17.dat'))
airfoil_types[3] = afinit(path.join(basepath, 'DU35_A17.dat'))
airfoil_types[4] = afinit(path.join(basepath, 'DU30_A17.dat'))
airfoil_types[5] = afinit(path.join(basepath, 'DU25_A17.dat'))
airfoil_types[6] = afinit(path.join(basepath, 'DU21_A17.dat'))
airfoil_types[7] = afinit(path.join(basepath, 'NACA64_A17.dat'))
# place at appropriate radial stations
af_idx = [0, 0, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7]
af = [0]*len(r)
for i in range(len(r)):
af[i] = airfoil_types[af_idx[i]]
tilt = -5.0
precone = 2.5
yaw = 0.0
# create CCBlade object
self.rotor = CCBlade(r, chord, theta, af, Rhub, Rtip, B, rho, mu, precone, tilt, yaw, shearExp=0.2, hubHt=90.0)
示例15: execute
def execute(self):
if len(self.precurve) == 0:
self.precurve = np.zeros_like(self.r)
# airfoil files
n = len(self.airfoil_files)
af = [0]*n
afinit = CCAirfoil.initFromAerodynFile
for i in range(n):
af[i] = afinit(self.airfoil_files[i])
self.ccblade = CCBlade_PY(self.r, self.chord, self.theta, af, self.Rhub, self.Rtip, self.B,
self.rho, self.mu, self.precone, self.tilt, self.yaw, self.shearExp, self.hubHt,
self.nSector, self.precurve, self.precurveTip, tiploss=self.tiploss, hubloss=self.hubloss,
wakerotation=self.wakerotation, usecd=self.usecd, derivatives=True)
if self.run_case == 'power':
# power, thrust, torque
self.P, self.T, self.Q, self.dP, self.dT, self.dQ \
= self.ccblade.evaluate(self.Uhub, self.Omega, self.pitch, coefficient=False)
elif self.run_case == 'loads':
# distributed loads
Np, Tp, self.dNp, self.dTp \
= self.ccblade.distributedAeroLoads(self.V_load, self.Omega_load, self.pitch_load, self.azimuth_load)
# concatenate loads at root/tip
self.loads.r = np.concatenate([[self.Rhub], self.r, [self.Rtip]])
Np = np.concatenate([[0.0], Np, [0.0]])
Tp = np.concatenate([[0.0], Tp, [0.0]])
# conform to blade-aligned coordinate system
self.loads.Px = Np
self.loads.Py = -Tp
self.loads.Pz = 0*Np
# return other outputs needed
self.loads.V = self.V_load
self.loads.Omega = self.Omega_load
self.loads.pitch = self.pitch_load
self.loads.azimuth = self.azimuth_load