Exemple #1
0
        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();
        }
Exemple #3
0
        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;
        }