public static void RestrictionOfSystemOpTest() { Basis B1 = new Basis(grid, 0), B2 = new Basis(grid, 2); var Map = new UnsetteledCoordinateMapping(B1, B2); var Lev0Basis = new AggregationGridBasis(B2, TestProgram.MgSeq[0]); var Lev1Basis = new AggregationGridBasis(B2, TestProgram.MgSeq[1]); var Lev0 = new MultigridMapping(Map, new AggregationGridBasis[] { Lev0Basis, Lev0Basis }, new int[] { B1.Degree, B2.Degree }); var Lev1 = new MultigridMapping(Map, new AggregationGridBasis[] { Lev1Basis, Lev1Basis }, new int[] { B1.Degree, B2.Degree }); int[] I0col = Lev0.GetSubvectorIndices(new int[] { 0 }); int[] I1col = Lev0.GetSubvectorIndices(new int[] { 1 }); int[] I0row = Lev1.GetSubvectorIndices(new int[] { 0 }); int[] I1row = Lev1.GetSubvectorIndices(new int[] { 1 }); var RestMtx = Lev1.FromOtherLevelMatrix(Lev0); MsrMatrix Rest00 = new MsrMatrix(I0row.Length, I0col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest00, I0row, default(int[]), I0col, default(int[])); MsrMatrix Rest01 = new MsrMatrix(I0row.Length, I1col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest01, I0row, default(int[]), I1col, default(int[])); MsrMatrix Rest10 = new MsrMatrix(I1row.Length, I0col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest10, I1row, default(int[]), I0col, default(int[])); MsrMatrix Rest11 = new MsrMatrix(I1row.Length, I1col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest11, I1row, default(int[]), I1col, default(int[])); Debug.Assert(Rest10.InfNorm() == 0.0); Debug.Assert(Rest01.InfNorm() == 0.0); Debug.Assert(Rest00.InfNorm() != 0.0); Debug.Assert(Rest11.InfNorm() != 0.0); }
public static void RestrictionOfSystemOpTest() { Basis B1 = new Basis(grid, 0), B2 = new Basis(grid, 2); var Map = new UnsetteledCoordinateMapping(B1, B2); AggregationGridBasis[][] aB = AggregationGridBasis.CreateSequence(TestProgram.MgSeq.Take(2), new Basis[] { B1, B2 }); var Lev0 = new MultigridMapping(Map, aB[0], new int[] { B1.Degree, B2.Degree }); var Lev1 = new MultigridMapping(Map, aB[1], new int[] { B1.Degree, B2.Degree }); int[] I0col = Lev0.GetSubvectorIndices(new int[] { 0 }); int[] I1col = Lev0.GetSubvectorIndices(new int[] { 1 }); int[] I0row = Lev1.GetSubvectorIndices(new int[] { 0 }); int[] I1row = Lev1.GetSubvectorIndices(new int[] { 1 }); var RestMtx = Lev1.FromOtherLevelMatrix(Lev0); MsrMatrix Rest00 = new MsrMatrix(I0row.Length, I0col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest00, I0row, default(int[]), I0col, default(int[])); MsrMatrix Rest01 = new MsrMatrix(I0row.Length, I1col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest01, I0row, default(int[]), I1col, default(int[])); MsrMatrix Rest10 = new MsrMatrix(I1row.Length, I0col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest10, I1row, default(int[]), I0col, default(int[])); MsrMatrix Rest11 = new MsrMatrix(I1row.Length, I1col.Length, 1, 1); RestMtx.WriteSubMatrixTo(Rest11, I1row, default(int[]), I1col, default(int[])); Assert.IsTrue(Rest10.InfNorm() == 0.0); Assert.IsTrue(Rest01.InfNorm() == 0.0); Assert.IsTrue(Rest00.InfNorm() != 0.0); Assert.IsTrue(Rest11.InfNorm() != 0.0); }