示例#1
0
 private void RefreshBelowTerrain()
 {
     ScreensAboveTerrain.Clear();
     ScreensBelowBottom.Clear();
     if (wells != null)
     {
         foreach (var w in wells.Where(we => we.Terrain != -999 & we.Row >= 0 & we.Column >= 0))
         {
             foreach (var s in w.Screens.Where(sc => sc.DepthToBottom != -999 & sc.DepthToTop != -999))
             {
                 if (s.AboveModelTerrain)
                 {
                     MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                     mc.NewTop    = mshe.GridInfo.SurfaceTopography.Data[w.Row, w.Column];
                     mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, mshe.GridInfo.NumberOfLayers - 1];
                     mc.NewLayer  = mshe.GridInfo.NumberOfLayers - 1;
                     ScreensAboveTerrain.Add(mc);
                 }
                 if (s.BelowModelBottom)
                 {
                     MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                     mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, 0];
                     //Maintain filter length
                     mc.NewTop   = mc.NewBottom + (s.DepthToBottom.Value - s.DepthToTop.Value);
                     mc.NewLayer = 0;
                     ScreensBelowBottom.Add(mc);
                 }
             }
         }
     }
     RaisePropertyChanged("ScreensBelowBottom");
     RaisePropertyChanged("ScreensAboveTerrain");
 }
