59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "com04_c.inc"
67#include "scr03_c.inc"
68#include "kincod_c.inc"
69
70
71
72 INTEGER IK,NODE,IDIR,ISK,IKINE(*),IKINE1(*)
73
74
75
76 CHARACTER*200
77 CHARACTER*20 DIRECT
78 CHARACTER(LEN=NCHARLINE) :: ERR_CATEGORY_TMP
79
80 INTEGER JWARN, ISKWT, ISKWR, ITRAN, IROTA, NK,
81 . JDIR(7), KDIR(7,3),LTYPE, LTYPEB, LDIRECT
82 INTEGER JWARN1, ISKWT1, ISKWR1, ITRAN1, IROTA1
83
84 DATA jdir/1,2,4,1,2,4,7/
85 DATA kdir/1,0,1,0,1,0,1,
86 . 0,1,1,0,0,1,1,
87 . 0,0,0,1,1,1,1/
88
89 jwarn = 0
90
91 err_category_tmp=err_category
92 err_category='KINEMATIC CONDITIONS'
93
94 IF(idir<=3)THEN
95
96 iskwt = ikine(1+numnod)/10
97 itran = ikine(1+numnod) - 10*iskwt
98 IF(itran==0)THEN
99
100 ikine(1+numnod) = jdir(idir)+10*isk
101 ELSEIF(iskwt==isk.AND.kdir(itran,idir)==0)THEN
102
103 ikine(1+numnod) = ikine(1+numnod)+jdir(idir)
104 ELSEIF(kdir(itran,idir)==0)THEN
105 jwarn = 1
106 ikine(1+numnod) = ikine(1+numnod)+jdir(idir)
107 ELSEIF(iskwt==isk)THEN
108
109 jwarn = 1
110 ELSE
111 jwarn = 1
112 ENDIF
113 ELSEIF(idir<=6)THEN
114
115 iskwr = ikine(1+2*numnod)/10
116 irota = ikine(1+2*numnod) - 10*iskwr
117 IF(irota==0)THEN
118
119 ikine(1+2*numnod) = jdir(idir)+10*isk
120 ELSEIF(iskwr==isk.AND.kdir(irota,idir-3)==0)THEN
121
122 ikine(1+2*numnod) = ikine(1+2*numnod)+jdir(idir)
123 ELSEIF(kdir(irota,idir-3)==0)THEN
124 jwarn = 1
125 ikine(1+2*numnod) = ikine(1+2*numnod)+jdir(idir)
126 ELSEIF(iskwr==isk)THEN
127
128 jwarn = 1
129 ELSE
130 jwarn = 1
131 ENDIF
132 ELSE
133
134 iskwt = ikine(1+ numnod)/10
135 iskwr = ikine(1+2*numnod)/10
136 itran = ikine(1+ numnod) - 10*iskwt
137 irota = ikine(1+2*numnod) - 10*iskwr
138 IF(itran/=0.AND.itran/=7.OR.irota/=0.AND.irota/=7) THEN
139 jwarn = 1
140 ikine(1+ numnod) = ikine(1+ numnod)+jdir(idir)
141 ikine(1+2*numnod) = ikine(1+2*numnod)+jdir(idir)
142 ELSE
143 ikine(1+ numnod) = ikine(1+ numnod)+jdir(idir)
144 ikine(1+2*numnod) = ikine(1+2*numnod)+jdir(idir)
145 ENDIF
146 ENDIF
147
148
149
150
151 jwarn1 = 0
152
153 IF(idir<=3)THEN
154
155 iskwt1 = ikine1(1+numnod)/10
156 itran1 = ikine1(1+numnod) - 10*iskwt1
157 IF(itran1==0)THEN
158
159 ikine1(1+numnod) = jdir(idir)+10*isk
160 ELSEIF(iskwt1==isk.AND.kdir(itran1,idir)==0)THEN
161
162 ikine1(1+numnod) = ikine1(1+numnod)+jdir(idir)
163 ELSEIF(kdir(itran1,idir)==0)THEN
164 jwarn1 = 1
165 ikine1(1+numnod) = ikine1(1+numnod)+jdir(idir)
166 ELSEIF(iskwt1==isk)THEN
167
168 jwarn1 = 1
169 ELSE
170 jwarn1 = 1
171 ENDIF
172 ELSEIF(idir<=6)THEN
173
174 iskwr1 = ikine1(1+2*numnod)/10
175 irota1 = ikine1(1+2*numnod) - 10*iskwr1
176 IF(irota1==0)THEN
177
178 ikine1(1+2*numnod) = jdir(idir)+10*isk
179 ELSEIF(iskwr1==isk.AND.kdir(irota1,idir-3)==0)THEN
180
181 ikine1(1+2*numnod) = ikine1(1+2*numnod)+jdir(idir)
182 ELSEIF(kdir(irota1,idir-3)==0)THEN
183 jwarn1 = 1
184 ikine1(1+2*numnod) = ikine1(1+2*numnod)+jdir(idir)
185 ELSEIF(iskwr1==isk)THEN
186
187 jwarn1 = 1
188 ELSE
189 jwarn1 = 1
190 ENDIF
191 ELSE
192
193 iskwt1 = ikine1(1+ numnod)/10
194 iskwr1 = ikine1(1+2*numnod)/10
195 itran1 = ikine1(1+ numnod) - 10*iskwt1
196 irota1 = ikine1(1+2*numnod) - 10*iskwr1
197 IF(itran1/=0.AND.itran1/=7.OR.irota1/=0
198 . .AND.irota1/=7) THEN
199 jwarn1 = 1
200 ikine1(1+ numnod) = ikine1(1+ numnod)+jdir(idir)
201 ikine1(1+2*numnod) = ikine1(1+2*numnod)+jdir(idir)
202 ELSE
203 ikine1(1+ numnod) = ikine1(1+ numnod)+jdir(idir)
204 ikine1(1+2*numnod) = ikine1(1+2*numnod)+jdir(idir
205 ENDIF
206 ENDIF
207
208
209
210
211
212
213
214
215 IF (jwarn1 == 1) THEN
216 IF(ik==1)THEN
217 IF(ibc(ikine(1))== 1 .AND. ibc(ikine(1+3*numnod))== 0)
218 . ikine(1+3*numnod) = ikine(1+3*numnod) + 1
219 ELSEIF(ik==2)THEN
220 IF(itf(ikine(1))== 1 .AND. itf(ikine(1+3*numnod))== 0)
221 . ikine(1+3*numnod) = ikine(1+3*numnod) + 2
222 ELSEIF(ik==4)THEN
223 IF(iwl(ikine(1))== 1 .AND. iwl(ikine(1+3*numnod))== 0)
224 . ikine(1+3*numnod) = ikine(1+3*numnod) + 4
225 ELSEIF(ik==8)THEN
226 IF(irb(ikine(1))== 1 .AND. irb(ikine(1+3*numnod))== 0)
227 . ikine(1+3*numnod) = ikine(1+3*numnod) + 8
228 ELSEIF(ik==16)THEN
229 IF(ivf(ikine(1))== 1 .AND. ivf(ikine(1+3*numnod))== 0)
230 . ikine(1+3*numnod) = ikine(1+3*numnod) + 16
231 ELSEIF(ik==32)THEN
232 IF(irv(ikine(1))== 1 .AND. irv(ikine(1+3*numnod))== 0)
233 . ikine(1+3*numnod) = ikine(1+3*numnod) + 32
234 ELSEIF(ik==64)THEN
235 IF(ijo(ikine(1))== 1 .AND. ijo(ikine(1+3*numnod))== 0)
236 . ikine(1+3*numnod) = ikine(1+3*numnod) + 64
237 ELSEIF(ik==128)THEN
238 IF(irb2(ikine(1))== 1 .AND. irb2(ikine(1+3*numnod))== 0)
239 . ikine(1+3*numnod) = ikine(1+3*numnod) + 128
240 ELSEIF(ik==256)THEN
241 IF(irbm(ikine(1))== 1 .AND. irbm(ikine(1+3*numnod))== 0)
242 . ikine(1+3*numnod) = ikine(1+3*numnod) + 256
243 ELSEIF(ik==512)THEN
244 IF(ilmult(ikine(1))==1.AND.ilmult(ikine(1+3*numnod))==0)
245 . ikine(1+3*numnod) = ikine(1+3*numnod) + 512
246 ELSEIF(ik==1024)THEN
247 IF(irlk(ikine(1))== 1 .AND. irlk(ikine(1+3*numnod))== 0)
248 . ikine(1+3*numnod) = ikine(1+3*numnod) + 1024
249 ELSEIF(ik==2048)THEN
250 IF(ikrbe2(ikine(1))==1.AND.ikrbe2(ikine(1+3*numnod))== 0)
251 . ikine(1+3*numnod) = ikine(1+3*numnod) + 2048
252 ELSEIF(ik==4096)THEN
253 IF(ikrbe3(ikine(1))==1.AND.ikrbe3(ikine(1+3*numnod))== 0)
254 . ikine(1+3*numnod) = ikine(1+3*numnod) + 4096
255 ENDIF
256 ENDIF
257
258
259
260
261
262
263
264 IF(ik==1)THEN
265 IF(ibc(ikine(1))==0 .AND. ibc(ikine(1+4*numnod))==0
266 . .AND. jwarn==1)
267 . ikine(1+4*numnod) = ikine(1+4*numnod) + 1
268 ELSEIF(ik==2)THEN
269 IF(itf(ikine(1))==0 .AND. itf(ikine(1+4*numnod))==0
270 . .AND. jwarn==1)
271 . ikine(1+4*numnod) = ikine(1+4*numnod) + 2
272 ELSEIF(ik==4)THEN
273 IF(iwl(ikine(1))==0 .AND. iwl(ikine(1+4*numnod))==0
274 . .AND. jwarn==1)
275 . ikine(1+4*numnod) = ikine(1+4*numnod) + 4
276 ELSEIF(ik==8)THEN
277 IF(irb(ikine(1))==0 .AND. irb(ikine(1+4*numnod))==0
278 . .AND. jwarn==1)
279 . ikine(1+4*numnod) = ikine(1+4*numnod) + 8
280 ELSEIF(ik==16)THEN
281 IF(ivf(ikine(1))==0 .AND. ivf(ikine(1+4*numnod))==0
282 . .AND. jwarn==1)
283 . ikine(1+4*numnod) = ikine(1+4*numnod) + 16
284 ELSEIF(ik==32)THEN
285 IF(irv(ikine(1))==0 .AND. irv(ikine(1+4*numnod))==0
286 . .AND. jwarn==1)
287 . ikine(1+4*numnod) = ikine(1+4*numnod) + 32
288 ELSEIF(ik==64)THEN
289 IF(ijo(ikine(1))==0 .AND. ijo(ikine(1+4*numnod))==0
290 . .AND. jwarn==1)
291 . ikine(1+4*numnod) = ikine(1+4*numnod) + 64
292 ELSEIF(ik==128)THEN
293 IF(irb2(ikine(1))==0 .AND. irb2(ikine(1+4*numnod))==0
294 . .AND. jwarn==1)
295 . ikine(1+4*numnod) = ikine(1+4*numnod) + 128
296 ELSEIF(ik==256)THEN
297 IF(irbm(ikine(1))==0 .AND. irbm(ikine(1+4*numnod))==0
298 . .AND. jwarn==1)
299 . ikine(1+4*numnod) = ikine(1+4*numnod) + 256
300 ELSEIF(ik==512)THEN
301 IF(ilmult(ikine(1))==0 .AND. ilmult(ikine(1+4*numnod))==0
302 . .AND. jwarn==1)
303 . ikine(1+4*numnod)=ikine(1+4*numnod) + 512
304 ELSEIF(ik==1024)THEN
305 IF(irlk(ikine(1))==0 .AND. irlk(ikine(1+4*numnod))==0
306 . .AND. jwarn==1)
307 . ikine(1+4*numnod)=ikine(1+4*numnod) + 1024
308 ELSEIF(ik==2048)THEN
309 IF(ikrbe2(ikine(1))==0 .AND. ikrbe2(ikine(1+4*numnod))==0
310 . .AND. jwarn==1)
311 . ikine(1+4*numnod)=ikine(1+4*numnod) + 2048
312 ELSEIF(ik==4096)THEN
313 IF(ikrbe3(ikine(1))==0 .AND. ikrbe3(ikine(1+4*numnod))==0
314 . .AND. jwarn==1)
315 . ikine(1+4*numnod)=ikine(1+4*numnod) + 4096
316 ENDIF
317
318 IF(ik==1)THEN
319 IF(ibc(ikine(1))==0)ikine(1) = ikine(1) + 1
320 ELSEIF(ik==2)THEN
321 IF(itf(ikine(1))==0)ikine(1) = ikine(1) + 2
322 ELSEIF(ik==4)THEN
323 IF(iwl(ikine(1))==0)ikine(1) = ikine(1) + 4
324 ELSEIF(ik==8)THEN
325 IF(irb(ikine(1))==0)ikine(1) = ikine(1) + 8
326 ELSEIF(ik==16)THEN
327 IF(ivf(ikine(1))==0)ikine(1) = ikine(1) + 16
328 ELSEIF(ik==32)THEN
329 IF(irv(ikine(1))==0)ikine(1) = ikine(1) + 32
330 ELSEIF(ik==64)THEN
331 IF(ijo(ikine(1))==0)ikine(1) = ikine(1) + 64
332 ELSEIF(ik==128)THEN
333 IF(irb2(ikine(1))==0)ikine(1) = ikine(1) + 128
334 ELSEIF(ik==256)THEN
335 IF(irbm(ikine(1))==0)ikine(1) = ikine(1) + 256
336 ELSEIF(ik==512)THEN
337 IF(ilmult(ikine(1))==0)ikine(1)=ikine(1) + 512
338 ELSEIF(ik==1024)THEN
339 IF(irlk(ikine(1))==0)ikine(1)=ikine(1) + 1024
340 ELSEIF(ik==2048)THEN
341 IF(ikrbe2(ikine(1))==0)ikine(1)=ikine(1) + 2048
342 ELSEIF(ik==4096)THEN
343 IF(ikrbe3(ikine(1))==0)ikine(1)=ikine(1) + 4096
344 ENDIF
345
346 nk = ibc(ikine(1))+itf(ikine(1))+iwl(ikine(1))+
347 . irb(ikine(1))+irb2(ikine(1))+
348 . ivf(ikine(1))+irv(ikine(1))+ijo(ikine(1))+
349 . irbm(ikine(1))+ilmult(ikine(1))+irlk(ikine(1))+
350 . ikrbe2(ikine(1))+ikrbe3(ikine(1))
351 IF(nk==1)nk=2
352
353 IF (iwl(ikine(1))/=1 .OR. irb(ikine(1))/=1) THEN
354 kwarn = kwarn + jwarn
355 ENDIF
356
357 IF(jwarn==1)THEN
358
359 ltype = 0
360 TYPE = ' '
361
362
363
364 IF(ibc(ikine(1))==1) THEN
365 ltypeb = 20
366 TYPE((LTYPE+1):(LTYPE+1+LTYPEB)) = '-BOUNDARY CONDITION'
367 ltype = ltype + ltypeb
368 ENDIF
369 IF(itf(ikine(1))==1) THEN
370 ltypeb = 27
371 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))=
372 . '-INTERFACE TYPE 1 2 12 OR 9'
373 ltype = ltype + ltypeb
374 ENDIF
375 IF(iwl(ikine(1))==1) THEN
376 ltypeb = 12
377 TYPE((LTYPE+1):(LTYPE+1+LTYPEB)) = '-rigid wall'
378 LTYPE = LTYPE + LTYPEB
379 ENDIF
380 IF(IRB(IKINE(1))==1) THEN
381 LTYPEB = 12
382 TYPE((LTYPE+1):(LTYPE+1+LTYPEB)) = '-rigid body'
383 LTYPE = LTYPE + LTYPEB
384 ENDIF
385 IF(IRB2(IKINE(1))==1) THEN
386 LTYPEB = 12
387 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-rigid body'
388 LTYPE = LTYPE + LTYPEB
389 ENDIF
390 IF(IVF(IKINE(1))==1) THEN
391 LTYPEB = 29
392 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))=
394 LTYPE = LTYPE + LTYPEB
395 ENDIF
396 IF(IRV(IKINE(1))==1) THEN
397 LTYPEB = 7
398 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-rivet'
399 LTYPE = LTYPE + LTYPEB
400 ENDIF
401 IF(IJO(IKINE(1))==1) THEN
402 LTYPEB = 19
403 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-cylindrical joint'
404 LTYPE = LTYPE + LTYPEB
405 ENDIF
406 IF(IRBM(IKINE(1))==1) THEN
407 LTYPEB = 23
408 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-imposed body
velocity'
409 LTYPE = LTYPE + LTYPEB
410 ENDIF
411 IF(ILMULT(IKINE(1))==1) THEN
412 LTYPEB = 22
413 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-lagrange multipliers'
414 LTYPE = LTYPE + LTYPEB
415 ENDIF
416 IF(IRLK(IKINE(1))==1) THEN
417 LTYPEB =12
418 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-rigid link'
419 LTYPE = LTYPE + LTYPEB
420 ENDIF
421 IF(IKRBE2(IKINE(1))==1) THEN
422 LTYPEB =6
423 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-rbe2'
424 LTYPE = LTYPE + LTYPEB
425 ENDIF
426 IF(IKRBE3(IKINE(1))==1) THEN
427 LTYPEB =6
428 TYPE((LTYPE+1):(LTYPE+1+LTYPEB))='-rbe3'
429 LTYPE = LTYPE + LTYPEB
430 ENDIF
431
432 IF (IDIR == 1) THEN
433 DIRECT = 'translation x'
434 LDIRECT = 13
435 ELSE IF (IDIR == 2) THEN
436 DIRECT = 'translation y'
437 LDIRECT = 13
438 ELSE IF (IDIR == 3) THEN
439 DIRECT = 'translation z'
440 LDIRECT = 13
441 ELSE IF (IDIR == 4) THEN
442 DIRECT = 'rotation x'
443 LDIRECT = 10
444 ELSE IF (IDIR == 5) THEN
445 DIRECT = 'rotation y'
446 LDIRECT = 10
447 ELSE IF (IDIR == 6) THEN
448 DIRECT = 'rotation z'
449 LDIRECT = 10
450 ELSE
451 DIRECT = 'unknown'
452 LDIRECT = 7
453 ENDIF
454
455.OR..AND. IF ((IWL(IKINE(1))/=1 IRB(IKINE(1))/=1)
456 . IPRI >= 5) THEN
457
458
459 CALL ANCMSG(MSGID=147,
460 . MSGTYPE=MSGWARNING,
461 . ANMODE=ANINFO_BLIND_2,
462 . I1=NK,
463 . I2=NODE,
464 . C1= DIRECT,
465 . C2= TYPE)
466
467 ENDIF
468 ENDIF
469
470 ERR_CATEGORY=ERR_CATEGORY_TMP
471
472 RETURN
integer, parameter ncharline
subroutine velocity(a, ar, v, vr, fzero, itab, nale)