# Defining Dirichlet Boundary Conditions on an Imported 3D Object with Apertures in it

I am trying to simulate a static electric field (in 2d and 3d) as it passes through a couple of apertures in a 3D "metal sheet" (model imported as a .obj file) given here:

https://www.dropbox.com/s/std8wbw3vcq8pfn/meta.obj?dl=0

I setup an airbox and a "charged" plate at the top of an airbox. I place my "metal sheet" with the apertures in it in the center of the box.

When it comes time to define the DirichletConditions, I can set a charge on my "charged" plate at the top of the airbox just fine using DirichletConditions, but am having trouble defining the boundary conditions on the metal sheet with apertures. How would one go about defining Dirichlet boundary conditions on such an object with holes in it? I also need help plotting the fields in 3D as they pass through the apertures. Thank you!!!

Clear["Global*"];
Needs["NDSolveFEM"]

R = Import["...\\meta.obj"];
RegionDimension[R];
M = BoundaryMeshRegion[MeshCoordinates[R], MeshCells[R, 2]];
*emphasized text*
r = RegionDifference[
RegionDifference[Cuboid[{-1, -1, -1}, {2, 2, 1}], M],
Cuboid[{-1, -1, 0.9}, {2, 2, 1}]]
mesh = ToElementMesh[r]["Wireframe"]

V0 = 4000;
sol = NDSolveValue[{Laplacian[V[x, y, z], {x, y, z}] == 0,
DirichletCondition[
V[x, y, z] ==
V0/2, (0.9 <= z <= 1) && (-0.99 <= y <= 1.99) && (-0.99 <= x <=
1.99)], DirichletCondition[
V[x, y, z] == -V0/
2, (0 <= z <= 0.072) && (0 <= y <= 1) && (0 <= x <= 1)]},
V, {x, y, z} \[Element] r]
ContourPlot[sol[x, 0.25, z], {x, -1, 2}, {z, -1, 1}]


## 2 Answers

We don't need define potential in holes, we can use DirichletCondition[V[x, y, z] == -V0/2, (0 <= z <= 0.072) && (0 <= y <= 1) && (0 <= x <= 1)] to define boundary condition on a plate. To visualize solution we use Show as follows

Clear["Global*"];
Needs["NDSolveFEM"]

R = Import["...\\meta.obj"];
RegionDimension[R];
M = BoundaryMeshRegion[MeshCoordinates[R], MeshCells[R, 2],
Axes -> True];
reg = RegionDifference[
RegionDifference[Cuboid[{-1, -1, -1}, {2, 2, 1}], M],
Cuboid[{-1, -1, 0.9}, {2, 2, 1}]];
V0 = 1;
sol = NDSolveValue[{Laplacian[V[x, y, z], {x, y, z}] == 0,
DirichletCondition[
V[x, y, z] ==
V0/2, (0.9 <= z <= 1) && (-0.99 <= y <= 1.99) && (-0.99 <= x <=
1.99)], DirichletCondition[
V[x, y, z] == -V0/
2, (0 <= z <= 0.072) && (0 <= y <= 1) && (0 <= x <= 1)]},
V, {x, y, z} \[Element] reg];
f = Evaluate[Grad[-sol[x, y, z], {x, y, z}]];

Show[VectorPlot3D[f, {x, 0, 1}, {y, 0, 1}, {z, -.1, .2},
Boxed -> False, BoxRatios -> Automatic, VectorPoints -> 10,
VectorStyle -> Arrowheads[0]], M]


We can also visualize potential around plate and in holes

Table[ContourPlot[4000 sol[x, y, z], {x, -1, 2}, {y, -1, 2},
Contours -> 20, ColorFunction -> "Pastel", PlotLegends -> Automatic,
Frame -> False, PlotLabel -> z], {z, -.05, .1, .03}]


ContourPlot[4000 sol[x, y, .04], {x, 0, 1}, {y, 0, 1}, Contours -> 20,
ColorFunction -> "Pastel", PlotLegends -> Automatic, Frame -> False,
PlotPoints -> 50, PlotRange -> {-2000, -1900}]


