def test_Brick_XY_system(self): ranks = getMPISizeWorld() for expanded in (True, False): for order in range(2, 11): dom = Brick(order, 3, 3 * ranks, 3, l0=6, l1=6, l2=6, d1=ranks) Y = Data(1, (3, ), Function(dom), expanded) X = Data(0, (3, 3), Function(dom), expanded) X[0, 0] = dom.getX()[0] X[1, 1] = dom.getX()[1] X[2, 2] = dom.getX()[2] f = Data(0, (3, ), Solution(dom), expanded) dom.addToRHS(f, [("Y", Y)], dom.createAssembler("DefaultAssembler", [])) dom.addToRHS(f, [("X", X)], dom.createAssembler("DefaultAssembler", [])) #nuke the boundary back to zero since it's not dealt with here for dim in range(3): f *= whereNegative(dom.getX()[dim] - 6) res = Lsup(f) self.assertLess( res, self.TOLERANCE, ("assembly for {0}expanded order %d failed with %e >= %e" % (order, res, self.TOLERANCE)).format("" if expanded else "un-"))
def test_Brick_Du_Y_system(self): #solves for u in Du = Y, where D = [1,2], Y = [2,4] ranks = getMPISizeWorld() for expanded in (True, False): for order in range(2, 11): dom = Brick(order, 3, 3 * ranks, 3, d1=ranks) D = Data(1, (2, ), ContinuousFunction(dom), expanded) D[1] = 2 Y = Data(2, (2, ), ContinuousFunction(dom), expanded) Y[1] = 4 Y = interpolate(Y, Function(dom)) D = interpolate(D, Function(dom)) rhs = Data(0, (2, ), Solution(dom), expanded) lhs = Data(0, (2, ), Solution(dom), expanded) dom.addToRHS(rhs, [("Y", Y)], dom.createAssembler("DefaultAssembler", [])) dom.addToRHS(lhs, [("D", D)], dom.createAssembler("DefaultAssembler", [])) res = Lsup((rhs / lhs) - 2) self.assertLess( res, self.TOLERANCE, ("assembly for {0}expanded order %d failed with %e >= %e" % (order, res, self.TOLERANCE)).format("" if expanded else "un-"))