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, IJ, N, M, KMV
107 INTEGER NSN, LOC_PROC
108 INTEGER K1, IC, ISMS,ICSIZE, IMOV, ITYP, ILAGM, ICOUNT,
109 . n2, n3, n4, n5, n6, n7
111 . NODFT1_SMS, NODLT1_SMS, NODFT2_SMS, NODLT2_SMS
112 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NOD2ADD
113 INTEGER,
DIMENSION(:),
ALLOCATABLE :: KADI_SMS
114 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NADI_SMS
117 CALL MY_ALLOC(NOD2ADD,NUMNOD)
118 CALL my_alloc(kadi_sms,numnod)
119 CALL my_alloc(nadi_sms,numnod)
121 nodii_sms(nodft:nodlt)=0
123 IF(jadi_sms(n+1) > jadi_sms(n))
THEN
133 DO k=1,fr_rms(nspmd+1)-1
142 DO j=fr_sms(k),fr_sms(k+1)-1
151 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
164 IF(nodii_sms(n)/=0)
THEN
175 1 irbe2 ,lrbe2 ,nodxi_sms)
185 1 irbe3 ,lrbe3 ,nodxi_sms,iad_rbe3m,fr_rbe3m)
198 IF(nodxi_sms(n)/=0)
THEN
199 nindx1_sms=nindx1_sms+1
200 indx1_sms(nindx1_sms)=n
201 nodxi_sms(n)=nindx1_sms
203 IF(nodii_sms(n)/=0)
THEN
204 nindx2_sms=nindx2_sms+1
205 indx2_sms(nindx2_sms)=n
206 nodii_sms(n)=nindx2_sms
212 IF(nlink+nrlink+njoint/=0)
THEN
229 IF(nodxi_sms(n)/=0)
THEN
238 tag_lnk_sms(i)=-abs(tag_lnk_sms(i))
240 tag_lnk_sms(i)= abs(tag_lnk_sms(i))
248 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
249 nindx1_sms=nindx1_sms+1
250 indx1_sms(nindx1_sms)=n
251 nodxi_sms(n)=nindx1_sms
270 IF(nodxi_sms(n)/=0)
THEN
280 tag_lnk_sms(nrlink+i)=-abs(tag_lnk_sms(nrlink+i))
282 tag_lnk_sms(nrlink+i)= abs(tag_lnk_sms(nrlink+i))
290 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
291 nindx1_sms=nindx1_sms+1
292 indx1_sms(nindx1_sms)=n
293 nodxi_sms(n)=nindx1_sms
311 IF(nodxi_sms(n)/=0)
THEN
317 tag_lnk_sms(nrlink+nlink+j)=isms
325 . tag_lnk_sms(nrlink+nlink+1),njoint,1,0,2)
331 isms=tag_lnk_sms(nrlink+nlink+j)
336 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
337 nindx1_sms=nindx1_sms+1
338 indx1_sms(nindx1_sms)=n
339 nodxi_sms(n)=nindx1_sms
350 isms=tag_lnk_sms(nrlink+nlink+j)
355 IF(nodxi_sms(n)==0.AND.nod2add(n)==0)
THEN
356 nindx1_sms=nindx1_sms+1
357 indx1_sms(nindx1_sms)=n
358 nodxi_sms(n)=nindx1_sms
368 IF(tag_lnk_sms(nrlink+nlink+n)/=0)
369 . icsize=icsize+iadcj(nspmd+1,n)-iadcj(1,n)
372 . tag_lnk_sms(nrlink+nlink+1),nodxi_sms,
397 IF(nodxi_sms(i)/=0)
THEN
408 IF(icount > k.AND.nodxi_sms(imov)==0)nod2add(imov)=1
411 IF(nod2add(imov)/=0)
THEN
412 nindx1_sms=nindx1_sms+1
413 indx1_sms(nindx1_sms)=imov
414 nodxi_sms(imov)=nindx1_sms
426 IF(iparit==0.OR.debug(9)==0)
THEN
430 DO ij=jad_sms(i),jad_sms(i+1)-1
431 diag_sms(i)=diag_sms(i)-lt_sms(ij)
442 nodft1_sms=1+itask*nindx1_sms/nthread
443 nodlt1_sms=(itask+1)*nindx1_sms/nthread
445 DO n=nodft1_sms,nodlt1_sms
447 DO ij=jad_sms(i),jad_sms(i+1)-1
465 nodft2_sms=1+itask*nindx2_sms/nthread
466 nodlt2_sms=(itask+1)*nindx2_sms/nthread
470 DO n=nodft2_sms,nodlt2_sms
472 DO ij=jadi_sms(i),jadi_sms(i+1)-1
473 diag_sms(i)=diag_sms(i)-lti_sms(ij)
485 DO k=1,fr_sms(loc_proc)-1
489 diag_sms(i)=diag_sms(i)+mskyi_sms(k)
492 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
496 diag_sms(i)=diag_sms(i)+mskyi_sms(k)
500 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
503 DO k=1,fr_rms(nspmd+1)-1
506 diag_sms(i)=diag_sms(i)+mskyi_fi_sms(k)
515 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
520 . diag_sms,nodxi_sms,iad_elem ,fr_elem,
SIZE,
525 ELSEIF(debug(9)==0)
THEN
529 DO n=nodft2_sms,nodlt2_sms
531 DO ij=jadi_sms(i),jadi_sms(i+1)-1
541 DO k=1,fr_sms(loc_proc)-1
544 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
545 . nodlt2_sms < nodii_sms(i))cycle
551 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
554 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
555 . nodlt2_sms < nodii_sms(i))cycle
563 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
569 DO k=1,fr_rms(nspmd+1)-1
571 IF(i == 0 .OR. nodii_sms(i) < nodft2_sms .OR.
572 . nodlt2_sms < nodii_sms(i))cycle
575 mv(kmv)=mskyi_fi_sms(k)
580 DO n=nodft2_sms,nodlt2_sms
592 w6(j,i) = w6(j,i)+mv6(j,k)
598 DO n=nodft2_sms,nodlt2_sms
600 diag_sms(i) = diag_sms(i)
601 . +w6(1,i)+w6(2,i)+w6(3,i)
602 . +w6(4,i)+w6(5,i)+w6(6,i)
611 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
616 . diag_sms,nodxi_sms,iad_elem ,fr_elem,
SIZE,
629 nodft1_sms=1+itask*nindx1_sms/nthread
630 nodlt1_sms=(itask+1)*nindx1_sms/nthread
632 DO n=nodft1_sms,nodlt1_sms
634 DO ij=jadi_sms(i),jadi_sms(i+1)-1
644 DO k=1,fr_sms(loc_proc)-1
647 IF(i == 0 .OR. nodxi_sms(i) < nodft1_sms .OR.
648 . nodlt1_sms < nodxi_sms(i))cycle
654 DO k=fr_sms(loc_proc+1),fr_sms(nspmd+1)-1
657 IF(i == 0 .OR. nodxi_sms(i) < nodft1_sms .OR.
658 . nodlt1_sms < nodxi_sms(i))cycle
666 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
672 DO k=1,fr_rms(nspmd+1)-1
674 IF(i == 0 .OR. nodxi_sms(i) < nodft1_sms .OR.
675 . nodlt1_sms < nodxi_sms(i))cycle
678 mv(kmv)=mskyi_fi_sms(k)
683 DO n=nodft1_sms,nodlt1_sms
695 w6(j,i) = w6(j,i)+mv6(j,k)
705 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
710 . w6,nodxi_sms,iad_elem ,fr_elem,
SIZE,
718 DO n=nodft1_sms,nodlt1_sms
720 diag_sms(i) = w6(1,i)+w6(2,i)+w6(3,i)
721 . +w6(4,i)+w6(5,i)+w6(6,i)
730 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)