92
93
94
95 USE timer_mod
97 USE sensor_mod
99 USE ams_work_mod
100
101
102
103#include "implicit_f.inc"
104#include "comlock.inc"
105
106
107
108#include "mvsiz_p.inc"
109
110
111
112#include "com01_c.inc"
113#include "com04_c.inc"
114#include "param_c.inc"
115#include "parit_c.inc"
116#include "remesh_c.inc"
117#include "scr03_c.inc"
118#include "scr07_c.inc"
119#include "sms_c.inc"
120#include "task_c.inc"
121#include "timeri_c.inc"
122#include "units_c.inc"
123
124
125
126
127 TYPE(TIMER_), INTENT(inout) :: TIMERS
128 INTEGER NODFT, NODLT, IADK(*), JDIK(*), NNZ, ISP,NSENSOR,
129 . NODFT1_SMS,NODLT1_SMS,INDX1_SMS(*),
130 . ICODT(*), ICODR(*), ISKEW(*), ITASK, NODNX_SMS(*),
131 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*), WEIGHT(*),
132 . NPC(*), IBFV(NIFV,*),IFRAME(LISKN,*),
133 . JADI_SMS(*), JDII_SMS(*),
134 . FR_SMS(+1), FR_RMS(+1),
135 . (*), LIST_RMS(*),ISKYI_SMS(*),
136 . ILINK(*), LLINK(*), FR_RL(NSPMD+2,*), NNLINK(10,*),
137 . LNLINK(*), FR_LL(NSPMD+2,*), TAG_LNK_SMS(*), ITAB(*),
138 . LJOINT(*), FR_CJ(*), IADCJ(*),
139 . NPRW(*), LPRW(*), FR_WALL(*), IRWL_WORK(*), NRWL_SMS(*),
140 . IMV(*), KINET(*),CPTREAC,NODREAC(*),
141 . IXC(NIXC,*), IXTG(NIXTG,*),
142 . SH4TREE(,*), SH3TREE(KSH3TREE,*),
143 . NPBY(NNPBY,*), LPBY(*), TAGMSR_RBY_SMS(*),
144 . IRBE2(NRBE2L,*), LRBE2(*), IAD_RBE2(*),
145 . FR_RBE2M(*), NMRBE2, R2SIZE, IRBE3(NRBE3L,*), LRBE3(*),
146 . IAD_RBE3M(*) ,FR_RBE3M(*) ,FR_RBE3MP(*),
147 . FR_RBY6(*),IAD_RBY(*), TAGSLV_RBY_SMS(*),R3SIZE,
148 . NODFT2_SMS,NODLT2_SMS,INDX2_SMS(*),NODII_SMS(*),
149 . IBCSCYC(*) ,LBCSCYC(*)
150
152 . diag_sms(*), lt_k(*) ,r(3,*),
153 . x_sms(3,*), p_sms(3,*), y_sms(3,*), z_sms(3,*), prec_sms(*),
154 . skew(*), v(3,*), x(3,*), d(3,*), tf(*), vel(lfxvelr,*),
155 . xframe(nxframe,*), lti_sms(*), res_sms(3,*),
156 . ms(*), fsav(nthvki,*), cjwork(*), frl(*), fnl(*),
157 . rwbuf(*), rwsav(*), fopt(*), frea(3,*),rbid,
158 . mskyi_fi_sms(*), mskyi_sms(*), vfi(*), mv(*),fthreac(6,*),
159 . am(3,*), vr(3,*), dr(3,*), in(*), rby(nrby,*),
160 . frbe3(*), rrbe3(*),
161 . prec_sms3(3,numnod), diag_sms3(3,numnod)
162 DOUBLE PRECISION FRL6(*), FNL6(*), MV6(*), MW6(*), FRWL6(*),
163 . RRBE3_PON(*)
164 DOUBLE PRECISION RBY6(8,6,NRBYKIN)
165 TYPE() INTSTAMP(*)
166 TYPE (sensor_str_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: sensor_tab
167 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
168 TYPE (ams_work_), INTENT(INOUT) :: AMS_WORK
169
170
171
172 INTEGER I, IT, TOTIT, NLIM, N, L, K, LLT, IDOWN, J, IFLAG, IACT,
173 . NCPRIA, M, MSR, IAD, NSN, KI, NRBDIM
176 . st , r2t, r02t, g0t, g1t, res_old,
177 . p1, p2, p3, dt05,
178 . xx, yy, zz, vrx, vry, vrz, v1, v2, v3, gx, gy, gz, a1, a2, a3
180 . r2(mvsiz), g(mvsiz), s(mvsiz), r02(mvsiz)
182 . rbuf(2)
183 DOUBLE PRECISION R6T(6), G6T(6), S6T(6), DBUF(12)
184
185 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
186
187 ncpria=abs(ncprisms)
189
190 nupdtl_sms=-1
191
192
193 iact=0
194 it =0
195 totit=0
196
197
198
199
200
201
202 IF(nrbe2+r2size+nrbe3/=0)THEN
203 DO n=nodft1_sms,nodlt1_sms
204 i=indx1_sms(n)
205 diag_sms3(1,i)=prec_sms(i)
206 diag_sms3(2,i)=prec_sms(i)
207 diag_sms3(3,i)=prec_sms(i)
208 END DO
209 END IF
210
211
212 DO n=nodft1_sms,nodlt1_sms
213 i=indx1_sms(n)
214 IF(prec_sms(i)==zero)THEN
215
216
217 r(1,i)=zero
218 r(2,i)=zero
219 r(3,i)=zero
220 ELSE
221 prec_sms(i)=one/prec_sms(i)
222 END IF
223 ENDDO
224
225
226
227 IF(nrbe2+r2size+nrbe3/=0)THEN
228 IF (nrbe2>0.OR.r2size>0) THEN
229
231
232 IF(itask==0)THEN
234 1 irbe2 ,lrbe2 ,diag_sms,ms ,diag_sms3,
235 1 skew ,weight ,iad_rbe2,fr_rbe2m ,nmrbe2)
236 END IF
237 END IF
238
239
240
241 IF (nrbe3>0)THEN
242
244
245 IF(itask==0)THEN
247 1 irbe3 ,lrbe3 ,x ,diag_sms ,diag_sms3,
248 2 frbe3 ,skew ,weight ,iad_rbe3m,fr_rbe3m ,
249 3 fr_rbe3mp,rrbe3 ,rrbe3_pon ,r3size)
250 END IF
251 END IF
252
254
255 DO n=nodft1_sms,nodlt1_sms
256 i=indx1_sms(n)
257 IF(diag_sms3(1,i)==zero)THEN
258 prec_sms3(1,i)=zero
259 ELSE
260 prec_sms3(1,i)=one/diag_sms3(1,i)
261 END IF
262 IF(diag_sms3(2,i)==zero)THEN
263 prec_sms3(2,i)=zero
264 ELSE
265 prec_sms3(2,i)=one/diag_sms3(2,i)
266 END IF
267 IF(diag_sms3(3,i)==zero)THEN
268 prec_sms3(3,i)=zero
269 ELSE
270 prec_sms3(3,i)=one/diag_sms3(3,i)
271 END IF
272 END DO
273
274 END IF
275
276
277
278 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
279
281
282 idown=0
284 1 ms ,r ,ilink ,llink,skew,
285 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
286 3 itab ,frl )
287
289 1 ms ,r ,nnlink,lnlink,skew ,
290 2 fr_ll ,weight,fnl6 ,x ,xframe,
291 3 v ,idown ,tag_lnk_sms,itab,fnl)
292
293 IF(njoint > 0)
295 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
296
297
298
299
300
301
302
303
305
306 END IF
307
308
309 IF (m_vs_sms > 0 ) THEN
310 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
311 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
312
314 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
315 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
316 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
317 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
318 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
319 6 mv6 ,mw6 ,ms ,nodft ,nodlt ,
320 7 prec_sms ,kinet )
321
323
325 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
326 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
327 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
328 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
329 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
330 6 mv6 ,mw6 ,ms ,nodft ,nodlt )
331
333
334 CALL sms_inix(timers,nodft,nodlt,numnod,x_sms,r ,weight,itask ,
335 . diag_sms )
336
337 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
338 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
339
340 ELSE
341
342 DO n=nodft1_sms,nodlt1_sms
343 i=indx1_sms(n)
344
345 x_sms(1,i) = r(1,i)*prec_sms(i)
346 x_sms(2,i) = r(2,i)*prec_sms(i)
347 x_sms(3,i) = r(3,i)*prec_sms(i)
348 ENDDO
349 END IF
350
351
352
353 IF (nrbe3>0)THEN
354
356
357 IF(itask==0)THEN
358 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,x_sms ,frbe3 ,
359 2 skew ,r ,prec_sms3 )
360 END IF
361 END IF
362
363
364
365 IF (nrbe2>0) THEN
366
368
369 IF(itask==0)THEN
371 1 irbe2 ,lrbe2 ,r ,x_sms ,prec_sms3 ,
372 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
373 END IF
374
375 END IF
376
377
378
379 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
380
382
383 idown=1
385 1 ms ,x_sms ,ilink ,llink,skew,
386 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
387 3 itab ,frl )
388
390 1 ms ,x_sms ,nnlink,lnlink,skew ,
391 2 fr_ll ,weight,fnl6 ,x ,xframe,
392 3 v ,idown ,tag_lnk_sms,itab,fnl)
393
394 IF(njoint > 0)
396 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
397
398 IF(nadmesh/=0)THEN
400 . sh3tree ,itask)
401 END IF
402 END IF
403
404 IF(nrwall > 0)THEN
405
407
408
409 iflag=0
411 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
412 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
413 4 x_sms ,rbid ,rbid ,rbid ,wfext )
414
416
417
418 iflag=1
420 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
421 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
422 4 x_sms ,rbid ,rbid ,rbid ,wfext )
423 END IF
424
425 IF(nadmesh/=0)THEN
426
427 y_sms(1:3,nodft:nodlt)=zero
428 z_sms(1:3,nodft:nodlt)=zero
429
431
432 END IF
433
434
435 IF(nrbody/=0)THEN
436
438
439 DO n=nodft1_sms,nodlt1_sms
440 i=indx1_sms(n)
441 m=tagslv_rby_sms(i)
442 IF(m /= 0)THEN
443 msr=npby(1,m)
444 x_sms(1,i)=x_sms(1,msr)
445 x_sms(2,i)=x_sms(2,msr)
446 x_sms(3,i)=x_sms(3,msr)
447 END IF
448 END DO
449
451
452 END IF
453
454 10 CONTINUE
455
456
458
459
460 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
462 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
463 2 itask ,diag_sms,lt_k ,x_sms ,z_sms ,
464 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
465 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
466 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
467 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
468 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
469 8 nodii_sms )
470
471 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
472
473 IF(iparit==0)THEN
474 res0_sms = zero
475 g0_sms = zero
476 ELSE
477
478 DO k=1,6
479 r6sms(k)=zero
480 g6sms(k)=zero
481 ENDDO
482
483 END IF
484
486
487 IF(nadmesh/=0)THEN
488 IF(itask==0)THEN
490 . sh3tree ,nodnx_sms)
491 END IF
492
494
495 END IF
496
497
498
499 IF (nrbe2>0.OR.r2size>0) THEN
500
502
503 IF(itask==0)THEN
504
506 1 irbe2 ,lrbe2 ,x_sms ,z_sms ,ms ,
507 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
508
510 1 irbe2 ,lrbe2 ,x ,z_sms ,am ,
511 1 ms ,in ,skew ,weight ,iad_rbe2,
512 2 fr_rbe2m,nmrbe2)
513
514 END IF
515
516 END IF
517
518
519
520 IF (nrbe3>0)THEN
521
523
524 IF(itask==0)THEN
526 1 irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
527 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
528 3 rrbe3 ,rrbe3_pon ,r3size)
529 END IF
530 END IF
531
532 IF(nrbody/=0)THEN
533
535
536
537 DO m =1,nrbody
538 DO k = 1, 6
539 rby6(1,k,m) = zero
540 rby6(2,k,m) = zero
541 rby6(3,k,m) = zero
542 END DO
543
544 msr=npby(1,m)
545 IF(msr < 0) cycle
546
547 IF(tagmsr_rby_sms(msr) /= 0) THEN
548 rby6(1,1,m)=z_sms(1,msr)*weight(msr)
549 rby6(2,1,m)=z_sms(2,msr)*weight(msr)
550 rby6(3,1,m)=z_sms(3,msr)*weight(msr)
551 END IF
552
553 END DO
554
555
556
557 DO n=1,nindx1_sms
558 i=indx1_sms(n)
559 m=tagslv_rby_sms(i)
560 IF(m /= 0)THEN
561 IF(weight(i) /= 0)THEN
562 rby6(1,1,m)=rby6(1,1,m)+z_sms(1,i)
563 rby6(2,1,m)=rby6(2,1,m)+z_sms(2,i)
564 rby6(3,1,m)=rby6(3,1,m)+z_sms(3,i)
565 END IF
566 END IF
567 END DO
568
569
570 IF (nspmd > 1) THEN
571
572 nrbdim=3
574 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
575
576 END IF
577
578
579 DO m =1,nrbody
580 msr=npby(1,m)
581 IF(msr < 0) cycle
582 IF(tagmsr_rby_sms(msr) /= 0) THEN
583 z_sms(1,msr)=rby6(1,1,m)
584 z_sms(2,msr)=rby6(2,1,m)
585 z_sms(3,msr)=rby6(3,1,m)
586 END IF
587 END DO
588
589 END IF
590
591 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
592 2 skew ,z_sms ,nodlt1_sms )
593
594
595
596 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,z_sms)
597
598
599
600 IF(nrlink+nlink+njoint > 0)THEN
601
603
604 idown=0
606 1 ms ,z_sms ,ilink ,llink,skew,
607 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
608 3 itab ,frl )
609
611 1 ms ,z_sms ,nnlink,lnlink,skew ,
612 2 fr_ll ,weight,fnl6 ,x ,xframe,
613 3 v ,idown ,tag_lnk_sms,itab,fnl)
614
615 IF(njoint > 0)
617 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
618 END IF
619
621
622 DO n=nodft1_sms,nodlt1_sms
623 i=indx1_sms(n)
624 res_sms(1,i) = r(1,i)-z_sms(1,i)
625 res_sms(2,i) = r(2,i)-z_sms(2,i)
626 res_sms(3,i) = r(3,i)-z_sms(3,i)
627 ENDDO
628
629 IF(nrbody/=0)THEN
630
632
633 DO n=nodft1_sms,nodlt1_sms
634 i=indx1_sms(n)
635 m=tagslv_rby_sms(i)
636 IF(m /= 0)THEN
637 res_sms(1,i)=zero
638 res_sms(2,i)=zero
639 res_sms(3,i)=zero
640 END IF
641 END DO
642
644
645 END IF
646
647 IF(nfxvel > 0)THEN
648
650
651 IF(itask==0)
653 2 vel ,diag_sms,x ,skew ,sensor_tab,
654 3 weight ,d ,iframe ,xframe ,nsensor ,
655 4 it+1 ,diag_sms,nodnx_sms,cptreac,nodreac,
656 5 fthreac,am ,vr ,dr ,in ,
657 6 rby ,wfext )
658
660
661 END IF
662
663 IF(nrwall > 0)THEN
664
666
667
668 iflag=2
670 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
671 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
672 4 rbid ,res_sms,rbid ,rbid ,wfext )
673
675
676 END IF
677
678 DO n=nodft1_sms,nodlt1_sms
679 i=indx1_sms(n)
680 z_sms(1,i) = res_sms(1,i) *prec_sms(i)
681 z_sms(2,i) = res_sms(2,i) *prec_sms(i)
682 z_sms(3,i) = res_sms(3,i) *prec_sms(i)
683 ENDDO
684
685
686
687 IF (nrbe3>0)THEN
688
690
691 IF(itask==0)THEN
692 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
693 2 skew ,res_sms ,prec_sms3 )
694 END IF
695 END IF
696
697
698
699 IF (nrbe2>0) THEN
700
702
703 IF(itask==0)THEN
705 1 irbe2 ,lrbe2 ,res_sms,z_sms ,prec_sms3,
706 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
707 END IF
708
709 END IF
710
711
712
713 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
714
716
717 idown=1
719 1 ms ,z_sms ,ilink ,llink,skew,
720 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
721 3 itab ,frl )
722
724 1 ms ,z_sms ,nnlink,lnlink,skew ,
725 2 fr_ll ,weight,fnl6 ,x ,xframe,
726 3 v ,idown ,tag_lnk_sms,itab,fnl)
727
728 IF(njoint > 0)
730 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
731
732 IF(nadmesh/=0)THEN
734 . sh3tree ,itask)
735 END IF
736
738
739 END IF
740
741
742 DO n=nodft1_sms,nodlt1_sms,mvsiz
743
744 llt=
min(nodlt1_sms-n+1,mvsiz)
745
746 DO l=1,llt
747 i=indx1_sms(n+l-1)
748 p_sms(1,i) = z_sms(1,i)
749 p_sms(2,i) = z_sms(2,i)
750 p_sms(3,i) = z_sms(3,i)
751 g(l) = ( z_sms(1,i)*res_sms(1,i)
752 . + z_sms(2,i)*res_sms(2,i)
753 . + z_sms(3,i)*res_sms(3,i))
754 . * weight(i)
755
756
757 r2(l) = ( res_sms(1,i)*res_sms(1,i)
758 . + res_sms(2,i)*res_sms(2,i)
759 . + res_sms(3,i)*res_sms(3,i))
760 . * weight(i)
761 ENDDO
762
763 IF(iparit==0)THEN
764 r02t = zero
765 g0t = zero
766 DO l=1,llt
767 r02t = r02t + r2(l)
768 g0t = g0t + g(l)
769 ENDDO
770#include "lockon.inc"
771 res0_sms=res0_sms+r02t
772 g0_sms =g0_sms +g0t
773#include "lockoff.inc"
774 ELSE
775 DO k=1,6
776 r6t(k) = zero
777 g6t(k) = zero
778 ENDDO
779 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
782 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
783#include "lockon.inc"
784 DO k=1,6
785 r6sms(k)=r6sms(k)+r6t(k)
786 g6sms(k)=g6sms(k)+g6t(k)
787 ENDDO
788#include "lockoff.inc"
789 END IF
790 ENDDO
791
792
794
795 IF(nspmd <= 1)THEN
796 IF(iparit/=0.AND.itask==0)THEN
797 res0_sms=r6sms(1)+r6sms(2)+r6sms(3)+
798 . r6sms(4)+r6sms(5)+r6sms(6)
799 g0_sms =g6sms(1)+g6sms(2)+g6sms(3)+
800 . g6sms(4)+g6sms(5)+g6sms(6)
801 END IF
802 ELSEIF(itask==0)THEN
803 IF(iparit==0)THEN
804 IF(imonm>0)
CALL startime(timers,63)
805 rbuf(1)=res0_sms
806 rbuf(2)=g0_sms
809 res0_sms=rbuf(1)
810 g0_sms =rbuf(2)
811 IF(imonm>0)
CALL stoptime(timers,63)
812 ELSE
813 IF(imonm>0)
CALL startime(timers,63)
814 DO k=1,6
815 dbuf(k) =r6sms(k)
816 dbuf(k+6)=g6sms(k)
817 END DO
819 rbuf(1) = dbuf(1)+dbuf(2)+dbuf(3)+
820 . dbuf(4)+dbuf(5)+dbuf(6)
821 rbuf(2) = dbuf(7) +dbuf(8) +dbuf(9)+
822 . dbuf(10)+dbuf(11)+dbuf(12)
824 res0_sms=rbuf(1)
825 g0_sms =rbuf(2)
826 IF(imonm>0)
CALL stoptime(timers,63)
827 END IF
828 END IF
829
830
831
832 IF(nrbody/=0)THEN
833
835
836 DO n=nodft1_sms,nodlt1_sms
837 i=indx1_sms(n)
838 m=tagslv_rby_sms(i)
839 IF(m /= 0)THEN
840 msr=npby(1,m)
841 p_sms(1,i)=p_sms(1,msr)
842 p_sms(2,i)=p_sms(2,msr)
843 p_sms(3,i)=p_sms(3,msr)
844 END IF
845 END DO
846
848
849 END IF
850
851
853
854 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
855 IF (res0_sms<em10) GOTO 200
856 toln=res0_sms*tol_sms
857
858 100 CONTINUE
859
860 it = it +1
861 totit = totit + 1
862
863
864
865 IF (m_vs_sms > 0 ) THEN
866 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
867
868 CALL sms_pro_p(timers,nodft ,nodlt ,numnod ,p_sms,weight,itask ,
869
870 . z_sms ,diag_sms)
871
873
874
875 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
876 END IF
877
878
879
881 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
882 2 itask ,diag_sms,lt_k ,p_sms ,y_sms ,
883 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
884 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
885 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
886 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
887 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
888 8 nodii_sms )
889
890 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
891 IF(iparit==0)THEN
892 res1_sms= zero
893 g1_sms = zero
894 s_sms = zero
895 ELSE
896
897 DO k=1,6
898 r6sms(k)=zero
899 g6sms(k)=zero
900 s6sms(k)=zero
901 ENDDO
902
903 END IF
904
906
907 IF(nadmesh/=0)THEN
908
910
911 IF(itask==0)THEN
913 . sh3tree ,nodnx_sms)
914 END IF
915
917
918 END IF
919
920
921
922 IF (nrbe2>0.OR.r2size>0) THEN
923
925
926 IF(itask==0)THEN
927
929 1 irbe2 ,lrbe2 ,p_sms ,y_sms ,ms ,
930 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
931
933 1 irbe2 ,lrbe2 ,x ,y_sms ,am ,
934 1 ms ,in ,skew ,weight ,iad_rbe2,
935 2 fr_rbe2m,nmrbe2)
936
937 END IF
938
939 END IF
940
941
942
943 IF (nrbe3>0)THEN
944
946
947 IF(itask==0)THEN
949 1 irbe3 ,lrbe3 ,x ,y_sms ,frbe3 ,
950 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
951 3 rrbe3 ,rrbe3_pon ,r3size)
952 END IF
953 END IF
954
955
956
957 IF(nrbody/=0)THEN
958
960
961
962 DO m =1,nrbody
963 DO k = 1, 6
964 rby6(1,k,m) = zero
965 rby6(2,k,m) = zero
966 rby6(3,k,m) = zero
967 END DO
968
969 msr=npby(1,m)
970 IF(msr < 0) cycle
971
972 IF(tagmsr_rby_sms(msr) /= 0) THEN
973 rby6(1,1,m)=y_sms(1,msr)*weight(msr)
974 rby6(2,1,m)=y_sms(2,msr)*weight(msr)
975 rby6(3,1,m)=y_sms(3,msr)*weight(msr)
976 END IF
977
978 END DO
979
980
981
982 DO n=1,nindx1_sms
983 i=indx1_sms(n)
984 m=tagslv_rby_sms(i)
985 IF(m /= 0 )THEN
986 IF(weight(i) /= 0)THEN
987 rby6(1,1,m)=rby6(1,1,m)+y_sms(1,i)
988 rby6(2,1,m)=rby6(2,1,m)+y_sms(2,i)
989 rby6(3,1,m)=rby6(3,1,m)+y_sms(3,i)
990 END IF
991 y_sms(1,i)=zero
992 y_sms(2,i)=zero
993 y_sms(3,i)=zero
994 END IF
995 END DO
996
997
998 IF (nspmd > 1) THEN
999
1000 nrbdim=3
1002 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
1003
1004 END IF
1005
1006
1007 DO m =1,nrbody
1008 msr=npby(1,m)
1009 IF(msr < 0) cycle
1010
1011 IF(tagmsr_rby_sms(msr) /= 0) THEN
1012 y_sms(1,msr)=rby6(1,1,m)
1013 y_sms(2,msr)=rby6(2,1,m)
1014 y_sms(3,msr)=rby6(3,1,m)
1015 END IF
1016
1017 END DO
1018
1019 END IF
1020
1021 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
1022 2 skew ,y_sms ,nodlt1_sms )
1023
1024 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,y_sms)
1025
1026
1027
1028 IF(nrlink+nlink+njoint > 0)THEN
1029
1031
1032 idown=0
1034 1 ms ,y_sms ,ilink ,llink,skew,
1035 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1036 3 itab ,frl )
1037
1039 1 ms ,y_sms ,nnlink,lnlink,skew ,
1040 2 fr_ll ,weight,fnl6 ,x ,xframe,
1041 3 v ,idown ,tag_lnk_sms,itab,fnl)
1042
1043 IF(njoint > 0)
1044 .
CALL sms_cjoint_1(y_sms ,diag_sms,ljoint,iadcj,fr_cj,
1045 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1046 END IF
1047
1048 IF(nrwall > 0)THEN
1049
1051
1052
1053 iflag=2
1055 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1056 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1057 4 rbid ,y_sms ,rbid ,rbid ,wfext )
1058 END IF
1059
1061
1062
1063 DO n=nodft1_sms,nodlt1_sms,mvsiz
1064
1065 llt=
min(nodlt1_sms-n+1,mvsiz)
1066
1067 DO l=1,llt
1068 i=indx1_sms(n+l-1)
1069 s(l) = (p_sms(1,i)*y_sms(1,i)
1070 . + p_sms(2,i)*y_sms(2,i)
1071 . + p_sms(3,i)*y_sms(3,i))*weight(i)
1072 ENDDO
1073
1074 IF(iparit==0)THEN
1075 st = zero
1076 DO l=1,llt
1077 st=st+s(l)
1078 END DO
1079#include "lockon.inc"
1080 s_sms=s_sms+st
1081#include "lockoff.inc"
1082 ELSE
1083 DO k=1,6
1084 s6t(k) = zero
1085 ENDDO
1086 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
1088 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
1089#include "lockon.inc"
1090 DO k=1,6
1091 s6sms(k)=s6sms(k)+s6t(k)
1092 ENDDO
1093#include "lockoff.inc"
1094 END IF
1095 ENDDO
1096
1097
1099
1100 IF(nspmd <= 1)THEN
1101 IF(iparit/=0.AND.itask==0)THEN
1102 s_sms=s6sms(1)+s6sms(2)+s6sms(3)+
1103 . s6sms(4)+s6sms(5)+s6sms(6)
1104 END IF
1105 ELSEIF(itask==0)THEN
1106 IF(iparit==0)THEN
1107 IF(imonm>0.AND.itask==0)
CALL startime(timers,63)
1110 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,63)
1111 ELSE
1112 IF(imonm>0.AND.itask==0)
CALL startime(timers,63)
1113 DO k=1,6
1114 dbuf(k) =s6sms(k)
1115 END DO
1117 s_sms = dbuf(1)+dbuf(2)+dbuf(3)+
1118 . dbuf(4)+dbuf(5)+dbuf(6)
1120 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,63)
1121 END IF
1122 END IF
1123
1125
1127
1128
1129 DO n=nodft1_sms,nodlt1_sms
1130 i=indx1_sms(n)
1131 x_sms(1,i) = x_sms(1,i) +
alpha*p_sms(1,i)
1132 x_sms(2,i) = x_sms(2,i) +
alpha*p_sms(2,i)
1133 x_sms(3,i) = x_sms(3,i) +
alpha*p_sms(3,i)
1134 res_sms(1,i) = res_sms(1,i) -
alpha*y_sms(1,i)
1135 res_sms(2,i) = res_sms(2,i) -
alpha*y_sms(2,i)
1136 res_sms(3,i) = res_sms(3,i) -
alpha*y_sms(3,i)
1137 ENDDO
1138
1139 IF(nfxvel > 0)THEN
1140
1142
1143 IF(itask==0)
1144 .
CALL sms_fixvel(ibfv ,res_sms ,v ,npc ,tf ,
1145 2 vel ,diag_sms,x ,skew ,sensor_tab,
1146 3 weight ,d ,iframe,xframe ,nsensor ,
1147 4 it+1 ,diag_sms,nodnx_sms,cptreac,nodreac,
1148 5 fthreac,am ,vr ,dr ,in ,
1149 6 rby ,wfext)
1150
1152
1153 END IF
1154
1155 DO n=nodft1_sms,nodlt1_sms
1156 i=indx1_sms(n)
1157 z_sms(1,i) = res_sms(1,i) *prec_sms(i)
1158 z_sms(2,i) = res_sms(2,i) *prec_sms(i)
1159 z_sms(3,i) = res_sms(3,i) *prec_sms(i)
1160 END DO
1161
1162
1163
1164 IF (nrbe3>0)THEN
1165
1167
1168 IF(itask==0)THEN
1169 CALL sms_rbe3t2(irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
1170 2 skew ,res_sms ,prec_sms3 )
1171 END IF
1172 END IF
1173
1174
1175
1176 IF (nrbe2>0) THEN
1177
1179
1180 IF(itask==0)THEN
1182 1 irbe2 ,lrbe2 ,res_sms,z_sms ,prec_sms3,
1183 1 skew ,weight ,iad_rbe2 ,fr_rbe2m,nmrbe2)
1184 END IF
1185
1186 END IF
1187
1188
1189
1190 IF(nrlink+nlink+njoint+nadmesh > 0)THEN
1191
1193
1194 idown=1
1196 1 ms ,z_sms ,ilink ,llink,skew,
1197 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1198 3 itab ,frl )
1199
1201 1 ms ,z_sms ,nnlink,lnlink,skew ,
1202 2 fr_ll ,weight,fnl6 ,x ,xframe,
1203 3 v ,idown ,tag_lnk_sms,itab,fnl)
1204
1205 IF(njoint > 0)
1206 .
CALL sms_cjoint_1(z_sms ,diag_sms,ljoint,iadcj,fr_cj,
1207 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1208
1209 IF(nadmesh/=0)THEN
1211 . sh3tree ,itask)
1212 END IF
1213
1215
1216 END IF
1217
1218 DO n=nodft1_sms,nodlt1_sms,mvsiz
1219
1220 llt=
min(nodlt1_sms-n+1,mvsiz)
1221
1222 DO l=1,llt
1223 i=indx1_sms(n+l-1)
1224 r2(l) = ( res_sms(1,i)*res_sms(1,i)
1225 . + res_sms(2,i)*res_sms(2,i)
1226 . + res_sms(3,i)*res_sms(3,i))
1227 . * weight(i)
1228 g(l) = ( z_sms(1,i)*res_sms(1,i)
1229 . + z_sms(2,i)*res_sms(2,i)
1230 . + z_sms(3,i)*res_sms(3,i))
1231 . * weight(i)
1232 ENDDO
1233
1234 IF(iparit==0)THEN
1235 r2t = zero
1236 g1t = zero
1237 DO l=1,llt
1238 r2t = r2t + r2(l)
1239 g1t = g1t + g(l)
1240 ENDDO
1241#include "lockon.inc"
1242 res1_sms= res1_sms+ r2t
1243 g1_sms = g1_sms + g1t
1244#include "lockoff.inc"
1245 ELSE
1246 DO k=1,6
1247 r6t(k) = zero
1248 g6t(k) = zero
1249 ENDDO
1250 IF(imonm>0.AND.itask==0)
CALL startime(timers,62)
1253 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,62)
1254#include "lockon.inc"
1255 DO k=1,6
1256 r6sms(k)=r6sms(k)+r6t(k)
1257 g6sms(k)=g6sms(k)+g6t(k)
1258 ENDDO
1259#include "lockoff.inc"
1260 END IF
1261 ENDDO
1262
1263
1265
1266 IF(nspmd <= 1)THEN
1267 IF(iparit/=0.AND.itask==0)THEN
1268 res1_sms=r6sms(1)+r6sms(2)+r6sms(3)+
1269 . r6sms(4)+r6sms(5)+r6sms(6)
1270 g1_sms =g6sms(1)+g6sms(2)+g6sms(3)+
1271 . g6sms(4)+g6sms(5)+g6sms(6)
1272 END IF
1273 ELSEIF(itask==0)THEN
1274 IF(iparit==0)THEN
1275 IF(imonm>0)
CALL startime(timers,63)
1276 rbuf(1)=res1_sms
1277 rbuf(2)=g1_sms
1280 res1_sms =rbuf(1)
1281 g1_sms =rbuf(2)
1282 IF(imonm>0)
CALL stoptime(timers,63)
1283 ELSE
1284 IF(imonm>0)
CALL startime(timers,63)
1285 DO k=1,6
1286 dbuf(k) =r6sms(k)
1287 dbuf(k+6)=g6sms(k)
1288 END DO
1290 rbuf(1) = dbuf(1)+dbuf(2)+dbuf(3)+
1291 . dbuf(4)+dbuf(5)+dbuf(6)
1292 rbuf(2) = dbuf(7) +dbuf(8) +dbuf(9)+
1293 . dbuf(10)+dbuf(11)+dbuf(12)
1295 res1_sms=rbuf(1)
1296 g1_sms =rbuf(2)
1297 IF(imonm>0)
CALL stoptime(timers,63)
1298 END IF
1299 END IF
1300
1302
1303
1304 if(ncpria > 0) then
1305 if(itask==0.and.ispmd==0
1306 . .and.(ncprisms < 0 .and.
1307 . mod(ncycle,ncpria)==0))then
1308 write(iout,1002) ncycle,totit,res1_sms,toln
1309 end if
1310 endif
1311
1312 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1313 IF(it>=nlim.OR.res1_sms<=toln) GO TO 200
1314 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1315
1316 beta=g1_sms/
max(em30,g0_sms)
1317
1319
1320
1321 g0_sms = g1_sms
1322
1323
1324 DO n=nodft1_sms,nodlt1_sms
1325 i=indx1_sms(n)
1326 p_sms(1,i) = z_sms(1,i) + beta*p_sms(1,i)
1327 p_sms(2,i) = z_sms(2,i) + beta*p_sms(2,i)
1328 p_sms(3,i) = z_sms(3,i) + beta*p_sms(3,i)
1329 ENDDO
1330
1331
1332
1333 IF(nrbody/=0)THEN
1334
1336
1337 DO n=nodft1_sms,nodlt1_sms
1338 i=indx1_sms(n)
1339 m=tagslv_rby_sms(i)
1340 IF(m /= 0)THEN
1341 msr=npby(1,m)
1342 p_sms(1,i)=p_sms(1,msr)
1343 p_sms(2,i)=p_sms(2,msr)
1344 p_sms(3,i)=p_sms(3,msr)
1345 END IF
1346 END DO
1347
1349
1350 END IF
1351
1352
1354
1355 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1356 GO TO 100
1357 200 CONTINUE
1358
1359
1360
1361
1362
1363 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1364 IF(it>=nlim)THEN
1365 mstop = 2
1366 IF(ispmd==0.AND.itask==0)THEN
1367#include "lockon.inc"
1368 WRITE(istdo,*)
1369 . ' ** ERROR : AMS IS LIKELY DIVERGING '
1370 WRITE(iout,1100) nlim,ncycle
1371#include "lockoff.inc"
1372 ENDIF
1373
1374 IF(idtmins/=0)THEN
1375
1377
1378 CALL sms_check(timers, nodft ,nodlt ,iadk ,jdik ,diag_sms,
1379 2 lt_k ,jadi_sms ,jdii_sms ,lti_sms ,itask ,
1380 3 itab ,iad_elem ,fr_elem ,fr_sms ,fr_rms ,
1381 4 list_sms,list_rms,ams_work)
1382
1383 END IF
1384
1385 GO TO 300
1386 ENDIF
1387
1388
1389
1390 IF(nrwall/=0)THEN
1391
1393
1394 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1396 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
1397 2 itask ,diag_sms,lt_k ,x_sms ,z_sms ,
1398 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
1399 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
1400 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
1401 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
1402 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
1403 8 nodii_sms )
1404
1405 IF(imonm>0.AND.itask==0)
CALL startime(timers,61)
1406
1408
1409 IF(nadmesh/=0)THEN
1410 IF(itask==0)THEN
1412 . sh3tree ,nodnx_sms)
1413 END IF
1414
1416
1417 END IF
1418
1419
1420
1421 IF (nrbe2>0.OR.r2size>0) THEN
1422
1424
1425 IF(itask==0)THEN
1426
1428 1 irbe2 ,lrbe2 ,x_sms ,z_sms ,ms ,
1429 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
1430
1432 1 irbe2 ,lrbe2 ,x ,z_sms ,am ,
1433 1 ms ,in ,skew ,weight ,iad_rbe2,
1434 2 fr_rbe2m,nmrbe2)
1435
1436 END IF
1437
1438 END IF
1439
1440
1441
1442 IF (nrbe3>0)THEN
1443
1445
1446 IF(itask==0)THEN
1448 1 irbe3 ,lrbe3 ,x ,z_sms ,frbe3 ,
1449 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
1450 3 rrbe3 ,rrbe3_pon ,r3size)
1451 END IF
1452 END IF
1453
1454 IF(nrbody/=0)THEN
1455
1457
1458
1459 DO m =1,nrbody
1460 DO k = 1, 6
1461 rby6(1,k,m) = zero
1462 rby6(2,k,m) = zero
1463 rby6(3,k,m) = zero
1464 END DO
1465
1466 msr=npby(1,m)
1467 IF(msr < 0) cycle
1468
1469 IF(tagmsr_rby_sms(msr) /= 0) THEN
1470 rby6(1,1,m)=z_sms(1,msr)*weight(msr)
1471 rby6(2,1,m)=z_sms(2,msr)*weight(msr)
1472 rby6(3,1,m)=z_sms(3,msr)*weight(msr)
1473 END IF
1474
1475 END DO
1476
1477
1478
1479 DO n=1,nindx1_sms
1480 i=indx1_sms(n)
1481 m=tagslv_rby_sms(i)
1482 IF(m /= 0 )THEN
1483 IF(weight(i) /= 0)THEN
1484 rby6(1,1,m)=rby6(1,1,m)+z_sms(1,i)
1485 rby6(2,1,m)=rby6(2,1,m)+z_sms(2,i)
1486 rby6(3,1,m)=rby6(3,1,m)+z_sms(3,i)
1487 END IF
1488 END IF
1489 END DO
1490
1491
1492 IF (nspmd > 1) THEN
1493
1494 nrbdim=3
1496 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
1497!$omp END single
1498 END IF
1499
1500
1501 DO m =1,nrbody
1502 msr=npby(1,m)
1503 IF(msr < 0) cycle
1504 IF(tagmsr_rby_sms(msr) /= 0) THEN
1505 z_sms(1,msr)=rby6(1,1,m)
1506 z_sms(2,msr)=rby6(2,1,m)
1507 z_sms(3,msr)=rby6(3,1,m)
1508 END IF
1509 END DO
1510
1511 END IF
1512
1514
1515 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
1516 2 skew ,z_sms ,nodlt1_sms )
1517
1518
1519
1520 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,z_sms)
1521
1522
1523
1524 IF(nrlink+nlink+njoint > 0)THEN
1525
1527
1528 idown=0
1530 1 ms ,z_sms ,ilink ,llink,skew,
1531 2 fr_rl ,weight,frl6 ,idown,tag_lnk_sms,
1532 3 itab ,frl )
1533
1535 1 ms ,z_sms ,nnlink,lnlink,skew ,
1536 2 fr_ll ,weight,fnl6 ,x ,xframe,
1537 3 v ,idown ,tag_lnk_sms,itab,fnl)
1538
1539 IF(njoint > 0)
1540 .
CALL sms_cjoint_1(z_sms ,diag_sms,ljoint,iadcj,fr_cj,
1541 . cjwork,idown ,tag_lnk_sms(nrlink+nlink+1),itask)
1542 END IF
1543
1545
1546 IF(ifricw/=0.AND.iact==0)THEN
1547
1548 iact=iact+1
1549
1550 DO n=nodft1_sms,nodlt1_sms
1551 i=indx1_sms(n)
1552
1553 res_sms(1,i) = r(1,i)-z_sms(1,i)
1554 res_sms(2,i) = r(2,i)-z_sms(2,i)
1555 res_sms(3,i) = r(3,i)-z_sms(3,i)
1556 ENDDO
1557
1558 IF(nrbody/=0)THEN
1559
1561
1562 DO n=nodft1_sms,nodlt1_sms
1563 i=indx1_sms(n)
1564 m=tagslv_rby_sms(i)
1565 IF(m /= 0)THEN
1566 res_sms(1,i)=zero
1567 res_sms(2,i)=zero
1568 res_sms(3,i)=zero
1569 END IF
1570 END DO
1571 END IF
1572
1574
1575
1576 iflag=3
1578 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1579 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1580 4 x_sms ,res_sms,r ,frea ,wfext)
1581 it =0
1582 GO TO 10
1583 ELSE
1584
1585 DO n=nodft1_sms,nodlt1_sms
1586 i=indx1_sms(n)
1587
1588
1589 frea(1,i) = frea(1,i)+r(1,i)-z_sms(1,i)
1590 frea(2,i) = frea(2,i)+r(2,i)-z_sms(2,i)
1591 frea(3,i) = frea(3,i)+r(3,i)-z_sms(3,i)
1592 ENDDO
1593
1595
1596
1597 IF(nrbody/=0)THEN
1598
1600
1601 DO n=nodft1_sms,nodlt1_sms
1602 i=indx1_sms(n)
1603 m=tagslv_rby_sms(i)
1604 IF(m /= 0)THEN
1605 frea(1,i)=zero
1606 frea(2,i)=zero
1607 frea(3,i)=zero
1608 END IF
1609 END DO
1610
1612
1613 END IF
1614
1615 iflag=4
1617 2 nprw ,ms ,fsav(1,ninter+1),fr_wall ,fopt ,
1618 3 rwsav ,weight ,irwl_work ,nrwl_sms,frwl6,
1619 4 x_sms ,res_sms,r ,frea ,wfext)
1620
1622
1623 END IF
1624 END IF
1625
1626
1627 300 CONTINUE
1628 DO n=nodft1_sms,nodlt1_sms
1629 i=indx1_sms(n)
1630 r(1,i) = x_sms(1,i)
1631 r(2,i) = x_sms(2,i)
1632 r(3,i) = x_sms(3,i)
1633 ENDDO
1634 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,61)
1635
1636 IF (m_vs_sms > 0 .AND. it > 0) THEN
1637 IF(imonm>0.AND.itask==0)
CALL startime(timers,70)
1639 1 iadk ,jdik ,diag_sms,lt_k ,itask ,
1640 2 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
1641 3 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
1642 4 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
1643 5 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
1644 6 mv6 ,mw6 ,ms ,x_sms ,p_sms ,
1645 7 y_sms ,nodft ,nodlt ,kinet )
1646
1648
1649 IF (itask == 0) ncg_run_sms = ncg_run_sms + 1
1650 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,70)
1651 END IF
1652
1653 if(ncpria > 0) then
1654 if(itask==0.and.ispmd==0
1655 . .and.(ncprisms/=0.and.mod(ncycle,ncpria)==0))then
1656 IF(totit==0)THEN
1657 write(iout,1000) ncycle,totit
1658 ELSE
1659 write(iout,1001) ncycle,totit,res1_sms,toln
1660 END IF
1661 end if
1662 endif
1663
1664 1000 FORMAT(3x,'CYCLE NUMBER',i5,
1665 . ' TOTAL C.G. ITERATION NUMBER=',i5)
1666 1001 FORMAT(3x,'CYCLE NUMBER',i5,
1667 . ' TOTAL C.G. ITERATION NUMBER=',i5,
1668 . ' RELATIVE RESIDUAL NORM=',e11.4,
1669 . ' REFERENCE RESIDUAL NORM',e11.4)
1670 1002 FORMAT(3x,'CYCLE NUMBER',i5,
1671 . ' ITERATION NUMBER=',i5,
1672 . ' RELATIVE RESIDUAL NORM=',e11.4,
1673 . ' REFERENCE RESIDUAL NORM',e11.4)
1674 1100 FORMAT(
1675 . ' ** ERROR : AMS IS LIKELY DIVERGING:',/,
1676 . ' TOTAL C.G. ITERATION NUMBER = ',i8,' AT CYCLE NUMBER ',i8)
1677 RETURN
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)