1!$Id:$
2      subroutine vblke(nr,ns,nt,ix,ni,ne,nf,nen1,mat,ntyp,dlayer,ilr)
3
4!      * * F E A P * * A Finite Element Analysis Program
5
6!....  Copyright (c) 1984-2017: Regents of the University of California
7!                               All rights reserved
8
9!-----[--.----+----.----+----.-----------------------------------------]
10!      Purpose: Generate a block of 3-d 8-node brick elements
11
12!      Inputs:
13!         nr        - Number elements in 1-local coordinate dir.
14!         ns        - Number elements in 2-local coordinate dir.
15!         nt        - Number elements in 3-local coordinate dir.
16!         ni        - Initial node number for block
17!         ne        - Initial element number for block
18!         nf        - Final   element number for block
19!         nen1      - Dimension of ix array
20!         mat       - Material set number for block
21!         ntyp      - Element type for generations
22!                     10: 8-node hexahedral  elements
23!                     11: 4-node tetrahedral elements
24
25!      Outputs:
26!         ix(*)     - Element nodal connection list for block
27!-----[--.----+----.----+----.-----------------------------------------]
28
29      implicit  none
30
31      include  'cdata.h'
32      include  'cdat2.h'
33      include  'iofile.h'
34      include  'trdata.h'
35
36      integer   ni,nf,ne,nen1,mat,ma,ntyp
37      integer   nr,ns,nt,nrs,i,j,k,l,m,n,dlayer
38
39      integer   ix(nen1,*),iq(8),it(4),ilr(*),nd(8),itc(4,6)
40
41      save
42
43      data      itc / 1,2,4,5, 2,3,4,8, 2,4,5,8,
44     &                2,6,3,8, 3,6,7,8, 5,6,2,8 /
45
46!     Check generation order
47
48      do i = 1,4
49        it(i) = i
50      end do ! i
51      if(trdet.gt.0.0d0) then
52        do i = 1,8
53          iq(i  ) = i
54        end do ! i
55      else
56        do i = 1,4
57          iq(i+4) = i
58          iq(i  ) = i+4
59        end do ! i
60        i     = it(2)
61        it(2) = it(3)
62        it(3) = i
63      endif
64
65      nrs   = nr*ns
66      nd(1) = -1
67      nd(2) =  0
68      nd(3) =  nr
69      nd(4) =  nr - 1
70      nd(5) =  nrs - 1
71      nd(6) =  nrs
72      nd(7) =  nrs + nr
73      nd(8) =  nrs + nr - 1
74
75!     Compute element connections
76
77      if(dlayer.ge.0) then
78        ma = mat
79      endif
80      nf = ne - 1
81      do k = 1,nt-1
82        if(dlayer.eq.3) then
83          ma = ilr(k)
84        endif
85        do j = 1,ns-1
86          if(dlayer.eq.2) then
87            ma = ilr(j)
88          endif
89          n = nr*(j-1 + ns*(k-1)) + ni
90          do i = 1,nr-1
91            if(dlayer.eq.1) then
92              ma = ilr(i)
93            endif
94            n = n + 1
95
96!           Hexahedral  elements
97
98            if(ntyp.eq.10) then
99              nf = nf + 1
100              ix(nen1,nf)  = ma
101              ix(nen+7,nf) = netyp
102              ix(nen+8,nf) = 1
103              do m = 1,8
104                ix(iq(m),nf) = n + nd(m)
105              end do ! m
106
107!           Tetrahedral elements
108
109            elseif(ntyp.eq.11) then
110              do l = 1,6
111                nf = nf + 1
112                ix(nen1,nf)  = ma
113                ix(nen+7,nf) = netyp
114                ix(nen+8,nf) = 1
115                do m = 1,4
116                  ix(it(m),nf) = n + nd(itc(m,l))
117                end do ! m
118              end do ! l
119            endif
120
121          end do ! i
122        end do ! j
123      end do ! k
124
125      end
126