示例#2
0
        private void RefreshChalk()
        {
            ScreensToMove.Clear();

            var ChalkLayer = Layers.Single(var => var.IsChalkLayer);

            if (wells != null)
            {
                foreach (var w in wells)
                {
                    if (w.Row >= 0 & w.Column >= 0)
                    {
                        foreach (var s in w.Screens)
                        {
                            var lits = w.Lithology.Where(var => var.Bottom > s.DepthToTop & var.Top < s.DepthToBottom);

                            foreach (var l in lits)
                            {
                                if (Chalks.ContainsKey(l.RockSymbol.ToLower()))
                                {
                                    bool move = false;
                                    if (s.NewMsheLayer.HasValue)
                                    {
                                        if (s.NewMsheLayer.Value != ChalkLayer.DfsLayerNumber)
                                        {
                                            move = true;
                                        }
                                    }
                                    else if (ChalkLayer.DfsLayerNumber < s.MsheBottomLayer || ChalkLayer.DfsLayerNumber > s.MsheTopLayer)
                                    {
                                        move = true;
                                    }

                                    if (move)
                                    {
                                        MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                                        mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, ChalkLayer.DfsLayerNumber];
                                        mc.NewTop    = mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, ChalkLayer.DfsLayerNumber];
                                        mc.NewLayer  = ChalkLayer.DfsLayerNumber;
                                        ScreensToMove.Add(mc);
                                    }
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            RaisePropertyChanged("ScreensToMove");
        }
    private void RefreshWaterBodiesMethod()
    {
      screensToMoveWayerBodies.Clear();
      var waterbodies = Layers.Where(var => var.IsGroundWaterBody);

      if (wells != null)
      {
        foreach (var w in wells)
        {
            foreach (var s in w.Screens.Where(sc=>sc.DepthToTop!=-999 & sc.DepthToBottom!=-999))
            {
              var lits = w.Lithology.Where(var => var.Bottom > s.DepthToTop & var.Top < s.DepthToBottom);

              bool move = false;
              foreach (var l in lits)
                if (!Clays.ContainsKey(l.RockSymbol.ToLower()))
                  move = true;

              if (move & w.Column>= 0 & w.Row>=0)
              {
                int topl = s.MsheTopLayer;
                int bottoml = s.MsheBottomLayer;
                if (s.NewMsheLayer.HasValue)
                {
                  topl = s.NewMsheLayer.Value;
                  bottoml = s.NewMsheLayer.Value;
                }

                if (topl == -1)
                  topl = mshe.GridInfo.NumberOfLayers - 1;
                else if (topl == -2)
                  topl = 0;

                if (bottoml == -1)
                  bottoml = mshe.GridInfo.NumberOfLayers - 1;
                else if (bottoml == -2)
                  bottoml = 0;

                for (int j = bottoml; j <= topl; j++)
                {
                  if (Layers[j].IsGroundWaterBody)
                    move = false;
                }

                if (move)
                {
                  var upperdistance = Layers.FirstOrDefault(var => var.IsGroundWaterBody && var.DfsLayerNumber > topl & mshe.GridInfo.ThicknessOfComputationalLayers.Data[w.Row, w.Column, var.DfsLayerNumber] > minLayThickness);
                  
                  double up = double.MaxValue;
                  if (upperdistance!=null)
                   up = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, upperdistance.DfsLayerNumber] - s.TopAsKote.Value;

                  var lowerdistance = Layers.FirstOrDefault(var => var.IsGroundWaterBody & var.DfsLayerNumber < bottoml & mshe.GridInfo.ThicknessOfComputationalLayers.Data[w.Row, w.Column, var.DfsLayerNumber] > minLayThickness);
                  double down = double.MaxValue;
                  if (lowerdistance!=null)
                    down =-( mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, lowerdistance.DfsLayerNumber] - s.BottomAsKote.Value);

                  if (up < maxDistance & up < down)//Move up
                  {
                    MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                    mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, upperdistance.DfsLayerNumber];
                    //Maintain filter depth
                    mc.NewTop = mc.NewBottom + (s.DepthToBottom.Value - s.DepthToTop.Value);
                    mc.NewLayer = upperdistance.DfsLayerNumber;
                    screensToMoveWayerBodies.Add(mc);
                  }
                  else if (down <maxDistance & down<up)
                  {
                    MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                    mc.NewTop = mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, lowerdistance.DfsLayerNumber];
                    //Maintain filter depth
                    mc.NewBottom = mc.NewTop - (s.DepthToBottom.Value - s.DepthToTop.Value);
                    mc.NewLayer = lowerdistance.DfsLayerNumber;
                    screensToMoveWayerBodies.Add(mc);
                  }
                }
              }
            }
        }
        RaisePropertyChanged("ScreensToMoveWaterBodies");
      }
    }
    private void RefreshChalk()
    {
      ScreensToMove.Clear();

      var ChalkLayer = Layers.Single(var => var.IsChalkLayer);

      if (wells != null)
      {
        foreach (var w in wells)
        {
          if (w.Row >= 0 & w.Column >= 0)
          {
              foreach (var s in w.Screens)
              {
                var lits = w.Lithology.Where(var => var.Bottom > s.DepthToTop & var.Top < s.DepthToBottom);

                foreach (var l in lits)
                  if (Chalks.ContainsKey(l.RockSymbol.ToLower()))
                  {
                    bool move= false;
                    if (s.NewMsheLayer.HasValue)
                    {
                      if (s.NewMsheLayer.Value != ChalkLayer.DfsLayerNumber)
                        move = true;
                    }
                    else if (ChalkLayer.DfsLayerNumber < s.MsheBottomLayer || ChalkLayer.DfsLayerNumber > s.MsheTopLayer)
                      move =true;

                    if(move)
                    {
                      MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                      mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, ChalkLayer.DfsLayerNumber];
                      mc.NewTop = mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, ChalkLayer.DfsLayerNumber];
                      mc.NewLayer = ChalkLayer.DfsLayerNumber;
                      ScreensToMove.Add(mc);
                    }
                    break;
                  }
              }
          }
        }
      }
      RaisePropertyChanged("ScreensToMove");
    }
 private void RefreshBelowTerrain()
 {
   ScreensAboveTerrain.Clear();
   ScreensBelowBottom.Clear();
   if (wells != null)
   {
     foreach (var w in wells.Where(we => we.Terrain != -999 & we.Row >= 0 & we.Column >= 0))
     {
       foreach (var s in w.Screens.Where(sc => sc.DepthToBottom != -999 & sc.DepthToTop != -999))
       {
         if (s.AboveModelTerrain)
         {
           MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
           mc.NewTop = mshe.GridInfo.SurfaceTopography.Data[w.Row, w.Column];
           mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, mshe.GridInfo.NumberOfLayers - 1];
           mc.NewLayer = mshe.GridInfo.NumberOfLayers - 1;
           ScreensAboveTerrain.Add(mc);
         }
         if (s.BelowModelBottom)
         {
           MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
           mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, 0];
           //Maintain filter length
           mc.NewTop = mc.NewBottom + (s.DepthToBottom.Value - s.DepthToTop.Value);
           mc.NewLayer = 0;
           ScreensBelowBottom.Add(mc);
         }
       }
     }
   }
   RaisePropertyChanged("ScreensBelowBottom");
   RaisePropertyChanged("ScreensAboveTerrain");
 }
