93
94
95
96 USE timer_mod
98 USE sensor_mod
100 USE ams_work_mod
101 use element_mod , only : nixc,nixtg
102
103
104
105#include "implicit_f.inc"
106#include "comlock.inc"
107
108
109
110#include "mvsiz_p.inc"
111
112
113
114#include "com01_c.inc"
115#include "com04_c.inc"
116#include "param_c.inc"
117#include "parit_c.inc"
118#include "remesh_c.inc"
119#include "scr03_c.inc"
120#include "scr07_c.inc"
121#include "sms_c.inc"
122#include "task_c.inc"
123#include "timeri_c.inc"
124#include "units_c.inc"
125
126
127
128
129 TYPE(TIMER_), INTENT(inout) :: TIMERS
130 INTEGER NODFT, NODLT, IADK(*), JDIK(*), NNZ, ISP,NSENSOR,
131 . NODFT1_SMS,NODLT1_SMS,INDX1_SMS(*),
132 . ICODT(*), ICODR(*), ISKEW(*), ITASK, NODNX_SMS(*),
133 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*), WEIGHT(*),
134 . NPC(*), IBFV(NIFV,*),IFRAME(LISKN,*),
135 . JADI_SMS(*), JDII_SMS(*),
136 . FR_SMS(NSPMD+1), FR_RMS(NSPMD+1),
137 . LIST_SMS(*), LIST_RMS(*),ISKYI_SMS(*),
138 . ILINK(*), LLINK(*), FR_RL(NSPMD+2,*), NNLINK(10,*),
139 . LNLINK(*), FR_LL(NSPMD+2,*), TAG_LNK_SMS(*), ITAB(*),
140 . LJOINT(*), FR_CJ(*), IADCJ(*),
141 . NPRW(*), LPRW(*), FR_WALL(*), IRWL_WORK(*), NRWL_SMS(*),
142 . IMV(*), KINET(*),CPTREAC,NODREAC(*),
143 . IXC(NIXC,*), IXTG(NIXTG,*),
144 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*),
145 . NPBY(NNPBY,*), LPBY(*), TAGMSR_RBY_SMS(*),
146 . IRBE2(NRBE2L,*), LRBE2(*), IAD_RBE2(*),
147 . FR_RBE2M(*), NMRBE2, R2SIZE, IRBE3(NRBE3L,*), LRBE3(*),
148 . IAD_RBE3M(*) ,FR_RBE3M(*) ,FR_RBE3MP(*),
149 . FR_RBY6(*),IAD_RBY(*), TAGSLV_RBY_SMS(*),R3SIZE,
150 . NODFT2_SMS,NODLT2_SMS,INDX2_SMS(*),NODII_SMS(*),
151 . IBCSCYC(*) ,LBCSCYC(*)
152
154 . diag_sms(*), lt_k(*) ,r(3,*),
155 . x_sms(3,*), p_sms(3,*), y_sms(3,*), z_sms(3,*), prec_sms(*),
156 . skew(*), v(3,*), x(3,*), d(3,*), tf(*), vel(lfxvelr,*),
157 . xframe(nxframe,*), lti_sms(*), res_sms(3,*),
158 . ms(*), fsav(nthvki,*), cjwork(*), frl(*), fnl(*),
159 . rwbuf(*), rwsav(*), fopt(*), frea(3,*),rbid,
160 . mskyi_fi_sms(*), mskyi_sms(*), vfi(*), mv(*),fthreac(6,*),
161 . am(3,*), vr(3,*), dr(3,*), in(*), rby(nrby,*),
162 . frbe3(*), rrbe3(*),
163 . prec_sms3(3,numnod), diag_sms3(3,numnod)
164 DOUBLE PRECISION FRL6(*), FNL6(*), MV6(*), MW6(*), FRWL6(*),
165 . RRBE3_PON(*)
166 DOUBLE PRECISION RBY6(8,6,NRBYKIN)
167 TYPE(INTSTAMP_DATA) INTSTAMP(*)
168 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
169 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
170 TYPE (ams_work_), INTENT(INOUT) :: AMS_WORK
171
172
173
174 INTEGER I, IT, TOTIT, NLIM, N, L, K, LLT, IDOWN, IFLAG, IACT,
175 . NCPRIA, M, MSR, IAD, NSN, KI, NRBDIM
178 . st , r2t, r02t, g0t, g1t, res_old,
179 . p1, p2, p3, dt05,
180 . xx, yy, zz, vrx, vry, vrz, v1, v2, v3, gx, gy, gz, a1, a2, a3
182 . r2(mvsiz), g(mvsiz), s(mvsiz), r02(mvsiz)
184 . rbuf(2)
185 DOUBLE PRECISION R6T(6), G6T(6), S6T(6), DBUF(12)
186
187 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
188
189 ncpria=abs(ncprisms)
191
192 nupdtl_sms=-1
193
194
195 iact=0
196 it =0
197 totit=0
198
199
200
201
202
203
204 IF(nrbe2+r2size+nrbe3/=0)THEN
205 DO n=nodft1_sms,nodlt1_sms
206 i=indx1_sms(n)
207 diag_sms3(1,i)=prec_sms(i)
208 diag_sms3(2,i)=prec_sms(i)
209 diag_sms3(3,i)=prec_sms(i)
210 END DO
211 END IF
212
213
214 DO n=nodft1_sms,nodlt1_sms
215 i=indx1_sms(n)
216 IF(prec_sms(i)==zero)THEN
217
218
219 r(1,i)=zero
220 r(2,i)=zero
221 r(3,i)=zero
222 ELSE
223 prec_sms(i)=one/prec_sms(i)
224 END IF
225 ENDDO
226
227
228
229 IF(nrbe2+r2size+nrbe3/=0)THEN
230 IF (nrbe2>0.OR.r2size>0) THEN
231
233
234 IF(itask==0)THEN
236 1 irbe2 ,lrbe2 ,diag_sms,ms ,diag_sms3,
237 1 skew ,weight ,iad_rbe2,fr_rbe2m ,nmrbe2)
238 END IF
239 END IF
240
241
242
243 IF (nrbe3>0)THEN
244
246
247 IF(itask==0)THEN
249 1 irbe3 ,lrbe3 ,x ,diag_sms ,diag_sms3,
250 2 frbe3 ,skew ,weight ,iad_rbe3m,fr_rbe3m ,
251 3 fr_rbe3mp,rrbe3 ,rrbe3_pon ,r3size)
252 END IF
253 END IF
254
256
257 DO n=nodft1_sms,nodlt1_sms
258 i=indx1_sms(n)
259 IF(diag_sms3(1,i)==zero)THEN
260 prec_sms3(1,i)=zero
261 ELSE
262 prec_sms3(1,i)=one/diag_sms3(1,i)
263 END IF
264 IF(diag_sms3(2,i)==zero)THEN
265 prec_sms3(2,i)=zero
266 ELSE
267 prec_sms3(2,i)=one/diag_sms3(2,i)
268 END IF
269 IF(diag_sms3(3,i)==zero)THEN
270 prec_sms3(3,i)=zero
271 ELSE
272 prec_sms3(3,i)=one/diag_sms3(3,i)
273 END IF
274 END DO
275
276 END IF
277
278
279
280 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
281
283
284 idown=0
286 1 ms ,r ,ilink ,llink,skew,
287 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
288 3 itab ,frl )
289
291 1 ms ,r ,nnlink,lnlink,skew ,
292 2 fr_ll ,weight,fnl6 ,x ,xframe,
293 3 v ,idown ,tag_lnk_sms,itab,fnl)
294
295 IF(njoint > 0)
297 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
298
299
300
301
302
303
304
305
307
308 END IF
309
310
311 IF (m_vs_sms > 0 ) THEN
312 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
313 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
314
316 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
317 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
318 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
319 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
320 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
321 6 mv6 ,mw6 ,ms ,nodft ,nodlt ,
322 7 prec_sms ,kinet )
323
325
327 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
328 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
329 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
330 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
331 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
332 6 mv6 ,mw6 ,ms ,nodft ,nodlt )
333
335
336 CALL sms_inix(timers,nodft,nodlt,numnod,x_sms,r ,weight,itask ,
337 . diag_sms )
338
339 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
340 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
341
342 ELSE
343
344 DO n=nodft1_sms,nodlt1_sms
345 i=indx1_sms(n)
346
347 x_sms(1,i) = r(1,i)*prec_sms(i)
348 x_sms(2,i) = r(2,i)*prec_sms(i)
349 x_sms(3,i) = r(3,i)*prec_sms(i)
350 ENDDO
351 END IF
352
353
354
355 IF (nrbe3>0)THEN
356
358
359 IF(itask==0)THEN
360 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,x_sms ,frbe3 ,
361 2 skew ,r ,prec_sms3 )
362 END IF
363 END IF
364
365
366
367 IF (nrbe2>0) THEN
368
370
371 IF(itask==0)THEN
373 1 irbe2 ,lrbe2 ,r ,x_sms ,prec_sms3 ,
374 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
375 END IF
376
377 END IF
378
379
380
381 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
382
384
385 idown=1
387 1 ms ,x_sms ,ilink ,llink,skew,
388 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
389 3 itab ,frl )
390
392 1 ms ,x_sms ,nnlink,lnlink,skew ,
393 2 fr_ll ,weight,fnl6 ,x ,xframe,
394 3 v ,idown ,tag_lnk_sms,itab,fnl)
395
396 IF(njoint > 0)
398 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
399
400 IF(nadmesh/=0)THEN
402 . sh3tree ,itask)
403 END IF
404 END IF
405
406 IF(nrwall > 0)THEN
407
409
410
411 iflag=0
413 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
414 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
415 4 x_sms ,rbid ,rbid ,rbid ,wfext )
416
418
419
420 iflag=1
422 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
423 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
424 4 x_sms ,rbid ,rbid ,rbid ,wfext )
425 END IF
426
427 IF(nadmesh/=0)THEN
428
429 y_sms(1:3,nodft:nodlt)=zero
430 z_sms(1:3,nodft:nodlt)=zero
431
433
434 END IF
435
436
437 IF(nrbody/=0)THEN
438
440
441 DO n=nodft1_sms,nodlt1_sms
442 i=indx1_sms(n)
443 m=tagslv_rby_sms(i)
444 IF(m /= 0)THEN
445 msr=npby(1,m)
446 x_sms(1,i)=x_sms(1,msr)
447 x_sms(2,i)=x_sms(2,msr)
448 x_sms(3,i)=x_sms(3,msr)
449 END IF
450 END DO
451
453
454 END IF
455
456 10 CONTINUE
457
458
460
461
462 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
464 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
465 2 itask ,diag_sms,lt_k ,x_sms ,z_sms ,
466 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
467 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
468 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
469 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
470 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
471 8 nodii_sms )
472
473 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
474
475 IF(iparit==0)THEN
476 res0_sms = zero
477 g0_sms = zero
478 ELSE
479
480 DO k=1,6
481 r6sms(k)=zero
482 g6sms(k)=zero
483 ENDDO
484
485 END IF
486
488
489 IF(nadmesh/=0)THEN
490 IF(itask==0)THEN
492 . sh3tree ,nodnx_sms)
493 END IF
494
496
497 END IF
498
499
500
501 IF (nrbe2>0.OR.r2size>0) THEN
502
504
505 IF(itask==0)THEN
506
508 1 irbe2 ,lrbe2 ,x_sms ,z_sms ,ms ,
509 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
510
512 1 irbe2 ,lrbe2 ,x ,z_sms ,am ,
513 1 ms ,in ,skew ,weight ,iad_rbe2,
514 2 fr_rbe2m,nmrbe2)
515
516 END IF
517
518 END IF
519
520
521
522 IF (nrbe3>0)THEN
523
525
526 IF(itask==0)THEN
528 1 irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
529 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
530 3 rrbe3 ,rrbe3_pon ,r3size)
531 END IF
532 END IF
533
534 IF(nrbody/=0)THEN
535
537
538
539 DO m =1,nrbody
540 DO k = 1, 6
541 rby6(1,k,m) = zero
542 rby6(2,k,m) = zero
543 rby6(3,k,m) = zero
544 END DO
545
546 msr=npby(1,m)
547 IF(msr < 0) cycle
548
549 IF(tagmsr_rby_sms(msr) /= 0) THEN
550 rby6(1,1,m)=z_sms(1,msr)*weight(msr)
551 rby6(2,1,m)=z_sms(2,msr)*weight(msr)
552 rby6(3,1,m)=z_sms(3,msr)*weight(msr)
553 END IF
554
555 END DO
556
557
558
559 DO n=1,nindx1_sms
560 i=indx1_sms(n)
561 m=tagslv_rby_sms(i)
562 IF(m /= 0)THEN
563 IF(weight(i) /= 0)THEN
564 rby6(1,1,m)=rby6(1,1,m)+z_sms(1,i)
565 rby6(2,1,m)=rby6(2,1,m)+z_sms(2,i)
566 rby6(3,1,m)=rby6(3,1,m)+z_sms(3,i)
567 END IF
568 END IF
569 END DO
570
571
572 IF (nspmd > 1) THEN
573
574 nrbdim=3
576 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
577
578 END IF
579
580
581 DO m =1,nrbody
582 msr=npby(1,m)
583 IF(msr < 0) cycle
584 IF(tagmsr_rby_sms(msr) /= 0) THEN
585 z_sms(1,msr)=rby6(1,1,m)
586 z_sms(2,msr)=rby6(2,1,m)
587 z_sms(3,msr)=rby6(3,1,m)
588 END IF
589 END DO
590
591 END IF
592
593 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
594 2 skew ,z_sms ,nodlt1_sms )
595
596
597
598 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,z_sms)
599
600
601
602 IF(nrlink+nlink+njoint > 0)THEN
603
605
606 idown=0
608 1 ms ,z_sms ,ilink ,llink,skew,
609 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
610 3 itab ,frl )
611
613 1 ms ,z_sms ,nnlink,lnlink,skew ,
614 2 fr_ll ,weight,fnl6 ,x ,xframe,
615 3 v ,idown ,tag_lnk_sms,itab,fnl)
616
617 IF(njoint > 0)
619 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
620 END IF
621
623
624 DO n=nodft1_sms,nodlt1_sms
625 i=indx1_sms(n)
626 res_sms(1,i) = r(1,i)-z_sms(1,i)
627 res_sms(2,i) = r(2,i)-z_sms(2,i)
628 res_sms(3,i) = r(3,i)-z_sms(3,i)
629 ENDDO
630
631 IF(nrbody/=0)THEN
632
634
635 DO n=nodft1_sms,nodlt1_sms
636 i=indx1_sms(n)
637 m=tagslv_rby_sms(i)
638 IF(m /= 0)THEN
639 res_sms(1,i)=zero
640 res_sms(2,i)=zero
641 res_sms(3,i)=zero
642 END IF
643 END DO
644
646
647 END IF
648
649 IF(nfxvel > 0)THEN
650
652
653 IF(itask==0)
655 2 vel ,diag_sms,x ,skew ,sensor_tab,
656 3 weight ,d ,iframe ,xframe ,nsensor ,
657 4 it+1 ,diag_sms,nodnx_sms,cptreac,nodreac,
658 5 fthreac,am ,vr ,dr ,in ,
659 6 rby ,wfext )
660
662
663 END IF
664
665 IF(nrwall > 0)THEN
666
668
669
670 iflag=2
672 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
673 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
674 4 rbid ,res_sms,rbid ,rbid ,wfext )
675
677
678 END IF
679
680 DO n=nodft1_sms,nodlt1_sms
681 i=indx1_sms(n)
682 z_sms(1,i) = res_sms(1,i) *prec_sms(i)
683 z_sms(2,i) = res_sms(2,i) *prec_sms(i)
684 z_sms(3,i) = res_sms(3,i) *prec_sms(i)
685 ENDDO
686
687
688
689 IF (nrbe3>0)THEN
690
692
693 IF(itask==0)THEN
694 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
695 2 skew ,res_sms ,prec_sms3 )
696 END IF
697 END IF
698
699
700
701 IF (nrbe2>0) THEN
702
704
705 IF(itask==0)THEN
707 1 irbe2 ,lrbe2 ,res_sms,z_sms ,prec_sms3,
708 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
709 END IF
710
711 END IF
712
713
714
715 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
716
718
719 idown=1
721 1 ms ,z_sms ,ilink ,llink,skew,
722 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
723 3 itab ,frl )
724
726 1 ms ,z_sms ,nnlink,lnlink,skew ,
727 2 fr_ll ,weight,fnl6 ,x ,xframe,
728 3 v ,idown ,tag_lnk_sms,itab,fnl)
729
730 IF(njoint > 0)
732 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
733
734 IF(nadmesh/=0)THEN
736 . sh3tree ,itask)
737 END IF
738
740
741 END IF
742
743
744 DO n=nodft1_sms,nodlt1_sms,mvsiz
745
746 llt=
min(nodlt1_sms-n+1,mvsiz)
747
748 DO l=1,llt
749 i=indx1_sms(n+l-1)
750 p_sms(1,i) = z_sms(1,i)
751 p_sms(2,i) = z_sms(2,i)
752 p_sms(3,i) = z_sms(3,i)
753 g(l) = ( z_sms(1,i)*res_sms(1,i)
754 . + z_sms(2,i)*res_sms(2,i)
755 . + z_sms(3,i)*res_sms(3,i))
756 . * weight(i)
757
758
759 r2(l) = ( res_sms(1,i)*res_sms(1,i)
760 . + res_sms(2,i)*res_sms(2,i)
761 . + res_sms(3,i)*res_sms(3,i))
762 . * weight(i)
763 ENDDO
764
765 IF(iparit==0)THEN
766 r02t = zero
767 g0t = zero
768 DO l=1,llt
769 r02t = r02t + r2(l)
770 g0t = g0t + g(l)
771 ENDDO
772#include "lockon.inc"
773 res0_sms=res0_sms+r02t
774 g0_sms =g0_sms +g0t
775#include "lockoff.inc"
776 ELSE
777 DO k=1,6
778 r6t(k) = zero
779 g6t(k) = zero
780 ENDDO
781 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
784 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
785#include "lockon.inc"
786 DO k=1,6
787 r6sms(k)=r6sms(k)+r6t(k)
788 g6sms(k)=g6sms(k)+g6t(k)
789 ENDDO
790#include "lockoff.inc"
791 END IF
792 ENDDO
793
794
796
797 IF(nspmd <= 1)THEN
798 IF(iparit/=0.AND.itask==0)THEN
799 res0_sms=r6sms(1)+r6sms(2)+r6sms(3)+
800 . r6sms(4)+r6sms(5)+r6sms(6)
801 g0_sms =g6sms(1)+g6sms(2)+g6sms(3)+
802 . g6sms(4)+g6sms(5)+g6sms(6)
803 END IF
804 ELSEIF(itask==0)THEN
805 IF(iparit==0)THEN
806 IF(imonm>0)
CALL startime(timers,63)
807 rbuf(1)=res0_sms
808 rbuf(2)=g0_sms
811 res0_sms=rbuf(1)
812 g0_sms =rbuf(2)
813 IF(imonm>0)
CALL stoptime(timers,63)
814 ELSE
815 IF(imonm>0)
CALL startime(timers,63)
816 DO k=1,6
817 dbuf(k) =r6sms(k)
818 dbuf(k+6)=g6sms(k)
819 END DO
821 rbuf(1) = dbuf(1)+dbuf(2)+dbuf(3)+
822 . dbuf(4)+dbuf(5)+dbuf(6)
823 rbuf(2) = dbuf(7) +dbuf(8) +dbuf(9)+
824 . dbuf(10)+dbuf(11)+dbuf(12)
826 res0_sms=rbuf(1)
827 g0_sms =rbuf(2)
828 IF(imonm>0)
CALL stoptime(timers,63)
829 END IF
830 END IF
831
832
833
834 IF(nrbody/=0)THEN
835
837
838 DO n=nodft1_sms,nodlt1_sms
839 i=indx1_sms(n)
840 m=tagslv_rby_sms(i)
841 IF(m /= 0)THEN
842 msr=npby(1,m)
843 p_sms(1,i)=p_sms(1,msr)
844 p_sms(2,i)=p_sms(2,msr)
845 p_sms(3,i)=p_sms(3,msr)
846 END IF
847 END DO
848
850
851 END IF
852
853
855
856 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
857 IF (res0_sms<em10) GOTO 200
858 toln=res0_sms*tol_sms
859
860 100 CONTINUE
861
862 it = it +1
863 totit = totit + 1
864
865
866
867 IF (m_vs_sms > 0 ) THEN
868 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
869
870 CALL sms_pro_p(timers,nodft ,nodlt ,numnod ,p_sms,weight,itask ,
871
872 . z_sms ,diag_sms)
873
875
876
877 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
878 END IF
879
880
881
883 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
884 2 itask ,diag_sms,lt_k ,p_sms ,y_sms ,
885 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
886 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
887 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
888 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
889 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
890 8 nodii_sms )
891
892 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
893 IF(iparit==0)THEN
894 res1_sms= zero
895 g1_sms = zero
896 s_sms = zero
897 ELSE
898
899 DO k=1,6
900 r6sms(k)=zero
901 g6sms(k)=zero
902 s6sms(k)=zero
903 ENDDO
904
905 END IF
906
908
909 IF(nadmesh/=0)THEN
910
912
913 IF(itask==0)THEN
915 . sh3tree ,nodnx_sms)
916 END IF
917
919
920 END IF
921
922
923
924 IF (nrbe2>0.OR.r2size>0) THEN
925
927
928 IF(itask==0)THEN
929
931 1 irbe2 ,lrbe2 ,p_sms ,y_sms ,ms ,
932 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
933
935 1 irbe2 ,lrbe2 ,x ,y_sms ,am ,
936 1 ms ,in ,skew ,weight ,iad_rbe2,
937 2 fr_rbe2m,nmrbe2)
938
939 END IF
940
941 END IF
942
943
944
945 IF (nrbe3>0)THEN
946
948
949 IF(itask==0)THEN
951 1 irbe3 ,lrbe3 ,x ,y_sms ,frbe3 ,
952 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
953 3 rrbe3 ,rrbe3_pon ,r3size)
954 END IF
955 END IF
956
957
958
959 IF(nrbody/=0)THEN
960
962
963
964 DO m =1,nrbody
965 DO k = 1, 6
966 rby6(1,k,m) = zero
967 rby6(2,k,m) = zero
968 rby6(3,k,m) = zero
969 END DO
970
971 msr=npby(1,m)
972 IF(msr < 0) cycle
973
974 IF(tagmsr_rby_sms(msr) /= 0) THEN
975 rby6(1,1,m)=y_sms(1,msr)*weight(msr)
976 rby6(2,1,m)=y_sms(2,msr)*weight(msr)
977 rby6(3,1,m)=y_sms(3,msr)*weight(msr)
978 END IF
979
980 END DO
981
982
983
984 DO n=1,nindx1_sms
985 i=indx1_sms(n)
986 m=tagslv_rby_sms(i)
987 IF(m /= 0 )THEN
988 IF(weight(i) /= 0)THEN
989 rby6(1,1,m)=rby6(1,1,m)+y_sms(1,i)
990 rby6(2,1,m)=rby6(2,1,m)+y_sms(2,i)
991 rby6(3,1,m)=rby6(3,1,m)+y_sms(3,i)
992 END IF
993 y_sms(1,i)=zero
994 y_sms(2,i)=zero
995 y_sms(3,i)=zero
996 END IF
997 END DO
998
999
1000 IF (nspmd > 1) THEN
1001
1002 nrbdim=3
1004 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
1005
1006 END IF
1007
1008
1009 DO m =1,nrbody
1010 msr=npby(1,m)
1011 IF(msr < 0) cycle
1012
1013 IF(tagmsr_rby_sms(msr) /= 0) THEN
1014 y_sms(1,msr)=rby6(1,1,m)
1015 y_sms(2,msr)=rby6(2,1,m)
1016 y_sms(3,msr)=rby6(3,1,m)
1017 END IF
1018
1019 END DO
1020
1021 END IF
1022
1023 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
1024 2 skew ,y_sms ,nodlt1_sms )
1025
1026 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,y_sms)
1027
1028
1029
1030 IF(nrlink+nlink+njoint > 0)THEN
1031
1033
1034 idown=0
1036 1 ms ,y_sms ,ilink ,llink,skew,
1037 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1038 3 itab ,frl )
1039
1041 1 ms ,y_sms ,nnlink,lnlink,skew ,
1042 2 fr_ll ,weight,fnl6 ,x ,xframe,
1043 3 v ,idown ,tag_lnk_sms,itab,fnl)
1044
1045 IF(njoint > 0)
1046 .
CALL sms_cjoint_1(y_sms ,diag_sms,ljoint,iadcj,fr_cj,
1047 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1048 END IF
1049
1050 IF(nrwall > 0)THEN
1051
1053
1054
1055 iflag=2
1057 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1058 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1059 4 rbid ,y_sms ,rbid ,rbid ,wfext )
1060 END IF
1061
1063
1064
1065 DO n=nodft1_sms,nodlt1_sms,mvsiz
1066
1067 llt=
min(nodlt1_sms-n+1,mvsiz)
1068
1069 DO l=1,llt
1070 i=indx1_sms(n+l-1)
1071 s(l) = (p_sms(1,i)*y_sms(1,i)
1072 . + p_sms(2,i)*y_sms(2,i)
1073 . + p_sms(3,i)*y_sms(3,i))*weight(i)
1074 ENDDO
1075
1076 IF(iparit==0)THEN
1077 st = zero
1078 DO l=1,llt
1079 st=st+s(l)
1080 END DO
1081#include "lockon.inc"
1082 s_sms=s_sms+st
1083#include "lockoff.inc"
1084 ELSE
1085 DO k=1,6
1086 s6t(k) = zero
1087 ENDDO
1088 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
1090 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
1091#include "lockon.inc"
1092 DO k=1,6
1093 s6sms(k)=s6sms(k)+s6t(k)
1094 ENDDO
1095#include "lockoff.inc"
1096 END IF
1097 ENDDO
1098
1099
1101
1102 IF(nspmd <= 1)THEN
1103 IF(iparit/=0.AND.itask==0)THEN
1104 s_sms=s6sms(1)+s6sms(2)+s6sms(3)+
1105 . s6sms(4)+s6sms(5)+s6sms(6)
1106 END IF
1107 ELSEIF(itask==0)THEN
1108 IF(iparit==0)THEN
1109 IF(imonm>0.AND.itask==0)
CALL startime(timers,63)
1112 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,63)
1113 ELSE
1114 IF(imonm>0.AND.itask==0)
CALL startime(timers,63)
1115 DO k=1,6
1116 dbuf(k) =s6sms(k)
1117 END DO
1119 s_sms = dbuf(1)+dbuf(2)+dbuf(3)+
1120 . dbuf(4)+dbuf(5)+dbuf(6)
1122 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,63)
1123 END IF
1124 END IF
1125
1127
1129
1130
1131 DO n=nodft1_sms,nodlt1_sms
1132 i=indx1_sms(n)
1133 x_sms(1,i) = x_sms(1,i) +
alpha*p_sms(1,i)
1134 x_sms(2,i) = x_sms(2,i) +
alpha*p_sms(2,i)
1135 x_sms(3,i) = x_sms(3,i) +
alpha*p_sms(3,i)
1136 res_sms(1,i) = res_sms(1,i) -
alpha*y_sms(1,i)
1137 res_sms(2,i) = res_sms(2,i) -
alpha*y_sms(2,i)
1138 res_sms(3,i) = res_sms(3,i) -
alpha*y_sms(3,i)
1139 ENDDO
1140
1141 IF(nfxvel > 0)THEN
1142
1144
1145 IF(itask==0)
1146 .
CALL sms_fixvel(ibfv ,res_sms ,v ,npc ,tf ,
1147 2 vel ,diag_sms,x ,skew ,sensor_tab,
1148 3 weight ,d ,iframe,xframe ,nsensor ,
1149 4 it+1 ,diag_sms,nodnx_sms,cptreac,nodreac,
1150 5 fthreac,am ,vr ,dr ,in ,
1151 6 rby ,wfext)
1152
1154
1155 END IF
1156
1157 DO n=nodft1_sms,nodlt1_sms
1158 i=indx1_sms(n)
1159 z_sms(1,i) = res_sms(1,i) *prec_sms(i)
1160 z_sms(2,i) = res_sms(2,i) *prec_sms(i)
1161 z_sms(3,i) = res_sms(3,i) *prec_sms(i)
1162 END DO
1163
1164
1165
1166 IF (nrbe3>0)THEN
1167
1169
1170 IF(itask==0)THEN
1171 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
1172 2 skew ,res_sms ,prec_sms3 )
1173 END IF
1174 END IF
1175
1176
1177
1178 IF (nrbe2>0) THEN
1179
1181
1182 IF(itask==0)THEN
1184 1 irbe2 ,lrbe2 ,res_sms,z_sms ,prec_sms3,
1185 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
1186 END IF
1187
1188 END IF
1189
1190
1191
1192 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
1193
1195
1196 idown=1
1198 1 ms ,z_sms ,ilink ,llink,skew,
1199 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1200 3 itab ,frl )
1201
1203 1 ms ,z_sms ,nnlink,lnlink,skew ,
1204 2 fr_ll ,weight,fnl6 ,x ,xframe,
1205 3 v ,idown ,tag_lnk_sms,itab,fnl)
1206
1207 IF(njoint > 0)
1208 .
CALL sms_cjoint_1(z_sms ,diag_sms,ljoint,iadcj,fr_cj,
1209 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1210
1211 IF(nadmesh/=0)THEN
1213 . sh3tree ,itask)
1214 END IF
1215
1217
1218 END IF
1219
1220 DO n=nodft1_sms,nodlt1_sms,mvsiz
1221
1222 llt=
min(nodlt1_sms-n+1,mvsiz)
1223
1224 DO l=1,llt
1225 i=indx1_sms(n+l-1)
1226 r2(l) = ( res_sms(1,i)*res_sms(1,i)
1227 . + res_sms(2,i)*res_sms(2,i)
1228 . + res_sms(3,i)*res_sms(3,i))
1229 . * weight(i)
1230 g(l) = ( z_sms(1,i)*res_sms(1,i)
1231 . + z_sms(2,i)*res_sms(2,i)
1232 . + z_sms(3,i)*res_sms(3,i))
1233 . * weight(i)
1234 ENDDO
1235
1236 IF(iparit==0)THEN
1237 r2t = zero
1238 g1t = zero
1239 DO l=1,llt
1240 r2t = r2t + r2(l)
1241 g1t = g1t + g(l)
1242 ENDDO
1243#include "lockon.inc"
1244 res1_sms= res1_sms+ r2t
1245 g1_sms = g1_sms + g1t
1246#include "lockoff.inc"
1247 ELSE
1248 DO k=1,6
1249 r6t(k) = zero
1250 g6t(k) = zero
1251 ENDDO
1252 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
1255 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
1256#include "lockon.inc"
1257 DO k=1,6
1258 r6sms(k)=r6sms(k)+r6t(k)
1259 g6sms(k)=g6sms(k)+g6t(k)
1260 ENDDO
1261#include "lockoff.inc"
1262 END IF
1263 ENDDO
1264
1265
1267
1268 IF(nspmd <= 1)THEN
1269 IF(iparit/=0.AND.itask==0)THEN
1270 res1_sms=r6sms(1)+r6sms(2)+r6sms(3)+
1271 . r6sms(4)+r6sms(5)+r6sms(6)
1272 g1_sms =g6sms(1)+g6sms(2)+g6sms(3)+
1273 . g6sms(4)+g6sms(5)+g6sms(6)
1274 END IF
1275 ELSEIF(itask==0)THEN
1276 IF(iparit==0)THEN
1277 IF(imonm>0)
CALL startime(timers,63)
1278 rbuf(1)=res1_sms
1279 rbuf(2)=g1_sms
1282 res1_sms =rbuf(1)
1283 g1_sms =rbuf(2)
1284 IF(imonm>0)
CALL stoptime(timers,63)
1285 ELSE
1286 IF(imonm>0)
CALL startime(timers,63)
1287 DO k=1,6
1288 dbuf(k) =r6sms(k)
1289 dbuf(k+6)=g6sms(k)
1290 END DO
1292 rbuf(1) = dbuf(1)+dbuf(2)+dbuf(3)+
1293 . dbuf(4)+dbuf(5)+dbuf(6)
1294 rbuf(2) = dbuf(7) +dbuf(8) +dbuf(9)+
1295 . dbuf(10)+dbuf(11)+dbuf(12)
1297 res1_sms=rbuf(1)
1298 g1_sms =rbuf(2)
1299 IF(imonm>0)
CALL stoptime(timers,63)
1300 END IF
1301 END IF
1302
1304
1305
1306 if(ncpria > 0) then
1307 if(itask==0.and.ispmd==0
1308 . .and.(ncprisms < 0 .and.
1309 . mod(ncycle,ncpria)==0))then
1310 write(iout,1002) ncycle,totit,res1_sms,toln
1311 end if
1312 endif
1313
1314 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1315 IF(it>=nlim.OR.res1_sms<=toln) GO TO 200
1316 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1317
1318 beta=g1_sms/
max(em30,g0_sms)
1319
1321
1322
1323 g0_sms = g1_sms
1324
1325
1326 DO n=nodft1_sms,nodlt1_sms
1327 i=indx1_sms(n)
1328 p_sms(1,i) = z_sms(1,i) + beta*p_sms(1,i)
1329 p_sms(2,i) = z_sms(2,i) + beta*p_sms(2,i)
1330 p_sms(3,i) = z_sms(3,i) + beta*p_sms(3,i)
1331 ENDDO
1332
1333
1334
1335 IF(nrbody/=0)THEN
1336
1338
1339 DO n=nodft1_sms,nodlt1_sms
1340 i=indx1_sms(n)
1341 m=tagslv_rby_sms(i)
1342 IF(m /= 0)THEN
1343 msr=npby(1,m)
1344 p_sms(1,i)=p_sms(1,msr)
1345 p_sms(2,i)=p_sms(2,msr)
1346 p_sms(3,i)=p_sms(3,msr)
1347 END IF
1348 END DO
1349
1351
1352 END IF
1353
1354
1356
1357 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1358 GO TO 100
1359 200 CONTINUE
1360
1361
1362
1363
1364
1365 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1366 IF(it>=nlim)THEN
1367 mstop = 2
1368 IF(ispmd==0.AND.itask==0)THEN
1369#include "lockon.inc"
1370 WRITE(istdo,*)
1371 . ' ** ERROR : AMS IS LIKELY DIVERGING '
1372 WRITE(iout,1100) nlim,ncycle
1373#include "lockoff.inc"
1374 ENDIF
1375
1376 IF(idtmins/=0)THEN
1377
1379
1380 CALL sms_check(timers, nodft ,nodlt ,iadk ,jdik ,diag_sms,
1381 2 lt_k ,jadi_sms ,jdii_sms ,lti_sms ,itask ,
1382 3 itab ,iad_elem ,fr_elem ,fr_sms ,fr_rms ,
1383 4 list_sms,list_rms,ams_work)
1384
1385 END IF
1386
1387 GO TO 300
1388 ENDIF
1389
1390
1391
1392 IF(nrwall/=0)THEN
1393
1395
1396 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1398 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
1399 2 itask ,diag_sms,lt_k ,x_sms ,z_sms ,
1400 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
1401 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
1402 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
1403 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
1404 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
1405 8 nodii_sms )
1406
1407 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1408
1410
1411 IF(nadmesh/=0)THEN
1412 IF(itask==0)THEN
1414 . sh3tree ,nodnx_sms)
1415 END IF
1416
1418
1419 END IF
1420
1421
1422
1423 IF (nrbe2>0.OR.r2size>0) THEN
1424
1426
1427 IF(itask==0)THEN
1428
1430 1 irbe2 ,lrbe2 ,x_sms ,z_sms ,ms ,
1431 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
1432
1434 1 irbe2 ,lrbe2 ,x ,z_sms ,am ,
1435 1 ms ,in ,skew ,weight ,iad_rbe2,
1436 2 fr_rbe2m,nmrbe2)
1437
1438 END IF
1439
1440 END IF
1441
1442
1443
1444 IF (nrbe3>0)THEN
1445
1447
1448 IF(itask==0)THEN
1450 1 irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
1451 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
1452 3 rrbe3 ,rrbe3_pon ,r3size)
1453 END IF
1454 END IF
1455
1456 IF(nrbody/=0)THEN
1457
1459
1460
1461 DO m =1,nrbody
1462 DO k = 1, 6
1463 rby6(1,k,m) = zero
1464 rby6(2,k,m) = zero
1465 rby6(3,k,m) = zero
1466 END DO
1467
1468 msr=npby(1,m)
1469 IF(msr < 0) cycle
1470
1471 IF(tagmsr_rby_sms(msr) /= 0) THEN
1472 rby6(1,1,m)=z_sms(1,msr)*weight(msr)
1473 rby6(2,1,m)=z_sms(2,msr)*weight(msr)
1474 rby6(3,1,m)=z_sms(3,msr)*weight(msr)
1475 END IF
1476
1477 END DO
1478
1479
1480
1481 DO n=1,nindx1_sms
1482 i=indx1_sms(n)
1483 m=tagslv_rby_sms(i)
1484 IF(m /= 0 )THEN
1485 IF(weight(i) /= 0)THEN
1486 rby6(1,1,m)=rby6(1,1,m)+z_sms(1,i)
1487 rby6(2,1,m)=rby6(2,1,m)+z_sms(2,i)
1488 rby6(3,1,m)=rby6(3,1,m)+z_sms(3,i)
1489 END IF
1490 END IF
1491 END DO
1492
1493
1494 IF (nspmd > 1) THEN
1495
1496 nrbdim=3
1498 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
1499
1500 END IF
1501
1502
1503 DO m =1,nrbody
1504 msr=npby(1,m)
1505 IF(msr < 0) cycle
1506 IF(tagmsr_rby_sms(msr) /= 0) THEN
1507 z_sms(1,msr)=rby6(1,1,m)
1508 z_sms(2,msr)=rby6(2,1,m)
1509 z_sms(3,msr)=rby6(3,1,m)
1510 END IF
1511 END DO
1512
1513 END IF
1514
1516
1517 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
1518 2 skew ,z_sms ,nodlt1_sms )
1519
1520
1521
1522 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,z_sms)
1523
1524
1525
1526 IF(nrlink+nlink+njoint > 0)THEN
1527
1529
1530 idown=0
1532 1 ms ,z_sms ,ilink ,llink,skew,
1533 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1534 3 itab ,frl )
1535
1537 1 ms ,z_sms ,nnlink,lnlink,skew ,
1538 2 fr_ll ,weight,fnl6 ,x ,xframe,
1539 3 v ,idown ,tag_lnk_sms,itab,fnl)
1540
1541 IF(njoint > 0)
1542 .
CALL sms_cjoint_1(z_sms ,diag_sms,ljoint,iadcj,fr_cj,
1543 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1544 END IF
1545
1547
1548 IF(ifricw/=0.AND.iact==0)THEN
1549
1550 iact=iact+1
1551
1552 DO n=nodft1_sms,nodlt1_sms
1553 i=indx1_sms(n)
1554
1555 res_sms(1,i) = r(1,i)-z_sms(1,i)
1556 res_sms(2,i) = r(2,i)-z_sms(2,i)
1557 res_sms(3,i) = r(3,i)-z_sms(3,i)
1558 ENDDO
1559
1560 IF(nrbody/=0)THEN
1561
1563
1564 DO n=nodft1_sms,nodlt1_sms
1565 i=indx1_sms(n)
1566 m=tagslv_rby_sms(i)
1567 IF(m /= 0)THEN
1568 res_sms(1,i)=zero
1569 res_sms(2,i)=zero
1570 res_sms(3,i)=zero
1571 END IF
1572 END DO
1573 END IF
1574
1576
1577
1578 iflag=3
1580 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1581 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1582 4 x_sms ,res_sms,r ,frea ,wfext)
1583 it =0
1584 GO TO 10
1585 ELSE
1586
1587 DO n=nodft1_sms,nodlt1_sms
1588 i=indx1_sms(n)
1589
1590
1591 frea(1,i) = frea(1,i)+r(1,i)-z_sms(1,i)
1592 frea(2,i) = frea(2,i)+r(2,i)-z_sms(2,i)
1593 frea(3,i) = frea(3,i)+r(3,i)-z_sms(3,i)
1594 ENDDO
1595
1597
1598
1599 IF(nrbody/=0)THEN
1600
1602
1603 DO n=nodft1_sms,nodlt1_sms
1604 i=indx1_sms(n)
1605 m=tagslv_rby_sms(i)
1606 IF(m /= 0)THEN
1607 frea(1,i)=zero
1608 frea(2,i)=zero
1609 frea(3,i)=zero
1610 END IF
1611 END DO
1612
1614
1615 END IF
1616
1617 iflag=4
1619 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1620 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1621 4 x_sms ,res_sms,r ,frea ,wfext)
1622
1624
1625 END IF
1626 END IF
1627
1628
1629 300 CONTINUE
1630 DO n=nodft1_sms,nodlt1_sms
1631 i=indx1_sms(n)
1632 r(1,i) = x_sms(1,i)
1633 r(2,i) = x_sms(2,i)
1634 r(3,i) = x_sms(3,i)
1635 ENDDO
1636 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1637
1638 IF (m_vs_sms > 0 .AND. it > 0) THEN
1639 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
1641 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
1642 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
1643 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
1644 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
1645 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
1646 6 mv6 ,mw6 ,ms ,x_sms ,p_sms ,
1647 7 y_sms ,nodft ,nodlt ,kinet )
1648
1650
1651 IF (itask == 0) ncg_run_sms = ncg_run_sms + 1
1652 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
1653 END IF
1654
1655 if(ncpria > 0) then
1656 if(itask==0.and.ispmd==0
1657 . .and.(ncprisms/=0.and.mod(ncycle,ncpria)==0))then
1658 IF(totit==0)THEN
1659 write(iout,1000) ncycle,totit
1660 ELSE
1661 write(iout,1001) ncycle,totit,res1_sms,toln
1662 END IF
1663 end if
1664 endif
1665
1666 1000 FORMAT(3x,'cycle number',I5,
1667 . ' total c.g. iteration number=',I5)
1668 1001 FORMAT(3X,'cycle number',I5,
1669 . ' total c.g. iteration number=',I5,
1670 . ' relative residual
norm=
',E11.4,
1671 . ' reference residual
norm',E11.4)
1672 1002 FORMAT(3X,'cycle number',I5,
1673 . ' iteration number=',I5,
1674 . ' relative residual
norm=
',E11.4,
1675 . ' reference residual
norm',E11.4)
1676 1100 FORMAT(
1677 . ' ** error : ams is likely diverging:',/,
1678 . ' total c.g. iteration number = ',I8,' at cycle number ',I8)
1679 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine sum_6_float(jft, jlt, f, f6, n)
subroutine sms_admesh_1(a, diag_sms, ixc, ixtg, sh4tree, sh3tree, nodnx_sms)
subroutine sms_admesh_2(a, diag_sms, ixc, ixtg, sh4tree, sh3tree, itask)
subroutine sms_bcs(nodft, nodlt, indx1, icodt, iskew, skew, a, nodlast)
subroutine sms_bcscyc(ibcscyc, lbcscyc, skew, x, a)
subroutine sms_cjoint_1(a, ms, ljoint, iadcj, fr_cj, cjwork, idown, tag_lnk_sms, itask)
subroutine sms_fixvel(ibfv, a, v, npc, tf, vel, ms, x, skew, sensor_tab, weight, d, iframe, xframe, nsensor, it, diag_sms, nodnx_sms, cptreac, nodreac, fthreac, ar, vr, dr, in, rby, wfext)
subroutine sms_check(timers, nodft, nodlt, iadk, jdik, diag_k, lt_k, iadi, jdii, lt_i, itask, itab, iad_elem, fr_elem, fr_sms, fr_rms, list_sms, list_rms, ams_work)
subroutine sms_mav_lt(timers, nodft, nodlt, numnod, iadl, jdil, itask, diag_k, lt_k, v, w, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, nodft2_sms, nodlt2_sms, indx2_sms, nodii_sms)
subroutine sms_inist(timers, iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, nodft, nodlt)
subroutine sms_inisi(iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, nodft, nodlt, prec_sms, kinet)
subroutine sms_pro_p(timers, nodft, nodlt, numnod, p, weight, itask, pj, diag_sms)
subroutine sms_updst(iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, u, p, y, nodft, nodlt, kinet)
subroutine sms_inix(timers, nodft, nodlt, numnod, x, r, weight, itask, diag_sms)
subroutine sms_rbe_cnds(irbe2, lrbe2, x, a, ar, ms, in, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe_accl(irbe2, lrbe2, r, a, prec_sms3, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe_prec(irbe2, lrbe2, diag_sms, ms, diag_sms3, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe_corr(irbe2, lrbe2, v, w, ms, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe3t2(irbe3, lrbe3, x, a, frbe3, skew, r, prec_sms3)
subroutine sms_rbe3_prec(irbe3, lrbe3, x, diag_sms, diag_sms3, frbe3, skew, weight, iad_m, fr_m, fr_mpon, rsum, rsum_pon, r3size)
subroutine sms_rbe3t1(irbe3, lrbe3, x, a, frbe3, skew, weight, iad_m, fr_m, fr_mpon, rsum, rsum_pon, r3size)
subroutine sms_rgwal_0(iflag, x, v, rwbuf, lprw, nprw, ms, fsav, fr_wall, fopt, rwsav, weight, irwl_work, nrwl_sms, frwl6, a, res, r, frea, wfext)
subroutine sms_rlink11(ms, a, nnlink, lllink, skew, fr_ll, weight, frl6, x, xframe, v, idown, tag_lnk_sms, itab, frl)
subroutine sms_rlink10(ms, a, nlink, llink, skew, fr_rl, weight, frl6, idown, tag_lnk_sms, itab, frl)
subroutine spmd_exch_a_rb6(nrbdim, iad_rby, fr_rby6, icsize, rbf6)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_glob_dsum9(v, len)
subroutine spmd_glob_dpsum9(v, len)