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.

Orientation of the normal in 2D

More
1 year 9 months ago #4416 by pbmonk
I would like to solve a scattering problem in 2D. The scatterer is a subdomain for example:

def square(hmax=0.1,pml_rad=2,delta_pml=1):
    geo = SplineGeometry()
    L2=.5
    geo.AddRectangle(p1=(-L2,-L2),p2=(L2,L2),bc="trans",leftdomain=3,rightdomain=1)
    geo.AddCircle( (0,0),pml_rad+delta_pml , leftdomain=2, rightdomain=0, bc="outerbnd")
    geo.AddCircle( (0,0), pml_rad, leftdomain=1, rightdomain=2)
    geo.SetMaterial(1, "air")
    geo.SetMaterial(2, "PML")
    geo.SetMaterial(3, "scatterer")
    mesh = Mesh(geo.GenerateMesh(maxh=hmax))
    return(mesh,pml_rad,ngmesh)

I get the normal via

nv=specialcf.normal(mesh.dim)

Is there some way to test that the normal in nv is outwards from the scatterer (so I can set transmission conditions), and reverse the normal if needed?

Thanks in advance for your help.

Best
Peter
 
More
1 year 9 months ago #4417 by mneunteufel
Hi Peter,

you can visualize the normal vector by interpolating it into a VectorH1 GridFunction, e.g.

mesh, pml, ngmesh = square()

gfnv = GridFunction(VectorH1(mesh,order=1))
gfnv.Set(specialcf.normal(2),definedon=mesh.Boundaries(".*"))
Draw(gfnv, mesh, "nv")

In the Netgen GUI in Visual by enabling "Draw Surface Vectors" on the bottom right (and maybe increasing the Grid at the top left) the drawn arrows should show the direction of the normal vector. It looks like that in this example all normal vectors point outwards the whole domain.

Best,
Michael
More
1 year 9 months ago #4421 by pbmonk
Thanks for a very helpful response.
Peter
Time to create page: 0.134 seconds