示例#6
0
        private void RefreshWaterBodiesMethod()
        {
            screensToMoveWayerBodies.Clear();
            var waterbodies = Layers.Where(var => var.IsGroundWaterBody);

            if (wells != null)
            {
                foreach (var w in wells)
                {
                    foreach (var s in w.Screens.Where(sc => sc.DepthToTop != -999 & sc.DepthToBottom != -999))
                    {
                        var lits = w.Lithology.Where(var => var.Bottom > s.DepthToTop & var.Top < s.DepthToBottom);

                        bool move = false;
                        foreach (var l in lits)
                        {
                            if (!Clays.ContainsKey(l.RockSymbol.ToLower()))
                            {
                                move = true;
                            }
                        }

                        if (move & w.Column >= 0 & w.Row >= 0)
                        {
                            int topl    = s.MsheTopLayer;
                            int bottoml = s.MsheBottomLayer;
                            if (s.NewMsheLayer.HasValue)
                            {
                                topl    = s.NewMsheLayer.Value;
                                bottoml = s.NewMsheLayer.Value;
                            }

                            if (topl == -1)
                            {
                                topl = mshe.GridInfo.NumberOfLayers - 1;
                            }
                            else if (topl == -2)
                            {
                                topl = 0;
                            }

                            if (bottoml == -1)
                            {
                                bottoml = mshe.GridInfo.NumberOfLayers - 1;
                            }
                            else if (bottoml == -2)
                            {
                                bottoml = 0;
                            }

                            for (int j = bottoml; j <= topl; j++)
                            {
                                if (Layers[j].IsGroundWaterBody)
                                {
                                    move = false;
                                }
                            }

                            if (move)
                            {
                                var upperdistance = Layers.FirstOrDefault(var => var.IsGroundWaterBody && var.DfsLayerNumber > topl & mshe.GridInfo.ThicknessOfComputationalLayers.Data[w.Row, w.Column, var.DfsLayerNumber] > minLayThickness);

                                double up = double.MaxValue;
                                if (upperdistance != null)
                                {
                                    up = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, upperdistance.DfsLayerNumber] - s.TopAsKote.Value;
                                }

                                var    lowerdistance = Layers.FirstOrDefault(var => var.IsGroundWaterBody & var.DfsLayerNumber <bottoml& mshe.GridInfo.ThicknessOfComputationalLayers.Data[w.Row, w.Column, var.DfsLayerNumber]> minLayThickness);
                                double down          = double.MaxValue;
                                if (lowerdistance != null)
                                {
                                    down = -(mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, lowerdistance.DfsLayerNumber] - s.BottomAsKote.Value);
                                }

                                if (up < maxDistance & up < down)//Move up
                                {
                                    MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                                    mc.NewBottom = mshe.GridInfo.LowerLevelOfComputationalLayers.Data[w.Row, w.Column, upperdistance.DfsLayerNumber];
                                    //Maintain filter depth
                                    mc.NewTop   = mc.NewBottom + (s.DepthToBottom.Value - s.DepthToTop.Value);
                                    mc.NewLayer = upperdistance.DfsLayerNumber;
                                    screensToMoveWayerBodies.Add(mc);
                                }
                                else if (down < maxDistance & down < up)
                                {
                                    MoveToChalkViewModel mc = new MoveToChalkViewModel(w, s);
                                    mc.NewTop = mshe.GridInfo.UpperLevelOfComputationalLayers.Data[w.Row, w.Column, lowerdistance.DfsLayerNumber];
                                    //Maintain filter depth
                                    mc.NewBottom = mc.NewTop - (s.DepthToBottom.Value - s.DepthToTop.Value);
                                    mc.NewLayer  = lowerdistance.DfsLayerNumber;
                                    screensToMoveWayerBodies.Add(mc);
                                }
                            }
                        }
                    }
                }
                RaisePropertyChanged("ScreensToMoveWaterBodies");
            }
        }