You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When integrating over an InterfaceTriangulation (see the run()-function below) the value of an integral changes from 1 to 0 if I multiply the integrand with a scalar 1. However, this only happens on one side of the interface. Can someone confirm if this is a bug?
(Sorry about the somewhat long example. I was not able to set up an InterfaceTriangulation without gmsh)
Example
using Gridap
import Gmsh: gmsh
using GridapGmsh
"""Set up a mesh, as illustrated below, and write it to file with the incomingfilename. * ------ * -------- * | "Left" | "Right" | * ------- * ------- *"""functioncreate_mesh(filename)
gmsh.initialize()
dim2 =2# Define the dimensions of the rectangle
x_min =-1
x_interface =0
x_max =1.0
y_min =0.0
y_max =1.0
z =0.0# 2D geometry, so z-coordinate is constant# Define the mesh size
mesh_size =1# Numbering of mesh entities:## p4 p3 p6# * --l3-- * --l7-- *# | | |# l4 l2 l6# | | |# * --l1-- * --l5-- *# p1 p2 p5# Add points for the rectangle corners
p1 = gmsh.model.geo.addPoint(x_min, y_min, z, mesh_size)
p2 = gmsh.model.geo.addPoint(x_interface, y_min, z, mesh_size)
p3 = gmsh.model.geo.addPoint(x_interface, y_max, z, mesh_size)
p4 = gmsh.model.geo.addPoint(x_min, y_max, z, mesh_size)
p5 = gmsh.model.geo.addPoint(x_max, y_min, z, mesh_size)
p6 = gmsh.model.geo.addPoint(x_max, y_max, z, mesh_size)
# Add lines connecting the points to form the rectangle
l1 = gmsh.model.geo.addLine(p1, p2)
l2 = gmsh.model.geo.addLine(p2, p3)
l3 = gmsh.model.geo.addLine(p3, p4)
l4 = gmsh.model.geo.addLine(p4, p1)
l5 = gmsh.model.geo.addLine(p5, p2)
l6 = gmsh.model.geo.addLine(p6, p5)
l7 = gmsh.model.geo.addLine(p3, p6)
# Add curve loop to define the boundary of the rectangle
left_loop = gmsh.model.geo.addCurveLoop([l1, l2, l3, l4])
right_loop = gmsh.model.geo.addCurveLoop([-l5, -l6, -l7, -l2])
# Add plane surface using the curve loop
left_surface = gmsh.model.geo.addPlaneSurface([left_loop])
right_surface = gmsh.model.geo.addPlaneSurface([right_loop])
gmsh.model.geo.synchronize()
no_tag =-1
gmsh.model.addPhysicalGroup(dim2, [left_surface], no_tag, "Left")
gmsh.model.addPhysicalGroup(dim2, [right_surface], no_tag, "Right")
gmsh.model.mesh.generate(dim2)
gmsh.write(filename)
gmsh.finalize()
end"""Create the mesh above, write it to file and read it back in."""functioncreate_model()
filename ="rectangle_mesh.msh"create_mesh(filename)
model =GmshDiscreteModel(filename)
return model
end"""Create the following model: * ------ * -------- * | "Left" | "Right" | * ------- * ------- *Set up a space over the left and right side, and interpolateconstant one into each space: u_L, u_R. Integrate u_L or u_R overthe interface between "Left" and "Right". This should give 1. Multiplying thethe integrand u_R with a scalar makes the integral 0. This looks like a bug."""functionrun()
model =create_model()
Ω_L =Triangulation(model, tags="Left")
Ω_R =Triangulation(model, tags="Right")
element_order =1
element =ReferenceFE(lagrangian, Float64, element_order)
V_L =TestFESpace(Ω_L,
element,
conformity=:H1)
V_R =TestFESpace(Ω_R,
element,
conformity=:H1)
U_L =TrialFESpace(V_L)
U_R =TrialFESpace(V_R)
one(x) =1
u_L =interpolate_everywhere(one, U_L)
u_R =interpolate_everywhere(one, U_R)
Γ =InterfaceTriangulation(Ω_L, Ω_R)
degree =2* element_order
dΓ =Measure(Γ, degree)
println()
println("I expect all these integrals to be equal to one. Why is the last one zero?")
println("left side =", sum(∫(u_L.⁺)dΓ))
println("right side =", sum(∫(u_R.⁻)dΓ))
println("1*(left side) =", sum(∫(1.0* u_L.⁺)dΓ))
println("1*(right side) =", sum(∫(1.0* u_R.⁻)dΓ))
endrun()
Output
I expect all these integrals to be equal to one. Why is the last one zero?
left side =0.9999999999999998
right side =0.9999999999999998
1*(left side) =0.9999999999999998
1*(right side) =0.0
The text was updated successfully, but these errors were encountered:
When integrating over an
InterfaceTriangulation
(see therun()
-function below) the value of an integral changes from 1 to 0 if I multiply the integrand with a scalar 1. However, this only happens on one side of the interface. Can someone confirm if this is a bug?(Sorry about the somewhat long example. I was not able to set up an
InterfaceTriangulation
without gmsh)Example
Output
The text was updated successfully, but these errors were encountered: