| use omp_lib |
| implicit none (type, external) |
| if (.not. env_exists ("OMP_NUM_TEAMS") & |
| .and. omp_get_max_teams () /= 0) & |
| error stop 1 |
| call omp_set_num_teams (7) |
| if (omp_get_max_teams () /= 7) & |
| error stop 2 |
| if (.not. env_exists ("OMP_TEAMS_THREAD_LIMIT") & |
| .and. omp_get_teams_thread_limit () /= 0) & |
| error stop 3 |
| call omp_set_teams_thread_limit (15) |
| if (omp_get_teams_thread_limit () /= 15) & |
| error stop 4 |
| !$omp teams |
| !$omp parallel if(.false.) |
| if (omp_get_max_teams () /= 7 & |
| .or. omp_get_teams_thread_limit () /= 15 & |
| .or. omp_get_num_teams () < 1 & |
| .or. omp_get_num_teams () > 7 & |
| .or. omp_get_team_num () < 0 & |
| .or. omp_get_team_num () >= omp_get_num_teams () & |
| .or. omp_get_thread_limit () < 1 & |
| .or. omp_get_thread_limit () > 15) & |
| error stop 5 |
| !$omp end parallel |
| !$omp end teams |
| !$omp teams num_teams(5) thread_limit (13) |
| !$omp parallel if(.false.) |
| if (omp_get_max_teams () /= 7 & |
| .or. omp_get_teams_thread_limit () /= 15 & |
| .or. omp_get_num_teams () /= 5 & |
| .or. omp_get_team_num () < 0 & |
| .or. omp_get_team_num () >= omp_get_num_teams () & |
| .or. omp_get_thread_limit () < 1 & |
| .or. omp_get_thread_limit () > 13) & |
| error stop 6 |
| !$omp end parallel |
| !$omp end teams |
| !$omp teams num_teams(8) thread_limit (16) |
| !$omp parallel if(.false.) |
| if (omp_get_max_teams () /= 7 & |
| .or. omp_get_teams_thread_limit () /= 15 & |
| .or. omp_get_num_teams () /= 8 & |
| .or. omp_get_team_num () < 0 & |
| .or. omp_get_team_num () >= omp_get_num_teams () & |
| .or. omp_get_thread_limit () < 1 & |
| .or. omp_get_thread_limit () > 16) & |
| error stop 7 |
| !$omp end parallel |
| !$omp end teams |
| contains |
| logical function env_exists (name) |
| character(len=*) :: name |
| character(len=40) :: val |
| integer :: stat |
| call get_environment_variable (name, val, status=stat) |
| if (stat == 0) then |
| env_exists = .true. |
| else if (stat == 1) then |
| env_exists = .false. |
| else |
| error stop 10 |
| endif |
| end |
| end |