Old HDG Program

More
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
More
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
Time to create page: 0.096 seconds