76
77
78
79 USE timer_mod
80 USE sph_work_mod
81 USE elbufdef_mod
85 USE spmd_mod
86 USE sph_crit_voxel_mod
87
88
89
90#include "implicit_f.inc"
91#include "comlock.inc"
92
93
94
95#include "com01_c.inc"
96#include "com04_c.inc"
97#include "com08_c.inc"
98#include "sphcom.inc"
99#include "param_c.inc"
100#include "task_c.inc"
101#include "units_c.inc"
102#include "tabsiz_c.inc"
103#include "scr17_c.inc"
104#include "timeri_c.inc"
105#include "scr07_c.inc"
106
107 COMMON /sphsort/dmax, dbuc, bminma(12)
108
109
110
111 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
112 INTEGER IPART(LIPART1,*),NPC(*),IPARG(NPARG,*),IPARTSP(*),ITAB(*),
113 . KXSP(NISP,*),IXSP(KVOISPH,*),NOD2SP(*),
114 . ISPCOND(NISPCOND,*),ISPSYM(NSPCOND,*),
115 . LPRTSPH(2,0:NPART),LONFSPH(*),WSP2SORT(*),
116 . ISPHIO(NISPHIO,*),ITASK,
117 . IBUFSSG_IO(SIBUFSSG_IO), LGAUGE(3,*),
118 . NGROUNC, IGROUNC(*), SOL2SPH(2,*), SPH2SOL(*), IXS(NIXS,*),
119 . IADS(8,*), ADDCNE(*), WASPACT(*), ICONTACT(*), OFF_SPH_R2R(*),
120 . IRUNN_BIS
121 INTEGER, INTENT(INOUT) :: SPH_IORD1
122
124 . x(3,*), v(3,*), ms(*),pm(npropm,*),
125 . geo(npropg,*),bufmat(*), bufgeo(*), pld(*),
126 . wa(*), partsav(*), xframe(nxframe,*) ,
127 . spbuf(nspbuf,*),
128 . wasph(*), vsphio(*), d(3,*), sphveln(*), gauge(llgauge,*),
129 . fskyd(*), dmsph(*)
130 double precision
131 . xdp(3,*)
132 TYPE (ELBUF_STRUCT_), DIMENSION (NGROUP) :: ELBUF_TAB
133 TYPE spsym_struct
134 my_real,
DIMENSION(:) ,
POINTER :: buf
135 END TYPE spsym_struct
136 TYPE (SPSYM_STRUCT) :: XSPSYM,VSPSYM,WSMCOMP
137 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
138 TYPE (SPH_WORK_) :: SPH_WORK
139 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
140
141
142
143 INTEGER I,N,NG,JFT,JLT,K,NELEM,NEL,OFFSET,
144 . ISORTSP,INOD,JNOD,J,NVOIS,M,IREDUCE,NS,
145 . KVNORM,IPRT,NSP2SORTF,NSP2SORTL,
146 . ISORTSPG,IERROR,NBK,VOXSIZ
148 . dx,dy,dz,
149 . dxmin,dxmax,dymin,dymax,dzmin,dzmax,majord,
150 . dxminl,dxmaxl,dyminl,dymaxl,dzminl,dzmaxl,
151 . dsx,dsy,dsz,maxds,majords,spalinr,myspatrue,
152 . xmax,
ymax,zmax, dmax, buftmp(6),dbuc, bminma
154 . xmin,ymin,zmin,diam_max,majord_vox,
155 . xminl,yminl,zminl,xmaxl,ymaxl,zmaxl,diam_maxl,
156 . tmp1(13),tmpo(13)
157
158 SAVE isortspg,dxmin,dxmax,dymin,dymax,dzmin,dzmax,
159 . xmin,ymin,zmin,xmax,
ymax,zmax,diam_max
160
161 kvnorm=16*numsph+1
162
163 IF(nsphsol/=0)THEN
164
165
167 . x ,spbuf ,kxsp ,ixsp ,ipartsp ,
168 . iparg ,ngrounc ,igrounc ,elbuf_tab,itask ,
169 . nod2sp ,sol2sph ,sph2sol ,ixs ,ms ,
170 . pm ,iads ,addcne ,fskyd ,dmsph ,
171 . v ,icontact)
172
174
175 END IF
176
177 IF(itask==0)THEN
181 ENDIF
182
183 IF(nsphio==0)THEN
184 nsp2sort=0
185 DO n=1,numsph
186 IF(kxsp(2,n)/=0)THEN
187 nsp2sort=nsp2sort+1
188 wsp2sort(nsp2sort)=n
189 ENDIF
190 ENDDO
191 ELSE
192
193 CALL sponof1(x ,v ,d ,ms ,spbuf ,
194 2 itab ,kxsp ,ixsp ,nod2sp ,npc ,
195 3 pld ,iparg ,elbuf_tab,isphio ,vsphio ,
196 4 pm ,ipart ,ipartsp ,igrsurf ,
197 5 lprtsph ,lonfsph ,wa ,wa(numsph+1),wasph(kvnorm),
198 6 xdp,ibufssg_io, off_sph_r2r,wfext)
199 nsp2sort=0
200 DO iprt=1,npart
201 DO k=lprtsph(2,iprt-1)+1,lprtsph(1,iprt)
202 nsp2sort=nsp2sort+1
203 wsp2sort(nsp2sort)=lonfsph(k)
204 ENDDO
205 ENDDO
206 ENDIF
207
208
209
210
211
212
213 IF(nspmd>1)THEN
215 IF(isphbuc>1)isphbuc=1
216 END IF
217
218 IF(tt==zero)isphbuc=1
219
220 dxmin= ep20
221 dymin= ep20
222 dzmin= ep20
223 dxmax=-ep20
224 dymax=-ep20
225 dzmax=-ep20
226
227 xmin = ep20
228 ymin = ep20
229 zmin = ep20
230 xmax =-ep20
232 zmax =-ep20
233 diam_max = -ep20
234 END IF
235
236
238
239 nsp2sortf = 1 + itask*nsp2sort / nthread
240 nsp2sortl = (itask+1)*nsp2sort / nthread
241
242 isortsp=isphbuc
243
244 IF(isortsp==0)THEN
245
247 1 x ,v ,ms ,spbuf ,itab ,
248 2 kxsp ,ixsp ,nod2sp ,ispcond ,xframe ,
249 3 isortsp ,iparg ,elbuf_tab,wsp2sort,nsp2sortf,
250 4 nsp2sortl )
251 dxminl= ep20
252 dyminl= ep20
253 dzminl= ep20
254 dxmaxl=-ep20
255 dymaxl=-ep20
256 dzmaxl=-ep20
257
258 xminl = ep20
259 yminl = ep20
260 zminl = ep20
261 xmaxl =-ep20
262 ymaxl =-ep20
263 zmaxl =-ep20
264 diam_maxl = -ep20
265
266 DO ns=nsp2sortf,nsp2sortl
267 n=wsp2sort(ns)
268 inod=kxsp(3,n)
269 dx =x(1,inod)-spbuf(5,n)
270 dy =x(2,inod)-spbuf(6,n)
271 dz =x(3,inod)-spbuf(7,n)
272 dxminl=
min(dxminl,dx)
273 dyminl=
min(dyminl,dy)
274 dzminl=
min(dzminl,dz)
275 dxmaxl=
max(dxmaxl,dx)
276 dymaxl=
max(dymaxl,dy)
277 dzmaxl=
max(dzmaxl,dz)
278
279 xminl=
min(xminl,x(1,inod))
280 yminl=
min(yminl,x(2,inod))
281 zminl=
min(zminl,x(3,inod))
282 xmaxl=
max(xmaxl,x(1,inod))
283 ymaxl=
max(ymaxl,x(2,inod))
284 zmaxl=
max(zmaxl,x(3,inod))
285 diam_maxl =
max(diam_maxl, spbuf(1,n))
286 ENDDO
287
288 DO n=itask+1,nbgauge,nthread
289 IF(lgauge(1,n) <= -(numels+1))THEN
290 dx =gauge(2,n)-gauge(6,n)
291 dy =gauge(3,n)-gauge(7,n)
292 dz =gauge(4,n)-gauge(8,n)
293 dxminl=
min(dxminl,dx)
294 dyminl=
min(dyminl,dy)
295 dzminl=
min(dzminl,dz)
296 dxmaxl=
max(dxmaxl,dx)
297 dymaxl=
max(dymaxl,dy)
298 dzmaxl=
max(dzmaxl,dz)
299
300 xminl=
min(xminl,gauge(2,n))
301 yminl=
min(yminl,gauge(3,n))
302 zminl=
min(zminl,gauge(4,n))
303 xmaxl=
max(xmaxl,gauge(2,n))
304 ymaxl=
max(ymaxl,gauge(3,n))
305 zmaxl=
max(zmaxl,gauge(4,n))
306 diam_maxl =
max(diam_maxl, spbuf(1,n))
307 END IF
308 END DO
309
310#include "lockon.inc"
311 dxmin=
min(dxmin,dxminl)
312 dymin=
min(dymin,dyminl)
313 dzmin=
min(dzmin,dzminl)
314 dxmax=
max(dxmax,dxmaxl)
315 dymax=
max(dymax,dymaxl)
316 dzmax=
max(dzmax,dzmaxl)
323 diam_max=
max(diam_max,diam_maxl)
324#include "lockoff.inc"
325
326
327
328
330
331 IF(itask==0)THEN
332 IF(nspmd>1)THEN
333 tmp1(1) = -dxmin
334 tmp1(2) = -dymin
335 tmp1(3) = -dzmin
336 tmp1(4) = -xmin
337 tmp1(5) = -ymin
338 tmp1(6) = -zmin
339 tmp1(7) = dxmax
340 tmp1(8) = dymax
341 tmp1(9) = dzmax
342 tmp1(10) = xmax
344 tmp1(12) = zmax
345 tmp1(13) = diam_max
346 CALL spmd_allreduce(tmp1,tmpo,13,spmd_max)
347 dxmin = -tmpo(1)
348 dymin = -tmpo(2)
349 dzmin = -tmpo(3)
350 xmin = -tmpo(4)
351 ymin = -tmpo(5)
352 zmin = -tmpo(6)
353 dxmax = tmpo(7)
354 dymax = tmpo(8)
355 dzmax = tmpo(9)
356 xmax = tmpo(10)
358 zmax = tmpo(12)
359 diam_max = tmpo(13)
360 END IF
361
362 dx=dxmax-dxmin
363 dy=dymax-dymin
364 dz=dzmax-dzmin
365 majord=sqrt(dx*dx+dy*dy+dz*dz)*half
366
367 spalinr=sqrt(one+spatrue)
368 DO ns=1,nsp2sort
369 n=wsp2sort(ns)
370 IF(spalinr*spbuf(8,n)-majord<=spbuf(1,n))THEN
371 isortsp=1
372 GOTO 10
373 ENDIF
374 ENDDO
37510 CONTINUE
376
377
378
379 IF(nspmd>1)THEN
381 IF(isortsp>1)isortsp=1
382 END IF
383 isortspg = isortsp
384 ENDIF
385
387 IF (itask/= 0) isortsp = isortspg
388
389
390
391
392 IF (isortsp==1) THEN
393 nbk = sph_work%voxel_nb
394 voxsiz = 7*nbk*nbk*nbk
395 call sph_crit_voxel(xmax ,
ymax ,zmax ,xmin ,ymin ,
396 1 zmin ,diam_max ,voxsiz ,majord_vox,nbk ,
397 2 nsp2sortf,nsp2sortl,itask ,nbgauge ,nthread ,
398 3 lgauge ,numels ,spbuf ,wsp2sort ,kxsp ,
399 4 nisp ,nspbuf ,numsph ,x ,numnod ,
400 5 llgauge ,gauge ,nspmd ,sph_work%voxel)
401
402 IF (itask==0) THEN
403 isortsp=0
404 DO ns=1,nsp2sort
405 n=wsp2sort(ns)
406 IF(spalinr*spbuf(8,n)-majord_vox<=spbuf(1,n))THEN
407 isortsp=1
408 EXIT
409 ENDIF
410 ENDDO
411 IF(nspmd>1)THEN
413 IF(isortsp>1)isortsp=1
414 END IF
415 ENDIF
416
417 ENDIF
418
419 ENDIF
420
421 IF(itask==0)THEN
422 isphred=0
423 isortspg = isortsp
424 ENDIF
425
426 ireduce=0
427
429
430
431 IF (itask/= 0) isortsp = isortspg
432
433 sph_work%WREDUCE(1+itask*numsph/nthread:(itask+1)*numsph/nthread)=0
434
435
437
438 IF(itask==0)
CALL startime(timers,90)
439 IF(isortsp==1)THEN
440 IF(ispmd==0.and.itask == 0)THEN
441 WRITE(istdo,*)
442 . ' ** INFO ** SPH RE-SEARCH FOR NEIGHBOURS'
443 WRITE(iout,1000) tt
444 END IF
445
446 IF(itask == 0)THEN
447 nsphsym=0
448 nsphsymr=0
449 ENDIF
450
451 spatrue=spasort
452
453
454 CALL sphtri0(timers, x ,spbuf,kxsp,wsp2sort,bminma ,dmax,
455 2 nsp2sortf,nsp2sortl,nsp2sort,itask, dbuc)
456
457
458
459 IF(nsp2sort>0)
460 1
CALL sphtri(x ,spbuf ,kxsp ,ixsp ,nod2sp,
461 2 ireduce ,wsp2sort ,bminma ,nsp2sortf,nsp2sortl,
462 3 itask ,sph_work%WREDUCE ,lgauge ,gauge )
463
464
465#include "lockon.inc"
466 isphred=
max(isphred,ireduce)
467#include "lockoff.inc"
468
470
471
472 IF(nspmd>1)THEN
473 IF(itask==0)THEN
474
475 IF(imonm == 2)THEN
477 CALL spmd_barrier()
479 END IF
481
482
483 CALL spmd_sphgat(kxsp,ixsp,wsp2sort,isphred,lgauge)
485 END IF
486 ENDIF
487 ENDIF
488
490
491 IF(itask==0)
CALL stoptime(timers,90)
492 isphbuc=isortsp
493 ireduce=isphred
494
495
4961000 FORMAT(' ** INFO ** SPH RE-SEARCH FOR NEIGHBOURS AT TIME = ',
497 1 e11.4)
498
499
500
502
503
504 isortsp=isphbuc
505 IF(isortsp==1)THEN
506
507 IF(itask==0)
CALL startime(timers,90)
508
509 ireduce =isphred
510 myspatrue=spatrue
511
512 IF(nspmd>1) THEN
513 IF(itask==0)THEN
514 IF(imonm == 2)THEN
516 CALL spmd_barrier()
518 END IF
520
521
522
524
526 END IF
527 END IF
528
530 1 x , ispcond ,ispsym ,xframe ,xspsym ,
531 2 vspsym ,wsp2sort ,dmax ,itask ,wsmcomp ,
532 3 myspatrue,spbuf ,kxsp)
533
534
535
537
538
540 1 x ,v ,ms ,spbuf ,itab ,
541 2 kxsp ,ixsp ,nod2sp ,ispcond ,ispsym ,
542 3 xframe ,xspsym%BUF ,vspsym%BUF ,ireduce ,
543 4 wsp2sort ,myspatrue,dmax ,itask ,sph_work%WREDUCE ,
544 5 lgauge ,gauge)
545
546#include "lockon.inc"
547 IF(ireduce>isphred)THEN
548 isphred=ireduce
549 ENDIF
550#include "lockoff.inc"
551
552 IF(nspmd>1)THEN
553
555
556
557 IF(itask==0) THEN
558
559 IF(imonm == 2)THEN
561 CALL spmd_barrier()
563 END IF
565
566
568
570 END IF
571 END IF
572
574
575
576 ireduce =isphred
577 myspatrue=spatrue
578
579 CALL spclasv(x ,spbuf ,kxsp ,ixsp ,nod2sp ,
580 1 ispsym,xspsym%BUF,wsp2sort ,itask ,myspatrue,
581 2 ireduce,sph_work%WREDUCE,lgauge ,gauge ,isortsp)
582
583
585
586
587 IF(nspmd>1)THEN
588 IF(imonm == 2.AND.itask==0)THEN
590 CALL spmd_barrier()
592 END IF
593 IF(itask==0) THEN
597 END IF
598 ENDIF
599
601
602
603#include "lockon.inc"
604 IF(myspatrue<spatrue)THEN
605 spatrue=myspatrue
606 ENDIF
607#include "lockoff.inc"
608
609 IF(nspmd>1)THEN
610
612
613
614 IF(itask==0) THEN
615
616 IF(imonm == 2)THEN
618 CALL spmd_barrier()
620 END IF
622
623
625
627 END IF
628 ENDIF
629
631
632 IF(itask==0)
CALL stoptime(timers,90)
633
634 ELSE
635
636 IF(itask==0)
CALL startime(timers,94)
637
638 IF(nspmd>1)THEN
639 IF(itask==0) THEN
640
642
643
645
647 END IF
648
649
651
652 END IF
653
654
655 IF ((ncycle==0).OR.(irunn_bis>1).OR.(mcheck/=0)) THEN
656 IF (itask==0) THEN
657 ALLOCATE(xspsym%BUF(3*nsphsym),stat=ierror)
658 IF(ierror==0) xspsym%BUF = 0
659 ALLOCATE(vspsym%BUF(3*nsphsym),stat=ierror)
660 IF(ierror==0) vspsym%BUF = 0
661 ALLOCATE(wsmcomp%BUF(6*nsphsym),stat=ierror)
662 IF(ierror==0) wsmcomp%BUF = 0
663 irunn_bis = 0
664 ENDIF
665
667
668 ENDIF
669
670
671
673 1 x ,v ,ms ,spbuf ,itab ,
674 2 kxsp ,ixsp ,nod2sp ,ispcond ,ispsym ,
675 3 xframe ,xspsym%BUF ,wsp2sort ,itask )
676
677
679
680
681 ireduce =0
682 myspatrue=zero
683 CALL spclasv(x ,spbuf ,kxsp ,ixsp ,nod2sp ,
684 1 ispsym,xspsym%BUF,wsp2sort ,itask ,myspatrue,
685 2 ireduce,sph_work%WREDUCE,lgauge ,gauge ,isortsp)
686
688
689
690 IF(nspmd>1)THEN
691 IF(itask==0) THEN
692
694
695
697
699 END IF
700
701
703
704 END IF
705
706
707
709 1 x ,v ,ms ,spbuf ,itab ,
710 2 kxsp ,ixsp ,nod2sp ,ispcond ,ispsym ,
711 3 xframe ,vspsym%BUF ,wsp2sort ,itask)
712
714
715
716 IF(itask==0)
CALL stoptime(timers,94)
717
718 ENDIF
719
720
721
722
723 IF(itask==0)THEN
724 IF(nsphio/=0)THEN
725 CALL sponof2(x ,v ,d ,ms ,spbuf ,
726 2 itab ,kxsp ,ixsp ,nod2sp ,npc ,
727 3 pld ,iparg ,elbuf_tab,isphio ,vsphio ,
728 4 pm ,ipart ,ipartsp ,igrsurf ,
729 5 lprtsph ,lonfsph ,wa ,wa(numsph+1) ,wa(2*numsph+1) ,
730 6 wasph(kvnorm),sphveln,xdp, ibufssg_io, off_sph_r2r,
731 7 wfext)
732 nsp2sort=0
733 DO iprt=1,npart
734 DO k=lprtsph(2,iprt-1)+1,lprtsph(1,iprt)
735 nsp2sort=nsp2sort+1
736 wsp2sort(nsp2sort)=lonfsph(k)
737 ENDDO
738 ENDDO
739 ENDIF
740
741 isphbuc=0
742 END IF
743
744 IF(nsphsol/=0)THEN
745
746
748 . x ,spbuf ,kxsp ,ixsp ,ipartsp ,
749 . iparg ,ngrounc ,igrounc ,elbuf_tab,itask ,
750 . nod2sp ,sol2sph ,sph2sol ,ixs ,ms ,
751 . pm ,iads ,addcne ,fskyd ,dmsph ,
752 . v ,icontact,ipart)
753
755
756 END IF
757
758 IF(nsphsol/=0)THEN
759
761
762
763 nsphact=0
765 . x ,spbuf ,kxsp ,ipartsp ,elbuf_tab,
766 . iparg ,ngrounc ,igrounc ,itask ,ixsp ,
767 . nod2sp ,sol2sph ,waspact )
768
769 ELSE
770 nsphact=nsp2sort
771
772 END IF
773
774
776
777
778
779
780
782 1 x ,v ,ms ,spbuf ,itab ,
783 2 kxsp ,ixsp ,nod2sp ,ispsym ,xspsym%BUF ,
784 3 vspsym%BUF ,iparg ,wasph ,ispcond ,
785 4 xframe ,wsmcomp%BUF,geo,ipart ,ipartsp ,
786 5 waspact ,itask ,sph_iord1,numgeo,ncycle,
787 6 mcheck)
788
789
790 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
logical, dimension(:), allocatable bool_sph_sort
subroutine soltosph_on12(x, spbuf, kxsp, ixsp, ipartsp, iparg, ngrounc, igrounc, elbuf_tab, itask, nod2sp, sol2sph, sph2sol, ixs, ms, pm, iads, addcne, fskyd, dmsph, v, icontact, ipart)
subroutine soltosph_on1(x, spbuf, kxsp, ixsp, ipartsp, iparg, ngrounc, igrounc, elbuf_tab, itask, nod2sp, sol2sph, sph2sol, ixs, ms, pm, iads, addcne, fskyd, dmsph, v, icontact)
subroutine soltosph_on2(x, spbuf, kxsp, ipartsp, elbuf_tab, iparg, ngrounc, igrounc, itask, ixsp, nod2sp, sol2sph, waspact)
subroutine spadasm0(x, v, ms, spbuf, itab, kxsp, ixsp, nod2sp, ispcond, ispsym, xframe, xspsym, wsp2sort, itask)
subroutine spadasm(x, v, ms, spbuf, itab, kxsp, ixsp, nod2sp, ispcond, ispsym, xframe, vspsym, wsp2sort, itask)
subroutine spcompl(x, v, ms, spbuf, itab, kxsp, ixsp, nod2sp, ispsym, xspsym, vspsym, iparg, wacomp, ispcond, xframe, wsmcomp, geo, ipart, ipartsp, waspact, itask, sph_iord1, numgeo, ncycle, mcheck)
subroutine spechan(x, v, ms, spbuf, itab, kxsp, ixsp, nod2sp, ispcond, xframe, isortsp, iparg, elbuf_tab, wsp2sort, np2sortf, np2sortl)
subroutine sphtri0(timers, x, spbuf, kxsp, wsp2sort, bminma, dmax, nsp2sortf, nsp2sortl, nmn, itask, dbuc)
subroutine sphtri(x, spbuf, kxsp, ixsp, nod2sp, ireduce, wsp2sort, bminma, nsp2sortf, nsp2sortl, itask, kreduce, lgauge, gauge)
subroutine spmd_allglob_isum9(v, len)
subroutine spmd_spamaj(ireduce, spaglob)
subroutine spmd_sphgetx(kxsp, spbuf, x, ipartsp)
subroutine spmd_sphgetisph()
subroutine spmd_sphgat(kxsp, ixsp, wsp2sort, ireduce, lgauge)
subroutine spmd_sphgetv(kxsp, spbuf, v, ms, isortsp, ipartsp)
subroutine sponof1(x, v, d, ms, spbuf, itab, kxsp, ixsp, nod2sp, npc, pld, iparg, elbuf_tab, isphio, vsphio, pm, ipart, ipartsp, igrsurf, lprtsph, lonfsph, mwa, wa, vnormal, xdp, ibufssg_io, off_sph_r2r, wfext)
subroutine sponof2(x, v, d, ms, spbuf, itab, kxsp, ixsp, nod2sp, npc, pld, iparg, elbuf_tab, isphio, vsphio, pm, ipart, ipartsp, igrsurf, lprtsph, lonfsph, iwa, mwa, wa, vnormal, sphveln, xdp, ibufssg_io, off_sph_r2r, wfext)
subroutine spsymp(x, v, ms, spbuf, itab, kxsp, ixsp, nod2sp, ispcond, ispsym, xframe, xspsym, vspsym, ireduce, wsp2sort, myspatrue, dmax, itask, kreduce, lgauge, gauge)
subroutine spsym_alloc(x, ispcond, ispsym, xframe, xspsym, vspsym, wsp2sort, dmax, itask, wsmcomp, myspatrue, spbuf, kxsp)
subroutine spclasv(x, spbuf, kxsp, ixsp, nod2sp, waspact, myspatrue, ireduce, kreduce)
subroutine startime(event, itask)
subroutine stoptime(event, itask)