find_or_create_region Function

private function find_or_create_region(name) result(idx)

Find an existing region by name or create a new one Returns -1 if MAX_REGIONS is exceeded

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: name

Return Value integer(kind=default_int)


Called by

proc~~find_or_create_region~~CalledByGraph proc~find_or_create_region find_or_create_region proc~profiler_start profiler_start proc~profiler_start->proc~find_or_create_region

Variables

Type Visibility Attributes Name Initial
integer(kind=default_int), private :: i

Source Code

   function find_or_create_region(name) result(idx)
      !! Find an existing region by name or create a new one
      !! Returns -1 if MAX_REGIONS is exceeded
      character(len=*), intent(in) :: name
      integer(default_int) :: idx
      integer(default_int) :: i

      do i = 1, state%num_regions
         if (trim(state%regions(i)%name) == trim(name)) then
            idx = i
            return
         end if
      end do

      if (state%num_regions < MAX_REGIONS) then
         state%num_regions = state%num_regions + 1
         idx = state%num_regions
         state%regions(idx)%name = trim(name)
         state%regions(idx)%total_time = 0.0_dp
         state%regions(idx)%call_count = 0
         state%regions(idx)%active = .false.
      else
         idx = -1
      end if
   end function find_or_create_region