! include/50/omp_lib.f90.var

!
!//===----------------------------------------------------------------------===//
!//
!// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
!// See https://llvm.org/LICENSE.txt for license information.
!// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
!//
!//===----------------------------------------------------------------------===//
!

      module omp_lib_kinds

        use, intrinsic :: iso_c_binding

        integer, parameter :: omp_integer_kind       = c_int
        integer, parameter :: omp_logical_kind       = 4
        integer, parameter :: omp_real_kind          = c_float
        integer, parameter :: kmp_double_kind        = c_double
        integer, parameter :: omp_lock_kind          = c_intptr_t
        integer, parameter :: omp_nest_lock_kind     = c_intptr_t
        integer, parameter :: omp_sched_kind         = omp_integer_kind
        integer, parameter :: omp_proc_bind_kind     = omp_integer_kind
        integer, parameter :: kmp_pointer_kind       = c_intptr_t
        integer, parameter :: kmp_size_t_kind        = c_size_t
        integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
        integer, parameter :: kmp_cancel_kind        = omp_integer_kind
        integer, parameter :: omp_sync_hint_kind     = omp_integer_kind
        integer, parameter :: omp_lock_hint_kind     = omp_sync_hint_kind
        integer, parameter :: omp_control_tool_kind  = omp_integer_kind
        integer, parameter :: omp_control_tool_result_kind = omp_integer_kind
        integer, parameter :: omp_allocator_handle_kind = c_intptr_t
        integer, parameter :: omp_memspace_handle_kind = c_intptr_t
        integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind
        integer, parameter :: omp_alloctrait_val_kind = c_intptr_t

        type omp_alloctrait
          integer(kind=omp_alloctrait_key_kind) key
          integer(kind=omp_alloctrait_val_kind) value
        end type omp_alloctrait

        integer, parameter :: omp_pause_resource_kind = omp_integer_kind

      end module omp_lib_kinds

      module omp_lib

        use omp_lib_kinds

        integer (kind=omp_integer_kind), parameter :: openmp_version    = @LIBOMP_OMP_YEAR_MONTH@
        integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
        integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
        integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
        character(*)               kmp_build_date
        parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )

        integer(kind=omp_sched_kind), parameter :: omp_sched_static  = 1
        integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
        integer(kind=omp_sched_kind), parameter :: omp_sched_guided  = 3
        integer(kind=omp_sched_kind), parameter :: omp_sched_auto    = 4
        integer(kind=omp_sched_kind), parameter :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind)

        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4

        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4

        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_none           = 0
        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended    = 1
        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_contended      = 2
        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4
        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_speculative    = 8
        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = omp_sync_hint_none
        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = omp_sync_hint_uncontended
        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = omp_sync_hint_contended
        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative
        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = omp_sync_hint_speculative
        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle         = 65536
        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm         = 131072
        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive    = 262144

        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_start = 1
        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_pause = 2
        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_flush = 3
        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_end = 4

        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_notool = -2
        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_nocallback = -1
        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_success = 0
        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_ignored = 1

        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_threadmodel = 1
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_access = 3
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pinned = 7
        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8

        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_false = 0
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_true = 1
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default = 2
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_sequential = 5
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_private = 6
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_all = 7
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17
        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18

        integer (kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0
        integer (kind=omp_allocator_handle_kind), parameter :: omp_default_mem_alloc = 1
        integer (kind=omp_allocator_handle_kind), parameter :: omp_large_cap_mem_alloc = 2
        integer (kind=omp_allocator_handle_kind), parameter :: omp_const_mem_alloc = 3
        integer (kind=omp_allocator_handle_kind), parameter :: omp_high_bw_mem_alloc = 4
        integer (kind=omp_allocator_handle_kind), parameter :: omp_low_lat_mem_alloc = 5
        integer (kind=omp_allocator_handle_kind), parameter :: omp_cgroup_mem_alloc = 6
        integer (kind=omp_allocator_handle_kind), parameter :: omp_pteam_mem_alloc = 7
        integer (kind=omp_allocator_handle_kind), parameter :: omp_thread_mem_alloc = 8

        integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0
        integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1
        integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2
        integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3
        integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4

        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0
        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1
        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2

        interface

!         ***
!         *** omp_* entry points
!         ***

          subroutine omp_set_num_threads(num_threads) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: num_threads
          end subroutine omp_set_num_threads

          subroutine omp_set_dynamic(dynamic_threads) bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind), value :: dynamic_threads
          end subroutine omp_set_dynamic

          subroutine omp_set_nested(nested) bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind), value :: nested
          end subroutine omp_set_nested

          function omp_get_num_threads() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_num_threads
          end function omp_get_num_threads

          function omp_get_max_threads() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_max_threads
          end function omp_get_max_threads

          function omp_get_thread_num() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_thread_num
          end function omp_get_thread_num

          function omp_get_num_procs() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_num_procs
          end function omp_get_num_procs

          function omp_in_parallel() bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_in_parallel
          end function omp_in_parallel

          function omp_in_final() bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_in_final
          end function omp_in_final

          function omp_get_dynamic() bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_get_dynamic
          end function omp_get_dynamic

          function omp_get_nested() bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_get_nested
          end function omp_get_nested

          function omp_get_thread_limit() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_thread_limit
          end function omp_get_thread_limit

          subroutine omp_set_max_active_levels(max_levels) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: max_levels
          end subroutine omp_set_max_active_levels

          function omp_get_max_active_levels() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_max_active_levels
          end function omp_get_max_active_levels

          function omp_get_level() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_level
          end function omp_get_level

          function omp_get_active_level() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_active_level
          end function omp_get_active_level

          function omp_get_ancestor_thread_num(level) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
            integer (kind=omp_integer_kind), value :: level
          end function omp_get_ancestor_thread_num

          function omp_get_team_size(level) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_team_size
            integer (kind=omp_integer_kind), value :: level
          end function omp_get_team_size

          subroutine omp_set_schedule(kind, chunk_size) bind(c)
            use omp_lib_kinds
            integer (kind=omp_sched_kind), value :: kind
            integer (kind=omp_integer_kind), value :: chunk_size
          end subroutine omp_set_schedule

          subroutine omp_get_schedule(kind, chunk_size) bind(c)
            use omp_lib_kinds
            integer (kind=omp_sched_kind) kind
            integer (kind=omp_integer_kind) chunk_size
          end subroutine omp_get_schedule

          function omp_get_proc_bind() bind(c)
            use omp_lib_kinds
            integer (kind=omp_proc_bind_kind) omp_get_proc_bind
          end function omp_get_proc_bind

          function omp_get_num_places() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_num_places
          end function omp_get_num_places

          function omp_get_place_num_procs(place_num) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: place_num
            integer (kind=omp_integer_kind) omp_get_place_num_procs
          end function omp_get_place_num_procs

          subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: place_num
            integer (kind=omp_integer_kind) ids(*)
          end subroutine omp_get_place_proc_ids

          function omp_get_place_num() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_place_num
          end function omp_get_place_num

          function omp_get_partition_num_places() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_partition_num_places
          end function omp_get_partition_num_places

          subroutine omp_get_partition_place_nums(place_nums) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) place_nums(*)
          end subroutine omp_get_partition_place_nums

          function omp_get_wtime() bind(c)
            use omp_lib_kinds
            real (kind=kmp_double_kind) omp_get_wtime
          end function omp_get_wtime

          function omp_get_wtick() bind(c)
            use omp_lib_kinds
            real (kind=kmp_double_kind) omp_get_wtick
          end function omp_get_wtick

          function omp_get_default_device() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_default_device
          end function omp_get_default_device

          subroutine omp_set_default_device(device_num) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: device_num
          end subroutine omp_set_default_device

          function omp_get_num_devices() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_num_devices
          end function omp_get_num_devices

          function omp_get_num_teams() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_num_teams
          end function omp_get_num_teams

          function omp_get_team_num() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_team_num
          end function omp_get_team_num

          function omp_get_cancellation() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_cancellation
          end function omp_get_cancellation

          function omp_is_initial_device() bind(c)
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_is_initial_device
          end function omp_is_initial_device

          function omp_get_initial_device() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_initial_device
          end function omp_get_initial_device

          function omp_get_device_num() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_device_num
          end function omp_get_device_num

          function omp_pause_resource(kind, device_num) bind(c)
            use omp_lib_kinds
            integer (kind=omp_pause_resource_kind), value :: kind
            integer (kind=omp_integer_kind), value :: device_num
            integer (kind=omp_integer_kind) omp_pause_resource
          end function omp_pause_resource

          function omp_pause_resource_all(kind) bind(c)
            use omp_lib_kinds
            integer (kind=omp_pause_resource_kind), value :: kind
            integer (kind=omp_integer_kind) omp_pause_resource_all
          end function omp_pause_resource_all

          function omp_get_supported_active_levels() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_supported_active_levels
          end function omp_get_supported_active_levels

          subroutine omp_init_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_lock_kind) svar
          end subroutine omp_init_lock

          subroutine omp_destroy_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_lock_kind) svar
          end subroutine omp_destroy_lock

          subroutine omp_set_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_lock_kind) svar
          end subroutine omp_set_lock

          subroutine omp_unset_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_lock_kind) svar
          end subroutine omp_unset_lock

          function omp_test_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_lock
