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

Go to the source code of this file.

Functions/Subroutines

subroutine cataloguenodes (iponofa, inofa, ifreefa, ielfa, ifabou, ipkon, konf, lakon, nface, nk)
 

Function/Subroutine Documentation

◆ cataloguenodes()

subroutine cataloguenodes ( integer, dimension(*)  iponofa,
integer, dimension(2,*)  inofa,
integer  ifreefa,
integer, dimension(4,*)  ielfa,
integer, dimension(*)  ifabou,
integer, dimension(*)  ipkon,
integer, dimension(*)  konf,
character*8, dimension(*)  lakon,
integer  nface,
integer  nk 
)
21 !
22 ! catalogues the nodes for interpolation
23 !
24  implicit none
25 !
26  character*8 lakon(*)
27 !
28  integer iponofa(*),inofa(2,*),ifreefa,ielfa(4,*),indexb,nk,
29  & ifabou(*),iel,indexe,ipkon(*),k,node,ifaceq(8,6),nface,i,j,
30  & konf(*),ifacet(7,4),ifacew(8,5),nf(5)
31 !
32 ! nodes belonging to the cell faces
33 !
34  data ifaceq /4,3,2,1,11,10,9,12,
35  & 5,6,7,8,13,14,15,16,
36  & 1,2,6,5,9,18,13,17,
37  & 2,3,7,6,10,19,14,18,
38  & 3,4,8,7,11,20,15,19,
39  & 4,1,5,8,12,17,16,20/
40  data ifacet /1,3,2,7,6,5,11,
41  & 1,2,4,5,9,8,12,
42  & 2,3,4,6,10,9,13,
43  & 1,4,3,8,10,7,14/
44  data ifacew /1,3,2,9,8,7,0,0,
45  & 4,5,6,10,11,12,0,0,
46  & 1,2,5,4,7,14,10,13,
47  & 2,3,6,5,8,15,11,14,
48  & 4,6,3,1,12,15,9,13/
49  data nf /3,3,4,4,4/
50 !
51  ifreefa=0
52 !
53 ! taking into account the walls (first priority)
54 !
55  do i=1,nface
56  indexb=ielfa(2,i)
57  if(indexb.ge.0) cycle
58 c if(ifabou(-indexb+5).eq.1) then
59  if(ifabou(-indexb+5).gt.0) then
60  iel=ielfa(1,i)
61  indexe=ipkon(iel)
62  j=ielfa(4,i)
63 !
64  if(lakon(iel)(4:4).eq.'8') then
65  do k=1,4
66  node=konf(indexe+ifaceq(k,j))
67  if(iponofa(node).eq.0) then
68  ifreefa=ifreefa+1
69  iponofa(node)=ifreefa
70  inofa(1,ifreefa)=i
71  elseif(iponofa(node).gt.0) then
72  ifreefa=ifreefa+1
73  inofa(2,ifreefa)=iponofa(node)
74  inofa(1,ifreefa)=i
75  iponofa(node)=ifreefa
76  endif
77  enddo
78  elseif(lakon(iel)(4:4).eq.'6') then
79  do k=1,nf(j)
80  node=konf(indexe+ifacew(k,j))
81  if(iponofa(node).eq.0) then
82  ifreefa=ifreefa+1
83  iponofa(node)=ifreefa
84  inofa(1,ifreefa)=i
85  elseif(iponofa(node).gt.0) then
86  ifreefa=ifreefa+1
87  inofa(2,ifreefa)=iponofa(node)
88  inofa(1,ifreefa)=i
89  iponofa(node)=ifreefa
90  endif
91  enddo
92  else
93  do k=1,3
94  node=konf(indexe+ifacet(k,j))
95  if(iponofa(node).eq.0) then
96  ifreefa=ifreefa+1
97  iponofa(node)=ifreefa
98  inofa(1,ifreefa)=i
99  elseif(iponofa(node).gt.0) then
100  ifreefa=ifreefa+1
101  inofa(2,ifreefa)=iponofa(node)
102  inofa(1,ifreefa)=i
103  iponofa(node)=ifreefa
104  endif
105  enddo
106  endif
107  endif
108  enddo
109 !
110 ! marking the nodes used so far by putting a minus sign in front
111 !
112  do i=1,nk
113  if(iponofa(i).gt.0) iponofa(i)=-iponofa(i)
114  enddo
115 !
116 ! taking into account the nodes at which all velocity
117 ! components are prescribed (second priority)
118 !
119  do i=1,nface
120  indexb=ielfa(2,i)
121  if(indexb.ge.0) cycle
122  if((ifabou(-indexb+1).ne.0).and.
123  & (ifabou(-indexb+2).ne.0).and.
124  & (ifabou(-indexb+3).ne.0)) then
125  iel=ielfa(1,i)
126  indexe=ipkon(iel)
127  j=ielfa(4,i)
128 !
129  if(lakon(iel)(4:4).eq.'8') then
130  do k=1,4
131  node=konf(indexe+ifaceq(k,j))
132  if(iponofa(node).eq.0) then
133  ifreefa=ifreefa+1
134  iponofa(node)=ifreefa
135  inofa(1,ifreefa)=i
136  elseif(iponofa(node).gt.0) then
137  ifreefa=ifreefa+1
138  inofa(2,ifreefa)=iponofa(node)
139  inofa(1,ifreefa)=i
140  iponofa(node)=ifreefa
141  endif
142  enddo
143  elseif(lakon(iel)(4:4).eq.'6') then
144  do k=1,nf(j)
145  node=konf(indexe+ifacew(k,j))
146  if(iponofa(node).eq.0) then
147  ifreefa=ifreefa+1
148  iponofa(node)=ifreefa
149  inofa(1,ifreefa)=i
150  elseif(iponofa(node).gt.0) then
151  ifreefa=ifreefa+1
152  inofa(2,ifreefa)=iponofa(node)
153  inofa(1,ifreefa)=i
154  iponofa(node)=ifreefa
155  endif
156  enddo
157  else
158  do k=1,3
159  node=konf(indexe+ifacet(k,j))
160  if(iponofa(node).eq.0) then
161  ifreefa=ifreefa+1
162  iponofa(node)=ifreefa
163  inofa(1,ifreefa)=i
164  elseif(iponofa(node).gt.0) then
165  ifreefa=ifreefa+1
166  inofa(2,ifreefa)=iponofa(node)
167  inofa(1,ifreefa)=i
168  iponofa(node)=ifreefa
169  endif
170  enddo
171  endif
172  endif
173  enddo
174 !
175 ! marking the nodes used so far by putting a minus sign in front
176 !
177  do i=1,nk
178  if(iponofa(i).gt.0) iponofa(i)=-iponofa(i)
179  enddo
180 !
181 ! taking into account the nodes in which the pressure is
182 ! prescribed (third priority)
183 !
184  do i=1,nface
185  indexb=ielfa(2,i)
186  if(indexb.ge.0) cycle
187  if(ifabou(-indexb+4).ne.0) then
188  iel=ielfa(1,i)
189  indexe=ipkon(iel)
190  j=ielfa(4,i)
191 !
192  if(lakon(iel)(4:4).eq.'8') then
193  do k=1,4
194  node=konf(indexe+ifaceq(k,j))
195  if(iponofa(node).eq.0) then
196  ifreefa=ifreefa+1
197  iponofa(node)=ifreefa
198  inofa(1,ifreefa)=i
199  elseif(iponofa(node).gt.0) then
200  ifreefa=ifreefa+1
201  inofa(2,ifreefa)=iponofa(node)
202  inofa(1,ifreefa)=i
203  iponofa(node)=ifreefa
204  endif
205  enddo
206  elseif(lakon(iel)(4:4).eq.'6') then
207  do k=1,nf(j)
208  node=konf(indexe+ifacew(k,j))
209  if(iponofa(node).eq.0) then
210  ifreefa=ifreefa+1
211  iponofa(node)=ifreefa
212  inofa(1,ifreefa)=i
213  elseif(iponofa(node).gt.0) then
214  ifreefa=ifreefa+1
215  inofa(2,ifreefa)=iponofa(node)
216  inofa(1,ifreefa)=i
217  iponofa(node)=ifreefa
218  endif
219  enddo
220  else
221  do k=1,3
222  node=konf(indexe+ifacet(k,j))
223  if(iponofa(node).eq.0) then
224  ifreefa=ifreefa+1
225  iponofa(node)=ifreefa
226  inofa(1,ifreefa)=i
227  elseif(iponofa(node).gt.0) then
228  ifreefa=ifreefa+1
229  inofa(2,ifreefa)=iponofa(node)
230  inofa(1,ifreefa)=i
231  iponofa(node)=ifreefa
232  endif
233  enddo
234  endif
235  endif
236  enddo
237 !
238 ! marking the nodes used so far by putting a minus sign in front
239 !
240  do i=1,nk
241  if(iponofa(i).gt.0) iponofa(i)=-iponofa(i)
242  enddo
243 !
244 ! taking into account faces with given mass flow (fourth priority)
245 !
246  do i=1,nface
247  indexb=ielfa(2,i)
248  if(indexb.ge.0) cycle
249 c if(ifabou(-indexb+5).eq.2) then
250  if(ifabou(-indexb+5).lt.0) then
251  iel=ielfa(1,i)
252  indexe=ipkon(iel)
253  j=ielfa(4,i)
254 !
255  if(lakon(iel)(4:4).eq.'8') then
256  do k=1,4
257  node=konf(indexe+ifaceq(k,j))
258  if(iponofa(node).eq.0) then
259  ifreefa=ifreefa+1
260  iponofa(node)=ifreefa
261  inofa(1,ifreefa)=i
262  elseif(iponofa(node).gt.0) then
263  ifreefa=ifreefa+1
264  inofa(2,ifreefa)=iponofa(node)
265  inofa(1,ifreefa)=i
266  iponofa(node)=ifreefa
267  endif
268  enddo
269  elseif(lakon(iel)(4:4).eq.'6') then
270  do k=1,nf(j)
271  node=konf(indexe+ifacew(k,j))
272  if(iponofa(node).eq.0) then
273  ifreefa=ifreefa+1
274  iponofa(node)=ifreefa
275  inofa(1,ifreefa)=i
276  elseif(iponofa(node).gt.0) then
277  ifreefa=ifreefa+1
278  inofa(2,ifreefa)=iponofa(node)
279  inofa(1,ifreefa)=i
280  iponofa(node)=ifreefa
281  endif
282  enddo
283  else
284  do k=1,3
285  node=konf(indexe+ifacet(k,j))
286  if(iponofa(node).eq.0) then
287  ifreefa=ifreefa+1
288  iponofa(node)=ifreefa
289  inofa(1,ifreefa)=i
290  elseif(iponofa(node).gt.0) then
291  ifreefa=ifreefa+1
292  inofa(2,ifreefa)=iponofa(node)
293  inofa(1,ifreefa)=i
294  iponofa(node)=ifreefa
295  endif
296  enddo
297  endif
298  endif
299  enddo
300 !
301 ! marking the nodes used so far by putting a minus sign in front
302 !
303  do i=1,nk
304  if(iponofa(i).gt.0) iponofa(i)=-iponofa(i)
305  enddo
306 !
307 ! taking into account the rest (last priority)
308 !
309  do i=1,nface
310  indexb=ielfa(2,i)
311  iel=ielfa(1,i)
312  indexe=ipkon(iel)
313  j=ielfa(4,i)
314 !
315  if(lakon(iel)(4:4).eq.'8') then
316  do k=1,4
317  node=konf(indexe+ifaceq(k,j))
318  if(iponofa(node).eq.0) then
319  ifreefa=ifreefa+1
320  iponofa(node)=ifreefa
321  inofa(1,ifreefa)=i
322  elseif(iponofa(node).gt.0) then
323  ifreefa=ifreefa+1
324  inofa(2,ifreefa)=iponofa(node)
325  inofa(1,ifreefa)=i
326  iponofa(node)=ifreefa
327  endif
328  enddo
329  elseif(lakon(iel)(4:4).eq.'6') then
330  do k=1,nf(j)
331  node=konf(indexe+ifacew(k,j))
332  if(iponofa(node).eq.0) then
333  ifreefa=ifreefa+1
334  iponofa(node)=ifreefa
335  inofa(1,ifreefa)=i
336  elseif(iponofa(node).gt.0) then
337  ifreefa=ifreefa+1
338  inofa(2,ifreefa)=iponofa(node)
339  inofa(1,ifreefa)=i
340  iponofa(node)=ifreefa
341  endif
342  enddo
343  else
344  do k=1,3
345  node=konf(indexe+ifacet(k,j))
346  if(iponofa(node).eq.0) then
347  ifreefa=ifreefa+1
348  iponofa(node)=ifreefa
349  inofa(1,ifreefa)=i
350  elseif(iponofa(node).gt.0) then
351  ifreefa=ifreefa+1
352  inofa(2,ifreefa)=iponofa(node)
353  inofa(1,ifreefa)=i
354  iponofa(node)=ifreefa
355  endif
356  enddo
357  endif
358  enddo
359 !
360 ! removing all markings
361 !
362  do i=1,nk
363  if(iponofa(i).lt.0) iponofa(i)=-iponofa(i)
364  enddo
365 !
366  return
Hosted by OpenAircraft.com, (Michigan UAV, LLC)