- Thank you received: 0
Old HDG Program
5 years 8 months ago #1489
by mary
Old HDG Program was created by mary
Hi,
I tried to execute an older HDG solver for a nonlinear Fokker Planck equation. I discretize the diffusion operator implicitly, the convective term explicitly. I do get a strange error when I assemble the LinearForm related to the nonlinear outflow boundary conditions. I copied a snippet of the code below
# Discretization of the Laplace operator - HDG formulation
stab = 10
a = BilinearForm(fes)
a += SymbolicBFI(D * grad(u) * grad(v))
a += SymbolicBFI((D * grad(u)) * n * (vhat-v)+ (D * grad(v))*n*(uhat-u)+ stab * order*order/h*(u-uhat)*(v-vhat), element_boundary=True)
a.Assemble()
# Transportation vector in x-direction
b = CoefficientFunction( (1,0) )
bn = b*specialcf.normal(2)
ubnd = CoefficientFunction(0)
# Discretization of the convection operator - DG formulation with upwind
conv = BilinearForm(fes)
conv += SymbolicBFI (-u * (1-u) * b* grad(v))
conv += SymbolicBFI ((bn*IfPos(bn, u * (1-u), u.Other(bnd=ubnd) * (1-u.Other(bnd=ubnd))) * v).Compile(), element_boundary=True)
# Mass matrix
m = BilinearForm(fes)
m += SymbolicBFI (u * v)
m.Assemble()
hmat = a.mat.CreateMatrix()
hmat.AsVector().data = 0.5 * tau * a.mat.AsVector() + m.mat.AsVector()
inv = hmat.Inverse(fes.FreeDofs())
# Linearform - inflow
fbc_in = LinearForm(fes)
fbc_in += SymbolicLFI(fin * vhat, BND, definedon=mesh.Boundaries("inflow"))
fbc_in.Assemble()
The following error occurs when assembling the linear form fbc_in:
File "<string>", line 79, in <module>
RuntimeError: cannot evaluate facet-fe inside element, add trans simdin Assemble LinearForm
Could you please advise what to do ?
Thanks a lot
Marie-Therese
I tried to execute an older HDG solver for a nonlinear Fokker Planck equation. I discretize the diffusion operator implicitly, the convective term explicitly. I do get a strange error when I assemble the LinearForm related to the nonlinear outflow boundary conditions. I copied a snippet of the code below
# Discretization of the Laplace operator - HDG formulation
stab = 10
a = BilinearForm(fes)
a += SymbolicBFI(D * grad(u) * grad(v))
a += SymbolicBFI((D * grad(u)) * n * (vhat-v)+ (D * grad(v))*n*(uhat-u)+ stab * order*order/h*(u-uhat)*(v-vhat), element_boundary=True)
a.Assemble()
# Transportation vector in x-direction
b = CoefficientFunction( (1,0) )
bn = b*specialcf.normal(2)
ubnd = CoefficientFunction(0)
# Discretization of the convection operator - DG formulation with upwind
conv = BilinearForm(fes)
conv += SymbolicBFI (-u * (1-u) * b* grad(v))
conv += SymbolicBFI ((bn*IfPos(bn, u * (1-u), u.Other(bnd=ubnd) * (1-u.Other(bnd=ubnd))) * v).Compile(), element_boundary=True)
# Mass matrix
m = BilinearForm(fes)
m += SymbolicBFI (u * v)
m.Assemble()
hmat = a.mat.CreateMatrix()
hmat.AsVector().data = 0.5 * tau * a.mat.AsVector() + m.mat.AsVector()
inv = hmat.Inverse(fes.FreeDofs())
# Linearform - inflow
fbc_in = LinearForm(fes)
fbc_in += SymbolicLFI(fin * vhat, BND, definedon=mesh.Boundaries("inflow"))
fbc_in.Assemble()
The following error occurs when assembling the linear form fbc_in:
File "<string>", line 79, in <module>
RuntimeError: cannot evaluate facet-fe inside element, add trans simdin Assemble LinearForm
Could you please advise what to do ?
Thanks a lot
Marie-Therese
- mneunteufel
- Offline
- Premium Member
Less
More
- Thank you received: 59
5 years 8 months ago #1493
by mneunteufel
Replied by mneunteufel on topic Old HDG Program
Hi,
you need the Trace operator if you want to evaluate vhat directly on the boundary:
fbc_in += SymbolicLFI(fin * vhat.Trace(), BND, definedon=mesh.Boundaries("inflow"))
Best,
Michael
you need the Trace operator if you want to evaluate vhat directly on the boundary:
fbc_in += SymbolicLFI(fin * vhat.Trace(), BND, definedon=mesh.Boundaries("inflow"))
Best,
Michael
Time to create page: 0.096 seconds