!DIR$ ENDIF
            use omp_lib_kinds
            logical (kind=omp_logical_kind) omp_test_lock
            integer (kind=omp_lock_kind) svar
          end function omp_test_lock

          subroutine omp_init_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_nest_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_nest_lock_kind) nvar
          end subroutine omp_init_nest_lock

          subroutine omp_destroy_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_nest_lock_kind) nvar
          end subroutine omp_destroy_nest_lock

          subroutine omp_set_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_nest_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_nest_lock_kind) nvar
          end subroutine omp_set_nest_lock

          subroutine omp_unset_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_nest_lock_kind) nvar
          end subroutine omp_unset_nest_lock

          function omp_test_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_nest_lock
!DIR$ ENDIF
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_test_nest_lock
            integer (kind=omp_nest_lock_kind) nvar
          end function omp_test_nest_lock

          function omp_get_max_task_priority() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_get_max_task_priority
          end function omp_get_max_task_priority

          function omp_init_allocator(memspace, ntraits, traits)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind) omp_init_allocator
            integer (kind=omp_memspace_handle_kind) :: memspace
            integer (kind=omp_integer_kind) :: ntraits
            type(omp_alloctrait), intent(in) :: traits(*)
          end function omp_init_allocator

          subroutine omp_destroy_allocator(allocator) bind(c)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind), value :: allocator
          end subroutine omp_destroy_allocator

          subroutine omp_set_default_allocator(allocator) bind(c)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind), value :: allocator
          end subroutine omp_set_default_allocator

          function omp_get_default_allocator() bind(c)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind) omp_get_default_allocator
          end function omp_get_default_allocator

          subroutine omp_set_affinity_format(format)
            character (len=*) :: format
          end subroutine omp_set_affinity_format

          function omp_get_affinity_format(buffer)
            use omp_lib_kinds
            character (len=*) :: buffer
            integer (kind=kmp_size_t_kind) :: omp_get_affinity_format
          end function omp_get_affinity_format

          subroutine omp_display_affinity(format)
            character (len=*) :: format
          end subroutine omp_display_affinity

          function omp_capture_affinity(buffer, format)
            use omp_lib_kinds
            character (len=*) :: format
            character (len=*) :: buffer
            integer (kind=kmp_size_t_kind) :: omp_capture_affinity
          end function omp_capture_affinity

