Please refer to my code below.
When trying to solve I get an error on the last line of the code.
ERROR: MethodError: no method matching a(::Gridap.FESpaces.SingleFieldFEBasis{Gridap.FESpaces.TestBasis, ReferenceDomain})
I am struggling to understand the error and how to fix it, can someone please assist?
using Gridap
k = 0.45
# Define the domain
𝒯 = CartesianDiscreteModel((0,1),(20)) # 1x1 surface which is meshed by 20 along each axis
Ω = Triangulation(𝒯)
dΩ = Measure(Ω,1)
# Define the Finite Element Spaces
refFE = ReferenceFE(lagrangian,Float64,1)
V = TestFESpace(𝒯,refFE,dirichlet_tags=[1])
Q = FESpace(𝒯, refFE)
uD = (0.1)
U = TrialFESpace(V,uD)
P = TrialFESpace(Q)
m(u,v) = ∫(u*v)dΩ
a(u,v) = ∫(k*u*v)dΩ
# # Create the TransientAffineFEOperator
op_Af = AffineFEOperator(m, a, U, P)
I think you’re misunderstanding the nature of a weak form. The second argument to AffineFEOperator should be a function b(v) of one argument representing your right-hand side. You are getting the error because your a(u, v) has two arguments, so when Gridap.jl tries to call it with a single argument as a(v) it throws a MethodError.
I am still getting the same issue with the revised code attached below.
using Gridap
k = 0.45
# Define the domain
𝒯 = CartesianDiscreteModel((0,1),(20)) # 1x1 surface which is meshed by 20 along each axis
Ω = Triangulation(𝒯)
dΩ = Measure(Ω,1)
# Define the Finite Element Spaces
refFE = ReferenceFE(lagrangian,Float64,1)
V = TestFESpace(𝒯,refFE,dirichlet_tags=[1])
Q = FESpace(𝒯, refFE)
uD = (0.1)
U = TrialFESpace(V,uD)
P = TrialFESpace(Q)
f = 100
m(u,v) = ∫(k * ∂u/∂x * ∂v/∂x)dΩ
L(v) = ∫(f * v)dΩ
# # Create the TransientAffineFEOperator
op_Af = FEOperator(m, L, U, P)
uh = solve(op_Af)