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