Я пытаюсь получить доступ к элементам типа данных с помощью оператора%, но результат равен нулю.У меня есть пример кода ниже.
Строка print*, t%tsum
всегда печатает ноль.Однако, когда я печатаю tsum в подпрограмме, это так и должно быть.
MODULE statistics
PUBLIC :: TimeMarker , start , finish , avgTime , begin , end_ , tsum , counts
TYPE TimeMarker
REAL*8 :: begin , end_ , tsum
INTEGER :: counts = 0
CONTAINS
PROCEDURE :: start => start_time
PROCEDURE :: finish => finish_time
PROCEDURE :: avgTime => averageTime
END TYPE TimeMarker
CONTAINS
SUBROUTINE start_time(this)
CLASS(timeMarker) , INTENT(INOUT) :: this
CALL CPU_TIME(begin)
END SUBROUTINE start_time
SUBROUTINE finish_time(this)
CLASS(timeMarker) , INTENT(INOUT) :: this
CALL CPU_TIME(end_)
tsum = tsum + end_ - begin
counts = counts + 1
END SUBROUTINE finish_time
SUBROUTINE averageTime(this)
CLASS(timeMarker) , INTENT(INOUT) :: this
WRITE(*,*) "Average time : " , tsum/counts
END SUBROUTINE averageTime
END MODULE statistics
program test
use statistics
implicit none
type(TimeMarker) :: t
integer :: n , m
real*8 :: a
do m=1,50
call t%start
do n=1,20000000
a = sqrt(a)
end do
print*, t%tsum
end do
call t%avgTime
end program test