!         ***
!         *** kmp_* entry points
!         ***

          subroutine kmp_set_stacksize(size) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: size
          end subroutine kmp_set_stacksize

          subroutine kmp_set_stacksize_s(size) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_size_t_kind), value :: size
          end subroutine kmp_set_stacksize_s

          subroutine kmp_set_blocktime(msec) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: msec
          end subroutine kmp_set_blocktime

          subroutine kmp_set_library_serial() bind(c)
          end subroutine kmp_set_library_serial

          subroutine kmp_set_library_turnaround() bind(c)
          end subroutine kmp_set_library_turnaround

          subroutine kmp_set_library_throughput() bind(c)
          end subroutine kmp_set_library_throughput

          subroutine kmp_set_library(libnum) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: libnum
          end subroutine kmp_set_library

          subroutine kmp_set_defaults(string) bind(c)
            use, intrinsic :: iso_c_binding
            character (kind=c_char) :: string(*)
          end subroutine kmp_set_defaults

          function kmp_get_stacksize() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_stacksize
          end function kmp_get_stacksize

          function kmp_get_stacksize_s() bind(c)
            use omp_lib_kinds
            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
          end function kmp_get_stacksize_s

          function kmp_get_blocktime() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_blocktime
          end function kmp_get_blocktime

          function kmp_get_library() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_library
          end function kmp_get_library

          subroutine kmp_set_disp_num_buffers(num) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind), value :: num
          end subroutine kmp_set_disp_num_buffers

          function kmp_set_affinity(mask) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_set_affinity
            integer (kind=kmp_affinity_mask_kind) mask
          end function kmp_set_affinity

          function kmp_get_affinity(mask) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_affinity
            integer (kind=kmp_affinity_mask_kind) mask
          end function kmp_get_affinity

          function kmp_get_affinity_max_proc() bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
          end function kmp_get_affinity_max_proc

          subroutine kmp_create_affinity_mask(mask) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_affinity_mask_kind) mask
          end subroutine kmp_create_affinity_mask

          subroutine kmp_destroy_affinity_mask(mask) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_affinity_mask_kind) mask
          end subroutine kmp_destroy_affinity_mask

          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
            integer (kind=omp_integer_kind), value :: proc
            integer (kind=kmp_affinity_mask_kind) mask
          end function kmp_set_affinity_mask_proc

          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
            integer (kind=omp_integer_kind), value :: proc
            integer (kind=kmp_affinity_mask_kind) mask
          end function kmp_unset_affinity_mask_proc

          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
            integer (kind=omp_integer_kind), value :: proc
            integer (kind=kmp_affinity_mask_kind) mask
          end function kmp_get_affinity_mask_proc

          function kmp_malloc(size) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_pointer_kind) kmp_malloc
            integer (kind=kmp_size_t_kind), value :: size
          end function kmp_malloc

          function kmp_aligned_malloc(size, alignment) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
            integer (kind=kmp_size_t_kind), value :: size
            integer (kind=kmp_size_t_kind), value :: alignment
          end function kmp_aligned_malloc

          function kmp_calloc(nelem, elsize) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_pointer_kind) kmp_calloc
            integer (kind=kmp_size_t_kind), value :: nelem
            integer (kind=kmp_size_t_kind), value :: elsize
          end function kmp_calloc

          function kmp_realloc(ptr, size) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_pointer_kind) kmp_realloc
            integer (kind=kmp_pointer_kind), value :: ptr
            integer (kind=kmp_size_t_kind), value :: size
          end function kmp_realloc

          subroutine kmp_free(ptr) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_pointer_kind), value :: ptr
          end subroutine kmp_free

          subroutine kmp_set_warnings_on() bind(c)
          end subroutine kmp_set_warnings_on

          subroutine kmp_set_warnings_off() bind(c)
          end subroutine kmp_set_warnings_off

          function kmp_get_cancellation_status(cancelkind) bind(c)
            use omp_lib_kinds
            integer (kind=kmp_cancel_kind), value :: cancelkind
            logical (kind=omp_logical_kind) kmp_get_cancellation_status
          end function kmp_get_cancellation_status

          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
            use omp_lib_kinds
            integer (kind=omp_lock_kind) svar
            integer (kind=omp_lock_hint_kind), value :: hint
          end subroutine omp_init_lock_with_hint

          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
            use omp_lib_kinds
            integer (kind=omp_nest_lock_kind) nvar
            integer (kind=omp_lock_hint_kind), value :: hint
          end subroutine omp_init_nest_lock_with_hint

          function omp_control_tool(command, modifier, arg) bind(c)
            use omp_lib_kinds
            integer (kind=omp_integer_kind) omp_control_tool
            integer (kind=omp_control_tool_kind), value :: command
            integer (kind=omp_control_tool_kind), value :: modifier
            integer (kind=kmp_pointer_kind), optional :: arg
          end function omp_control_tool

        end interface

      end module omp_lib
