From 7cdbd654327894173015eb4e6501c9bc3319420d Mon Sep 17 00:00:00 2001 From: shadowik Date: Mon, 4 Nov 2024 02:24:15 +0400 Subject: [PATCH] Yaw angles and fix --- server/floris_module/src/FlorisULSTU.py | 3 ++- server/src/data/schemas.py | 1 + server/src/routers/floris_router.py | 14 ++++++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/floris_module/src/FlorisULSTU.py b/server/floris_module/src/FlorisULSTU.py index 9010471..92604cd 100644 --- a/server/floris_module/src/FlorisULSTU.py +++ b/server/floris_module/src/FlorisULSTU.py @@ -65,7 +65,8 @@ class FlorisULSTU(FlorisModel): for experiment_count in range(experiment_counts): self.reset_operation() - self.set(wind_speeds=[wind_speeds[0]], wind_directions=[wind_dirs[0]], turbulence_intensities=[0.05]) + self.set(wind_speeds=[wind_speeds[experiment_count]], wind_directions=[wind_dirs[experiment_count]], + turbulence_intensities=[0.05]) ax = axarr[experiment_count] horizontal_plane = self.calculate_horizontal_plane(height=90.0) visualize_cut_plane( diff --git a/server/src/data/schemas.py b/server/src/data/schemas.py index f7efa37..a096654 100644 --- a/server/src/data/schemas.py +++ b/server/src/data/schemas.py @@ -12,6 +12,7 @@ class SWeatherInfo(BaseModel): class SFlorisInputParams(BaseModel): layout_x: list[float] = Field(Query([])) layout_y: list[float] = Field(Query([])) + yaw_angle: list[float] = Field(Query([])) date_start: date date_end: date diff --git a/server/src/routers/floris_router.py b/server/src/routers/floris_router.py index 6abd3e4..cd5ea16 100644 --- a/server/src/routers/floris_router.py +++ b/server/src/routers/floris_router.py @@ -8,6 +8,7 @@ from fastapi.responses import FileResponse from data.repository import WeatherRepository from data.schemas import SFlorisInputParams, SFlorisOutputData, SWeatherInfo +import numpy as np sys.path.append(str(Path(__file__).parent.parent.parent)) @@ -27,12 +28,13 @@ router = APIRouter( async def get_windmill_data( data: Annotated[SFlorisInputParams, Depends()] ): - if len(data.layout_x) != len(data.layout_y): + if len(data.layout_x) != len(data.layout_y) and len(data.layout_x) != len(data.yaw_angle): raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, - detail="Length of layout x and y must be the same", + detail="Length of layout x and y and yaw_angle must be the same", ) + fmodel = FlorisULSTU() client = OpenMeteoClient() @@ -49,6 +51,14 @@ async def get_windmill_data( turbulence_intensities=[0.1] * len(wind_directions) ) + yaw_angles = np.zeros((len(wind_directions), len(data.layout_x))) + for i in range(len(data.layout_x)): + yaw_angles[:, i] = data.yaw_angle[i] + + fmodel.set( + yaw_angles=yaw_angles, + ) + fmodel.run() res = fmodel.get_turbine_powers().tolist()