44 1 ITASK ,NODFT ,NODLT ,MS ,NODII_SMS ,
45 2 JAD_SMS ,JDI_SMS ,LT_SMS ,DIAG_SMS,INDX1_SMS ,
46 3 INDX2_SMS,IAD_ELEM,FR_ELEM ,NPBY ,LPBY,
47 4 LAD_SMS ,KAD_SMS ,JRB_SMS ,MSKYI_SMS,ISKYI_SMS ,
48 5 JADI_SMS,JDII_SMS ,LTI_SMS ,NODXI_SMS,FR_SMS ,
49 6 FR_RMS ,LIST_SMS ,LIST_RMS ,MSKYI_FI_SMS,ILINK ,
50 7 RLINK ,NNLINK ,LNLINK ,TAG_LNK_SMS ,LJOINT,
51 8 IADCJ ,FR_CJ ,ITAB ,WEIGHT ,IMV ,
52 9 MV ,MV6 ,W6 ,NPRW ,LPRW ,
53 A FR_WALL ,NRWL_SMS ,TAGMSR_RBY_SMS,RBY ,AWORK ,
55 C VR ,TAGSLV_RBY_SMS,IRBE2,LRBE2 ,IRBE3 ,
56 D LRBE3 ,IAD_RBE3M,FR_RBE3M )
64#include "implicit_f.inc"
80 INTEGER ITASK, NODFT, NODLT,
81 . JAD_SMS(*), JDI_SMS(*),
82 . INDX1_SMS(*), INDX2_SMS(*),
83 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*),
84 . NPBY(NNPBY,*), LPBY(*),
85 . LAD_SMS(*), KAD_SMS(*), JRB_SMS(*),
86 . ISKYI_SMS(LSKYI_SMS,*),
87 . JADI_SMS(*), JDII_SMS(*), NODXI_SMS(*), NODII_SMS(*),
88 . FR_SMS(NSPMD+1), FR_RMS(NSPMD+1), LIST_SMS(*), LIST_RMS(*),
89 . ILINK(*), RLINK(*), NNLINK(10,*), LNLINK(*),
90 . TAG_LNK_SMS(*), LJOINT(*), FR_CJ(*),IADCJ(NSPMD+1,*),
91 . ITAB(*), WEIGHT(*), IMV(*),
92 . NPRW(*), LPRW(*), FR_WALL(NSPMD+2,*), NRWL_SMS(*),
93 . tagmsr_rby_sms(*), tagslv_rby_sms(*),
95 . irbe3(*), lrbe3(*), iad_rbe3m(*),fr_rbe3m(*)
97 . ms(*), lt_sms(*), diag_sms(*),
98 . mskyi_sms(*), lti_sms(*), mskyi_fi_sms(*), mv(*),
99 . rby(nrby,*), awork(3,*), x(3,*), a(3,*), ar(3,*), in(*),
101 DOUBLE PRECISION MV6(6,*), W6(6,*)
105 INTEGER I, J, K, KN, IKN, JJ, KK, II, IJ, N, M, IX, KMV
106 INTEGER NG, ITY, NEL, NFT, ISOLNOD,ILOC4(4)
107 INTEGER MSR, NSN, KI, KJ, KL, NSR, LOC_PROC, NN, MAIN
108 INTEGER K1, IC, ISMS,ICSIZE, IMOV, ITYP, ILAGM, ICOUNT,
109 . n2, n3, n4, n5, n6, n7
110 INTEGER SIZE, LENR, IAD, L, LLT, KAD, JI,
111 . NODFT1_SMS, NODLT1_SMS, NODFT2_SMS, NODLT2_SMS,
113 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NOD2ADD
114 INTEGER,
DIMENSION(:),
ALLOCATABLE :: KADI_SMS
115 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NADI_SMS
117 . MELE4, , XN, LTIJ, MSLV,
118 . ixx, iyy, izz, xx, yy, zz, mas,
119 . vrx, vry, vrz, v1, v2, v3, gx, gy, gz
122 CALL my_alloc(nod2add,numnod)
123 CALL my_alloc(kadi_sms,numnod)
124 CALL my_alloc(nadi_sms,numnod)
126 nodii_sms(nodft:nodlt)=0
128 IF(jadi_sms(n+1) > jadi_sms(n))
THEN
138 DO k=1,fr_rms(nspmd+1)-1
147 DO j=fr_sms(k),fr_sms(k+1)-1
156 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
169 IF(nodii_sms(n)/=0)
THEN
180 1 irbe2 ,lrbe2 ,nodxi_sms)
190 1 irbe3 ,lrbe3 ,nodxi_sms,iad_rbe3m,fr_rbe3m)
203 IF(nodxi_sms(n)/=0)
THEN
204 nindx1_sms=nindx1_sms+1
205 indx1_sms(nindx1_sms)=n
206 nodxi_sms(n)=nindx1_sms
208 IF(nodii_sms(n)/=0)
THEN
209 nindx2_sms=nindx2_sms+1
210 indx2_sms(nindx2_sms)=n
211 nodii_sms(n)=nindx2_sms
217 IF(nlink+nrlink+njoint/=0)
THEN
234 IF(nodxi_sms(n)/=0)
THEN
243 tag_lnk_sms(i)=-abs(tag_lnk_sms(i))
245 tag_lnk_sms(i)= abs(tag_lnk_sms(i))
253 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
254 nindx1_sms=nindx1_sms+1
255 indx1_sms(nindx1_sms)=n
256 nodxi_sms(n)=nindx1_sms
275 IF(nodxi_sms(n)/=0)
THEN
285 tag_lnk_sms(nrlink+i)=-abs(tag_lnk_sms(nrlink+i))
295 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
296 nindx1_sms=nindx1_sms+1
297 indx1_sms(nindx1_sms)=n
316 IF(nodxi_sms(n)/=0)
THEN
322 tag_lnk_sms(nrlink+nlink+j)=isms
330 . tag_lnk_sms(nrlink+nlink+1),njoint,1,0,2)
336 isms=tag_lnk_sms(nrlink+nlink+j)
341 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
342 nindx1_sms=nindx1_sms+1
343 indx1_sms(nindx1_sms)=n
344 nodxi_sms(n)=nindx1_sms
355 isms=tag_lnk_sms(nrlink+nlink+j)
360 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
361 nindx1_sms=nindx1_sms+
363 nodxi_sms(n)=nindx1_sms
373 IF(tag_lnk_sms(nrlink+nlink+n)/=0)
374 . icsize=icsize+iadcj(nspmd+1,n)-iadcj(1,n)
377 . tag_lnk_sms(nrlink+nlink+1),nodxi_sms,
402 IF(nodxi_sms(i)/=0)
THEN
413 IF(icount > k.AND.nodxi_sms(imov)==0)nod2add(imov)=1
416 IF(nod2add(imov)/=0)
THEN
417 nindx1_sms=nindx1_sms+1
418 indx1_sms(nindx1_sms)=imov
419 nodxi_sms(imov)=nindx1_sms
431 IF(iparit==0.OR.debug(9)==0)
THEN
435 DO ij=jad_sms(i),jad_sms(i+1)-1
436 diag_sms(i)=diag_sms(i)-lt_sms(ij)
447 nodft1_sms=1+itask*nindx1_sms/nthread
450 DO n=nodft1_sms,nodlt1_sms
452 DO ij=jad_sms(i),jad_sms(i+1)-1
470 nodft2_sms=1+itask*nindx2_sms/nthread
471 nodlt2_sms=(itask+1)*nindx2_sms/nthread
475 DO n=nodft2_sms,nodlt2_sms
477 DO ij=jadi_sms(i),jadi_sms(i+1)-1
478 diag_sms(i)=diag_sms(i)-lti_sms(ij)
490 DO k=1,fr_sms(loc_proc)-1
494 diag_sms(i)=diag_sms(i)+mskyi_sms(k)
497 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
501 diag_sms(i)=diag_sms(i)+mskyi_sms(k)
505 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
508 DO k=1,fr_rms(nspmd+1)-1
511 diag_sms(i)=diag_sms(i)+mskyi_fi_sms(k)
520 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
525 . diag_sms,nodxi_sms,iad_elem ,fr_elem,
SIZE,
530 ELSEIF(debug(9)==0)
THEN
534 DO n=nodft2_sms,nodlt2_sms
536 DO ij=jadi_sms(i),jadi_sms(i+1)-1
549 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
550 . nodlt2_sms < nodii_sms(i))cycle
556 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
559 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
560 . nodlt2_sms < nodii_sms(i))cycle
568 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
574 DO k=1,fr_rms(nspmd+1)-1
576 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
577 . nodlt2_sms < nodii_sms(i))cycle
580 mv(kmv)=mskyi_fi_sms(k)
585 DO n=nodft2_sms,nodlt2_sms
597 w6(j,i) = w6(j,i)+mv6(j,k)
603 DO n=nodft2_sms,nodlt2_sms
605 diag_sms(i) = diag_sms(i)
606 . +w6(1,i)+w6(2,i)+w6(3,i)
607 . +w6(4,i)+w6(5,i)+w6(6,i)
616 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
621 . diag_sms,nodxi_sms,iad_elem ,fr_elem,
SIZE,
634 nodft1_sms=1+itask*nindx1_sms/nthread
635 nodlt1_sms=(itask+1)*nindx1_sms/nthread
637 DO n=nodft1_sms,nodlt1_sms
639 DO ij=jadi_sms(i),jadi_sms(i+1)-1
649 DO k=1,fr_sms(loc_proc)-1
652 IF(i == 0 .OR. nodxi_sms(i)
659 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
662 IF(i == 0 .OR. nodxi_sms(i) < nodft1_sms .OR.
663 . nodlt1_sms < nodxi_sms(i))cycle
671 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
677 DO k=1,fr_rms(nspmd+1)-1
679 IF(i == 0 .OR. nodxi_sms(i) < nodft1_sms .OR.
680 . nodlt1_sms < nodxi_sms(i))cycle
683 mv(kmv)=mskyi_fi_sms(k)
688 DO n=nodft1_sms,nodlt1_sms
700 w6(j,i) = w6(j,i)+mv6(j,k)
710 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
715 . w6,nodxi_sms,iad_elem ,fr_elem,
SIZE,
723 DO n=nodft1_sms,nodlt1_sms
725 diag_sms(i) = w6(1,i)+w6(2,i)+w6(3,i)
726 . +w6(4,i)+w6(5,i)+w6(6,i)
735 IF(tagslv_rby_sms(n)==0) diag_sms(n) = ms(n)+diag_sms(n)
subroutine sms_build_diag(itask, nodft, nodlt, ms, nodii_sms, jad_sms, jdi_sms, lt_sms, diag_sms, indx1_sms, indx2_sms, iad_elem, fr_elem, npby, lpby, lad_sms, kad_sms, jrb_sms, mskyi_sms, iskyi_sms, jadi_sms, jdii_sms, lti_sms, nodxi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, ilink, rlink, nnlink, lnlink, tag_lnk_sms, ljoint, iadcj, fr_cj, itab, weight, imv, mv, mv6, w6, nprw, lprw, fr_wall, nrwl_sms, tagmsr_rby_sms, rby, awork, x, a, ar, in, v, vr, tagslv_rby_sms, irbe2, lrbe2, irbe3, lrbe3, iad_rbe3m, fr_rbe3m)