V3FIT
timer_sub.f
1  MODULE timer_sub
2  USE stel_kinds, ONLY: dp
3  USE parallel_include_module
4  IMPLICIT NONE
5 C-----------------------------------------------
6 C L o c a l V a r i a b l e s
7 C-----------------------------------------------
8  INTEGER, PARAMETER :: tsum = 0, tvac = 1, tread = 2, twout= 3,
9  & teqf = 4, tfun = 5, trecon= 6, tfft = 7,
10  & tffi = 8, tfor = 9, tbcov =10, tres = 11,
11  & tprec2d = 12, tvac_2d = 13, tfun_2d = 14,
12  & tfact_2d=15, tio = 16
13 
14  INTEGER, PARAMETER :: tsurf=1, tscal=2, tbext=3, tsolver=4,
15  & tallg=5, tfouri=6, tgreenf=7, tfourp=8,
16  & tallr=9, tanal=10, tasum=11, tasum2=12,
17  & tallgv=13, tanar=14
18 
19  REAL(dp) :: treadon, treadoff, tfunon, tfunoff,
20  & treconon, treconoff, tffton, tfftoff,
21  & tbcovon, tbcovoff, tvacon, tvacoff,
22  & tforon, tforoff, treson, tresoff,
23  & tprec2don, tprec2doff, twouton, twoutoff,
24  & teqfon, teqfoff, timeon, timeoff,
25  & timer_tsum, timer_tfun, timer_io
26  REAL(dp), DIMENSION(0:15) :: timer=0
27  REAL(dp), DIMENSION(15) :: timer_vac=0
28 
29  CONTAINS
30 
31  SUBROUTINE write_times (nthreed, lscreen, lfreeb, lrecon, lprec2d)
32  IMPLICIT NONE
33  INTEGER, INTENT(in) :: nthreed
34  LOGICAL, INTENT(in) :: lscreen, lfreeb, lrecon, lprec2d
35  INTEGER :: i, nform
36  CHARACTER(LEN=*), DIMENSION(0:16), PARAMETER :: form =
37  & (/ 'TOTAL COMPUTATIONAL TIME (SEC) ',
38  & ' FREE BOUNDARY (VACUUM) ',
39  & ' READ IN DATA ',
40  & ' WRITE OUT DATA TO WOUT ',
41  & ' EQFORCE ',
42  & 'TIME IN FUNCT3D ',
43  & ' PROFILE RECONSTRUCTION ',
44  & ' FOURIER TRANSFORM ',
45  & ' INVERSE FOURIER TRANSFORM ',
46  & ' FORCES AND SYMMETRIZE ',
47  & ' BCOVAR FIELDS ',
48  & ' RESIDUE ',
49  & 'TIME IN PRECON2D SETUP ',
50  & ' VACUUM ONLY ',
51  & ' FUNCT3D ',
52  & ' FORWARD SOLVE (FACTOR BLKS) ',
53  & 'TIME TO INPUT/OUTPUT '
54  & /)
55 
56  timer_tsum = timer(tsum) + timer(twout) + timer(teqf)
57  timer_tfun = timer(tfun)
58  timer_io = timer(tread) + timer(twout)
59 
60  DO i = 1,2
61  IF (i .eq. 1) nform = 6
62  IF (i .eq. 2) nform = nthreed
63  IF (.not.lscreen .and. i.eq.1) cycle
64  WRITE (nform, 20)
65  & form(tsum) ,timer_tsum, form(tio), timer_io,
66  & form(tread),timer(tread), form(twout),timer(twout),
67  & form(tfun) , timer(tfun), form(tbcov) ,timer(tbcov),
68  & form(tfft) , timer(tfft), form(tffi) ,timer(tffi),
69  & form(tfor) , timer(tfor), form(tres), timer(tres),
70  & form(teqf) ,timer(teqf)
71  IF (lrecon) WRITE (nform, 20) form(trecon),timer(trecon)
72  IF (lfreeb) THEN
73  WRITE (nform, 20) form(tvac) ,timer(tvac)
74  WRITE (nform, 24) timer_vac(tsurf), timer_vac(tbext),
75  & timer_vac(tscal), timer_vac(tanal), timer_vac(tasum),
76  & timer_vac(tasum2), timer_vac(tanar), timer_vac(tgreenf),
77  & timer_vac(tfourp), timer_vac(tallr), timer_vac(tallg),
78  & timer_vac(tfouri), timer_vac(tallgv),timer_vac(tsolver)
79  END IF
80  IF (lprec2d) THEN
81  WRITE (nform, 20) form(tprec2d), timer(tprec2d),
82  & form(tfun_2d), timer(tfun_2d),
83  & form(tfact_2d), timer(tprec2d)-timer(tfun_2d)
84  IF (lfreeb) WRITE (nform, 20) form(tvac_2d), timer(tvac_2d)
85  END IF
86  END DO
87 
88  20 FORMAT(a35,f12.2)
89  24 FORMAT( 10x, 'VACUUM SURFACE ',7x,f12.2,
90  & /,10x, 'VACUUM BEXTERN ',7x,f12.2,
91  & /,10x, 'VACUUM SCALPOT ',7x,f12.2,
92  & /,10x, ' ANALYT ',7x,f12.2,
93  & /,10x, ' ASUM ',7x,f12.2,
94  & /,10x, ' ASUM2 ',7x,f12.2,
95  & /,10x, ' ALLREDUCE ',7x,f12.2,
96  & /,10x, ' GREENF ',7x,f12.2,
97  & /,10x, ' FOURP ',7x,f12.2,
98  & /,10x, ' ALLREDUCE ',7x,f12.2,
99  & /,10x, ' ALLGATHER ',7x,f12.2,
100  & /,10x, ' FOURI ',7x,f12.2,
101  & /,10x, 'VACUUM ALLGATHER ',7x,f12.2,
102  & /,10x, 'VACUUM SOLVER ',7x,f12.2)
103 
104  END SUBROUTINE write_times
105 
106  END MODULE timer_sub