Beispiel #1
0
    ub, vb = TrialFunction(Vb), TestFunction(Vb)

    b = [[0, 0], [0, 0]]
    b[0][0] = inner(grad(u), grad(v)) * dx + inner(u, v) * dx
    b[0][1] = inner(grad(ub), grad(v)) * dx + inner(ub, v) * dx
    b[1][0] = inner(grad(u), grad(vb)) * dx + inner(u, vb) * dx
    b[1][1] = inner(grad(ub), grad(vb)) * dx + inner(ub, vb) * dx

    BB = ii_assemble(b)

    x = Function(V).vector()
    x.set_local(np.random.rand(x.local_size()))
    y = Function(Vb).vector()
    y.set_local(np.random.rand(y.local_size()))
    bb = block_vec([x, y])

    z_block = BB * bb

    # Make into a monolithic matrix
    BB_m = ii_convert(BB)

    R = ReductionOperator([2], W=[V, Vb])

    z = (R.T) * BB_m * (R * bb)

    print(z - z_block).norm()

    y = BB_m * (R * bb)
    print np.linalg.norm(
        np.hstack([bi.get_local() for bi in z_block]) - y.get_local())
Beispiel #2
0
    Vb = VectorFunctionSpace(mesh, 'Bubble', 3)

    u, v = TrialFunction(V), TestFunction(V)
    ub, vb = TrialFunction(Vb), TestFunction(Vb)

    b = [[0, 0], [0, 0]]
    b[0][0] = inner(grad(u), grad(v))*dx + inner(u, v)*dx
    b[0][1] = inner(grad(ub), grad(v))*dx + inner(ub, v)*dx
    b[1][0] = inner(grad(u), grad(vb))*dx + inner(u, vb)*dx
    b[1][1] = inner(grad(ub), grad(vb))*dx + inner(ub, vb)*dx

    BB = ii_assemble(b)
    
    x = Function(V).vector(); x.set_local(np.random.rand(x.local_size()))
    y = Function(Vb).vector(); y.set_local(np.random.rand(y.local_size()))
    bb = block_vec([x, y])

    z_block = BB*bb
    
    # Make into a monolithic matrix
    BB_m = ii_convert(BB)
    
    R = ReductionOperator([2], W=[V, Vb])

    z = (R.T)*BB_m*(R*bb)

    print (z - z_block).norm()

    y  = BB_m*(R*bb)
    print np.linalg.norm(np.hstack([bi.get_local() for bi in z_block])-y.get_local())