Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | ctimingElementstring |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE epStartTime(ctimingElementstring)
! SUBROUTINE INFORMATION:
! AUTHOR Linda Lawrie
! DATE WRITTEN January 2012
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Implement a timing scheme using start-stop (ref: epStopTime) that will help
! developers pinpoint problems.
! METHODOLOGY EMPLOYED:
! structure similar to recurring error structure.
! REFERENCES:
! na
! USE STATEMENTS:
#if defined (_OPENMP) && defined(TIMER_OMP_GET_WTIME)
use omp_lib ! only here for OMP timer
#endif
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
CHARACTER(len=*), INTENT(IN) :: ctimingElementstring
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
TYPE(timings), ALLOCATABLE, DIMENSION(:) :: tempTiming ! used for reallocate.
INTEGER :: loop ! testing if already in structure
INTEGER :: found ! indicator for element
#ifdef EP_NO_Timings
RETURN
#endif
#ifdef EP_Timings
IF (NumTimingElements == 0) THEN
MaxTimingElements=250
ALLOCATE(Timing(MaxTimingElements))
ELSEIF (NumTimingElements == MaxTimingElements) THEN
ALLOCATE(tempTiming(MaxTimingElements+250))
tempTiming(1:MaxTimingElements)=Timing(1:MaxTimingElements)
DEALLOCATE(Timing)
MaxTimingElements=MaxTimingElements+250
ALLOCATE(Timing(MaxTimingElements))
Timing(1:MaxTimingElements)=tempTiming(1:MaxTimingElements)
DEALLOCATE(tempTiming)
ENDIF
found=0
DO loop=1,NumTimingElements
IF (Timing(loop)%Element /= ctimingElementstring) cycle
found=loop
ENDDO
IF (found == 0) THEN
NumTimingElements=NumTimingElements+1
Timing(NumTimingElements)%Element = ctimingElementstring
found=NumTimingElements
ENDIF
TSTART(Timing(found)%rstartTime)
Timing(found)%calls=Timing(found)%calls+1
RETURN
#endif
END SUBROUTINE epStartTime