def solve_nonlinear(self, params, unknowns, resids):
direction_id = self.direction_id
pP = self.params['gen_params:pP']
yaw = self.params['yaw%i' % direction_id]
start = 5
skip = 8
# Cp = params['gen_params:windSpeedToCPCT_CP'][start::skip]
Cp = params['gen_params:windSpeedToCPCT_CP']
# Ct = params['gen_params:windSpeedToCPCT_CT'][start::skip]
Ct = params['gen_params:windSpeedToCPCT_CT']
# windspeeds = params['gen_params:windSpeedToCPCT_wind_speed'][start::skip]
windspeeds = params['gen_params:windSpeedToCPCT_wind_speed']
#
# Cp = np.insert(Cp, 0, Cp[0]/2.0)
# Cp = np.insert(Cp, 0, 0.0)
# Ct = np.insert(Ct, 0, np.max(params['gen_params:windSpeedToCPCT_CP'])*0.99)
# Ct = np.insert(Ct, 0, np.max(params['gen_params:windSpeedToCPCT_CT']))
# windspeeds = np.insert(windspeeds, 0, 2.5)
# windspeeds = np.insert(windspeeds, 0, 0.0)
#
# Cp = np.append(Cp, 0.0)
# Ct = np.append(Ct, 0.0)
# windspeeds = np.append(windspeeds, 30.0)
CPspline = Akima(windspeeds, Cp)
CTspline = Akima(windspeeds, Ct)
# n = 500
# x = np.linspace(0.0, 30., n)
CP, dCPdvel, _, _ = CPspline.interp(params['wtVelocity%i' % direction_id])
CT, dCTdvel, _, _ = CTspline.interp(params['wtVelocity%i' % direction_id])
# print 'in solve_nonlinear', dCPdvel, dCTdvel
# pP = 3.0
# print "in rotor, pP = ", pP
Cp_out = CP*np.cos(yaw*np.pi/180.)**pP
Ct_out = CT*np.cos(yaw*np.pi/180.)**2.
# print "in rotor, Cp = [%f. %f], Ct = [%f, %f]" % (Cp_out[0], Cp_out[1], Ct_out[0], Ct_out[1])
self.dCp_out_dyaw = (-np.sin(yaw*np.pi/180.))*(np.pi/180.)*pP*CP*np.cos(yaw*np.pi/180.)**(pP-1.)
self.dCp_out_dvel = dCPdvel*np.cos(yaw*np.pi/180.)**pP
# print 'in solve_nonlinear', self.dCp_out_dyaw, self.dCp_out_dvel
self.dCt_out_dyaw = (-np.sin(yaw*np.pi/180.))*(np.pi/180.)*2.*CT*np.cos(yaw*np.pi/180.)
self.dCt_out_dvel = dCTdvel*np.cos(yaw*np.pi/180.)**2.
# normalize on incoming wind speed to correct coefficients for yaw
self.unknowns['Cp_out'] = Cp_out
self.unknowns['Ct_out'] = Ct_out
GeneralWindFarmComponents.py 文件源码
python
阅读 40
收藏 0
点赞 0
评论 0
评论列表
文章目录