43
44
45
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com01_c.inc"
55#include "com04_c.inc"
56#include "scry_c.inc"
57#include "sphcom.inc"
58
59
60
61 INTEGER IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),IXTG(NIXTG,*)
62 INTEGER INDEX(*),ITRI(*),KXSP(*),KSYSUSR(*)
63 INTEGER PTSHEL(*),PTSH3N(*),PTSOL(*),PTQUAD(*),PTSPH(*),PTSPRI(*),PTBEAM(*),PTTRUSS(*)
64 INTEGER NSIGI,NSIGSH,NSIGS, NSIGSPH, , NSIGBEAM, NSIGTRUSS, KSIGSH3
65 INTEGER ID_SIGSH(*), ID_SOLID_SIGI(*), ID_QUAD_SIGI(*)
66 INTEGER ID_SIGSPRI(*), ID_SIGBEAM(*), ID_SIGTRUSS(*)
67 INTEGER WORK(*)
69 . sigi(nsigs,*),sigsh(
max(1,nsigsh),*),sigtruss(nsigtruss,*),
70 . sigsp(nsigi,*),sigsph(nsigsph,*),sigrs(nsigrs,*),sigbeam(nsigbeam,*)
71
72 INTEGER, INTENT(INOUT) :: ID_SIGSPHCEL(NUMSPH)
73 LOGICAL, INTENT(IN) :: IS_STATE
74
75
76
77 INTEGER I, J, K
78 INTEGER ISYS,JSYS,II,IE,JE,COMPT,NUMSHEL0
79
81 INTEGER UEL2SYS
82
83 IF (abs(isigi) == 3.OR.abs(isigi) == 4.OR.abs(isigi) == 5) THEN
84
85
86
87 numshel0 = numshel
88 IF(numshel>0)THEN
89
90
91 DO isys = 1, numshel
92 itri(isys) =id_sigsh(isys)
93 END DO
95
96 isys = index(1)
97 ie = id_sigsh(isys)
98 DO j = 2, numshel
99 jsys=index(j)
100
101 IF(je == ie)THEN
102 DO k=2,nsigsh
103 IF(sigsh(k,jsys)/=zero)THEN
104 IF(sigsh(k,isys)/=zero.AND.
105 . sigsh(k,isys)/=sigsh(k,jsys))THEN
107 . msgtype=msgerror,
108 . anmode=aninfo_blind_1
109 . i1=ie)
110 ELSE
111 sigsh(k,isys)=sigsh(k,jsys)
112 END IF
113 END IF
114 END DO
115 sigsh(1,jsys)=zero
116 id_sigsh(jsys)=0
117 ELSE
118 ie =je
119 isys=jsys
120 END IF
121 END DO
122 compt=0
123 DO j=1,numshel
124 ie=id_sigsh(j)
125 IF(ie/=0)THEN
126 compt=compt+1
127 IF(compt<j)THEN
128 DO k=1,nsigsh
129 sigsh(k,compt)=sigsh(k,j)
130 END DO
131 id_sigsh(compt)=id_sigsh(j)
132
133 sigsh(1,j)=zero
134 id_sigsh(j)=0
135 END IF
136 END IF
137 END DO
138 numshel=compt
139 ENDIF
140
141 IF(numshel>0)THEN
142
143
144 DO isys = 1,numshel
145 itri(isys) = id_sigsh(isys)
146 END DO
147 CALL my_orders(0,work,itri,index,numshel,1)
148 DO j = 1, numshel
149 isys=index(j)
150 ksysusr(j)=id_sigsh(isys)
151 ksysusr(numshel+j)=isys
152 END DO
153
154
155 DO i=1,numelc
156 isys=
uel2sys(ixc(nixc,i),ksysusr,numshel)
157 ptshel(i) =isys
158 END DO
159 ENDIF
160
161
162
163 IF(numsh3n>0)THEN
164
165 DO isys = 1, numsh3n
166 ii= numshel0 + isys
167 itri(isys) = id_sigsh(ii)
168 END DO
169 CALL my_orders(0,work,itri,index,numsh3n,1)
170
171 isys = numshel0 + index(1)
172 ie = id_sigsh(isys)
173 DO j = 2, numsh3n
174 jsys=numshel0+index(j)
175 je =id_sigsh(jsys)
176 IF(je == ie)THEN
177 DO k=2,nsigsh
178 IF(sigsh(k,jsys)/=zero)THEN
179 IF(sigsh(k,isys)/=zero.AND.
180 . sigsh(k,isys)/=sigsh(k,jsys))THEN
182 . msgtype=msgerror,
183 . anmode=aninfo_blind_1,
184 . i1=ie)
185 ELSE
186 sigsh(k,isys)=sigsh(k,jsys)
187 END IF
188 END IF
189 END DO
190 sigsh(1,jsys)=zero
191 id_sigsh(jsys)=0
192 ELSE
193 ie =je
194 isys=jsys
195 END IF
196 END DO
197 compt=0
198 DO j=1,numsh3n
199 ie=id_sigsh(numshel0 + j)
200 IF(ie /=0 )THEN
201 compt=compt+1
202 IF(numshel+compt<numshel0+j)THEN
203 DO k=1,nsigsh
204 sigsh(k,numshel+compt)=sigsh(k,numshel0+j)
205 END DO
206 id_sigsh(numshel+compt)=id_sigsh(numshel0+j)
207
208 sigsh(1,numshel0+j)=zero
209 id_sigsh(numshel0+j)=0
210 END IF
211 END IF
212 END DO
213 numsh3n=compt
214 END IF
215
216 IF (numsh3n > 0) THEN
217
218 DO isys = 1, numsh3n
219 ii = isys + numshel0
220 itri(isys) = id_sigsh(ii)
221 END DO
222 CALL my_orders(0,work,itri,index,numsh3n,1)
223
224 DO j = 1, numsh3n
225 isys = index(j)
226 ii = isys + numshel0
227 ksysusr(j) = id_sigsh(ii)
228 ksysusr(numsh3n + j) = isys
229 END DO
230
231
232 DO i=1,numeltg
233 isys =
uel2sys(ixtg(nixtg,i),ksysusr,numsh3n)
234 ptsh3n(i) = isys
235 END DO
236 ENDIF
237
238
239
240 IF(numsol>0)THEN
241
242
243 DO isys = 1, numsol
244 itri(isys) = id_solid_sigi(isys)
245 END DO
246 CALL my_orders(0,work,itri,index,numsol,1)
247
248
249 isys=index(1)
250 ie =id_solid_sigi(isys)
251 DO j = 2, numsol
252 jsys=index(j)
253 je =id_solid_sigi(jsys)
254 IF(je == ie)THEN
255 DO k=1,6
256 IF((sigi(k,jsys)/=zero) .AND.
257 . (sigi(k,isys)/=sigi(k,jsys)) )THEN
258 IF(sigi(k,isys)/=zero)THEN
260 . msgtype=msgerror,
261 . anmode=aninfo_blind_1,
262 . i1=ie)
263 ELSE
264 sigi(k,isys)=sigi(k,jsys)
265 END IF
266 END IF
267 END DO
268 DO k=8,10
269 IF(sigi(k,jsys)/=zero .AND.
270 . (sigi(k,isys)/=sigi(k,jsys)) )THEN
271 IF(sigi(k,isys)/=zero)THEN
273 . msgtype=msgerror,
274 . anmode=aninfo_blind_1,
275 . i1=ie)
276 ELSE
277 sigi(k,isys)=sigi(k,jsys)
278 END IF
279 END IF
280 END DO
281 DO k=1,nsigi
282 IF(sigsp(k,jsys)/=zero .AND.
283 . (sigsp(k,isys)/=sigsp(k,jsys)) )THEN
284 IF(sigsp(k,isys)/=zero)THEN
286 . msgtype=msgerror,
287 . anmode=aninfo_blind_1,
288 . i1=ie)
289 ELSE
290 sigsp(k,isys)=sigsp(k,jsys)
291 END IF
292 END IF
293 END DO
294 id_solid_sigi(jsys)=0
295 ELSE
296 ie =je
297 isys=jsys
298 END IF
299 END DO
300 compt=0
301 DO j=1,numsol
302 ie=id_solid_sigi(j)
303 IF(ie/=0)THEN
304 compt=compt+1
305 IF(compt<j)THEN
306 DO k=1,6
307 sigi(k,compt)=sigi(k,j)
308 END DO
309 id_solid_sigi(compt)=id_solid_sigi(j)
310 DO k=8,10
311 sigi(k,compt)=sigi(k,j)
312 END DO
313 DO k=1,nsigi
314 sigsp(k,compt)=sigsp(k,j)
315 END DO
316 id_solid_sigi(j)=0
317 END IF
318 END IF
319 END DO
320 numsol=compt
321 END IF
322
323 IF(numsol>0)THEN
324
325
326 DO isys = 1, numsol
327 itri(isys) = id_solid_sigi(isys)
328 END DO
329 CALL my_orders(0,work,itri,index,numsol,1)
330 DO j = 1, numsol
331 isys=index(j)
332 ksysusr(j)=id_solid_sigi(isys)
333 ksysusr(numsol+j)=isys
334 END DO
335
336
337 DO i=1,numels
338 isys=
uel2sys(ixs(nixs,i),ksysusr,numsol)
339 ptsol(i) =isys
340 END DO
341 END IF
342
343
344
345 IF(numquad>0)THEN
346
347
348 DO isys = 1, numquad
349 itri(isys) = id_quad_sigi(isys)
350 END DO
351 CALL my_orders(0,work,itri,index,numquad,1)
352
353
354 isys=index(1)
355 ie =id_quad_sigi(isys)
356 DO j = 2, numquad
357 jsys=index(j)
358 je =id_quad_sigi(jsys)
359 IF(je == ie)THEN
360 DO k=1,6
361 IF(sigi(k,jsys)/=zero)THEN
362 IF(sigi(k,isys)/=zero)THEN
364 . msgtype=msgerror,
365 . anmode=aninfo_blind_1,
366 . i1=ie)
367 ELSE
368 sigi(k,isys)=sigi(k,jsys)
369 END IF
370 END IF
371 END DO
372 DO k=8,10
373 IF(sigi(k,jsys)/=zero)THEN
374 IF(sigi(k,isys)/=zero)THEN
376 . msgtype=msgerror,
377 . anmode=aninfo_blind_1,
378 . i1=ie)
379 ELSE
380 sigi(k,isys)=sigi(k,jsys)
381 END IF
382 END IF
383 END DO
384 id_quad_sigi(jsys) = 0
385 ELSE
386 ie =je
387 isys=jsys
388 END IF
389 END DO
390 compt=0
391 DO j=1,numquad
392 ie=id_quad_sigi(j)
393 IF(ie/=0)THEN
394 compt=compt+1
395 IF(compt<j)THEN
396 DO k=1,6
397 sigi(k,compt)=sigi(k,j)
398 END DO
399 id_quad_sigi(compt)= id_quad_sigi(j)
400 DO k=8,10
401 sigi(k,compt)=sigi(k,j)
402 END DO
403 id_quad_sigi(j) = 0
404 END IF
405 END IF
406 END DO
407 numquad=compt
408 END IF
409
410 IF(numquad>0)THEN
411
412
413 DO isys = 1, numquad
414 itri(isys) = id_quad_sigi(isys)
415 END DO
416 CALL my_orders(0,work,itri,index,numquad,1)
417 DO j = 1, numquad
418 isys=index(j)
419 ksysusr(j)=id_quad_sigi(isys)
420 ksysusr(numquad+j)=isys
421 END DO
422
423
424 DO i=1,numelq
425 isys=
uel2sys(ixq(nixq,i),ksysusr,numquad)
426 ptquad(i) =isys
427 END DO
428 END IF
429
430 END IF
431
432
433
434 IF(numsphy>0 .AND. is_state)THEN
435
436 DO isys = 1, numsphy
437 itri(isys) = id_sigsphcel(isys)
438 END DO
439 CALL my_orders(0,work,itri,index,numsphy,1)
440
441 isys=index(1)
442 ie = id_sigsphcel(isys)
443
444 DO j = 2, numsphy
445 jsys=index(j)
446 je = id_sigsphcel(jsys)
447 IF (je == ie) THEN
448 DO k=1,nsigsph
449 IF (sigsph(k,jsys) /= zero) THEN
450 IF (sigsph(k,isys) /= zero .AND.
451 . sigsph(k,isys) /= sigsph(k,jsys)) THEN
453 . msgtype=msgerror,
454 . anmode=aninfo_blind_1,
455 . i1=ie)
456 ELSE
457 sigsph(k,isys)=sigsph(k,jsys)
458 ENDIF
459 ENDIF
460 ENDDO
461 sigsph(1,jsys)=zero
462 id_sigsphcel(jsys)=0
463 ELSE
464 ie =je
465 isys=jsys
466 ENDIF
467 ENDDO
468 compt=0
469 DO j=1,numsphy
470 ie = id_sigsphcel(j)
471 IF (ie /= 0) THEN
472 compt=compt+1
473 IF (compt < j) THEN
474 DO k=1,nsigsph
475 sigsph(k,compt)=sigsph(k,j)
476 ENDDO
477 id_sigsphcel(compt)=id_sigsphcel(j)
478 sigsph(1,j)=zero
479 id_sigsphcel(j)=0
480 ENDIF
481 ENDIF
482 ENDDO
483 numsphy=compt
484
485
486 ENDIF
487
488
489
490
491 IF (numsphy > 0) THEN
492
493 DO isys = 1, numsphy
494 IF(is_state) THEN
495 itri(isys) = id_sigsphcel(isys)
496 ELSE
497 itri(isys) = nint(sigsph(7,isys))
498 ENDIF
499 END DO
500 CALL my_orders(0,work,itri,index,numsphy,1)
501 DO j = 1, numsphy
502 isys=index(j)
503 IF(is_state) THEN
504 ksysusr(j) = id_sigsphcel(isys)
505 ELSE
506 ksysusr(j) = nint(sigsph(7,isys))
507 ENDIF
508 ksysusr(numsphy+j)=isys
509 END DO
510
511 DO i=1,numsph
512 isys=
uel2sys(kxsp(nisp*i),ksysusr,numsphy)
513 ptsph(i) =isys
514 END DO
515 END IF
516
517 IF (abs(isigi)<3) THEN
518 ksigsh3=1+numelc
519 ELSE
520 ksigsh3=1+numshel
521 END IF
522
523
524
525 IF (numspri > 0) THEN
526
527 inispri = 1
528
529 DO isys = 1, numspri
530 itri(isys) =id_sigspri(isys)
531 ENDDO
532 CALL my_orders(0,work,itri,index,numspri,1)
533
534 isys=index(1)
535 ie =id_sigspri(isys)
536 DO j = 2, numspri
537 jsys=index(j)
538 je =id_sigspri(jsys)
539 IF (je == ie) THEN
540 DO k=2,nsigrs
541 IF (sigrs(k,jsys) /= zero) THEN
542 IF (sigrs(k,isys) /= zero .AND.
543 . sigrs(k,isys) /= sigrs(k,jsys)) THEN
545 . msgtype=msgerror,
546 . anmode=aninfo_blind_1,
547 . i1=ie)
548 ELSE
549 sigrs(k,isys)=sigrs(k,jsys)
550 ENDIF
551 ENDIF
552 ENDDO
553 sigrs(1,jsys)=zero
554 id_sigspri(jsys)=0
555 ELSE
556 ie =je
557 isys=jsys
558 ENDIF
559 ENDDO
560 compt=0
561 DO j=1,numspri
562 ie=id_sigspri(j)
563 IF (ie /= 0) THEN
564 compt=compt+1
565 IF (compt < j) THEN
566 DO k=1,nsigrs
567 sigrs(k,compt)=sigrs(k,j)
568 ENDDO
569 id_sigspri(compt)=id_sigspri(j)
570 sigrs(1,j)=zero
571 id_sigspri(j)=0
572 ENDIF
573 ENDIF
574 ENDDO
575 numspri=compt
576 ENDIF
577
578 IF (numspri > 0) THEN
579
580 DO isys = 1, numspri
581 itri(isys) = id_sigspri(isys)
582 ENDDO
583 CALL my_orders(0,work,itri,index,numspri,1)
584 DO j = 1, numspri
585 isys=index(j)
586 ksysusr(j)=id_sigspri(isys)
587 ksysusr(numspri+j)=isys
588 ENDDO
589
590
591 DO i=1,numelr
592 isys=
uel2sys(ixr(nixr,i),ksysusr,numspri)
593 ptspri(i) =isys
594 ENDDO
595 ENDIF
596
597
598
599 IF (numbeam > 0) THEN
600
601 DO isys = 1, numbeam
602 itri(isys) =id_sigbeam(isys)
603 ENDDO
604 CALL my_orders(0,work,itri,index,numbeam,1)
605
606 isys=index(1)
607 ie =id_sigbeam(isys)
608 DO j = 2, numbeam
609 jsys=index(j)
610 je =id_sigbeam(jsys)
611 IF (je == ie) THEN
612 DO k=2,nsigbeam
613 IF (sigbeam(k,jsys) /= zero) THEN
614 IF (sigbeam(k,isys) /= zero .AND.
615 . sigbeam(k,isys) /= sigbeam(k,jsys)) THEN
617 . msgtype=msgerror,
618 . anmode=aninfo_blind_1,
619 . i1=ie)
620 ELSE
621 sigbeam(k,isys)=sigbeam(k,jsys)
622 ENDIF
623 ENDIF
624 ENDDO
625 sigbeam(1,jsys)=zero
626 id_sigbeam(jsys)=0
627 ELSE
628 ie =je
629 isys=jsys
630 ENDIF
631 ENDDO
632 compt=0
633 DO j=1,numbeam
634 ie=id_sigbeam(j)
635 IF (ie /= 0) THEN
636 compt=compt+1
637 IF (compt < j) THEN
638 DO k=1,nsigbeam
639 sigbeam(k,compt)=sigbeam(k,j)
640 ENDDO
641 id_sigbeam(compt)=id_sigbeam(j)
642 sigbeam(1,j)=zero
643 id_sigbeam(j)=0
644 ENDIF
645 ENDIF
646 ENDDO
647 numbeam=compt
648 ENDIF
649
650 IF (numbeam > 0) THEN
651
652 DO isys = 1, numbeam
653 itri(isys) = id_sigbeam(isys)
654 ENDDO
655 CALL my_orders(0,work,itri,index,numbeam,1)
656 DO j = 1, numbeam
657 isys=index(j)
658 ksysusr(j)=id_sigbeam(isys)
659 ksysusr(numbeam+j)=isys
660 ENDDO
661
662
663 DO i=1,numelp
664 isys=
uel2sys(ixp(nixp,i),ksysusr,numbeam)
665 ptbeam(i) =isys
666 ENDDO
667 ENDIF
668
669
670
671 IF (numtrus > 0) THEN
672
673 DO isys = 1, numtrus
674 itri(isys) =id_sigtruss(isys)
675 ENDDO
676 CALL my_orders(0,work,itri,index,numtrus,1)
677
678 isys=index(1)
679 ie =id_sigtruss(isys)
680 DO j = 2, numtrus
681 jsys=index(j)
682 je =id_sigtruss(jsys)
683 IF (je == ie) THEN
684 DO k=2,nsigtruss
685 IF (sigtruss(k,jsys) /= zero) THEN
686 IF (sigtruss(k,isys) /= zero .AND.
687 . sigtruss(k,isys) /= sigtruss(k,jsys)) THEN
689 . msgtype=msgerror,
690 . anmode=aninfo_blind_1,
691 . i1=ie)
692 ELSE
693 sigtruss(k,isys)=sigtruss(k,jsys)
694 ENDIF
695 ENDIF
696 ENDDO
697 sigtruss(1,jsys)=zero
698 id_sigtruss(jsys)=0
699 ELSE
700 ie =je
701 isys=jsys
702 ENDIF
703 ENDDO
704 compt=0
705 DO j=1,numtrus
706 ie=id_sigtruss(j)
707 IF (ie /= 0) THEN
708 compt=compt+1
709 IF (compt < j) THEN
710 DO k=1,nsigtruss
711 sigtruss(k,compt)=sigtruss(k,j)
712 ENDDO
713 id_sigtruss(compt)=id_sigtruss(j)
714 sigtruss(1,j)=zero
715 id_sigtruss(j)=0
716 ENDIF
717 ENDIF
718 ENDDO
719 numtrus=compt
720 ENDIF
721
722 IF (numtrus > 0) THEN
723
724 DO isys = 1, numtrus
725 itri(isys) = id_sigtruss(isys)
726 ENDDO
727 CALL my_orders(0,work,itri,index,numtrus,1)
728 DO j = 1, numtrus
729 isys=index(j)
730 ksysusr(j)=id_sigtruss(isys)
731 ksysusr(numtrus+j)=isys
732 ENDDO
733
734
735 DO i=1,numelt
736 isys=
uel2sys(ixt(nixt,i),ksysusr,numtrus)
737 pttruss(i) =isys
738 ENDDO
739 ENDIF
740
741 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
integer function uel2sys(iu, ksysusr, numel)