Interior Integration Measure for n-1 Dimensional Boundary

Hi all,

I am needing to model crack opening/closure in an elastic (and eventually poroelastic) medium. The general idea is this: (1) use Gmsh to generate a 2D surface embedded with a 1D line in the center to simulate the crack (2) split the displacement field along the 1D line with + and - operators (3) apply mechanical loads to the outer boundaries and interior 1D line and (4) solve the problem. This is similar to the classic Griffith crack solution, if you are familiar with this. Several posts on this forum has asked a similar question, but model the “crack” as a very thin 2D region instead of an interior (and embedded) 1D line.

My question is this: How do I create a custom integration measure “dS” for interior lines that satisfy the following condition: 37.5 <= x <= 62.5 && y = 37.5?

Here is what I have tried so far:

# Boundary conditions
#-------------------------------------
xc = 100 # x-length of elastic-domain
yc = 75 # y-length of elastic-domain
lf = 25 # "crack" length
x = SpatialCoordinate(mesh) # Locate x,y coordinates of elements
n = -FacetNormal(mesh) # normal direction to elements
norm = as_vector([n[0], n[1]]) # This is needed for Neumann BCs

boundaries = [(1,lambda x: np.isclose(x[0], 0)),
                  (2,lambda x: np.isclose(x[1], 0)),
                  (3,lambda x: np.isclose(x[0], xc)),
                  (4,lambda x: np.isclose(x[1], yc))] # pick out the left, bottom, right, and top boundary DOFs

internal_boundary = conditional(And(ge(x[0],(xc-lf)/2),le(x[0],(xc-lf)/2+lf)),conditional(eq(x[1],yc/2),1,0),ScalarType(0)) # Internal bounday (fracture)

How do I use internal_boundary to choose the right “dS” integration measure?

Hi,
FEniCS does not support FunctionSpaces defined on a 2D mesh which would be discontinuous only on some internal line. FunctionSpaces are either fully continuous or fully discontinuous.

You could do this by using the MixedDimensional FEM implemented by C. Daversin (@cdaversin), as you could create a mesh-view for each sub-domain, and then in turn create a coupling condition on the interface between the MeshViews. See: https://dl.acm.org/doi/abs/10.1145/3471138

1 Like

Great, thanks for the advice! Does MeshView currently work with dolfinx or just dolfin?

Meshview currently only works in dolfin, However, there is a lot of rapid development on this by @jpdean using submeshes in DOLFINx.

2 Likes

This seems to be related to my problem ; how about dropping the question of the FunctionSpace continuity and sticking to the question of the integration measure dS ? In my case I don’t want to split my domain in two, the interior boundary doesn’t split the domain in two.

I agree with @MattMcLean that the question is not trivial, the only interior boundary example I found in this forum is here and it doesn’t seem very natural to move it to dolfinx…

Hi @hawkspar, it looks like you were able to implement discontinuous jumps in dolfinx. From my understanding of your post here https://fenicsproject.discourse.group/t/zero-internal-neumann-boundary/7261/4 you are modeling NS equations with CG velocity elements and DG pressure element, right? My application is for solid mechanics (Navier-Cauchy eq.), which DG elements is needed for the vector field. So I am wondering if your formulation would also work if velocity is DG and pressure is CG?

I actually used DG for both spaces. My understanding is if you want a jump for field X, you need to use DG for field X.

1 Like