Esempio n. 1
0
 void TriggerBackward()
 {
     if (Backward != null)
     {
         Backward.Invoke(this, new EventArgs());
     }
 }
Esempio n. 2
0
 public void Draw(Effect effect)
 {
     if (UpVisible)
     {
         Up.Draw(effect);
     }
     if (DownVisible)
     {
         Down.Draw(effect);
     }
     if (ForwardVisible)
     {
         Forward.Draw(effect);
     }
     if (BackwardVisible)
     {
         Backward.Draw(effect);
     }
     if (LeftVisible)
     {
         Left.Draw(effect);
     }
     if (RightVisible)
     {
         Right.Draw(effect);
     }
 }
Esempio n. 3
0
    // Use this for initialization
    void Start()
    {
        script      = GameObject.Find("Button Backward").GetComponent <Backward>();
        clickedBack = false;

        anim = GetComponent <Animator> ();

        //	anim.SetBool ("ClickedB",clickedBack);
    }
Esempio n. 4
0
        public void MoveFromOvestDirection_ObstaclePoint_ThrowException()
        {
            var       B = new Backward();
            Grid      G = new Grid(5, 5, new FakeObstacleGenerator());
            RoverMars R = new RoverMars('O');

            R.Position.X = 1;
            R.Position.Y = 2;
            B.MoveFromOvestDirection(R, G);
        }
        public void UpdateUnusedAssets()
        {
            var all           = new HashSet <string>(_forward.Keys);
            var withBacklinks =
                new HashSet <string>(Backward.Where(kv => kv.Value.Lookup.Count > 0).Select(kv => kv.Key));

            all.ExceptWith(withBacklinks);
            all.RemoveWhere(SearchUtils.IsFileIgrnoredBySettings);

            var unusedAssets = all;

            var scenes = unusedAssets.Where(s =>
                                            AssetDatabase.GetMainAssetTypeAtPath(s).IsAssignableFromInverse(typeof(SceneAsset))).ToArray();

            unusedAssets.ExceptWith(scenes);
            var files = unusedAssets;

            UnusedFiles = new Dictionary <string, long>();

            foreach (var file in files)
            {
                UnusedFiles[file] = CommonUtils.Size(file);
            }

            UnusedScenes = new Dictionary <string, long>();
            foreach (var scene in scenes)
            {
                UnusedScenes[scene] = CommonUtils.Size(scene);
            }

            // UpdateFoldersWithQty();
            foreach (var folder in Folders)
            {
                var  unusedFilesQty  = UnusedFiles.Count(p => p.Key.StartsWith(folder));
                var  unusedScenesQty = UnusedScenes.Count(p => p.Key.StartsWith(folder));
                long size            = 0;
                size  = UnusedFiles.Where((p => p.Key.StartsWith(folder))).Sum(p => p.Value);
                size += UnusedScenes.Where(p => p.Key.StartsWith(folder)).Sum(p => p.Value);

                FoldersWithQty.TryGetValue(folder, out var folderWithQty);
                if (folderWithQty == null)
                {
                    FoldersWithQty.Add(folder, new UnusedQty(unusedFilesQty, unusedScenesQty, size));
                }
                else
                {
                    folderWithQty.UnusedFilesQty  = unusedFilesQty;
                    folderWithQty.UnusedScenesQty = unusedScenesQty;
                    folderWithQty.UnusedSize      = size;
                }
            }
        }
Esempio n. 6
0
        public void MoveFromSudDirection_ObstaclePoint_ThrowException()
        {
            var       B = new Backward();
            RoverMars R = new RoverMars('N');

            // this case should never happen but this class does not know
            // i give to the rover an impossible point
            R.Position.X = 2;
            R.Position.Y = 1;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromSudDirection(R, G);
        }
Esempio n. 7
0
 public void MoveFromOvestDirection_NewRoverPoint_OutOfGridValueLessThenZero_Expected_NewXEqualsMaxXOfGrid()
 {
     {
         var       B = new Backward();
         Grid      G = new Grid(5, 5, new FakeObstacleGenerator());
         RoverMars R = new RoverMars('O');
         R.Position.X = -2;
         R.Position.Y = 2;
         B.MoveFromOvestDirection(R, G);
         Point expectedNewRoverPosition = new Point(5, 2);
         Assert.AreEqual(expectedNewRoverPosition, R.Position);
     }
 }
Esempio n. 8
0
        public void BackwardTest()
        {
            var f = new Forward {
                Id = 33, Name = "phil", Location = "here", Number = 12345
            };
            var b = new Backward();

            b.InjectFrom <Reverse>(f);

            Console.WriteLine(b.dI);       // 33
            Console.WriteLine(b.emaN);     // phil
            Console.WriteLine(b.noitacoL); // here
            Console.WriteLine(b.rebmuN);   // 12345
        }
