CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
gennactdofinv.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine gennactdofinv (nactdof, nactdofinv, nk, mi, nodorig, ipkon, lakon, kon, ne)
 

Function/Subroutine Documentation

◆ gennactdofinv()

subroutine gennactdofinv ( integer, dimension(0:mi(2),*)  nactdof,
integer, dimension(*)  nactdofinv,
integer  nk,
integer, dimension(*)  mi,
integer, dimension(*)  nodorig,
integer, dimension(*)  ipkon,
character*8, dimension(*)  lakon,
integer, dimension(*)  kon,
integer  ne 
)
21 !
22 ! inverting field nactdof, i.e. creating field nactdofinv
23 ! listing the node for each independent dof. For expanded
24 ! 2-D structures this is the original 2-D node. Field
25 ! nactdofinv is used for the messages listing the node in
26 ! which the actual deviation or residual force is maximum
27 !
28  implicit none
29 !
30  character*8 lakon(*),lakonl
31 !
32  integer mi(*),nactdof(0:mi(2),*),nactdofinv(*),nk,nodorig(*),
33  & ipkon(*),i,j,l,ne,indexe,node2d,node3d,indexe2d,node2(4,2),
34  & node3(8,3),node6(3,6),node8(3,8),kon(*),mt,jmax
35 !
36  data node3 /1,4,8,5,12,20,16,17,9,11,15,13,
37  & 0,0,0,0,2,3,7,6,10,19,14,18/
38  data node2 /1,4,8,5,2,3,7,6/
39  data node6 /1,13,4,2,14,5,3,15,6,7,0,10,8,0,11,9,0,12/
40  data node8 /1,17,5,2,18,6,3,19,7,4,20,8,9,0,13,10,0,14,
41  & 11,0,15,12,0,16/
42 !
43 ! initialization of nodorig (node-original)
44 !
45  do i=1,nk
46  nodorig(i)=i
47  enddo
48 !
49 ! replacing the 3-D nodes by their 2-D equivalents for 1d/2d
50 ! structures
51 !
52  do i=1,ne
53  if(ipkon(i).lt.0) cycle
54  lakonl=lakon(i)
55  if((lakonl(7:7).eq.' ').or.(lakonl(7:7).eq.'I').or.
56  & (lakonl(1:1).ne.'C')) cycle
57  indexe=ipkon(i)
58 !
59  if((lakonl(4:5).eq.'15').or.(lakonl(4:4).eq.'6')) then
60 !
61 ! 3-noded or 6-noded 2D element
62 !
63  if(lakonl(4:5).eq.'15') then
64  indexe2d=indexe+15
65  jmax=6
66  elseif(lakonl(4:4).eq.'6') then
67  indexe2d=indexe+6
68  jmax=3
69  endif
70  do j=1,jmax
71  node2d=kon(indexe2d+j)
72  node3d=kon(indexe+node6(1,j))
73  nodorig(node3d)=node2d
74  nodorig(node3d+1)=node2d
75  nodorig(node3d+2)=node2d
76  enddo
77  elseif(lakonl(7:7).eq.'B') then
78 !
79 ! 2-noded or 3-noded beam element
80 !
81  if(lakonl(4:5).eq.'8I') then
82  indexe2d=indexe+11
83  jmax=2
84  elseif(lakonl(4:5).eq.'8R') then
85  indexe2d=indexe+8
86  jmax=2
87  elseif(lakonl(4:5).eq.'20') then
88  indexe2d=indexe+20
89  jmax=3
90  endif
91 !
92 ! 2-noded beam element
93 !
94  if(jmax.eq.2) then
95  do j=1,2
96  node2d=kon(indexe2d+j)
97  do l=1,4
98  if(node3(l,j).ne.0) then
99  node3d=kon(indexe+node2(l,j))
100  nodorig(node3d)=node2d
101  endif
102  enddo
103  enddo
104  else
105 !
106 ! 3-noded beam element
107 !
108  do j=1,3
109  node2d=kon(indexe2d+j)
110  do l=1,8
111  if(node3(l,j).ne.0) then
112  node3d=kon(indexe+node3(l,j))
113  nodorig(node3d)=node2d
114  endif
115  enddo
116  enddo
117  endif
118  else
119 !
120 ! 4-noded or 8-noded 2D element
121 !
122  if(lakonl(4:5).eq.'8I') then
123  indexe2d=indexe+11
124  jmax=4
125 c elseif(lakonl(4:5).eq.'8R') then
126  elseif(lakonl(4:4).eq.'8') then
127  indexe2d=indexe+8
128  jmax=4
129  elseif(lakonl(4:5).eq.'20') then
130  indexe2d=indexe+20
131  jmax=8
132  endif
133  do j=1,jmax
134  node2d=kon(indexe2d+j)
135  node3d=kon(indexe+node8(1,j))
136  nodorig(node3d)=node2d
137  nodorig(node3d+1)=node2d
138  nodorig(node3d+2)=node2d
139  enddo
140  endif
141  enddo
142 !
143 ! storing the nodes (in C convention, i.e. starting with 0)
144 ! in field nactdofinv
145 !
146  mt=mi(2)+1
147  do i=1,nk
148  do j=0,mi(2)
149  if(nactdof(j,i).le.0) cycle
150  nactdofinv(nactdof(j,i))=(nodorig(i)-1)*mt+j
151  enddo
152  enddo
153 !
154  return
Hosted by OpenAircraft.com, (Michigan UAV, LLC)