1!$Id:$
2      subroutine pnumbl(ndm,nr,ns,nt,ntyp, nf,ng, flag)
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      implicit  none
10
11      logical   flag
12      integer   ndm,nr,ns,nt,ntyp,nf,ng
13
14      save
15
16!     Check the 2-D types
17
18      if(ntyp.lt.10) then
19        if(flag) then
20          ng = nr + 1
21          if(ns.eq.1) then
22            nf = nr
23          else
24            nf = nr/2
25          endif
26          nr = nr + 1
27        else
28          if (ntyp.eq.0) then              !  4-node quadrilateral
29            nf = nr*ns
30          elseif (abs(ntyp).eq.7) then     !  6/7-node triangles
31            nf = (nr*ns)/2
32          elseif (ntyp.ge.8) then          !  8/9-node quadrilateral
33            nf = (nr*ns)/4
34          elseif (ntyp.lt.0) then          !  4-node crossed triangles
35            nf = 4*nr*ns
36          else                             !  3-node triangles
37            nf = 2*nr*ns
38          endif
39
40!         Determine last node number to be generated
41
42          nr = nr + 1
43          ns = ns + 1
44          if(ndm.eq.1) ns = 1
45          ng = nr*ns
46          if(ntyp.eq. -7) then            !  7-node triangles
47            ng = ng + (nr-1)*(ns-1)/2
48          elseif(ntyp .eq. -1) then       !  3-node crossed triangles
49            ng = ng + (nr-1)*(ns-1)
50          elseif(ntyp .eq.  8) then       !  8-node quadrilaterals
51            ng = ng - ((nr-1)*(ns-1))/4
52          endif
53        endif
54
55!     3-d generations
56
57      elseif(ntyp.lt.20) then
58        if(ntyp.eq.11) then               !  4-node tetrahedron
59          nf = nr*ns*nt*6
60          ng = (nr+1)*(ns+1)*(nt+1)
61        else                              !  8-node hexahedron
62          nf = nr*ns*nt
63          ng = (nr+1)*(ns+1)*(nt+1)
64        endif
65
66!     Shell:
67
68      elseif(ntyp.lt.30) then
69        if (ntyp.eq.20) then
70          nf = nr*ns
71        elseif (ntyp.eq.27) then
72          nf = (nr*ns)/2
73        elseif (ntyp.ge.28) then
74          nf = (nr*ns)/4
75        else
76          nf = 2*nr*ns
77        endif
78
79!       Determine last node number to be generated
80
81        ng = (nr+1)*(ns+1)
82
83!     Line:
84
85      elseif(ntyp.lt.40) then
86        if(ns.ge.1) then
87          nf = nr/ns
88        else
89          nf = nr
90        endif
91
92        ng = nr + 1
93
94      endif
95
96      end
97