Generating Zones
Zones in 3DEC are usually generated with commands. The basic commands are usually capable of meshing any block assembly with tetrahedra. The meshing is quite robust, but there are some drawbacks including lack of controls and slow generation in some cases. A new experimental method was added in Version 7 to address some of these issues. Both methods are descibed below.
In addition, Version 7 also added the ability to import zones from a different meshing program (e.g. Griddle). This is descibed in the Importing and Merging document.
Generating Zones with Commands
The basic command for generating tetrahedral zones in block zone generate edgelength
. Different edge lengths may be specified for different blocks. Edge lengths must be constant within each blocks. If you require a gradation of zone sizes within a single block, you will need to cut the block into smaller blocks and joint them, or use the new zoning algorithms (New Zoning Commands).
Zones are not generated until edge lengths have been specified for ALL blocks. Once zones have been generated, subcontacts are also created. Constitutive models and properties for zones and contacts can then be assigned.
The example below shows how smaller zones can be created close to a region of interest (in this case, a load applied at the surface).
model new
block create brick -20 20 -20 20 -20 0
block densify segments 10 10 5 join
block create brick -4 4 -4 4 0 4
block zone generate edgelength 0.5 ...
range position-x -8 8 position-y -8 8 position-z -4 4
; defining an edgelength length over a region that has already
; been assigned an edgelength length
; will not overwrite the previously assigned edgelength length.
block zone generate edgelength 1 ...
range position-x -16 16 position-y -16 16 position-z -8 0
block zone generate edgelength 2
The gridpoints across joints are guaranteed to match - as shown in Figure 1. This reduces discontinuities in stress across joint boundaries. For blocks with very bad geometries, zoning may fail in some blocks. In this case you can use the alternate
to relax the constraint and allow mismatched gridpoints across faces. Note that this will result in stress concentrations at these boundaries.
Even though the gridpoints will always match across joints, faces may not. It is possible to have matching gridpoints and mismatched faces (see Figure 2). For this reason, it is recommended to have at least two zones across each dimension (see Figure 3). Alternatively, the new zone generation algorithms (New Zoning Commands) always ensure matching gridpoints AND faces.
The analysis of large models can also be aided by using the block zone generate center
command, which is a variation of the block zone generate edgelength
command. This command allows the sizes of the tetrahedral zones to be increased gradually, outward from a central point. There still must be a constant zone size within each block. This command is particularly useful in conjunction with the block create tunnel
command.
New Zoning Commands
New zoning algorithms were added in Version 7 to address some of the shortcomings described above. These can be accessed with the block zone generate-new
command. This is often preceded by the block zone size
command, which is used to specify desired zone sizes in different parts of the model prior to zoning. Unlike the block zone generate edgelength
command, the block zone generate-new
command can only be given once. Zone sizes are specified with keywords in this command, or previously with block zone size
commands. Examples are given below.
Specifying Edge Length
With block zone generate-new
, we can specify the global parameters for the whole model such as the range for zone size (max-edge
, min-edge
) and the gradation (gradation-surface
, gradation-volume
). By defaut, the zone size is equal to one-tenth the diagonal length of the model as shown in the example below.
block create brick 0 1
block zone generate-new
We can set the mean edge length in the whole model by setting only max-edge or min-edge:
block create brick 0 1
block zone generate-new max-edge 0.5
The block zone size
command is used to specify the ‘local’ zone size. We can specify the zone size for different parts in the model. Note that unlike the edgelength
command, if the block zone size
command is given multiple times for the same range, then the last one wins. This is consistent with how all of the other 3DEC commands work. Note also that the gridpoints (and faces) will match across joint boundaries as shown in the figure below.
block create brick 0 1
block densify segment 2
block zone size edge 0.1 range pos-z 0.5 1
block zone size edge 0.3 range pos-z 0 0.5
block zone generate-new min-edge 0.1 max-edge 0.3
Non-Uniform Edge Length
Like the block zone generate
command, the zone size can be made to increase gradually from the center as shown. However, unlike the block zone generate center
comand, it is not necessary to split the model into separate blocks. The zone sizes can vary within a single block as shown:
block create brick -5 5 -1 1 -5 5
block zone size center 0,0,0 distance-1 0 edge-1 0.1 distance-2 5 edge-2 1
block zone generate-new min-edge 0.1 max-edge 1
Isolated Points
It is also possible to specify the zone size near a particular gridpoint with the isolated-point
keyword as shown. The gradient-surface
keyword dictates the rate at which the zone size on the surfaces increases away from the specified point. A larger number means a faster gradation.
block create brick 0 1
block zone size isolated-point 0 0 0 edge 0.01
block zone generate-new min-edge 0.01 max-edge 0.2 grad-surface 0.5
This also works if a point is specified inside of the block (not at a gridpoint).
block create brick 0 1
block zone size isolated-point 0.5 0.5 0.5 edge 0.01
block zone generate-new min-edge 0.01 max-edge 0.2 grad-surface 0.5
Using the “by” keyword
The block zone size
command behaves differently depending on the element type following by
keyword in the range:
by block-gridpoint
: specify zone size for gridpoints in the range;by block-bface
: specify zone size on faces in the range;by block
: specify zone size inside blocks in the range (this is the default if no element is specified).
Note that for faces, you need to use by block-bface
rather than by block-face
. This refers to the original block faces before they are triangulated.
An example is given below.
block create brick 0 1
block create brick 2 3 0 1 0 1
block create brick 4 5 0 1 0 1
; In the first block, the zone size is uniform and equal to 0.2
block zone size edge 0.2 range pos-x 0 1
; In the second block, the zone size near the top face is set to 0.05
block zone size edge 0.05 range pos-x 2 3 pos-z 1 by block-bface
; In the third block, the zone size near the bottom left corner is set to 0.05
block zone size edge 0.05 range pos-x 4 pos-z 0 by block-gridpoint
;Now we set the zone size range for the whole model
block zone generate-new min-edge 0.05 max-edge 0.2
block create brick -5 5 -5.0 5.0 -5 5
block cut joint-set spacing 1 ; bedding
block cut joint-set dip 60 dip-direction 270 origin 1.5 0 0
block face group 'hf' range plane dip 60 dip-direction 270 origin 1.5 0 0 dist 0.1
; small zones on the hydraulic fracture planes
block zone size edge 0.25 range group 'hf' by block-bface
block zone generate-new min-edge 0.25 max-edge 1
In version 9, by default 5 control points are placed along each edge to ensure a constant zone size across the face. The same model run in Version 9 is shown in Figure 12
The mesh can be improved further by adding more control points. If the last command is replaced with the following, then the mesh in Figure 13 results.
block zone generate-new min-edge 0.25 max-edge 1 num-control-point 10
Zoning Failure
The new zoning algorithms are less robust than the old logic. For blocks with very back geometries (face angles < 1^circle) it will fail to zone the blocks. In this case the only choice is to delete bad blocks and try again, or use the old logic. See Block Quality Metrics #blockmetrics for information on finding bad blocks.
The old zoning logic may also occasionally fail for bad block geometries. Here are some possible solutions:
Specify a smaller zone size for the blocks that did not zone with another
block zone generate edgelength
command.Split the blocks that did not zone using
block cut
commands and rezone. The rangedeformable not
is useful for identifying the unzoned blocks.Delete the blocks that did not zone. This is generally only recommended for large-strain problems where the gaps will close.
Leave the unzoned blocks as rigid. Note that you cannot assign zone constitutive models or properties to these blocks.
Was this helpful? ... | Itasca Software © 2024, Itasca | Updated: Aug 13, 2024 |