Пример #1
0
        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)));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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;
        }