You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.8 KiB
Python

from py_wake.wind_turbines import WindTurbine
from py_wake.wind_turbines.power_ct_functions import PowerCtTabular
from py_wake.site._site import UniformSite
from py_wake.site.xrsite import XRSite
from py_wake.wind_farm_models import PropagateDownwind
from py_wake.deficit_models.gaussian import TurboGaussianDeficit
from py_wake.flow_map import XYGrid
import numpy as np
import xarray as xr
D = 126 #Diametro del wT
h = 90 #Altura del WT
U_ref = 8
initial_position = np.array([[ 1 , 1],
[ 2. , 2],
[ 4 , 4],
[ 1 , 4],
[ 2 , 4],
[ 3 , 4],
[ 1 , 5],
[ 2 , 5],
[ 5 , 5]])
def py_wake_Initial_Cong(D,name,h,U_ref,initial_position=initial_position):
#Curvas del WT
power_curve = np.array([
[ 0.1, 1.000],
[ 4.5, 267.7],
[ 5.0, 387.6],
[ 5.5, 534.0],
[ 6.0, 707.4],
[ 6.5, 910.0],
[ 7.0, 1142.7],
[ 7.5, 1407.5],
[ 8.0, 1707.1],
[ 8.5, 2047.3],
[ 9.0, 2430.6]]) * [1, 1000]
ct_curve = np.array([
[ 0.1, 0.100],
[ 4.5, 0.928],
[ 5.0, 0.892],
[ 5.5, 0.861],
[ 6.0, 0.835],
[ 6.5, 0.812],
[ 7.0, 0.792],
[ 7.5, 0.776],
[ 8.0, 0.7702530978349217],
[ 8.5, 0.762],
[ 9.0, 0.763]])
return WindTurbine(name=name,
diameter=D,
hub_height=h,
powerCtFunction=PowerCtTabular(power_curve[:, 0],
power_curve[:, 1],
'w',ct_curve[:, 1],
method='linear'))
windTurbines = py_wake_Initial_Cong(D, 'NREL_5MW', h, U_ref)
def run(direction=0, initial_position=initial_position, U_ref=U_ref):
initial_position = np.array(initial_position);
site = UniformSite(p_wd=[1] * 8,
ws=U_ref,
initial_position=initial_position*D)
#ds = xr.Dataset(
# data_vars={'P': ('wd', [1, 1, 1, 1])},
# coords={'wd': [0, 90, 180, 270]})
#ds['TI'] = 0.1
#site = XRSite(ds, interp_method='nearest', initial_position=initial_position*D, default_ws=np.atleast_1d(U_ref))
wt_x, wt_y = site.initial_position.T/D
wfm = PropagateDownwind(site, windTurbines, wake_deficitModel=TurboGaussianDeficit())
grid = XYGrid(x=np.arange(0, 10.01, 0.1)*126, y=np.arange(0, 10.01, 0.1)*126)
xa = wfm(x=wt_x*126, y=wt_y*126, wd=direction, yaw=0).flow_map(grid)
ws = xa.WS_eff
return ws[:,:,0,0].values[:,:,0].tolist()