brick x 150 y 178 z 50
volume 1 move x 75 y 89 z 25
create frustum height 50 radius 30 top 5
volume 2 move x 75 y 89 z 25
subtract volume 2 from volume 1 keep_tool
webcut volume all plane zplane offset 35
webcut volume all plane zplane offset 30
webcut volume all plane zplane offset 29
brick x 150 y 4 z 4
volume 9 move x 75 y 12 z 32
brick x 150 y 4 z 4
volume 10 move x 75 y 166 z 32
subtract volume 9 10 from volume all
merge all
imprint all
Could you please put the desired layers into a block and tell us which element size and type you are targeting. If you need a good hex mesh then i would decompose a little further.
It’s not so trivial to get this mesh. You have to be aware of the sweep directions and make sure that the intervals will match when meshing the middle layer.
So we need to decompose further. First lets put the volumes into blocks. When we do some webcuts the new volumes gets signed automatically to the blocks.
#!cubit
reset
brick x 150 y 178 z 50
volume 1 move x 75 y 89 z 25
create frustum height 50 radius 30 top 5
volume 2 move x 75 y 89 z 25
subtract volume 2 from volume 1 keep_tool
webcut volume all plane zplane offset 35
webcut volume all plane zplane offset 30
webcut volume all plane zplane offset 29
brick x 150 y 4 z 4
volume 9 move x 75 y 12 z 32
brick x 150 y 4 z 4
volume 10 move x 75 y 166 z 32
subtract volume 9 10 from volume all
block 1 add volume 1 2
block 1 name 'top_layer'
block 2 add volume 3 to 6
block 2 name 'middle_layer'
block 3 add volume 7 8
block 3 name 'bottom_layer'
Now lets decompose further. We need to make sure that the interval matching will work when we mesh.
The merged surfaces should have the same topology to achieve this.
webcut volume all with sheet extended from surface 73
webcut volume all with plane normal to curve 3 fraction .5 from start
webcut volume all with plane normal to curve 4 fraction .5 from start
webcut volume all with sheet extended from surface 302
webcut volume all with sheet extended from surface 425
webcut volume all with sheet extended from surface 312
webcut volume all with sheet extended from surface 322
imprint all
merge all
Now it’s crucial to take control of the mesh order. We will set the size for the block and first mesh the top layer in block 2. This way we will ensure that the middle layer in block 2 has matchin intervals with the bottom. Now we can mesh the rest of the block.
vol all in block 2 size 1
mesh Volume 60 56 17 39 68 64 4 28 40 18 52 48 3 72 76 27
mesh vol all in block 2
A short look at the mesh.
draw hex all in block 1 color green
draw hex all in block 2 color yellow add
draw hex all in block 3 color blue add
graphics clip on location 75 0 0 direction 1 0 0
ERROR: Mesh of Surface 436 has connectivity problems.(Mesh has odd Euler characteristic 17.)ERROR: Inconsistent edge to face count relationship.ERROR: Mesh of Surface 436 is invalid.ERROR: Refinement process resulted in an invalid surface mesh.ERROR: Unable to refine the given list of surfaces.ERROR: Unable to complete refinement operation.
However, interestingly, if I change:
depth 0
to:
depth 1
the refinement succeeds correctly.
According to the 2025 documentation, depth 0 should mean refining only the first layer of neighboring elements.
So I would like to ask:
Has the behavior of depth 0 changed in newer versions (especially 2025.03)?
Is there stricter topology validation in recent versions?
Is this related to known issues with local surface refinement on swept/hex meshes?
Why would depth 1 succeed while depth 0 fails on the same mesh?
Is there any recommended workaround or best practice for this situation?