• Thank you Alex. I actually came up with a very similar solution today! I also had to modify my boundary conditions and geometry to make the problem more physical. I will also include my solution below.
– Zach
Jun 24, 2022 at 5:18

.obj file with new geometry: https://www.dropbox.com/s/dds8rm3odg2m7gu/largeAp.obj?dl=0

Clear["Global*"];
Needs["NDSolveFEM"]

R = Import["C:...largeAp.obj"];
RegionDimension[R];
M = BoundaryMeshRegion[MeshCoordinates[R], MeshCells[R, 2]];
RegionDimension[M];
Volume[M];

r = RegionDifference[
RegionDifference[
RegionDifference[Cuboid[{0, 0, -0.5}, {2, 2, 0.5}], M],
Cuboid[{0, 0, 0.4}, {2, 2, 0.5}]],
Cuboid[{0, 0, -0.5}, {2, 2, -0.4}]];
mesh = ToElementMesh[r]["Wireframe"];

pol = -1;

V0 = 4000;
sol = NDSolveValue[{Laplacian[V[x, y, z], {x, y, z}] == 0,
DirichletCondition[
V[x, y, z] == -pol*
V0/2, (0.4 <= z <= 0.5) && (0 <= y <= 2) && (0 <= x <= 2)],
DirichletCondition[
V[x, y, z] ==
pol*V0/2, (0.0071 <= z <= 0.0072) && (0 <= y <= 2) && (0 <= x <=
2)], DirichletCondition[
V[x, y, z] ==
0, (0 <= z <= 0.0070) && (0 <= y <= 2) && (0 <= x <= 2)],
DirichletCondition[
V[x, y, z] ==
0, (-0.5 <= z <= -0.4) && (0 <= y <= 2) && (0 <= x <= 2)]},
V, {x, y, z} \[Element] r]

plotXZ = ContourPlot[sol[x, 0.75, z], {x, 0, 2}, {z, -0.4, 0.1},
ContourShading -> Automatic, ColorFunction -> "Rainbow",
Contours -> 100]
plotYZ = ContourPlot[sol[0.75, y, z], {y, 0, 2}, {z, -0.4, 0.1},
ContourShading -> Automatic, ColorFunction -> "Rainbow",
Contours -> 100]
plotXY = ContourPlot[sol[x, y, -0.05], {x, 0.5, 1.5}, {y, 0.5, 1.5},
ColorFunction -> "Rainbow", Contours -> 50, PlotLegends -> Automatic]

SliceContourPlot3D[sol[x, y, z],
"CenterPlanes", {x, 0.5, 1}, {y, 0.5, 1}, {z, 0, -0.1},
ColorFunction -> "Rainbow", Contours -> 200];
DensityPlot3D[
sol[x, y, z], {x, 0.5, 1}, {y, 0.5, 1}, {z, -0.4, -0.00001},
PlotTheme -> "Detailed", ColorFunction -> "Rainbow",
PerformanceGoal -> "Quality"];

d = ContourPlot3D[
sol[x, y, z], {x, 0.5, 1}, {y, 0.5, 1}, {z, -0.25, -0.00001},
PlotTheme -> "Detailed", ColorFunction -> "Rainbow",
PerformanceGoal -> "Quality", Contours -> 1, Mesh -> None];

electricField[x_, y_, z_] = -Grad[sol[x, y, z], {x, y, z}];
v = Show[VectorPlot3D[
electricField[x, y, z], {x, 0.5, 1}, {y, 0.5,
1}, {z, -0.25, -0.00001}, PlotTheme -> "Detailed",
ColorFunction -> "Rainbow", PerformanceGoal -> "Quality",
VectorScale -> 0.05, VectorPoints -> 7], M]
`

• There are 2 pictures uploaded with 2 and 1 chrest respectively. Is largeAp.obj corresponds to one chrest? Jun 24, 2022 at 5:53