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

Go to the source code of this file.

Functions/Subroutines

subroutine genadvecelem (inodesd, ipkon, ne, lakon, kon, nload, sideload, nelemload, nkon, network)
 

Function/Subroutine Documentation

◆ genadvecelem()

subroutine genadvecelem ( integer, dimension(*)  inodesd,
integer, dimension(*)  ipkon,
integer  ne,
character*8, dimension(*)  lakon,
integer, dimension(*)  kon,
integer  nload,
character*20, dimension(*)  sideload,
integer, dimension(2,*)  nelemload,
integer  nkon,
integer  network 
)
21 !
22 ! generates elements simulating advection between network
23 ! elements and structural faces
24 !
25  implicit none
26 !
27  character*8 lakon(*)
28  character*20 sideload(*)
29 !
30  integer inodesd(*),nnodesd,ipkon(*),ne,i,j,indexe,node,id,kon(*),
31  & nload,ifaceq(8,6),ifacet(6,4),ifacew1(4,5),ifacew2(8,5),
32  & nodef(8),nelemload(2,*),nope,jface,k,nopes,nkon,nelem,
33  & nface,network
34 !
35 ! nodes per face for hex elements
36 !
37  data ifaceq /4,3,2,1,11,10,9,12,
38  & 5,6,7,8,13,14,15,16,
39  & 1,2,6,5,9,18,13,17,
40  & 2,3,7,6,10,19,14,18,
41  & 3,4,8,7,11,20,15,19,
42  & 4,1,5,8,12,17,16,20/
43 !
44 ! nodes per face for tet elements
45 !
46  data ifacet /1,3,2,7,6,5,
47  & 1,2,4,5,9,8,
48  & 2,3,4,6,10,9,
49  & 1,4,3,8,10,7/
50 !
51 ! nodes per face for linear wedge elements
52 !
53  data ifacew1 /1,3,2,0,
54  & 4,5,6,0,
55  & 1,2,5,4,
56  & 2,3,6,5,
57  & 3,1,4,6/
58 !
59 ! nodes per face for quadratic wedge elements
60 !
61  data ifacew2 /1,3,2,9,8,7,0,0,
62  & 4,5,6,10,11,12,0,0,
63  & 1,2,5,4,7,14,10,13,
64  & 2,3,6,5,8,15,11,14,
65  & 3,1,4,6,9,13,12,15/
66 !
67 ! catalogueing the nodes belonging to "Dx"-elements (specific
68 ! network elements, for which "D" is followed by some
69 ! specification such as restrictor or vortex)
70 !
71  nnodesd=0
72  do i=1,ne
73  if(ipkon(i).lt.0) cycle
74 cccc
75 c if(lakon(i)(1:2).ne.'D ') cycle
76  if(lakon(i)(1:1).ne.'D') cycle
77  if((lakon(i)(2:2).eq.' ').or.(network.eq.1)) cycle
78 cccc
79  indexe=ipkon(i)
80  do j=1,3,2
81  node=kon(indexe+j)
82  if(node.eq.0) cycle
83  call nident(inodesd,node,nnodesd,id)
84  if(id.gt.0) then
85  if(inodesd(id).eq.node) cycle
86  endif
87  nnodesd=nnodesd+1
88  do k=nnodesd,id+2,-1
89  inodesd(k)=inodesd(k-1)
90  enddo
91  inodesd(id+1)=node
92  enddo
93  enddo
94 !
95 ! check whether forced convection film condition has generic
96 ! network nodes as sink nodes
97 !
98  do i=1,nload
99  if((sideload(i)(1:1).eq.'F').and.
100  & (sideload(i)(3:4).eq.'FC')) then
101  node=nelemload(2,i)
102  call nident(inodesd,node,nnodesd,id)
103  if(id.gt.0) then
104  if(inodesd(id).eq.node) cycle
105  endif
106  nelem=nelemload(1,i)
107  indexe=ipkon(nelem)
108  if(indexe.lt.0) cycle
109 !
110 ! new advection element is generated
111 !
112  ne=ne+1
113  ipkon(ne)=nkon
114  lakon(ne)(1:7)='ESPRNGF'
115  read(sideload(i)(2:2),'(i1)') jface
116 !
117  if(lakon(nelem)(4:4).eq.'2') then
118  nopes=8
119  nface=6
120  elseif(lakon(nelem)(4:4).eq.'8') then
121  nopes=4
122  nface=6
123  elseif(lakon(nelem)(4:5).eq.'10') then
124  nopes=6
125  nface=4
126  elseif(lakon(nelem)(4:4).eq.'4') then
127  nopes=3
128  nface=4
129  elseif(lakon(nelem)(4:5).eq.'15') then
130  if(jface.le.2) then
131  nopes=6
132  else
133  nopes=8
134  endif
135  nface=5
136  nope=15
137  elseif(lakon(nelem)(4:4).eq.'6') then
138  if(jface.le.2) then
139  nopes=3
140  else
141  nopes=4
142  endif
143  nface=5
144  nope=6
145  else
146  cycle
147  endif
148 !
149 ! determining the nodes of the face
150 !
151  if(nface.eq.4) then
152  do k=1,nopes
153  nodef(k)=kon(indexe+ifacet(k,jface))
154  enddo
155  elseif(nface.eq.5) then
156  if(nope.eq.6) then
157  do k=1,nopes
158  nodef(k)=kon(indexe+ifacew1(k,jface))
159  enddo
160  elseif(nope.eq.15) then
161  do k=1,nopes
162  nodef(k)=kon(indexe+ifacew2(k,jface))
163  enddo
164  endif
165  elseif(nface.eq.6) then
166  do k=1,nopes
167  nodef(k)=kon(indexe+ifaceq(k,jface))
168  enddo
169  endif
170 !
171  do k=1,nopes
172  kon(nkon+k)=nodef(k)
173  enddo
174  nkon=nkon+nopes+1
175  kon(nkon)=node
176 !
177  write(lakon(ne)(8:8),'(i1)') nopes
178 !
179 ! copying the loading
180 !
181  nload=nload+1
182  nelemload(1,nload)=ne
183 !
184 ! pointer to the original load
185 !
186  nelemload(2,nload)=i
187  sideload(nload)=' '
188 !
189 ! deactivating the original load
190 !
191  sideload(i)(1:1)=' '
192 !
193  endif
194  enddo
195 !
196  return
subroutine nident(x, px, n, id)
Definition: nident.f:26
Hosted by OpenAircraft.com, (Michigan UAV, LLC)