public async Task <IActionResult> Analyze([FromBody] AnalysisRequestViewModel model) { var request = _mapper.Map <AnalysisRequest>(model); var analysis = await _analysisService.Analyze(model.SessionId, model.DatasetId, request); var data = _mapper.Map <AnalysisViewModel>(analysis); return(new OkObjectResult(new ApiResponse <AnalysisViewModel>("Request was analyzed.", data))); }
public async Task <IActionResult> GetAnalysis([FromBody] AnalysisRequestViewModel vm) { var stationObservations = await _aeolusApiService.GetStationObservations(vm.StationIdentifier, vm.Start, vm.End); var factory = new WindSpeedBinFactory(); var bins = factory.Create(stationObservations, vm.Strategy); var analysis = new PowerGenerationAnalysis(stationObservations.Station, bins, vm); return(PartialView("_AnalysisResults", analysis)); }
public PowerGenerationAnalysis(Station station, WindSpeedBin[] windSpeedBins, AnalysisRequestViewModel analysisRequest) { Station = station; Start = windSpeedBins.Min(x => x.Date); End = windSpeedBins.Max(x => x.Date); BinCount = windSpeedBins.Length; // https://www.windpowerengineering.com/construction/calculate-wind-power-output/ https: //www.ajdesigner.com/phpwindpower/wind_generator_power.php AverageWindSpeed = windSpeedBins.Average(x => x.NormalizedWindSpeed) ?? 0; var rotorSweptArea = Math.PI * Math.Pow(analysisRequest.RotorRadius, 2); EstimatedKw = (0.5 * analysisRequest.AirDensity * rotorSweptArea * analysisRequest.PerformanceCoefficient * Math.Pow(AverageWindSpeed, 3)) / 1000; EstimatedKwh = (End - Start).TotalHours * EstimatedKw; }