コード例 #1
0
ファイル: Utils.cs プロジェクト: rohitvuppala/BoSSS
        public static BlockMsrMatrix CreateShapeOfOnes(BlockMsrMatrix A)
        {
            var rowmap    = A._RowPartitioning;
            var colmap    = A._ColPartitioning;
            int RowBlocks = rowmap.LocalNoOfBlocks;
            int ColBlocks = colmap.LocalNoOfBlocks;

            BlockMsrMatrix B = new BlockMsrMatrix(rowmap, colmap);

            Partitioning rowpart = new Partitioning(RowBlocks);

            for (int iBlock = rowpart.i0; iBlock < rowpart.iE; iBlock++)
            {
                for (int jBlock = rowpart.i0; jBlock < rowpart.iE; jBlock++)
                {
                    int i0   = rowmap.GetBlockI0(iBlock);
                    int j0   = colmap.GetBlockI0(jBlock);
                    int iL   = rowmap.GetBlockLen(iBlock);
                    int jL   = colmap.GetBlockLen(jBlock);
                    var subM = MultidimensionalArray.Create(iL, jL);
                    A.ReadBlock(i0, j0, subM);
                    subM.ApplyAll(i => i != 0.0 ? 1 : 0);
                    B.AccBlock(i0, j0, 1.0, subM);
                }
            }
            double min, max;
            int    minc, minr, maxc, maxr;

            B.GetMinimumAndMaximum_MPILocal(out min, out minr, out minc, out max, out maxr, out maxc);
            Debug.Assert(min == 0);
            Debug.Assert(max == 1);
            return(B);
        }
コード例 #2
0
ファイル: Utils.cs プロジェクト: rohitvuppala/BoSSS
        public static void SetAll(this BlockMsrMatrix A, double val)
        {
            var rowmap    = A._RowPartitioning;
            var colmap    = A._ColPartitioning;
            int RowBlocks = rowmap.LocalNoOfBlocks;
            int ColBlocks = colmap.LocalNoOfBlocks;

            Partitioning rowpart = new Partitioning(RowBlocks);

            for (int iBlock = rowpart.i0; iBlock < rowpart.iE; iBlock++)
            {
                for (int jBlock = rowpart.i0; jBlock < rowpart.iE; jBlock++)
                {
                    int i0   = rowmap.GetBlockI0(iBlock);
                    int j0   = colmap.GetBlockI0(jBlock);
                    int iL   = rowmap.GetBlockLen(iBlock);
                    int jL   = colmap.GetBlockLen(jBlock);
                    var subM = MultidimensionalArray.Create(iL, jL);
                    subM.SetAll(val);
                    A.AccBlock(i0, j0, 1.0, subM);
                }
            }
            double min, max;
            int    minc, minr, maxc, maxr;

            A.GetMinimumAndMaximum_MPILocal(out min, out minr, out minc, out max, out maxr, out maxc);
            Debug.Assert(min == max);
            Debug.Assert(min == val);
        }