forked from lesgo-jhu/lesgo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
clocks.f90
85 lines (70 loc) · 2.15 KB
/
clocks.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
!!
!! Copyright (C) 2011-2017 Johns Hopkins University
!!
!! This file is part of lesgo.
!!
!! lesgo is free software: you can redistribute it and/or modify
!! it under the terms of the GNU General Public License as published by
!! the Free Software Foundation, either version 3 of the License, or
!! (at your option) any later version.
!!
!! lesgo is distributed in the hope that it will be useful,
!! but WITHOUT ANY WARRANTY; without even the implied warranty of
!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
!! GNU General Public License for more details.
!!
!! You should have received a copy of the GNU General Public License
!! along with lesgo. If not, see <http://www.gnu.org/licenses/>.
!!
!*******************************************************************************
module clock_m
!*******************************************************************************
!
! This module provides the clock data type (object) and the
! subroutines/functions that act on instances of the clock data type.
!
use types, only : rprec
implicit none
save
private
public clock_t
type clock_t
real(rprec) :: start_time
real(rprec) :: stop_time
real(rprec) :: time
contains
procedure, public :: start
procedure, public :: stop
end type clock_t
contains
!*******************************************************************************
subroutine start( this )
!*******************************************************************************
#ifdef PPMPI
use mpi, only : mpi_wtime
#endif
implicit none
class(clock_t), intent(inout) :: this
#ifdef PPMPI
this % start_time = mpi_wtime()
#else
call cpu_time( this % start_time )
#endif
end subroutine start
!*******************************************************************************
subroutine stop( this )
!*******************************************************************************
#ifdef PPMPI
use mpi, only : mpi_wtime
#endif
implicit none
class(clock_t), intent(inout) :: this
#ifdef PPMPI
this % stop_time = mpi_wtime()
#else
call cpu_time( this % stop_time )
#endif
! Compute the clock time
this % time = this % stop_time - this % start_time
end subroutine stop
end module clock_m