89
90
91
92 USE timer_mod
96 USE sensor_mod
97 USE ams_work_mod
98 USE my_alloc_mod
99 use python_funct_mod, only : python_
100 use element_mod , only : nixc,nixtg
101
102
103
104#include "implicit_f.inc"
105#include "comlock.inc"
106
107
108
109#include "com01_c.inc"
110#include "com04_c.inc"
111#include "com06_c.inc"
112#include "com08_c.inc"
113#include "param_c.inc"
114#include "parit_c.inc"
115#include "remesh_c.inc"
116#include "scr03_c.inc"
117#include "sms_c.inc"
118#include "tabsiz_c.inc"
119#include "task_c.inc"
120#include "timeri_c.inc"
121#include "units_c.inc"
122#include "warn_c.inc"
123#include "stati_c.inc"
124
125
126
127 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
128 TYPE(python_), INTENT(INOUT) :: PYTHON
129 INTEGER ITASK, NODFT,NSENSOR,NODLT, NODII_SMS(*), INDX2_SMS(*),
130 . NODXI_SMS(*), ICODT(*), ICODR(*),
131 . ISKEW(*), JAD_SMS(*), JDI_SMS(*), INDX1_SMS(*),
132 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*), WEIGHT(*),
133 . NPBY(NNPBY,*), LPBY(*), TAGSLV_RBY_SMS(*), TAGSLV_RBY(*),
134 . LAD_SMS(*), KAD_SMS(*), JRB_SMS(*),
135 . NPC(*), IBFV(NIFV,*),IFRAME(LISKN,*),
136 . JADI_SMS(*), JDII_SMS(*),
137 . FR_RMS(NSPMD+1), FR_SMS(NSPMD+1), ISKYI_SMS(LSKYI_SMS,*),
138 . IGRV(*),CPTREAC,NODREAC(*),
139 . ILINK(*),RLINK(*), FR_RL(NSPMD+2,*), NNLINK(10,*),
140 . LNLINK(*), FR_LL(NSPMD+2,*), TAG_LNK_SMS(*), ITAB(*),
141 . LJOINT(*), FR_CJ(*), IADCJ(*),
142 . NPRW(*), LPRW(*), FR_WALL(*), NRWL_SMS(*),
143 . KK, MAIN, KINET(*),
144 . IXC(NIXC,*), IXTG(NIXTG,*),
145 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*), DIM,
146 . TAGMSR_RBY_SMS(*), JSM_SMS(*),
147 . IRBE2(NRBE2L,*), LRBE2(*), IAD_RBE2(*),
148 . FR_RBE2M(*), NMRBE2, R2SIZE, IRBE3(NRBE3L,*), LRBE3(*),
149 . IAD_RBE3M(*) ,FR_RBE3M(*) ,FR_RBE3MP(*),
150 . FR_RBY6(*),IAD_RBY(*),R3SIZE,IBCSCYC(*),LBCSCYC(*)
152 . ms(*), ms0(*), a(3,*), diag_sms(*),
153 . skew(lskew,*), lt_sms(*),
154 . x_sms(3,*), p_sms(3,*), y_sms(3,*), z_sms(3,*), prec_sms(*),
155 . v(3,*), x(3,*), d(3,*), tf(*), vel(lfxvelr,*),
156 . xframe(nxframe,*), lti_sms(*), mskyi_sms(*),
157 . res_sms(3,*), agrv(*),lgrav(*),
158 . fsav(nthvki,*), am(3,*), vr(3,*), in(*), frl(*), fnl(*),
159 . rwbuf(*), rwsav(*), fopt(*),fthreac(6,*),
160 . dampr(nrdamp,*), damp(dim,*), dr(3,*), rby(nrby,*),
161 . frbe3(*), rrbe3(*), prec_sms3(3,*), diag_sms3(3,*),betate
162 DOUBLE PRECISION FRL6(*), FNL6(*), FRWL6(*), RRBE3_PON(*)
163 DOUBLE PRECISION RBY6(8,6,NRBYKIN)
164 my_real,
dimension(fr_rms(nspmd+1)),
intent(inout) :: mskyi_fi_sms
165 integer,dimension(fr_sms(nspmd+1)),intent(inout) :: LIST_SMS
166 integer,dimension(fr_rms(nspmd+1)),intent(inout) :: LIST_RMS
167 my_real,
DIMENSION(18,NJOINT),
intent(inout):: cjwork
168 my_real,
DIMENSION(3,NUMNOD),
intent(inout):: frea
169 integer, dimension(SLPRW),intent(inout):: IRWL_WORK
170 my_real,
DIMENSION(3,FR_RMS(NSPMD+1)+FR_SMS(NSPMD+1) ),
intent(inout):: vfi
171 integer, intent(in) :: sz_mw6
172 DOUBLE PRECISION,dimension(6,sz_mw6),intent(inout) :: MW6
173 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
174
175 TYPE(INTSTAMP_DATA) INTSTAMP(*)
176 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
177
178 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
179 TYPE (AMS_WORK_) , INTENT(INOUT) :: AMS_WORK
180
181
182
183 INTEGER I, N, ISP, IT, IX, IERROR
184 INTEGER ICOUNT, J, K, L, NSN, IMOV, ITYP, ILAGM, IFLAG,
185 . N2, N3, N4, N5, N6, N7, ND, IGR, ISK,
186 . M, IAD, MSR, KAD, KI, KJ, JI, NSR,
187 . LOC_PROC, P, NN, LENR, SIZE, NRBDIM
188 INTEGER NODFT1_SMS, NODLT1_SMS
189 INTEGER NODFT2_SMS, NODLT2_SMS,NGR2USR
191 . vx,vy,vz, mvx, mvy, mvz,
192 . vxj, vyj, vzj, mas,wfextt, errtet, dw, dt15, dt25, rbid,
193 . omega, betasdt, dampt, factb, d_tstart, d_tstop, da, adt,
194 . p1, p2, p3, uomega, domega
195
196 INTEGER, DIMENSION(:), ALLOCATABLE :: IMV
198 . , DIMENSION(:), ALLOCATABLE :: mv
199 my_real,
DIMENSION(:,:),
ALLOCATABLE :: mvskw
200 my_real,
DIMENSION(:,:),
ALLOCATABLE :: vskw
201 my_real,
DIMENSION(:,:),
ALLOCATABLE :: rskw
202 my_real,
DIMENSION(:,:),
ALLOCATABLE :: dampskw
203 double precision
204 . , DIMENSION(:,:), ALLOCATABLE :: mv6
206
207 CALL my_alloc(mvskw,3,numnod)
208 CALL my_alloc(vskw,3,numnod)
209 CALL my_alloc(rskw,3,numnod)
210 CALL my_alloc(dampskw,3,numnod)
211
212 frea(1:3,nodft:nodlt)=zero
213
214 IF(iparit/=0)THEN
215 IF(debug(9)==0)THEN
216 ALLOCATE(imv(2*nisky_sms+fr_rms(nspmd+1)),
217 . mv(3*(2*nisky_sms+fr_rms(nspmd+1))),
218 . mv6(6,3*(2*nisky_sms+fr_rms(nspmd+1))),stat=ierror)
219 ELSE
220 ALLOCATE(imv(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1)),
221 . mv(3*(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1))),
222 . mv6(6,3*(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1))),
223 . stat=ierror)
224 END IF
225 IF(ierror/=0) THEN
226 WRITE(istdo,*)
227 CALL ancmsg(msgid=19,anmode=aninfo,
228 . c1='(/DT/.../AMS)')
230 ENDIF
231 END IF
232
233 IF(nspmd > 1)THEN
234 IF(itask==0)THEN
235 CALL spmd_list_sms(iskyi_sms,fr_sms,fr_rms,list_sms,list_rms,
236 . npby ,tagslv_rby_sms)
237 END IF
238
240
241 END IF
242
243
244
245 IF(nspmd > 1)THEN
246
248
249 IF(itask==0) THEN
251 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
252 2 mskyi_fi_sms)
253 END IF
254 END IF
255
256
258 2 v ,x ,skew ,ms ,sensor_tab,
259 3 weight,lgrav ,itask,tagslv_rby_sms,nsensor,wfext, python)
260
262
263 nodft1_sms=1+itask*nindx1_sms/nthread
264 nodlt1_sms=(itask+1)*nindx1_sms/nthread
265
266 nodft2_sms=1+itask*nindx2_sms/nthread
267 nodlt2_sms=(itask+1)*nindx2_sms/nthread
268
269
270 DO n=nodft,nodlt
271
272 a(1,n)=a(1,n)+res_sms(1,n)
273 a(2,n)=a(2,n)+res_sms(2,n)
274 a(3,n)=a(3,n)+res_sms(3,n)
275
276 res_sms(1,n)=zero
277 res_sms(2,n)=zero
278 res_sms(3,n)=zero
279
280 END DO
281
283
284
285
286
287 IF(ndamp/=0.OR.istat==1.OR.istat==3)THEN
288
289 DO n=nodft,nodlt
290 IF(nodxi_sms(n)==0)THEN
291 z_sms(1,n)=ms(n)*v(1,n)
292 z_sms(2,n)=ms(n)*v(2,n)
293 z_sms(3,n)=ms(n)*v(3,n)
294 ELSE
295 x_sms(1,n)=v(1,n)
296 x_sms(2,n)=v(2,n)
297 x_sms(3,n)=v(3,n)
298 END IF
299 ENDDO
300
301 IF(nrbody/=0)THEN
302
304
305 DO n=nodft1_sms,nodlt1_sms
306 i=indx1_sms(n)
307 m=tagslv_rby_sms(i)
308 IF(m /= 0)THEN
309 msr=npby(1,m)
310 x_sms(1,i)=x_sms(1,msr)
311 x_sms(2,i)=x_sms(2,msr)
312 x_sms(3,i)=x_sms(3,msr)
313 END IF
314 END DO
315
316 END IF
317
319
320
322 1 nodft ,nodlt ,numnod ,jad_sms ,jdi_sms ,
323 2 itask ,diag_sms,lt_sms,x_sms ,z_sms ,
324 3 nodft1_sms,nodlt1_sms,indx1_sms,nodxi_sms,iad_elem ,
325 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
326 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
327 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
328 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
329 8 nodii_sms )
330
332
333
334
335
336 IF(nrbody/=0)THEN
337
338
339 DO m =1,nrbody
340 DO k = 1, 6
341 rby6(1,k,m) = zero
342 rby6(2,k,m) = zero
343 rby6(3,k,m) = zero
344 END DO
345
346 msr=npby(1,m)
347 IF(msr < 0) cycle
348
349 IF(tagmsr_rby_sms(msr) /= 0) THEN
350 rby6(1,1,m)=z_sms(1,msr)*weight(msr)
351 rby6(2,1,m)=z_sms(2,msr)*weight(msr)
352 rby6(3,1,m)=z_sms(3,msr)*weight(msr)
353 END IF
354
355 END DO
356
357
358
359 DO n=1,nindx1_sms
360 i=indx1_sms(n)
361 m=tagslv_rby_sms(i)
362 IF(m /= 0)THEN
363 IF(weight(i) /= 0)THEN
364 rby6(1,1,m)=rby6(1,1,m)+z_sms(1,i)
365 rby6(2,1,m)=rby6(2,1,m)+z_sms(2,i)
366 rby6(3,1,m)=rby6(3,1,m)+z_sms(3,i)
367 END IF
368 z_sms(1,i)=zero
369 z_sms(2,i)=zero
370 z_sms(3,i)=zero
371 END IF
372 END DO
373
374
375 IF (nspmd > 1) THEN
376
377 nrbdim=3
379 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
380
381 END IF
382
383
384 DO m =1,nrbody
385 msr=npby(1,m)
386 IF(msr < 0) cycle
387 IF(tagmsr_rby_sms(msr) /= 0) THEN
388 z_sms(1,msr)=rby6(1,1,m)
389 z_sms(2,msr)=rby6(2,1,m)
390 z_sms(3,msr)=rby6(3,1,m)
391 END IF
392 END DO
393
394
395 END IF
396
398
399
400 IF(itask==0)THEN
402 dw = zero
403 DO nd=1,ndamp
404 igr = nint(dampr(2,nd))
405 isk = nint(dampr(15,nd))
406 factb = dampr(16,nd)
407 dampt =
min(dt1,dt2)*factb
408 d_tstart = dampr(17,nd)
409 d_tstop = dampr(18,nd)
410 IF (tt>=d_tstart .AND. tt<=d_tstop) THEN
411 IF(isk<=1)THEN
412
413 IF (dampr(19,nd)>0) cycle
414 dampa = dampr(3,nd)
415 dampb = dampr(4,nd)
416 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
417 omega = one/ (one + half * dampa * dt1)
418 DO n=1,igrnod(igr)%NENTITY
419 i=igrnod(igr)%ENTITY(n)
420 IF(tagslv_rby(i)/=0) cycle
421 da=a(1,i)-dampa*z_sms(1,i)-betasdt *(a(1,i) - damp(1,i))
422 da = da * omega - a(1,i)
423 damp(1,i) = a(1,i)
424 a(1,i) = a(1,i) + da
425
426
427 dw =dw+da*v(1,i)*dt12*weight(i)
428 END DO
429 dampa = dampr(5,nd)
430 dampb = dampr(6,nd)
431 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
432 omega = one/ (one + half * dampa * dt1)
433 DO n=1,igrnod(igr)%NENTITY
434 i=igrnod(igr)%ENTITY(n)
435 IF(tagslv_rby(i)/=0) cycle
436 da=a(2,i)-dampa*z_sms(2,i)-betasdt *(a(2,i) - damp(2,i))
437 da = da * omega - a(2,i)
438 damp(2,i) = a(2,i)
439 a(2,i) = a(2,i) + da
440
441 dw =dw+da*v(2,i)*dt12*weight(i)
442 END DO
443 dampa = dampr(7,nd)
444 dampb = dampr(8,nd)
445 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
446 omega = one/ (one + half * dampa * dt1)
447 DO n=1,igrnod(igr)%NENTITY
448 i=igrnod(igr)%ENTITY(n)
449 IF(tagslv_rby(i)/=0) cycle
450 da=a(3,i)-dampa*z_sms(3,i)-betasdt *(a(3,i) - damp(3,i))
451 da = da * omega - a(3,i)
452 damp(3,i) = a(3,i)
453 a(3,i) = a(3,i) + da
454
455 dw =dw+da*v(3,i)*dt12*weight(i)
456 END DO
457 ELSE
458#include "vectorize.inc"
459 DO n=1,igrnod(igr)%NENTITY
460 i=igrnod(igr)%ENTITY(n)
461 IF(tagslv_rby(i)/=0) cycle
462 mvskw(1,i)= skew(1,isk)*z_sms(1,i)
463 . +skew(2,isk)*z_sms(2,i)
464 . +skew(3,isk)*z_sms(3,i)
465 mvskw(2,i)= skew(4,isk)*z_sms(1,i)
466 . +skew(5,isk)*z_sms(2,i)
467 . +skew(6,isk)*z_sms(3,i)
468 mvskw(3,i)= skew(7,isk)*z_sms(1,i)
469 . +skew(8,isk)*z_sms(2,i)
470 . +skew(9,isk)*z_sms(3,i)
471 vskw(1,i)= skew(1,isk)*v(1,i)
472 . +skew(2,isk)*v(2,i)
473 . +skew(3,isk)*v(3,i)
474 vskw(2,i)= skew(4,isk)*v(1,i)
475 . +skew(5,isk)*v(2,i)
476 . +skew(6,isk)*v(3,i)
477 vskw(3,i)= skew(7,isk)*v(1,i)
478 . +skew(8,isk)*v(2,i)
479 . +skew(9,isk)*v(3,i)
480 rskw(1,i)= skew(1,isk)*a(1,i)
481 . +skew(2,isk)*a(2,i)
482 . +skew(3,isk)*a(3,i)
483 rskw(2,i)= skew(4,isk)*a(1,i)
484 . +skew(5,isk)*a(2,i)
485 . +skew(6,isk)*a(3,i)
486 rskw(3,i)= skew(7,isk)*a(1,i)
487 . +skew(8,isk)*a(2,i)
488 . +skew(9,isk)*a(3,i)
489 dampskw(1,i)= skew(1,isk)*damp(1,i)
490 . +skew(2,isk)*damp(2,i)
491 . +skew(3,isk)*damp(3,i)
492 dampskw(2,i)= skew(4,isk)*damp(1,i)
493 . +skew(5,isk)*damp(2,i)
494 . +skew(6,isk)*damp(3,i)
495 dampskw(3,i)= skew(7,isk)*damp(1,i)
496 . +skew(8,isk)*damp(2,i)
497 . +skew(9,isk)*damp(3,i)
498 END DO
499 dampa = dampr(3,nd)
500 dampb = dampr(4,nd)
501 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
502 omega = one/ (one + half * dampa * dt1)
503#include "vectorize.inc"
504 DO n=1,igrnod(igr)%NENTITY
505 i=igrnod(igr)%ENTITY(n)
506 IF(tagslv_rby(i)/=0) cycle
507 da = rskw(1,i) - dampa*mvskw(1,i)
508 . - betasdt *(rskw(1,i) - dampskw(1,i))
509 da = da * omega - rskw(1,i)
510 dampskw(1,i) = rskw(1,i)
511 rskw(1,i) = rskw(1,i) + da
512
513 dw =dw+da*vskw(1,i)*dt12*weight(i)
514 ENDDO
515 dampa = dampr(5,nd)
516 dampb = dampr(6,nd)
517 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
518 omega = one/ (one + half * dampa * dt1)
519#include "vectorize.inc"
520 DO n=1,igrnod(igr)%NENTITY
521 i=igrnod(igr)%ENTITY(n)
522 IF(tagslv_rby(i)/=0) cycle
523 da = rskw(2,i) - dampa*mvskw(2,i)
524 . - betasdt *(rskw(2,i) - dampskw(2,i))
525 da = da * omega - rskw(2,i)
526 dampskw(2,i) = rskw(2,i)
527 rskw(2,i) = rskw(2,i) + da
528
529 dw =dw+da*vskw(2,i)*dt12*weight(i)
530 ENDDO
531 dampa = dampr(7,nd)
532 dampb = dampr(8,nd)
533 betasdt= -
min(dampb,dampt)*dt1/
max(dt1*dt1,em30)
534 omega = one/ (one + half * dampa * dt1)
535#include "vectorize.inc"
536 DO n=1,igrnod(igr)%NENTITY
537 i=igrnod(igr)%ENTITY(n)
538 IF(tagslv_rby(i)/=0) cycle
539 da = rskw(3,i) - dampa*mvskw(3,i)
540 . - betasdt *(rskw(3,i) - dampskw(3,i))
541 da = da * omega - rskw(3,i)
542 dampskw(3,i) = rskw(3,i)
543 rskw(3,i) = rskw(3,i) + da
544
545 dw =dw+da*vskw(3,i)*dt12*weight(i)
546 ENDDO
547#include "vectorize.inc"
548 DO n=1,igrnod(igr)%NENTITY
549 i=igrnod(igr)%ENTITY(n)
550 IF(tagslv_rby(i)/=0) cycle
551 a(1,i)= skew(1,isk)*rskw(1,i)
552 . +skew(4,isk)*rskw(2,i)
553 . +skew(7,isk)*rskw(3,i)
554 a(2,i)= skew(2,isk)*rskw(1,i)
555 . +skew(5,isk)*rskw(2,i)
556 . +skew(8,isk)*rskw(3,i)
557 a(3,i)= skew(3,isk)*rskw(1,i)
558 . +skew(6,isk)*rskw(2,i)
559 . +skew(9,isk)*rskw(3,i)
560 damp(1,i)= skew(1,isk)*dampskw(1,i)
561 . +skew(4,isk)*dampskw(2,i)
562 . +skew(7,isk)*dampskw(3,i)
563 damp(2,i)= skew(2,isk)*dampskw(1,i)
564 . +skew(5,isk)*dampskw(2,i)
565 . +skew(8,isk)*dampskw(3,i)
566 damp(3,i)= skew(3,isk)*dampskw(1,i)
567 . +skew(6,isk)*dampskw(2,i)
568 . +skew(9,isk)*dampskw(3,i)
569 END DO
570 END IF
571 END IF
572 END DO
573#include "lockon.inc"
574 wfext = wfext + dw
575#include "lockoff.inc"
577 END IF
578
580
581 IF (istat==1.OR.istat==3) THEN
582
583 omega = betate * dt12
584 uomega = one - omega
585 domega = two*betate
586 dw = zero
587 IF(istatg==0)THEN
588 DO j= 1,3
589 DO i=1,numnod
590 IF(tagslv_rby(i)/=0) cycle
591 da = a(j,i)
592 a(j,i) = uomega*a(j,i) -domega*z_sms(j,i)
593 da = a(j,i) -da
594 dw =dw+da*v(j,i)*dt12*weight(i)
595 END DO
596 END DO
597 ELSE
598 IF(istatg<0)THEN
599 istatg=
ngr2usr(-istatg,igrnod,ngrnod)
600 ENDIF
601 DO j= 1,3
602#include "vectorize.inc"
603 DO n=1,igrnod(istatg)%NENTITY
604 i=igrnod(istatg)%ENTITY(n)
605 IF(tagslv_rby(i)/=0) cycle
606 da = a(j,i)
607 a(j,i) = uomega*a(j,i) -domega*z_sms(j,i)
608 da = a(j,i) -da
609 dw =dw+da*v(j,i)*dt12*weight(i)
610 END DO
611 END DO
612 END IF
613#include "lockon.inc"
614 wfext = wfext + dw
615#include "lockoff.inc"
616
617
619 END IF
620
621 END IF
622
623
624
625
626 IF (nrbe2>0.OR.r2size>0) THEN
627 IF(itask==0)THEN
629 1 irbe2 ,lrbe2 ,x ,a ,am ,
630 1 ms ,in ,skew ,weight ,iad_rbe2,
631 2 fr_rbe2m,nmrbe2)
632 END IF
633
635
636 END IF
637
638
639
640 IF (nrbe3>0)THEN
641 IF(itask==0)THEN
643 1 irbe3 ,lrbe3 ,x ,a ,frbe3 ,
644 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
645 3 rrbe3 ,rrbe3_pon ,r3size)
646 END IF
647
649
650 END IF
651
652
653 CALL sms_thbcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,icodr ,
654 2 iskew ,skew ,a ,am ,fthreac ,
655 3 nodreac,cptreac)
656
657 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
658 2 skew ,a ,nodlt1_sms)
659
660 IF(iroddl/=0)
661 1
CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodr ,iskew ,
662 2 skew ,am ,nodlt1_sms)
663
664 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,a)
665
667
668
669
670
671 prec_sms(nodft:nodlt)=diag_sms(nodft:nodlt)
672
674
675 IF(nrbody/=0)THEN
676
677
678 DO m =1,nrbody
679 DO k = 1, 6
680 rby6(1,k,m) = zero
681 END DO
682
683 msr=npby(1,m)
684 IF(msr < 0) cycle
685
686 IF(tagmsr_rby_sms(msr) /= 0) THEN
687 rby6(1,1,m)=diag_sms(msr)*weight(msr)
688 END IF
689
690 END DO
691
692
693
694 DO n=1,nindx1_sms
695 i=indx1_sms(n)
696 m=tagslv_rby_sms(i)
697 IF(m /= 0)THEN
698 IF(weight(i) /= 0)THEN
699 rby6(1,1,m)=rby6(1,1,m)+diag_sms(i)
700 END IF
701 END IF
702 END DO
703
704
705 IF (nspmd > 1) THEN
706
707 nrbdim=1
709 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
710
711 END IF
712
713
714 DO m =1,nrbody
715
716 msr=npby(1,m)
717
718 IF(msr < 0) cycle
719
720 IF(tagmsr_rby_sms(msr) /= 0) THEN
721 prec_sms(msr)=rby6(1,1,m)
722 END IF
723
724 END DO
725
726
727 DO n=nodft1_sms,nodlt1_sms
728 i=indx1_sms(n)
729 m=tagslv_rby_sms(i)
730 IF(m /= 0)THEN
731 msr=npby(1,m)
732 prec_sms(i)=prec_sms(msr)
733 END IF
734 END DO
735
737
738 END IF
739
740
741 IF(nfxvel > 0)THEN
742 IF(itask==0)THEN
743 it=0
745 2 vel ,ms ,x ,skew ,sensor_tab,
746 3 weight ,d ,iframe ,xframe ,nsensor ,
747 4 it ,prec_sms,nodxi_sms,cptreac,nodreac,
748 5 fthreac,am ,vr ,dr ,in ,
749 6 rby ,wfext)
750 END IF
751
753
754 END IF
755
756 IF(njoint > 0)THEN
758 2 fsav ,ljoint,ms,in,iadcj,
759 3 fr_cj,cjwork,tag_lnk_sms(nrlink+nlink+1),
760 . prec_sms,itask)
761
763
764 END IF
765
766 IF(nadmesh/=0)THEN
767 IF(itask==0)THEN
769 . sh3tree )
770 END IF
771
773
774 END IF
775
776 CALL sms_pcg(timers, nodft ,nodlt ,nnz_sms,jad_sms ,
777 2 jdi_sms ,diag_sms ,lt_sms ,a ,isp ,
778 3 x_sms ,p_sms ,z_sms ,y_sms ,prec_sms ,
779 4 nodft1_sms,nodlt1_sms,indx1_sms,icodt ,icodr ,
780 5 iskew ,skew ,itask ,nodxi_sms,iad_elem,
781 6 fr_elem ,weight ,ibfv ,vel ,npc ,
782 7 tf ,v ,x ,d ,sensor_tab,
783 8 iframe ,xframe ,jadi_sms ,jdii_sms ,nsensor ,
784 9 lti_sms ,fr_sms ,fr_rms ,list_sms ,list_rms,
785 a mskyi_fi_sms,vfi ,iskyi_sms,mskyi_sms,
786 b res_sms ,ilink ,rlink ,fr_rl ,frl6 ,
787 c nnlink ,lnlink ,fr_ll ,fnl6 ,ms ,
788 d tag_lnk_sms,itab ,fsav ,ljoint ,iadcj ,
789 e fr_cj ,cjwork ,frl ,fnl ,nprw ,
790 f lprw ,rwbuf ,rwsav ,fopt ,fr_wall ,
791 g irwl_work,nrwl_sms,frea ,intstamp ,imv ,
792 h mv ,mv6 ,mw6 ,kinet ,ixc ,
793 i ixtg ,sh4tree ,sh3tree,cptreac ,nodreac ,
794 j fthreac ,frwl6 ,am ,vr ,
795 k dr ,in ,rby ,npby ,lpby ,
796 l tagmsr_rby_sms ,irbe2 ,lrbe2 ,iad_rbe2 ,fr_rbe2m,
797 m nmrbe2 ,r2size ,irbe3 ,lrbe3 ,frbe3 ,
798 n iad_rbe3m ,fr_rbe3m ,fr_rbe3mp,rrbe3,rrbe3_pon,
799 o prec_sms3,diag_sms3,iad_rby ,fr_rby6 ,rby6,
800 p tagslv_rby_sms,r3size,nodft2_sms,nodlt2_sms,indx2_sms,
801 q nodii_sms,ibcscyc ,lbcscyc ,wfext,ams_work )
802
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829 IF(njoint > 0)THEN
831 2 ljoint,ms,in,iadcj,fr_cj,
832 3 cjwork,tag_lnk_sms(nrlink+nlink+1),itask)
833
835
836 END IF
837
838
839 DO n=nodft1_sms,nodlt1_sms
840 i=indx1_sms(n)
841 a(1,i) = a(1,i)*ms(i)
842 a(2,i) = a(2,i)*ms(i)
843 a(3,i) = a(3,i)*ms(i)
844 ENDDO
845
847
848 IF(iparit/=0)THEN
849 DEALLOCATE(imv, mv, mv6)
850 END IF
851 DEALLOCATE(mvskw)
852 DEALLOCATE(vskw)
853 DEALLOCATE(rskw)
854 DEALLOCATE(dampskw)
855
856 RETURN
integer function ngr2usr(iu, igr, ngr)
subroutine sms_admesh_0(a, diag_sms, ixc, ixtg, sh4tree, sh3tree)
subroutine sms_bcs(nodft, nodlt, indx1, icodt, iskew, skew, a, nodlast)
subroutine sms_bcscyc(ibcscyc, lbcscyc, skew, x, a)
subroutine sms_cjoint_0(a, ar, v, vr, x, fsav, ljoint, ms, in, iadcj, fr_cj, cjwork, tag_lnk_sms, diag_sms, itask)
subroutine sms_cjoint_2(a, ar, v, vr, x, ljoint, ms, in, iadcj, fr_cj, cjwork, 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_gravit(igrv, agrv, npc, tf, a, v, x, skew, ms, sensor_tab, weight, ib, itask, tagslv_rby_sms, nsensor, wfext, python)
subroutine sms_pcg(timers, nodft, nodlt, nnz, iadk, jdik, diag_sms, lt_k, r, isp, x_sms, p_sms, z_sms, y_sms, prec_sms, nodft1_sms, nodlt1_sms, indx1_sms, icodt, icodr, iskew, skew, itask, nodnx_sms, iad_elem, fr_elem, weight, ibfv, vel, npc, tf, v, x, d, sensor_tab, iframe, xframe, jadi_sms, jdii_sms, nsensor, lti_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, iskyi_sms, mskyi_sms, res_sms, ilink, llink, fr_rl, frl6, nnlink, lnlink, fr_ll, fnl6, ms, tag_lnk_sms, itab, fsav, ljoint, iadcj, fr_cj, cjwork, frl, fnl, nprw, lprw, rwbuf, rwsav, fopt, fr_wall, irwl_work, nrwl_sms, frea, intstamp, imv, mv, mv6, mw6, kinet, ixc, ixtg, sh4tree, sh3tree, cptreac, nodreac, fthreac, frwl6, am, vr, dr, in, rby, npby, lpby, tagmsr_rby_sms, irbe2, lrbe2, iad_rbe2, fr_rbe2m, nmrbe2, r2size, irbe3, lrbe3, frbe3, iad_rbe3m, fr_rbe3m, fr_rbe3mp, rrbe3, rrbe3_pon, prec_sms3, diag_sms3, iad_rby, fr_rby6, rby6, tagslv_rby_sms, r3size, nodft2_sms, nodlt2_sms, indx2_sms, nodii_sms, ibcscyc, lbcscyc, wfext, 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_rbe_cnds(irbe2, lrbe2, x, a, ar, ms, in, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe3t1(irbe3, lrbe3, x, a, frbe3, skew, weight, iad_m, fr_m, fr_mpon, rsum, rsum_pon, r3size)
subroutine sms_thbcs(nodft, nodlast, indx1, icodt, icodr, iskew, skew, a, ar, fthreac, nodreac, cptreac)
subroutine spmd_exch_a_rb6(nrbdim, iad_rby, fr_rby6, icsize, rbf6)
subroutine spmd_list_sms(iskyi_sms, fr_sms, fr_rms, list_sms, list_rms, npby, tagslv_rby_sms)
subroutine spmd_mij_sms(iskyi_sms, fr_sms, fr_rms, list_rms, mskyi_sms, mij_sms)
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)
subroutine startime(event, itask)
subroutine stoptime(event, itask)