Esempio n. 9
0
        public void MoveFromNordDirection_NewRoverPoint_OutOfGrid_Expected_NewYEqualsZero()
        {
            var       B = new Backward();
            RoverMars R = new RoverMars('N');

            R.Position.X = 1;
            R.Position.Y = 7;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromNordDirection(R, G);
            Point expectedNewRoverPosition = new Point(1, 0);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
        void ReleaseDesignerOutlets()
        {
            if (Backward != null)
            {
                Backward.Dispose();
                Backward = null;
            }

            if (DateInput != null)
            {
                DateInput.Dispose();
                DateInput = null;
            }

            if (FeedName != null)
            {
                FeedName.Dispose();
                FeedName = null;
            }

            if (FeedSelection != null)
            {
                FeedSelection.Dispose();
                FeedSelection = null;
            }

            if (Forward != null)
            {
                Forward.Dispose();
                Forward = null;
            }

            if (NoContent != null)
            {
                NoContent.Dispose();
                NoContent = null;
            }

            if (NoMenu != null)
            {
                NoMenu.Dispose();
                NoMenu = null;
            }

            if (WebView != null)
            {
                WebView.Dispose();
                WebView = null;
            }
        }
Esempio n. 11
0
        public void MoveFromOvestDirection_NewRoverPoint_OutOfGrid_Expected_NewXEqualsZero()
        {
            var       B = new Backward();
            Grid      G = new Grid(5, 5, new FakeObstacleGenerator());
            RoverMars R = new RoverMars('O');

            //rover orientation is ovest direction
            R.Position.X = 5;
            R.Position.Y = 1;
            B.MoveFromOvestDirection(R, G);
            Point expectedNewRoverPosition = new Point(0, 1);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
Esempio n. 12
0
        public void MoveFromEstDirection_MoveRoverInXMinusOne()
        {
            var       B = new Backward();
            RoverMars R = new RoverMars('E');

            R.Position.X = 1;
            R.Position.Y = 1;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromEstDirection(R, G);
            Point expectedNewRoverPosition = new Point(0, 1);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
Esempio n. 13
0
        public void MoveFromEstDirection_NewRoverPoint_OutOfGrid_Expected_NewXEqualsZero()
        {
            Backward  B = new Backward();
            RoverMars R = new RoverMars('E');

            R.Position.X = 7;
            R.Position.Y = 1;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromEstDirection(R, G);
            Point expectedNewRoverPosition = new Point(0, 1);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
        public void RebuildFor(string path, bool remove)
        {
            if (!_forward.TryGetValue(path, out var fwMeta))
            {
                fwMeta = new FwMeta();
                _forward.Add(path, fwMeta);
            }
            else if (remove)
            {
                foreach (var dependency in fwMeta.Dependencies)
                {
                    if (!Backward.TryGetValue(dependency, out var backDep))
                    {
                        continue;
                    }

                    backDep.Lookup.Remove(path);
                }

                fwMeta.Dependencies = null;
            }

            var dependencies = _Dependencies(path);

            fwMeta.Dependencies = new HashSet <string>(dependencies);

            foreach (var backPath in dependencies)
            {
                if (!Backward.TryGetValue(backPath, out var bwMeta))
                {
                    bwMeta = new BwMeta {
                        Lookup = new HashSet <string>()
                    };
                    Backward.Add(backPath, bwMeta);
                }
                else if (remove)
                {
                    bwMeta.Lookup.Remove(path);
                }

                bwMeta.Lookup.Add(path);
            }

            if (!remove)
            {
                UpdateFoldersWithQtyByPath(path);
            }
        }
Esempio n. 15
0
        public void MoveFromOvestDirection_MoveRoverInXPluOne()
        {
            Backward B = new Backward();
            //rover orientation is ovest direction, is not responsibility of this class check direction
            RoverMars R = new RoverMars('O');

            //rover actual position is 1,1
            R.Position.X = 1;
            R.Position.Y = 1;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromOvestDirection(R, G);
            Point expectedNewRoverPosition = new Point(2, 1);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
Esempio n. 16
0
 void Start()
 {
     right              = GameObject.Find("Right").GetComponent <Right>();
     rightMR            = GameObject.Find("Right").GetComponent <MeshRenderer>();
     left               = GameObject.Find("Left").GetComponent <Left>();
     leftMR             = GameObject.Find("Left").GetComponent <MeshRenderer>();
     forward            = GameObject.Find("Forward").GetComponent <Forward>();
     forwardMR          = GameObject.Find("Forward").GetComponent <MeshRenderer>();
     backward           = GameObject.Find("Backward").GetComponent <Backward>();
     backwardMR         = GameObject.Find("Backward").GetComponent <MeshRenderer>();
     gm                 = GameObject.Find("GameManager").GetComponent <GameManager>();
     transform.position = gm.playerStartingPosition;
     isMoving           = false;
     canMoveRight       = false;
     playerIsCaught     = false;
 }
Esempio n. 17
0
        public void MoveFromSudDirection_NewRoverPoint_OutOfGridValueLessThenZero_Expected_NewYEqualsMaxYOfGrid()
        {
            var       B = new Backward();
            RoverMars R = new RoverMars('N');

            // this case should never happen but this class does not know
            // i give to the rover an impossible point
            R.Position.X = 1;
            R.Position.Y = -2;
            Grid G = new Grid(5, 5, new FakeObstacleGenerator());

            B.MoveFromSudDirection(R, G);
            Point expectedNewRoverPosition = new Point(1, 5);

            Assert.AreEqual(expectedNewRoverPosition, R.Position);
        }
        public void Remove(string path)
        {
            if (!_forward.TryGetValue(path, out var fwMeta))
            {
                return;
            }

            foreach (var dependency in fwMeta.Dependencies)
            {
                if (!Backward.TryGetValue(dependency, out var dep))
                {
                    continue;
                }

                dep.Lookup.Remove(path);
            }

            _forward.Remove(path);
            UpdateFoldersWithQtyByPath(path);
        }
        void _FillFwAndBacklinks(string path)
        {
            var dependencies = _Dependencies(path);
            var hs           = new FwMeta {
                Dependencies = new HashSet <string>(dependencies)
            };

            _forward.Add(path, hs);
            foreach (var backPath in dependencies)
            {
                if (!Backward.TryGetValue(backPath, out var val))
                {
                    val        = new BwMeta();
                    val.Lookup = new HashSet <string>();
                    Backward.Add(backPath, val);
                }

                val.Lookup.Add(path);
            }
        }
Esempio n. 20
0
        void Dispose(bool disposing)
        {
            if (disposed)
            {
                return;
            }

            if (disposing)
            {
                Effect.Dispose();

                Up.Dispose();
                Down.Dispose();
                Forward.Dispose();
                Backward.Dispose();
                Left.Dispose();
                Right.Dispose();
            }

            disposed = true;
        }
Esempio n. 21
0
        public void Update(float frameTime, MovementInput input)
        {
            Forward   += (input.Forward ? Acceleration : Deceleration) * frameTime;
            Backward  += (input.Backward ? Acceleration : Deceleration) * frameTime;
            Leftward  += (input.Leftward ? Acceleration : Deceleration) * frameTime;
            Rightward += (input.Rightward ? Acceleration : Deceleration) * frameTime;
            Upward    += (input.Upward ? Acceleration : Deceleration) * frameTime;
            Downward  += (input.Downward ? Acceleration : Deceleration) * frameTime;

            var maxVelocity = Constants.MaxVelocity;

            if (input.Sprint)
            {
                maxVelocity *= 3;
            }

            Forward   = Forward.Clamp(0.0f, maxVelocity);
            Backward  = Backward.Clamp(0.0f, maxVelocity);
            Leftward  = Leftward.Clamp(0.0f, maxVelocity);
            Rightward = Rightward.Clamp(0.0f, maxVelocity);
            Upward    = Upward.Clamp(0.0f, maxVelocity);
            Downward  = Downward.Clamp(0.0f, maxVelocity);
        }
Esempio n. 22
0
        private void UpdateCameraInput(Camera c, int index)
        {
            int x = InputHelper.NewMouse.X;
            int y = InputHelper.NewMouse.Y;

            if (!_isDragged && CameraContains(c, x, y) || _isDragged && _currentCamera == index)
            {
                _currentCamera = index;
                if (MouseCondition.Scrolled())
                {
                    int scrollDelta = MouseCondition.ScrollDelta;
                    SetZoom(c, MathF.Min(MathF.Max(GetZoom(c) - scrollDelta * 0.001f, 0.2f), 10f));
                }

                if (RotateLeft.Pressed())
                {
                    c.Rotation += MathHelper.PiOver4;
                }
                if (RotateRight.Pressed())
                {
                    c.Rotation -= MathHelper.PiOver4;
                }

                if (Forward.Held())
                {
                    c.Z -= 0.1f;
                }
                if (Backward.Held())
                {
                    c.Z += 0.1f;
                }

                if (IncreaseFocal.Held())
                {
                    var temp = c.Z / c.FocalLength;

                    c.FocalLength += 0.01f;

                    c.Z = c.FocalLength * temp;
                }
                if (DecreaseFocal.Held())
                {
                    var temp = c.Z / c.FocalLength;

                    c.FocalLength -= 0.01f;

                    c.Z = c.FocalLength * temp;
                }

                if (ResetCamera.Pressed())
                {
                    c.Scale       = new Vector2(1f, 1f);
                    c.XY          = new Vector2(0f, 0f);
                    c.Z           = 2f;
                    c.Rotation    = 0f;
                    c.FocalLength = 1f;
                }

                _mouseWorld = c.ScreenToWorld(x, y);

                if (CameraDrag.Pressed())
                {
                    _dragAnchor = _mouseWorld;
                    _isDragged  = true;
                }
                if (_isDragged && CameraDrag.HeldOnly())
                {
                    c.XY       += _dragAnchor - _mouseWorld;
                    _mouseWorld = _dragAnchor;
                }
                if (_isDragged && CameraDrag.Released())
                {
                    _isDragged = false;
                }
            }
        }
 private void OnBackwardButton_Click(object sender, RoutedEventArgs e) => Backward?.Invoke(this, EventArgs.Empty);
        public override int go()
        {
            int    i, j, k, stage, n, isize, jend, ksize, j1, buffer_size, c, m, p, jstart; /* requests(2), statuses(MPI_STATUS_SIZE, 2);*/
            double r1, r2, d, e, sm1, sm2;

            double[] s = new double[5];
            double[] in_buffer_y;
            double[] out_buffer_y;

            //---------------------------------------------------------------------
            //---------------------------------------------------------------------

            // if (timeron) timer.start(t_ysolve);

            //---------------------------------------------------------------------
            // now do a sweep on a layer-by-layer basis, i.e. sweeping through cells
            // on this node in the direction of increasing i for the forward sweep,
            // and after that reversing the direction for the backsubstitution
            //---------------------------------------------------------------------

            //---------------------------------------------------------------------
            //                          FORWARD ELIMINATION
            //---------------------------------------------------------------------
            for (stage = 0; stage < ncells; stage++)
            {
                Lhs.enterStage(stage);
                Forward.enterStage(stage);

                c = slice[stage, 1];

                jstart = 2;
                jend   = 2 + cell_size[c, 1] - 1;

                isize = cell_size[c, 0] + 2;
                ksize = cell_size[c, 2] + 2;

                buffer_size = (isize - start[c, 0] - end[c, 0]) * (ksize - start[c, 2] - end[c, 2]);

                Input_buffer_forward.Array  = in_buffer_y = new double[22 * buffer_size];
                Output_buffer_forward.Array = out_buffer_y = new double[22 * buffer_size];

                if (stage != 0)
                {
                    Shift_forward.initiate_recv();

                    Lhs.go();

                    Shift_forward.go();

                    #region read buffer
                    //---------------------------------------------------------------------
                    //            unpack the buffer
                    //---------------------------------------------------------------------
                    j  = jstart;
                    j1 = jstart + 1;
                    n  = -1;
                    //---------------------------------------------------------------------
                    //            create a running pointer
                    //---------------------------------------------------------------------
                    p = 0;
                    for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                    {
                        for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                        {
                            //      Console.WriteLine("in_buffer_y_f["+ p + "] = " + in_buffer_y[p]);
                            //      Console.WriteLine("in_buffer_y_f["+ (p+1) + "] = " + in_buffer_y[p+1]);
                            lhs[c, k, j, i, n + 2] = lhs[c, k, j, i, n + 2] -
                                                     in_buffer_y[p] * lhs[c, k, j, i, n + 1];
                            lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] -
                                                     in_buffer_y[p + 1] * lhs[c, k, j, i, n + 1];
                            for (m = 0; m <= 2; m++)
                            {
                                //          Console.WriteLine("in_buffer_y_f["+ (p+2+m) + "] = " + in_buffer_y[p+2+m]);
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     in_buffer_y[p + 2 + m] * lhs[c, k, j, i, n + 1];
                            }
                            //      Console.WriteLine("in_buffer_y_f["+ (p+5) + "] = " + in_buffer_y[p+5]);
                            //      Console.WriteLine("in_buffer_y_f["+ (p+6) + "] = " + in_buffer_y[p+6]);
                            d = in_buffer_y[p + 5];;
                            e = in_buffer_y[p + 6];
                            for (m = 0; m <= 2; m++)
                            {
                                //        Console.WriteLine("in_buffer_y_f["+ (p+7+m) + "] = " + in_buffer_y[p+7+m]);
                                s[m] = in_buffer_y[p + 7 + m];
                            }
                            r1 = lhs[c, k, j, i, n + 2];
                            lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] - d * r1;
                            lhs[c, k, j, i, n + 4] = lhs[c, k, j, i, n + 4] - e * r1;
                            for (m = 0; m <= 2; m++)
                            {
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] - s[m] * r1;
                            }
                            r2 = lhs[c, k, j1, i, n + 1];
                            lhs[c, k, j1, i, n + 2] = lhs[c, k, j1, i, n + 2] - d * r2;
                            lhs[c, k, j1, i, n + 3] = lhs[c, k, j1, i, n + 3] - e * r2;
                            for (m = 0; m <= 2; m++)
                            {
                                rhs[c, k, j1, i, m] = rhs[c, k, j1, i, m] - s[m] * r2;
                            }
                            p = p + 10;
                        }
                    }

                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                            {
                                lhs[c, k, j, i, n + 2] = lhs[c, k, j, i, n + 2] -
                                                         in_buffer_y[p] * lhs[c, k, j, i, n + 1];
                                lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] -
                                                         in_buffer_y[p + 1] * lhs[c, k, j, i, n + 1];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     in_buffer_y[p + 2] * lhs[c, k, j, i, n + 1];
                                d    = in_buffer_y[p + 3];
                                e    = in_buffer_y[p + 4];
                                s[m] = in_buffer_y[p + 5];
                                r1   = lhs[c, k, j, i, n + 2];
                                lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] - d * r1;
                                lhs[c, k, j, i, n + 4] = lhs[c, k, j, i, n + 4] - e * r1;
                                rhs[c, k, j, i, m]     = rhs[c, k, j, i, m] - s[m] * r1;
                                r2 = lhs[c, k, j1, i, n + 1];
                                lhs[c, k, j1, i, n + 2] = lhs[c, k, j1, i, n + 2] - d * r2;
                                lhs[c, k, j1, i, n + 3] = lhs[c, k, j1, i, n + 3] - e * r2;
                                rhs[c, k, j1, i, m]     = rhs[c, k, j1, i, m] - s[m] * r2;
                                p = p + 6;
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    Lhs.go();
                }

                Forward.go();

                //---------------------------------------------------------------------
                //         send information to the next processor, except when this
                //         is the last grid block;
                //---------------------------------------------------------------------

                if (stage != ncells - 1)
                {
                    #region write buffer
                    //---------------------------------------------------------------------
                    //            create a running pointer for the send buffer
                    //---------------------------------------------------------------------
                    p = 0;
                    n = -1;
                    for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                    {
                        for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                        {
                            for (j = jend - 1; j <= jend; j++)
                            {
                                out_buffer_y[p]     = lhs[c, k, j, i, n + 4];
                                out_buffer_y[p + 1] = lhs[c, k, j, i, n + 5];
                                //     Console.WriteLine("out_buffer_y["+ p + "] = " + out_buffer_y[p]);
                                //    Console.WriteLine("out_buffer_y["+ (p+1) + "] = " + out_buffer_y[p+1]);
                                for (m = 0; m <= 2; m++)
                                {
                                    out_buffer_y[p + 2 + m] = rhs[c, k, j, i, m];
                                    //       Console.WriteLine("out_buffer_y["+ (p+2+m) + "] = " + out_buffer_y[p+2+m]);
                                }
                                p = p + 5;
                            }
                        }
                    }

                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                            {
                                for (j = jend - 1; j <= jend; j++)
                                {
                                    out_buffer_y[p]     = lhs[c, k, j, i, n + 4];
                                    out_buffer_y[p + 1] = lhs[c, k, j, i, n + 5];
                                    out_buffer_y[p + 2] = rhs[c, k, j, i, m];
                                    //     Console.WriteLine("out_buffer_y["+ (p) + "] = " + out_buffer_y[p]);
                                    //    Console.WriteLine("out_buffer_y["+ (p+1) + "] = " + out_buffer_y[p+1]);
                                    //     Console.WriteLine("out_buffer_y["+ (p+2) + "] = " + out_buffer_y[p+2]);
                                    p = p + 3;
                                }
                            }
                        }
                    }

                    #endregion

                    Shift_forward.initiate_send();
                }
            }

            //---------------------------------------------------------------------
            //      now go in the reverse direction
            //---------------------------------------------------------------------

            //---------------------------------------------------------------------
            //                         BACKSUBSTITUTION
            //---------------------------------------------------------------------
            for (stage = ncells - 1; stage >= 0; stage--)
            {
                Backward.enterStage(stage);

                c = slice[stage, 1];

                jstart = 2;
                jend   = 2 + cell_size[c, 1] - 1;

                isize = cell_size[c, 0] + 2;
                ksize = cell_size[c, 2] + 2;

                buffer_size = (isize - start[c, 0] - end[c, 0]) *
                              (ksize - start[c, 2] - end[c, 2]);

                Input_buffer_backward.Array  = in_buffer_y = new double[10 * buffer_size];
                Output_buffer_backward.Array = out_buffer_y = new double[10 * buffer_size];

                if (stage != ncells - 1)
                {
                    Shift_backward.initiate_recv();

                    Matvecproduct.enterStage(stage + 1);
                    Matvecproduct.go();

                    Shift_backward.go();

                    #region read_buffer
                    //---------------------------------------------------------------------
                    //            unpack the buffer for the first three factors
                    //---------------------------------------------------------------------
                    n  = -1;
                    p  = 0;
                    j  = jend;
                    j1 = j - 1;
                    for (m = 0; m <= 2; m++)
                    {
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                            {
                                //      Console.WriteLine("in_buffer_y["+ p + "] = " + in_buffer_y[p]);
                                //      Console.WriteLine("in_buffer_y["+ (p+1) + "] = " + in_buffer_y[p+1]);
                                sm1 = in_buffer_y[p];
                                sm2 = in_buffer_y[p + 1];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     lhs[c, k, j, i, n + 4] * sm1 -
                                                     lhs[c, k, j, i, n + 5] * sm2;
                                rhs[c, k, j1, i, m] = rhs[c, k, j1, i, m] -
                                                      lhs[c, k, j1, i, n + 4] * rhs[c, k, j, i, m] -
                                                      lhs[c, k, j1, i, n + 5] * sm1;
                                p = p + 2;
                            }
                        }
                    }

                    //---------------------------------------------------------------------
                    //            now unpack the buffer for the remaining two factors
                    //---------------------------------------------------------------------
                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                            {
                                //     Console.WriteLine("in_buffer_y["+ p + "] = " + in_buffer_y[p]);
                                //     Console.WriteLine("in_buffer_y["+ (p+1) + "] = " + in_buffer_y[p+1]);
                                sm1 = in_buffer_y[p];
                                sm2 = in_buffer_y[p + 1];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     lhs[c, k, j, i, n + 4] * sm1 -
                                                     lhs[c, k, j, i, n + 5] * sm2;
                                rhs[c, k, j1, i, m] = rhs[c, k, j1, i, m] -
                                                      lhs[c, k, j1, i, n + 4] * rhs[c, k, j, i, m] -
                                                      lhs[c, k, j1, i, n + 5] * sm1;
                                p = p + 2;
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    Backward.init();
                }

                Backward.go();

                //---------------------------------------------------------------------
                //         send on information to the previous processor, if needed
                //---------------------------------------------------------------------
                if (stage != 0)
                {
                    #region write buffer

                    j  = jstart;
                    j1 = jstart + 1;
                    p  = 0;
                    for (m = 0; m <= 4; m++)
                    {
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (i = start[c, 0]; i < isize - end[c, 0]; i++)
                            {
                                out_buffer_y[p]     = rhs[c, k, j, i, m];
                                out_buffer_y[p + 1] = rhs[c, k, j1, i, m];
                                p = p + 2;
                            }
                        }
                    }

                    #endregion

                    Shift_backward.initiate_send();
                }

                //---------------------------------------------------------------------
                //         If this was the last stage, do the block-diagonal inversion
                //---------------------------------------------------------------------
                if (stage == 0)
                {
                    Matvecproduct.enterStage(stage);
                    Matvecproduct.go();
                }
            }

            return(0);
        }         // end activate method
