!### macro's ##################################################### ! #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if ! #include "tm5.inc" ! !################################################################# module OMP_ParTools use GO, only : gol, goPr, goErr use partools, only : isRoot public :: TM5_OMP_Init ! --- const -------------------------------------- character(len=*), parameter :: mname = 'OMP_ParTools' ! --- var -------------------------------------- integer :: omp_mytask, omp_ntasks !$OMP THREADPRIVATE (omp_mytask, omp_ntasks) contains ! =================================================== subroutine TM5_OMP_Init ( status ) implicit none integer, intent(out) :: status ! Functions integer :: omp_get_thread_num, omp_get_num_threads !$OMP PARALLEL & !$OMP default (none) #ifdef _OPENMP omp_mytask = omp_get_thread_num() omp_ntasks = omp_get_num_threads() write(gol,*)'OMP. ntasks: ',omp_ntasks,', my_task: ',omp_mytask ; call goPr #else omp_mytask = 0 omp_ntasks = 1 if(isRoot) then write(gol,*)'No OpenMP parallelization used' ; call goPr endif #endif !$OMP END PARALLEL status = 0 return end subroutine TM5_OMP_Init end module OMP_ParTools