The objective is to stack quad surfaces into a hex mesh then convert each hex element into 5 tets using
grid2grid/hextotet5
Use of hex2tet5 to convert a 3D mesh to a tetrahedral mesh will in general result in a non-Delaunay tetrahedral mesh. If the ultimate goal is a Delaunay mesh, use the connect command, see Examples at connect 3D and connect 2D.
Input Stacked Hex Mesh Output Hex to 5 Tet Mesh
#--* LAGriT Example Input file
#--* Create a non-convex hex and use grid2grid
#----------------------------------------------
# Use x coordinates to compute z based on cos()
# spacing near .25
define / XMAX / 9.5
define / YMAX / 1.
define / NX / 40
define / NY / 5
#-------------------------------------------------
# Create the quad mesh with wave topology
# this is the template used for all surfaces
cmo / create / mosurf / / / quad
quadxy /NX NY/0. 0. 0./ XMAX 0. 0./XMAX YMAX 0./0. YMAX 0./ 1 1 1
createpts/brick/xyz/NX,NY,1/1 0 0 / connect
cmo / setatt / mosurf / imt / 1 0 0 / 1
cmo / setatt / mosurf / itetclr / 1 0 0 / 1
resetpts / itp
math/cos/mosurf/zic/1,0,0/mosurf/xic
dump / surf_wave.inp / mosurf
dump / surf_wave.gmv / mosurf
cmo / printatt / mosurf / -xyz- / minmax
#-------------------------------------------------
# make layers for for input into stack
# top is wave, bottom is flat
define ZBOT 0.
# translate surfaces for vertical spacing
define S1 2.
define S2 .8
define S3 1.5
cmo select mosurf
trans /1,0,0/ 0. 0. 0./ 0. 0. S1
dump / surf_wave_low.inp / mosurf
trans /1,0,0/ 0. 0. 0./ 0. 0. S2
dump / surf_wave_high.inp / mosurf
trans /1,0,0/ 0. 0. 0./ 0. 0. S3
dump / surf_wave_top.inp / mosurf
cmo/setatt/mosurf/ zic/ ZBOT
dump / surf_flat_bot.inp / mosurf
#-------------------------------------------------
# Stack layers from bottom to top wave
cmo/create/mo_stack
stack/layers/avs/ &
surf_flat_bot.inp 1 &
surf_wave_low.inp 2 3 &
surf_wave_high.inp 3 2 &
surf_wave_top.inp 3 3
dump gmv tmp_stack_layers.gmv mo_stack
cmo/printatt/mo_stack/ -xyz- minmax
# connect statcked surfaces into 3D elements
stack/fill/mohex / mo_stack
cmo select mohex
resetpts itp
# write information about this mesh object
cmo/printatt/mohex/-xyz- minmax
quality
# check hex volumes
cmo/addatt/mohex/volume hex_vol
cmo/printatt/mohex/hex_vol minmax
eltset/ ebad / hex_vol/le 0.
dump hex_stack.inp mohex
dump hex_stack.gmv mohex
#-------------------------------------------------
# convert each hex to 5 tetrahedrals
cmo/select/mohex
grid2grid/ hextotet5/ motet5 / mohex
resetpts/itp
cmo/select/motet5
# report mesh statistics
quality
cmo/addatt/motet5/volume/tet_vol
cmo/addatt/motet5/voronoi_volume/vor_vol
cmo/printatt/motet5/ -all- minmax
finish
The mesh statistics show positive volumes for all elements and acceptable aspect ratios. The voronoi volumes for each mesh node are positive but there are many negative coupling coeficients. The impact of these coupling coeficients will depend on the simulation being used.
# report mesh statistics quality epsilonl, epsilonaspect: 2.4256785E-12 1.4272489E-35 -------------------------------------------- elements with aspect ratio < .01: 0 elements with aspect ratio b/w .01 and .02: 0 elements with aspect ratio b/w .02 and .05: 0 elements with aspect ratio b/w .05 and .1 : 0 elements with aspect ratio b/w .1 and .2 : 0 elements with aspect ratio b/w .2 and .5 : 2332 elements with aspect ratio b/w .5 and 1. : 6248 min aspect ratio = 0.2881E+00 max aspect ratio = 0.9995E+00 epsilonvol: 1.1179946E-11 --------------------------------------- element volumes b/w 0.2538E-02 and 0.3629E-02: 2672 element volumes b/w 0.3629E-02 and 0.5190E-02: 2992 element volumes b/w 0.5190E-02 and 0.7421E-02: 1572 element volumes b/w 0.7421E-02 and 0.1061E-01: 1056 element volumes b/w 0.1061E-01 and 0.1517E-01: 288 min volume = 2.5381908E-03 max volume = 1.5173843E-02 ----------------------------------------------------------- 8580 total elements evaluated. AMatbld3d_stor: *****Negative Coefficients ****** AMatbld3d_stor: Total Number of Negative Coefficients 4706 AMatbld3d_stor: Number of Significant Negative Coefs 4706 AMatbld3d_stor: Number of 'zero' (< 10e-8 *max) coefs 0 Negative coef at row 2 Column 41 with value -4.1720408E-05 Negative coef at row 2 Column 43 with value -3.5374846E-04 Negative coef at row 2 Column 201 with value -1.8519331E-03 Negative coef at row 2 Column 242 with value -3.8554407E-04 AMatbld3d_stor: npoints = 2400 ncoefs = 26874 AMatbld3d_stor: Number of unique coefs = 14637 AMatbld3d_stor: Maximum num. connections to a node = 19 AMatbld3d_stor: Volume min = 1.6435114E-04 AMatbld3d_stor: Volume max = 5.3887416E-02 AMatbld3d_stor: Total Volume: 4.0775221E+01 AMatbld3d_stor: abs(Aij/xij) min = 0.0000000E+00 AMatbld3d_stor: abs(Aij/xij) max = 8.6219865E-01 AMatbld3d_stor: (Aij/xij) max = 1.9116418E-01 AMatbld3d_stor: (Aij/xij) min = -8.6219865E-01 AMatbld3d_stor Matrix coefficient values stored as scalar area/distance AMatbld3d_stor Matrix compression used for graph, not coefficient values motet5 attribute with voronoi volumes created with name vor_vol cmo/printatt/motet5/-all- minmax ATTRIBUTE NAME MIN MAX DIFFERENCE LENGTH -def- 0.000000000E+00 0.000000000E+00 0.000000000E+00 2400 scalar 1 1 0 1 vector 3 3 0 1 nnodes 2400 2400 0 1 nedges 0 0 0 1 nfaces 0 0 0 1 nelements 8580 8580 0 1 mbndry 16000000 16000000 0 1 ndimensions_topo 3 3 0 1 ndimensions_geom 3 3 0 1 nodes_per_element 4 4 0 1 edges_per_element 6 6 0 1 faces_per_element 4 4 0 1 isetwd 0 0 0 2400 ialias 0 0 0 2400 imt1 1 3 2 2400 itp1 0 12 12 2400 icr1 0 0 0 2400 isn1 0 0 0 2400 xic 0.000000000E+00 9.500000000E+00 9.500000000E+00 2400 yic 0.000000000E+00 1.000000000E+00 1.000000000E+00 2400 zic 0.000000000E+00 5.300000000E+00 5.300000000E+00 2400 xtetwd 0 0 0 8580 itetclr 1 3 2 8580 itettyp 5 5 0 8580 itetoff 0 34316 34316 8580 jtetoff 0 34316 34316 8580 itet 1 2400 2399 8580x4 jtet 1 16024947 16024946 8580x4 epsilon 1.000000004E-15 1.000000004E-15 0.000000000E+00 1 epsilonl 2.425678519E-12 2.425678519E-12 0.000000000E+00 1 epsilona 2.649880315E-11 2.649880315E-11 0.000000000E+00 1 epsilonv 1.117994586E-11 1.117994586E-11 0.000000000E+00 1 ipointi 1 1 0 1 ipointj 2400 2400 0 1 idebug 0 0 0 1 itypconv_sm 1 1 0 1 maxiter_sm 25 25 0 1 tolconv_sm 1.000000000E+00 1.000000000E+00 0.000000000E+00 1 nnfreq 1 1 0 1 ivoronoi 1 1 0 1 iopt2to2 2 2 0 1 xmin 0.000000000E+00 0.000000000E+00 0.000000000E+00 1 ymin 0.000000000E+00 0.000000000E+00 0.000000000E+00 1 zmin 0.000000000E+00 0.000000000E+00 0.000000000E+00 1 xmax 9.500000000E+00 9.500000000E+00 0.000000000E+00 1 ymax 1.000000000E+00 1.000000000E+00 0.000000000E+00 1 zmax 5.300000000E+00 5.300000000E+00 0.000000000E+00 1 kdtree_level 0 0 0 1 max_number_sets 64 64 0 1 number_of_psets 0 0 0 1 number_of_eltsets 0 0 0 1 number_of_fsets 0 0 0 1 layertyp -2 2 4 2400 nlayers 12 12 0 1 nnperlayer 200 200 0 1 neperlayer 156 156 0 1 hex_vol 0.000000000E+00 4.552152812E-02 4.552152812E-02 8580 tet_vol 2.538190758E-03 1.517384271E-02 1.263565195E-02 8580 vor_vol 1.643511423E-04 5.388741581E-02 5.372306467E-02 2400 ccoef -1.911641805E-01 0.000000000E+00 1.911641805E-01 2400 ij_ccoef 0 2399 2399 2400