LCOV - code coverage report
Current view: | top level - dynamics/se/dycore - thread_mod.F90 (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 19 | 25 | 76.0 %
Date: | 2024-12-17 22:39:59 |  | Functions: | 6 | 8 | 75.0 %

              Line data    Source code
           1             : module thread_mod
           2             :
           3             : #ifdef _OPENMP
           4             :   use omp_lib, only: omp_get_thread_num, &
           5             :        omp_in_parallel, &
           6             :        omp_set_num_threads, &
           7             :        omp_get_max_threads, &
           8             :        omp_get_num_threads, &
           9             :        omp_get_nested,      &
          10             :        omp_set_nested
          11             : #endif
          12             :   use cam_logfile,            only: iulog
          13             :   use spmd_utils,             only: masterproc
          14             :
          15             :   implicit none
          16             :   private
          17             :
          18             :   integer, public :: max_num_threads=1 ! maximum number of OpenMP threads
          19             :   integer, public :: horz_num_threads, vert_num_threads, tracer_num_threads
          20             :
          21             :   public :: omp_get_thread_num
          22             :   public :: omp_in_parallel
          23             :   public :: omp_set_num_threads
          24             :   public :: omp_get_max_threads
          25             :   public :: omp_get_num_threads
          26             :   public :: omp_get_nested
          27             :   public :: omp_set_nested
          28             :   public :: initomp
          29             : contains
          30             :
          31             : #ifndef _OPENMP
          32     7047216 :   function omp_get_thread_num() result(ithr)
          33             :     integer ithr
          34     7047216 :     ithr=0
          35     7047216 :   end function omp_get_thread_num
          36             :
          37       12288 :   function omp_get_num_threads() result(ithr)
          38             :     integer ithr
          39       12288 :     ithr=1
          40       12288 :   end function omp_get_num_threads
          41             :
          42        1536 :   function omp_in_parallel() result(ans)
          43             :     logical ans
          44        1536 :     ans=.FALSE.
          45        1536 :   end function omp_in_parallel
          46             :
          47     1113600 :   subroutine omp_set_num_threads(NThreads)
          48             :     integer Nthreads
          49     1113600 :     NThreads=1
          50     1113600 :   end subroutine omp_set_num_threads
          51             :
          52           0 :   integer function omp_get_max_threads()
          53           0 :     omp_get_max_threads=1
          54           0 :   end function omp_get_max_threads
          55             :
          56           0 :   integer function omp_get_nested()
          57           0 :     omp_get_nested=0
          58           0 :   end function omp_get_nested
          59             :
          60    16300128 :   subroutine omp_set_nested(flag)
          61             :     logical :: flag
          62    16300128 :   end subroutine omp_set_nested
          63             :
          64        1536 :   subroutine initomp
          65        1536 :     max_num_threads = 1
          66        1536 :     if (masterproc) then
          67           2 :       write(iulog,*) "INITOMP: INFO: openmp not activated"
          68             :     end if
          69        1536 :   end subroutine initomp
          70             :
          71             : #else
          72             :   subroutine initomp
          73             :     !$OMP PARALLEL
          74             :     max_num_threads = omp_get_num_threads()
          75             :     !$OMP END PARALLEL
          76             :     if (masterproc) then
          77             :       write(iulog,*) "INITOMP: INFO: number of OpenMP threads = ", max_num_threads
          78             :     end if
          79             :   end subroutine initomp
          80             : #endif
          81             :
          82             : end module thread_mod

Generated by: LCOV version 1.14