public LearningResult Calc(DateTime fromDate, DateTime toDate) { double[] Ks = { 0.5, 1, 2 }; //массив коэффициентов для интерполирования LearningResult result = new LearningResult(); result.GPResults = new List <GPLearningResult>(); var datesRange = db.wells_measurements.Where(x => (x.measure_date >= fromDate) && (x.measure_date <= toDate)).Select(y => new { Date = y.measure_date }).Distinct().ToList(); var dates = (from date in datesRange join meas in db.final_gather_point_measurements on date.Date equals meas.measure_date select new { Date = date.Date }).ToList(); toolStripProgressBar.Maximum = dates.Count; toolStripProgressBar.Minimum = 0; toolStripProgressBar.Value = 0; foreach (var date in dates) { toolStripProgressBar.Value++; //double[,] _PTk = new double[Ks.Length, 2]; foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день { var well = _graph.wells.First(x => x.Data.measurement_id == wellMeasurement.well_id); well.Data = wellMeasurement; //well.G_condensat = wellMeasurement.cond_output; //well.G_gas = wellMeasurement.gas_output; //well.P_shl = wellMeasurement.inlet_P; //well.P_ust = wellMeasurement.wellhead_P; //well.T_shl = wellMeasurement.inlet_T; //well.T_ust = wellMeasurement.wellhead_T; well.a = new double[] { -4f / 5, -1f / 5, 1f }; well.b = new double[] { -12f / 5, 11f / 5, 1f / 5 }; well.Gkr = (double)db.wells.First(x => x.well_id == wellMeasurement.well_id).Gkr; well.Pkr = (double)db.wells.First(x => x.well_id == wellMeasurement.well_id).Pkr; } CalcNode(_graph.endNode); break; } return(new LearningResult()); }
public LearningResult Calc(DateTime fromDate, DateTime toDate) { double[] Ks = { 0.5, 1, 2 }; //массив коэффициентов для интерполирования LearningResult result = new LearningResult(); result.GPResults = new List<GPLearningResult>(); var datesRange = db.wells_measurements.Where(x => (x.measure_date >= fromDate) && (x.measure_date <= toDate)).Select(y => new { Date = y.measure_date }).Distinct().ToList(); var dates = (from date in datesRange join meas in db.final_gather_point_measurements on date.Date equals meas.measure_date select new {Date = date.Date}).ToList(); toolStripProgressBar.Maximum = dates.Count; toolStripProgressBar.Minimum = 0; toolStripProgressBar.Value = 0; foreach (var date in dates) { toolStripProgressBar.Value++; //double[,] _PTk = new double[Ks.Length, 2]; foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день { var well = _graph.wells.First(x => x.Data.measurement_id == wellMeasurement.well_id); well.Data = wellMeasurement; //well.G_condensat = wellMeasurement.cond_output; //well.G_gas = wellMeasurement.gas_output; //well.P_shl = wellMeasurement.inlet_P; //well.P_ust = wellMeasurement.wellhead_P; //well.T_shl = wellMeasurement.inlet_T; //well.T_ust = wellMeasurement.wellhead_T; well.a = new double[] {-4f/5, -1f/5, 1f}; well.b = new double[] { -12f / 5, 11f/5, 1f/5 }; well.Gkr = (double) db.wells.First(x => x.well_id == wellMeasurement.well_id).Gkr; well.Pkr = (double) db.wells.First(x => x.well_id == wellMeasurement.well_id).Pkr; } CalcNode(_graph.endNode); break; } return new LearningResult(); }
public LearningResult Calc(DateTime fromDate, DateTime toDate) { UpdateProgressBarDelegate updProgress = new UpdateProgressBarDelegate(progressBar.SetValue); double[] Ks = { 0.5, 1, 2 }; //массив коэффициентов для интерполирования LearningResult result = new LearningResult(); result.GPResults = new List <GPLearningResult>(); var datesRange = db.wells_measurements.Where(x => (x.measure_date >= fromDate) && (x.measure_date <= toDate)).Select(y => new { Date = y.measure_date }).Distinct().ToList(); var dates = (from date in datesRange join meas in db.final_gather_point_measurements on date.Date equals meas.measure_date select new { Date = date.Date }).ToList(); if (!dates.Any()) { return(result); } progressBar.Maximum = dates.Count; progressBar.Minimum = 0; progressBar.Value = 0; double value = 0; foreach (var date in dates) { value++; Dispatcher.CurrentDispatcher.Invoke(updProgress, DispatcherPriority.Background, new object[] { ProgressBar.ValueProperty, value }); double[,] _PTk = new double[Ks.Length, 2]; //foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день //{ // var well = _graph.wells.First(x => x.Data.well_id == wellMeasurement.well_id); // well.Data = wellMeasurement; // well.a = new double[] { -4f / 5, -1f / 5, 1f }; // well.b = new double[] { -12f / 5, 11f / 5, 1f / 5 }; //} List <GPResult> gpResults = new List <GPResult>(); for (int i = 0; i < Ks.Length; i++) //расчет P и T для каждого из значений коэффициентов { K_p = Ks[i]; K_t = Ks[i]; CalcGraph(date.Date); //CalcNode(_graph.endNode); _PTk[i, 0] = _graph.endNode.P; _PTk[i, 1] = _graph.endNode.T; if (K_p == 1) { foreach (var n in _graph.nodes) { gpResults.Add(new GPResult() { G = n.G, Id = n.Id, Name = n.Name, NextNodeName = n.NextNode != null ? n.NextNode.Name : "", Pf = n.P, Tf = n.T }); } } _graph.Clear(); //foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день //{ // var well = _graph.wells.First(x => x.Data.well_id == wellMeasurement.well_id); // well.Data = wellMeasurement; // well.a = new double[] { -4f / 5, -1f / 5, 1f }; // well.b = new double[] { -12f / 5, 11f / 5, 1f / 5 }; //} } var realResults = db.final_gather_point_measurements.FirstOrDefault(x => x.measure_date == date.Date); double _Kt = GetInterpolatedValue(realResults.Texper, new [] { _PTk[0, 1], _PTk[1, 1], _PTk[2, 1] }, Ks); double _Kp = GetInterpolatedValue(realResults.Pexper, new [] { _PTk[0, 0], _PTk[1, 0], _PTk[2, 0] }, Ks); K_p = _Kp; K_t = _Kt; CalcNode(_graph.endNode); foreach (var n in _graph.nodes) { var r = gpResults.First(x => x.Id == n.Id); r.Pcoef = n.P; r.Tcoef = n.T; } result.GPResults.Add(new GPLearningResult() { Date = date.Date, Pexpr = realResults.Pexper, Texpr = realResults.Texper, Pf = _PTk[1, 0], Tf = _PTk[1, 1], Coef_T = _Kt, Coef_P = _Kp, Pcoef = _graph.endNode.P, Tcoef = _graph.endNode.T, G = _graph.endNode.G, WellMeasurements = db.wells_measurements.Where(x => EntityFunctions.TruncateTime(x.measure_date) == date.Date).ToList(), GPMeasurements = gpResults }); _graph.Clear(); //break; } result.Coef_P = result.GPResults.Average(x => x.Coef_P); result.Coef_T = result.GPResults.Average(x => x.Coef_T); //progressBar.IsIndeterminate = false; return(result); }
public LearningResult Calc(DateTime fromDate, DateTime toDate) { UpdateProgressBarDelegate updProgress = new UpdateProgressBarDelegate(progressBar.SetValue); double[] Ks = { 0.5, 1, 2 }; //массив коэффициентов для интерполирования LearningResult result = new LearningResult(); result.GPResults = new List<GPLearningResult>(); var datesRange = db.wells_measurements.Where(x => (x.measure_date >= fromDate) && (x.measure_date <= toDate)).Select(y => new { Date = y.measure_date }).Distinct().ToList(); var dates = (from date in datesRange join meas in db.final_gather_point_measurements on date.Date equals meas.measure_date select new { Date = date.Date }).ToList(); if (!dates.Any()) { return result; } progressBar.Maximum = dates.Count; progressBar.Minimum = 0; progressBar.Value = 0; double value = 0; foreach (var date in dates) { value++; Dispatcher.CurrentDispatcher.Invoke(updProgress, DispatcherPriority.Background, new object[] { ProgressBar.ValueProperty, value }); double[,] _PTk = new double[Ks.Length, 2]; //foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день //{ // var well = _graph.wells.First(x => x.Data.well_id == wellMeasurement.well_id); // well.Data = wellMeasurement; // well.a = new double[] { -4f / 5, -1f / 5, 1f }; // well.b = new double[] { -12f / 5, 11f / 5, 1f / 5 }; //} List<GPResult> gpResults = new List<GPResult>(); for (int i = 0; i < Ks.Length; i++) //расчет P и T для каждого из значений коэффициентов { K_p = Ks[i]; K_t = Ks[i]; CalcGraph(date.Date); //CalcNode(_graph.endNode); _PTk[i, 0] = _graph.endNode.P; _PTk[i, 1] = _graph.endNode.T; if (K_p == 1) { foreach (var n in _graph.nodes) { gpResults.Add(new GPResult() { G = n.G, Id = n.Id, Name = n.Name, NextNodeName = n.NextNode != null ? n.NextNode.Name : "", Pf = n.P, Tf = n.T }); } } _graph.Clear(); //foreach (var wellMeasurement in db.wells_measurements.Where(x => x.measure_date == date.Date).ToList()) //заполнение данных о скважинах за данный день //{ // var well = _graph.wells.First(x => x.Data.well_id == wellMeasurement.well_id); // well.Data = wellMeasurement; // well.a = new double[] { -4f / 5, -1f / 5, 1f }; // well.b = new double[] { -12f / 5, 11f / 5, 1f / 5 }; //} } var realResults = db.final_gather_point_measurements.FirstOrDefault(x => x.measure_date == date.Date); double _Kt = GetInterpolatedValue(realResults.Texper, new [] {_PTk[0, 1], _PTk[1, 1], _PTk[2, 1]}, Ks); double _Kp = GetInterpolatedValue(realResults.Pexper, new [] {_PTk[0, 0], _PTk[1, 0], _PTk[2, 0]}, Ks); K_p = _Kp; K_t = _Kt; CalcNode(_graph.endNode); foreach (var n in _graph.nodes) { var r = gpResults.First(x => x.Id == n.Id); r.Pcoef = n.P; r.Tcoef = n.T; } result.GPResults.Add(new GPLearningResult() { Date = date.Date, Pexpr = realResults.Pexper, Texpr = realResults.Texper, Pf = _PTk[1, 0], Tf = _PTk[1, 1], Coef_T = _Kt, Coef_P = _Kp, Pcoef = _graph.endNode.P, Tcoef = _graph.endNode.T, G = _graph.endNode.G, WellMeasurements = db.wells_measurements.Where(x => EntityFunctions.TruncateTime(x.measure_date) == date.Date).ToList(), GPMeasurements = gpResults }); _graph.Clear(); //break; } result.Coef_P = result.GPResults.Average(x => x.Coef_P); result.Coef_T = result.GPResults.Average(x => x.Coef_T); //progressBar.IsIndeterminate = false; return result; }