Пример #1
0
        private bool CheckSimpleGriddingPossibilityByX(NonMeshedModel model, decimal xCellSize)
        {
            var boundaries = GetAllAnomalyBoundariesAlong(a => a.X, model);

            boundaries.Insert(0, StartX);
            boundaries.Add(EndX);

            return(CheckSimpleGriddingPossibility(boundaries, xCellSize));
        }
Пример #2
0
        private bool CheckSimpleGriddingPossibilityByY(NonMeshedModel model, decimal yCellSize)
        {
            var boundaries = GetAllAnomalyBoundariesAlong(a => a.Y, model);

            boundaries.Add(StartY);
            boundaries.Add(EndY);

            return(CheckSimpleGriddingPossibility(boundaries, yCellSize));
        }
Пример #3
0
        private static decimal[] GetAllBoundariesAlongZ(NonMeshedModel model)
        {
            var boundaries = new List <decimal>();

            boundaries.AddRange(GetAllAnomalyBoundariesAlong(a => a.Z, model));
            boundaries.AddRange(GetAllSection1DBoundaries(model));

            return(DistinctSortToArray(boundaries));
        }
Пример #4
0
        public static NonMeshedModel CreateModelWithFirstLayerBlockOnly()
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 0.1f,
                                                  x: new Direction(0, 1000),
                                                  y: new Direction(0, 2000),
                                                  z: new Direction(200, 800)));

            return(model);
        }
Пример #5
0
        public static NonMeshedModel CreateModelOnlyBottomBlock()
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 0.3f,
                                                  x: new Direction(1400, 1000),
                                                  y: new Direction(0, 5600),
                                                  z: new Direction(1000, 2000)));

            return(model);
        }
Пример #6
0
        private static IEnumerable <decimal> GetAllSection1DBoundaries(NonMeshedModel model)
        {
            var boundaries = new List <decimal>();
            var backZ      = model.Section1D.ZeroAirLevelAlongZ;

            boundaries.Add(backZ);

            for (int i = 0; i < model.Section1D.NumberOfLayers; i++)
            {
                var layer = model.Section1D[i];

                backZ += layer.Thickness;
                boundaries.Add(backZ);
            }

            return(boundaries);
        }
Пример #7
0
        public NonMeshedToCartesianModelConverter(NonMeshedModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            _model = model;

            _zBoundaries = GetAllBoundariesAlongZ(model);

            var startX = model.Anomalies.Min(a => a.X.Start);
            var endX   = model.Anomalies.Max(a => a.X.Start + a.X.Size);
            var startY = model.Anomalies.Min(a => a.Y.Start);
            var endY   = model.Anomalies.Max(a => a.Y.Start + a.Y.Size);

            SetBoundaries(startX, endX, startY, endY);
        }
Пример #8
0
        public NonMeshedModel CreateNonMeshedModel(double leftConductivity, double rightConductivity)
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: leftConductivity,
                                                  x: new Direction(0, AnomalySizeLateral / 2),
                                                  y: new Direction(0, AnomalySizeLateral),
                                                  z: new Direction(0, AnomalySizeAlongZ)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: rightConductivity,
                                                  x: new Direction(AnomalySizeLateral / 2, AnomalySizeLateral / 2),
                                                  y: new Direction(0, AnomalySizeLateral),
                                                  z: new Direction(0, AnomalySizeAlongZ)));


            return(model);
        }
Пример #9
0
        public static NonMeshedModel CreateNonMeshedModel()
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 300f,
                                                  x: new Direction(0, 3000),
                                                  y: new Direction(400, 400),
                                                  z: new Direction(50, 250)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 30f,
                                                  x: new Direction(0, 3000),
                                                  y: new Direction(800, 600),
                                                  z: new Direction(50, 400)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 100f,
                                                  x: new Direction(0, 3000),
                                                  y: new Direction(1400, 400),
                                                  z: new Direction(50, 250)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 30f,
                                                  x: new Direction(0, 3000),
                                                  y: new Direction(1800, 600),
                                                  z: new Direction(50, 400)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 300f,
                                                  x: new Direction(0, 3000),
                                                  y: new Direction(2400, 400),
                                                  z: new Direction(50, 250)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 0.1f,
                                                  x: new Direction(3400, 1000),
                                                  y: new Direction(2800, 2000),
                                                  z: new Direction(200, 800)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1 / 0.3f,
                                                  x: new Direction(1400, 1000),
                                                  y: new Direction(0, 5600),
                                                  z: new Direction(1000, 2000)));

            return(model);
        }
Пример #10
0
        public static NonMeshedModel CreateModel(decimal lateralSize, decimal faultSize)
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1,
                                                  x: new Direction(0, lateralSize),
                                                  y: new Direction(0, lateralSize),
                                                  z: new Direction(0, CoverThickness)));

            if (faultSize != 0)
            {
                model.AddAnomaly(new NonMeshedAnomaly(conductivity: 1f,
                                                      x: new Direction(0, faultSize),
                                                      y: new Direction(0, lateralSize),
                                                      z: new Direction(CoverThickness, OverallFualtThickness - CoverThickness)));
            }

            return(model);
        }
Пример #11
0
        public NonMeshedModel CreateNonMeshedModel()
        {
            var section1D = CreateSection1D();

            var model = new NonMeshedModel(section1D);

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: _settings.LeftConductivity,
                                                  x: new Direction(0, 7000),
                                                  y: new Direction(0, 4000),
                                                  z: new Direction(1500, 4500)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: _settings.RightConductivity,
                                                  x: new Direction(0, 7000),
                                                  y: new Direction(4000, 4000),
                                                  z: new Direction(1500, 4500)));

            model.AddAnomaly(new NonMeshedAnomaly(conductivity: _settings.TopConductivity,
                                                  x: new Direction(2000, 3000),
                                                  y: new Direction(2000, 4000),
                                                  z: new Direction(200, 300)));

            return(model);
        }
Пример #12
0
        public NonMeshedModel CreateNonMeshedModel()
        {
            var section1D = CreateSection1D(_settings.Section1D);

            var model = new NonMeshedModel(section1D);

            var anStart = _settings.AnomalyStartDepth;
            var anEnd   = _settings.AnomalyStartDepth + _settings.AnomalySizeZ;

            var start = section1D.ZeroAirLevelAlongZ;

            for (int i = 1; i < section1D.NumberOfLayers - 1; i++)
            {
                var cond = _settings.Conductivity == -1 ?
                           section1D[i].Sigma :
                           _settings.Conductivity;

                var end = start + section1D[i].Thickness;

                if (start < anStart && end > anEnd)
                {
                    AddAnom(model, cond, anStart, anEnd);
                }
                else if (start >= anStart && end > anEnd)
                {
                    AddAnom(model, cond, start, anEnd);
                }
                else if (start >= anStart && end <= anEnd)
                {
                    AddAnom(model, cond, start, end);
                }

                start = end;
            }

            return(model);
        }
Пример #13
0
        private static List <decimal> GetAllAnomalyBoundariesAlong(Func <NonMeshedAnomaly, Direction> along, NonMeshedModel model)
        {
            var boundaries = new List <decimal>();

            foreach (var anomaly in model.Anomalies)
            {
                var d = along(anomaly);

                boundaries.Add(d.Start);
                boundaries.Add(d.Start + d.Size);
            }

            return(boundaries);
        }
Пример #14
0
 public decimal[] CreateAnomalyFragmentation(NonMeshedModel model)
 {
     return(CreateAnomalyFragmentation(model.GetMinZ(), model.GetMaxZ()));
 }