Example #1
0
 static void startThread(object obj)
 {
     try
     {
         if (obj.GetType() != typeof(TheBestEllipseOfPoint))
         {
             return;
         }
         TheBestEllipseOfPoint theBestEllipseOfPoint = obj as TheBestEllipseOfPoint;
         theBestEllipseOfPoint.ComputeTheBestEllipses();
     }
     catch (Exception ex)
     {
         log.FatalFormat("Что-то пошло не так и при этом получено исключение: {0}", ex.Message);
     }
 }
Example #2
0
        //  [ExpectedException(typeof(IOException))]
        public void returnedEllipsesCountEqualBmCellsCount()
        {
            TheBestEllipseOfPoint target = new TheBestEllipseOfPoint(inData.dh.points
                                                                     , inData.bm.points
                                                                     , inData.bm.xAxis
                                                                     , inData.bm.yAxis
                                                                     , inData.bm.zAxis
                                                                     , inData.bm.xElPos
                                                                     , inData.bm.yElPos
                                                                     , inData.bm.zElPos
                                                                     , counter);

            target.ComputeTheBestEllipses();
            Ellipse[] ellipses;
            ellipses = target.getTheBestEllipses();
            for (int i = 0; i < ellipses.Count(); i++)
            {
                Assert.IsInstanceOf <Ellipse>(ellipses[i]);
            }
            Assert.AreEqual(inData.bm.points.Count(), ellipses.Count());
        }
Example #3
0
        public Ellipse[] startCalculation(DhBmObj data)
        {
            inData_ = data;
            BmObj[] bmObjs = new BmObj[nTread_];
            theBestEllipseOfPoint_ = new TheBestEllipseOfPoint[nTread_];
            Thread[] threads = new Thread[nTread_];
            Counter  counter = new Counter(inData_.bm.points.Count());

            if (Environment.UserInteractive)
            {
                Console.WriteLine("Количество параллельных потоков: " + nTread_);
            }
            for (int i = 0; i < nTread_; i++)
            {
                threads[i] = new Thread(startThread);
                bmObjs[i]  = new BmObj(inData_.bm, nTread_, i + 1);
                log.DebugFormat("Объявлем класс TheBestEllipseOfPoint (поток {6}): кол-во скважин - {0},кол-во ячеек БМ - {1},размер полуосей:{2}-{3}-{4} кол-во эллипсов вокруг: X - {5}," +
                                "Y - {6}, Z - {7}", inData_.dh.points.Count(), bmObjs[i].points.Count(), bmObjs[i].xAxis, bmObjs[i].yAxis, bmObjs[i].zAxis, bmObjs[i].xElPos, bmObjs[i].yElPos, bmObjs[i].zElPos, i);

                theBestEllipseOfPoint_[i] = new TheBestEllipseOfPoint(inData_.dh.points, bmObjs[i].points, bmObjs[i].xAxis, bmObjs[i].yAxis, bmObjs[i].zAxis, bmObjs[i].xElPos, bmObjs[i].yElPos, bmObjs[i].zElPos, counter);
                threads[i].IsBackground   = true;
                threads[i].Start(theBestEllipseOfPoint_[i]);
            }



            for (int i = 0; i < nTread_; i++)
            {
                threads[i].Join();
            }
            ellipses_ = theBestEllipseOfPoint_[0].getTheBestEllipses().ToArray();
            for (int i = 1; i < nTread_; i++)
            {
                ellipses_ = ellipses_.Concat(theBestEllipseOfPoint_[i].getTheBestEllipses()).ToArray();
            }

            for (int i = 0; i < data.bm.points.Count(); i++)
            {
                if (
                    !(ellipses_[i].point.x == data.bm.points[i].x ||
                      ellipses_[i].point.y == data.bm.points[i].y ||
                      ellipses_[i].point.z == data.bm.points[i].z
                      )
                    )
                {
                    log.Error("Координаты входной БМ не соответствуют координатам результата");
                    logCon.Error("Координаты входной БМ не соответствуют координатам результата");
                    return(null);
                }
            }

            log.InfoFormat("Возвращено в вызывающий модуль {0} ячеек БМ с параметрами эллипсов", ellipses_.Count());
            if (Environment.UserInteractive)
            {
                Console.WriteLine();
                Console.WriteLine(String.Format("Возвращено в вызывающий модуль {0} ячеек БМ с параметрами эллипсов", ellipses_.Count()));
            }

            double[] dd = new double[ellipses_.Count()];
            double[] d  = new double[ellipses_.Count()];
            for (int i = 0; i < ellipses_.Count(); i++)
            {
                dd[i] = ellipses_[i].trDipDir;
                d[i]  = ellipses_[i].trDip;
            }

            return(ellipses_);
        }