bcube-project / Bcube.jl

MIT License
4 stars 2 forks source link

NullOperator for TestFunction #117

Open bmxam opened 2 months ago

bmxam commented 2 months ago

This is not exactly what we talked about during the live session, but the idea is to introduce Bcube.NullOperator(v) and/or Bcube.NullOperator(v, n) to enable the following MWE:

using Bcube
using LinearAlgebra

mesh = rectangle_mesh(4, 4)
Γ = InteriorFaceDomain(mesh)
dΓ = Measure(Γ, 1)
nΓ = get_face_normals(Γ)

function f_sca(vi, vj, nij)
    # Today:
    return 0.0 * vi

    # Tomorrow (doesn't work yet)?
    return Bcube.NullOperator()
    return Bcube.NullOperator(vi)
    return Bcube.NullOperator(vi, nij)
end

function f_vec(vi, vj, nij)
    # Today:
    return 0.0 * vi[1] + 0.0 * vi[2] ⋅ nij

    # Tomorrow (doesn't work yet )?
    return Bcube.NullOperator()
    return Bcube.NullOperator(vi)
    return Bcube.NullOperator(vi, nij)
end

# Scalar
Usca = TrialFESpace(FunctionSpace(:Lagrange, 0), mesh)
Vsca = TestFESpace(Usca)

l(v) = ∫(f_sca ∘ (side_n(v), side_p(v), side_n(nΓ)))dΓ
assemble_linear(l, Vsca)

# Vector
Uvec = TrialFESpace(FunctionSpace(:Lagrange, 0), mesh; size = 2)
Vvec = TestFESpace(Uvec)
V = MultiFESpace(Vsca, Vvec)

l(v) = ∫(f_vec ∘ (side_n(v), side_p(v), side_n(nΓ)))dΓ
assemble_linear(l, V)
bmxam commented 2 months ago

the MWE is now correct