Forum Message

 

 

We have moved the forum to https://forum.ngsolve.org . This is an archived version of the topics until 05/05/23. All the topics were moved to the new forum and conversations can be continued there. This forum is just kept as legacy to not invalidate old links. If you want to continue a conversation just look for the topic in the new forum.

Notice

The forum is in read only mode.

Old HDG Program

More
5 years 2 weeks 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 2 weeks 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.156 seconds