module mod_phys_openmp integer,save :: omp_size integer,save :: omp_rank INTEGER,SAVE,dimension(:),allocatable :: klon_omp_nb INTEGER,SAVE,dimension(:),allocatable :: klon_omp_begin INTEGER,SAVE,dimension(:),allocatable :: klon_omp_end INTEGER,SAVE :: klon_omp !$OMP THREADPRIVATE(omp_rank,klon_omp) REAL,save,allocatable,dimension(:) :: zmasq !$OMP THREADPRIVATE(zmasq) contains subroutine init_phys_openmp USE mod_phys_mpi, only : klon_mpi,kfdia,kidia,kdlon implicit none integer :: i #ifdef _OPENMP integer :: OMP_GET_NUM_THREADS external OMP_GET_NUM_THREADS integer :: OMP_GET_THREAD_NUM external OMP_GET_THREAD_NUM #endif #ifdef _OPENMP !$OMP MASTER omp_size=OMP_GET_NUM_THREADS() !$OMP END MASTER omp_rank=OMP_GET_THREAD_NUM() #else omp_size=1 omp_rank=0 #endif !$OMP MASTER print *,'MASTER :omp_rank',omp_rank allocate(klon_omp_nb(0:omp_size-1)) allocate(klon_omp_begin(0:omp_size-1)) allocate(klon_omp_end(0:omp_size-1)) do i=0,omp_size-1 klon_omp_nb(i)=klon_mpi/omp_size if (i