LMDZ
mod_phys_lmdz_omp_data.F90
Go to the documentation of this file.
1 !
2 !$Id: mod_phys_lmdz_omp_data.F90 2326 2015-07-10 12:24:29Z emillour $
3 !
5 
6  INTEGER,SAVE :: omp_size
7  INTEGER,SAVE :: omp_rank
8  LOGICAL,SAVE :: is_omp_root
9  LOGICAL,SAVE :: is_using_omp
10 
11  INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_nb
12  INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_begin
13  INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_end
14 
15  INTEGER,SAVE :: klon_omp
16  INTEGER,SAVE :: klon_omp_begin
17  INTEGER,SAVE :: klon_omp_end
18 !$OMP THREADPRIVATE(omp_rank,klon_omp,is_omp_root,klon_omp_begin,klon_omp_end)
19 
20 CONTAINS
21 
22  SUBROUTINE init_phys_lmdz_omp_data(klon_mpi)
23  USE dimphy
24  IMPLICIT NONE
25  INTEGER, INTENT(in) :: klon_mpi
26 
27  INTEGER :: i
28 
29  CHARACTER (LEN=20) :: modname='Init_phys_lmdz_omp_data'
30  CHARACTER (LEN=80) :: abort_message
31 
32 
33 #ifdef CPP_OMP
34  INTEGER :: OMP_GET_NUM_THREADS
35  EXTERNAL omp_get_num_threads
36  INTEGER :: OMP_GET_THREAD_NUM
37  EXTERNAL omp_get_thread_num
38 #endif
39 
40 #ifdef CPP_OMP
41 !$OMP MASTER
43  omp_size=omp_get_num_threads()
44 !$OMP END MASTER
45  omp_rank=omp_get_thread_num()
46 #else
48  omp_size=1
49  omp_rank=0
50 #endif
51 
53 !$OMP MASTER
54  IF (omp_rank==0) THEN
56  ELSE
57  abort_message = 'ANORMAL : OMP_MASTER /= 0'
58  CALL abort_gcm (modname,abort_message,1)
59  ENDIF
60 !$OMP END MASTER
61 
62 
63 !$OMP MASTER
64  ALLOCATE(klon_omp_para_nb(0:omp_size-1))
65  ALLOCATE(klon_omp_para_begin(0:omp_size-1))
66  ALLOCATE(klon_omp_para_end(0:omp_size-1))
67 
68  DO i=0,omp_size-1
69  klon_omp_para_nb(i)=klon_mpi/omp_size
70  IF (i<mod(klon_mpi,omp_size)) klon_omp_para_nb(i)=klon_omp_para_nb(i)+1
71  ENDDO
72 
73  klon_omp_para_begin(0) = 1
75 
76  DO i=1,omp_size-1
79  ENDDO
80 !$OMP END MASTER
81 !$OMP BARRIER
82 
86 
88 
89  END SUBROUTINE init_phys_lmdz_omp_data
90 
91  SUBROUTINE print_module_data
92  IMPLICIT NONE
93  include "iniprint.h"
94 
95 !$OMP CRITICAL
96  WRITE(lunout,*)'--------> TASK ',omp_rank
97  WRITE(lunout,*)'omp_size =',omp_size
98  WRITE(lunout,*)'omp_rank =',omp_rank
99  WRITE(lunout,*)'is_omp_root =',is_omp_root
100  WRITE(lunout,*)'klon_omp_para_nb =',klon_omp_para_nb
101  WRITE(lunout,*)'klon_omp_para_begin =',klon_omp_para_begin
102  WRITE(lunout,*)'klon_omp_para_end =',klon_omp_para_end
103  WRITE(lunout,*)'klon_omp =',klon_omp
104  WRITE(lunout,*)'klon_omp_begin =',klon_omp_begin
105  WRITE(lunout,*)'klon_omp_end =',klon_omp_end
106 !$OMP END CRITICAL
107 
108  END SUBROUTINE print_module_data
109 END MODULE mod_phys_lmdz_omp_data
integer, dimension(:), allocatable, save klon_omp_para_nb
integer, dimension(:), allocatable, save klon_omp_para_begin
subroutine abort_gcm(modname, message, ierr)
Definition: abort_gcm.F:7
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
subroutine init_phys_lmdz_omp_data(klon_mpi)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
integer, dimension(:), allocatable, save klon_omp_para_end
Definition: dimphy.F90:1
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
Definition: iniprint.h:7