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 #importingandmerging 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 #zonegeneration-new).

Zones are not generatred until edge lengths have been specified for ALL blocks. Once zones have been generated, subcontacts are also created. Constitutitve 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 seg 10 10 5 join
block create brick -4 4 -4 4 0 4

block zone generate edgelength 0.5 range pos-x -8 8 pos-y -8 8 pos-z -4 4
; defining an edge length over a region that has already been assigned an edge length
;   will not overwrite the previously assigned edge length.
block zone generate edgelength 1 range pos-x -16 16 pos-y -16 16 pos-z -8 0
block zone generate edgelength 2
../../../../../_images/zonegen1.png

Figure 1: Example of zoning with different edge sizes in different blocks.

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 geomtries, 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 recoommended to have at least two zones across each dimension (see Figure 3). Alternatively, the new zone generation algorithms (New Zoning Commands #zonegeneration-new) always ensure matching gridpoints AND faces.

../../../../../_images/zonegen2.png

Figure 2: Example of mismatched faces in 2 zoned blocks. The top block is translated upwards and 5 sides made transparent for ease of viewing.

../../../../../_images/zonegen3.png

Figure 3: Example of matched faces when there are at least 2 zones across the block dimension.

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.

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
../../../../../_images/newzoning1.png

Figure 4: Zoning of block with new zoning algorithms using default parameters.

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
../../../../../_images/newzoning2.png

Figure 5: Zoning of 1x1x1 m block with new zoning algorithms specifying an edge length of 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 :kwd:block.zone.generate.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
../../../../../_images/newzoning3.png

Figure 6: Zoning blocks with different zone sizes in different regions.

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
../../../../../_images/newzoning4.png

Figure 7: Zoning a block with zone size increaing from the center (cross section shown).

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
../../../../../_images/newzoning5.png

Figure 8: Zoning a block with zone size specified at a gridpoint.

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
../../../../../_images/newzoning6.png

Figure 9: Zoning a block with zone size specified at a location inside of the block.

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-face: 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).

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-face
; 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
../../../../../_images/newzoning7.png

Figure 10: Example showing different ways to specify zone size.