Esempio n. 25
0
        public override int go()
        {
            int    c, i, j, k, n, iend, jsize, ksize, i1, i2, m, buffer_size, p, istart, stage;
            double r1, r2, d, e, sm1, sm2, fac1, fac2;

            double[] s = new double[5];
            double[] in_buffer_x;
            double[] out_buffer_x;

            for (stage = 0; stage < ncells; stage++)
            {
                Forward.enterStage(stage);
                Lhs.enterStage(stage);

                c = slice[stage, 0];

                istart = 2;
                iend   = 2 + cell_size[c, 0] - 1;

                jsize = cell_size[c, 1] + 2;
                ksize = cell_size[c, 2] + 2;

                buffer_size = (jsize - start[c, 1] - end[c, 1]) *
                              (ksize - start[c, 2] - end[c, 2]);

                Input_buffer_forward.Array  = in_buffer_x = new double[22 * buffer_size];
                Output_buffer_forward.Array = out_buffer_x = new double[22 * buffer_size];

                if (stage != 0)
                {
                    Shift_forward.initiate_recv();

                    Lhs.go();

                    Shift_forward.go();

                    #region read buffer
                    //---------------------------------------------------------------------
                    //            unpack the buffer
                    //---------------------------------------------------------------------
                    i  = istart;
                    i1 = istart + 1;
                    n  = -1;

                    //---------------------------------------------------------------------
                    //            create a running pointer
                    //---------------------------------------------------------------------

                    p = 0;
                    for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                    {
                        for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                        {
                            //Console.WriteLine("in_buffer_x["+ p + "] = " + in_buffer_x[p]);
                            //Console.WriteLine("in_buffer_x["+ (p+1) + "] = " +in_buffer_x[p+1]);

                            lhs[c, k, j, i, n + 2] = lhs[c, k, j, i, n + 2] -
                                                     in_buffer_x[p] * lhs[c, k, j, i, n + 1];
                            lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] -
                                                     in_buffer_x[p + 1] * lhs[c, k, j, i, n + 1];
                            for (m = 0; m <= 2; m++)
                            {
                                // Console.WriteLine("in_buffer_x["+ (p+2+m) + "] = " +in_buffer_x[p+2+m]);
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     in_buffer_x[p + 2 + m] * lhs[c, k, j, i, n + 1];
                            }
                            //Console.WriteLine("in_buffer_x["+ (p+5) + "] = " +in_buffer_x[p+5]);
                            //Console.WriteLine("in_buffer_x["+ (p+6) + "] = " +in_buffer_x[p+6]);

                            d = in_buffer_x[p + 5];
                            e = in_buffer_x[p + 6];
                            for (m = 0; m <= 2; m++)
                            {
                                //Console.WriteLine("in_buffer_x["+ (p+5) + "] = " +in_buffer_x[p+5]);
                                //Console.WriteLine(in_buffer_x[p+7+m]);
                                s[m] = in_buffer_x[p + 7 + m];
                            }
                            r1 = lhs[c, k, j, i, n + 2];
                            lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] - d * r1;
                            lhs[c, k, j, i, n + 4] = lhs[c, k, j, i, n + 4] - e * r1;
                            for (m = 0; m <= 2; m++)
                            {
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] - s[m] * r1;
                            }
                            r2 = lhs[c, k, j, i1, n + 1];
                            lhs[c, k, j, i1, n + 2] = lhs[c, k, j, i1, n + 2] - d * r2;
                            lhs[c, k, j, i1, n + 3] = lhs[c, k, j, i1, n + 3] - e * r2;
                            for (m = 0; m <= 2; m++)
                            {
                                rhs[c, k, j, i1, m] = rhs[c, k, j, i1, m] - s[m] * r2;
                            }
                            p = p + 10;
                        }
                    }

                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                            {
                                lhs[c, k, j, i, n + 2] = lhs[c, k, j, i, n + 2] -
                                                         in_buffer_x[p] * lhs[c, k, j, i, n + 1];
                                lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] -
                                                         in_buffer_x[p + 1] * lhs[c, k, j, i, n + 2];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     in_buffer_x[p + 2] * lhs[c, k, j, i, n + 1];
                                d    = in_buffer_x[p + 3];
                                e    = in_buffer_x[p + 4];
                                s[m] = in_buffer_x[p + 5];
                                r1   = lhs[c, k, j, i, n + 2];
                                lhs[c, k, j, i, n + 3] = lhs[c, k, j, i, n + 3] - d * r1;
                                lhs[c, k, j, i, n + 4] = lhs[c, k, j, i, n + 4] - e * r1;
                                rhs[c, k, j, i, m]     = rhs[c, k, j, i, m] - s[m] * r1;
                                r2 = lhs[c, k, j, i1, n + 1];
                                lhs[c, k, j, i1, n + 2] = lhs[c, k, j, i1, n + 2] - d * r2;
                                lhs[c, k, j, i1, n + 3] = lhs[c, k, j, i1, n + 3] - e * r2;
                                rhs[c, k, j, i1, m]     = rhs[c, k, j, i1, m] - s[m] * r2;
                                p = p + 6;
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    Lhs.go();
                }


                Forward.go();

                //---------------------------------------------------------------------
                //         send information to the next processor, except when this
                //         is the last grid block
                //---------------------------------------------------------------------
                if (stage != ncells - 1)
                {
                    #region write buffer
                    //---------------------------------------------------------------------
                    //            create a running pointer for the send buffer
                    //---------------------------------------------------------------------
                    p = 0;
                    n = -1;
                    for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                    {
                        for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                        {
                            for (i = iend - 1; i <= iend; i++)
                            {
                                out_buffer_x[p]     = lhs[c, k, j, i, n + 4];
                                out_buffer_x[p + 1] = lhs[c, k, j, i, n + 5];
                                for (m = 0; m <= 2; m++)
                                {
                                    out_buffer_x[p + 2 + m] = rhs[c, k, j, i, m];
                                }
                                p = p + 5;
                            }
                        }
                    }

                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                            {
                                for (i = iend - 1; i <= iend; i++)
                                {
                                    out_buffer_x[p]     = lhs[c, k, j, i, n + 4];
                                    out_buffer_x[p + 1] = lhs[c, k, j, i, n + 5];
                                    out_buffer_x[p + 2] = rhs[c, k, j, i, m];
                                    p = p + 3;
                                }
                            }
                        }
                    }
                    #endregion

                    Shift_forward.initiate_send();
                }
            }         // cells loop

            //---------------------------------------------------------------------
            //                         BACKSUBSTITUTION
            //---------------------------------------------------------------------

            for (stage = ncells - 1; stage >= 0; stage--)
            {
                Backward.enterStage(stage);

                c = slice[stage, 0];

                istart = 2;
                iend   = 2 + cell_size[c, 0] - 1;

                jsize = cell_size[c, 1] + 2;
                ksize = cell_size[c, 2] + 2;

                buffer_size = (jsize - start[c, 1] - end[c, 1]) * (ksize - start[c, 2] - end[c, 2]);

                in_buffer_x  = Input_buffer_backward.Array = new double[10 * buffer_size];
                out_buffer_x = Output_buffer_backward.Array = new double[10 * buffer_size];

                if (stage != ncells - 1)
                {
                    Shift_backward.initiate_recv();

                    Matvecproduct.enterStage(stage + 1);
                    Matvecproduct.go();

                    Shift_backward.go();

                    #region read_buffer_x_back

                    //---------------------------------------------------------------------
                    //            unpack the buffer for the first three factors
                    //---------------------------------------------------------------------
                    n  = -1;
                    p  = 0;
                    i  = iend;
                    i1 = i - 1;
                    for (m = 0; m <= 2; m++)
                    {
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                            {
                                //  Console.WriteLine("in_buffer_x["+ p + "] = " + in_buffer_x[p]);
                                //  Console.WriteLine("in_buffer_x["+ (p+1) + "] = " + in_buffer_x[p+1]);
                                sm1 = in_buffer_x[p];
                                sm2 = in_buffer_x[p + 1];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     lhs[c, k, j, i, n + 4] * sm1 -
                                                     lhs[c, k, j, i, n + 5] * sm2;
                                rhs[c, k, j, i1, m] = rhs[c, k, j, i1, m] -
                                                      lhs[c, k, j, i1, n + 4] * rhs[c, k, j, i, m] -
                                                      lhs[c, k, j, i1, n + 5] * sm1;
                                p = p + 2;
                            }
                        }
                    }

                    //---------------------------------------------------------------------
                    //            now unpack the buffer for the remaining two factors
                    //---------------------------------------------------------------------
                    for (m = 3; m <= 4; m++)
                    {
                        n = (m - 2) * 5 - 1;
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                            {
                                //  Console.WriteLine("in_buffer_x["+ p + "] = " + in_buffer_x[p]);
                                //  Console.WriteLine("in_buffer_x["+ (p+1) + "] = " + in_buffer_x[p+1]);
                                sm1 = in_buffer_x[p];
                                sm2 = in_buffer_x[p + 1];
                                rhs[c, k, j, i, m] = rhs[c, k, j, i, m] -
                                                     lhs[c, k, j, i, n + 4] * sm1 -
                                                     lhs[c, k, j, i, n + 5] * sm2;
                                rhs[c, k, j, i1, m] = rhs[c, k, j, i1, m] -
                                                      lhs[c, k, j, i1, n + 4] * rhs[c, k, j, i, m] -
                                                      lhs[c, k, j, i1, n + 5] * sm1;
                                p = p + 2;
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    Backward.init();
                }

                Backward.go();

                //---------------------------------------------------------------------
                //         send on information to the previous processor, if needed
                //---------------------------------------------------------------------
                if (stage != 0)
                {
                    #region write buffer
                    i  = istart;
                    i1 = istart + 1;
                    p  = 0;
                    for (m = 0; m <= 4; m++)
                    {
                        for (k = start[c, 2]; k < ksize - end[c, 2]; k++)
                        {
                            for (j = start[c, 1]; j < jsize - end[c, 1]; j++)
                            {
                                out_buffer_x[p]     = rhs[c, k, j, i, m];
                                out_buffer_x[p + 1] = rhs[c, k, j, i1, m];
                                p = p + 2;
                            }
                        }
                    }
                    #endregion

                    Shift_backward.initiate_send();
                }

                //if (timeron) timer.stop(t_xsolve);

                //---------------------------------------------------------------------
                //         If this was the last stage, do the block-diagonal inversion
                //---------------------------------------------------------------------
                if (stage == 0)
                {
                    Matvecproduct.enterStage(stage);
                    Matvecproduct.go();
                }
            }

            return(0);
        }         // end activate method
Esempio n. 26
0
 private void ForwardButtonClick(object sender, RoutedEventArgs e)
 {
     Backward?.Invoke(this, EventArgs.Empty);
 }