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); }
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); }