LMDZ
mod_phys_lmdz_mpi_data.F90
Go to the documentation of this file.
1 !
2 !$Id$
3 !
5  USE mod_const_mpi
6 
7  INTEGER,SAVE :: ii_begin
8  INTEGER,SAVE :: ii_end
9  INTEGER,SAVE :: jj_begin
10  INTEGER,SAVE :: jj_end
11  INTEGER,SAVE :: jj_nb
12  INTEGER,SAVE :: ij_begin
13  INTEGER,SAVE :: ij_end
14  INTEGER,SAVE :: ij_nb
15  INTEGER,SAVE :: klon_mpi_begin
16  INTEGER,SAVE :: klon_mpi_end
17  INTEGER,SAVE :: klon_mpi
18 
19  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_nb
20  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_begin
21  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_end
22 
23  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_begin
24  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_end
25 
26  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_nb
27  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_begin
28  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_end
29 
30  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: klon_mpi_para_nb
31  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: klon_mpi_para_begin
32  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: klon_mpi_para_end
33 
34 
35  INTEGER,SAVE :: mpi_rank
36  INTEGER,SAVE :: mpi_size
37  INTEGER,SAVE :: mpi_root
38  LOGICAL,SAVE :: is_mpi_root
39  LOGICAL,SAVE :: is_using_mpi
40 
41 
42  LOGICAL,SAVE :: is_north_pole
43  LOGICAL,SAVE :: is_south_pole
44  INTEGER,SAVE :: comm_lmdz_phy
45 
46 CONTAINS
47 
48  SUBROUTINE init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
50  IMPLICIT NONE
51  INTEGER,INTENT(in) :: iim
52  INTEGER,INTENT(in) :: jjp1
53  INTEGER,INTENT(in) :: nb_proc
54  INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
55 
56  INTEGER :: ierr
57  INTEGER :: klon_glo
58  INTEGER :: i
59 
60 #ifdef CPP_MPI
62 #else
64 #endif
65 
66  if (iim.eq.1) then
67  klon_glo=1
68  else
69  klon_glo=iim*(jjp1-2)+2
70  endif
71 
73 
74  IF (is_using_mpi) THEN
75 #ifdef CPP_MPI
76  CALL mpi_comm_size(comm_lmdz_phy,mpi_size,ierr)
77  CALL mpi_comm_rank(comm_lmdz_phy,mpi_rank,ierr)
78 #endif
79  ELSE
80  mpi_size=1
81  mpi_rank=0
82  ENDIF
83 
84  IF (mpi_rank == 0) THEN
85  mpi_root = 0
86  is_mpi_root = .true.
87  ENDIF
88 
89  IF (mpi_rank == 0) THEN
91  ELSE
93  ENDIF
94 
95  IF (mpi_rank == mpi_size-1) THEN
97  ELSE
99  ENDIF
100 
101  ALLOCATE(jj_para_nb(0:mpi_size-1))
102  ALLOCATE(jj_para_begin(0:mpi_size-1))
103  ALLOCATE(jj_para_end(0:mpi_size-1))
104 
105  ALLOCATE(ij_para_nb(0:mpi_size-1))
106  ALLOCATE(ij_para_begin(0:mpi_size-1))
107  ALLOCATE(ij_para_end(0:mpi_size-1))
108 
109  ALLOCATE(ii_para_begin(0:mpi_size-1))
110  ALLOCATE(ii_para_end(0:mpi_size-1))
111 
112  ALLOCATE(klon_mpi_para_nb(0:mpi_size-1))
113  ALLOCATE(klon_mpi_para_begin(0:mpi_size-1))
114  ALLOCATE(klon_mpi_para_end(0:mpi_size-1))
115 
116 
117  klon_mpi_para_nb(0:mpi_size-1)=distrib(0:nb_proc-1)
118 
119  DO i=0,mpi_size-1
120  IF (i==0) THEN
122  ELSE
124  ENDIF
126  ENDDO
127 
128 
129  DO i=0,mpi_size-1
130 
131  IF (i==0) THEN
132  ij_para_begin(i) = 1
133  ELSE
134  ij_para_begin(i) = klon_mpi_para_begin(i)+iim-1
135  ENDIF
136 
137  jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1
138  ii_para_begin(i) = mod(ij_para_begin(i)-1,iim) + 1
139 
140 
141  ij_para_end(i) = klon_mpi_para_end(i)+iim-1
142  jj_para_end(i) = (ij_para_end(i)-1)/iim + 1
143  ii_para_end(i) = mod(ij_para_end(i)-1,iim) + 1
144 
145 
148 
149  ENDDO
150 
162 
163  CALL print_module_data
164 
165  END SUBROUTINE init_phys_lmdz_mpi_data
166 
167  SUBROUTINE print_module_data
168  IMPLICIT NONE
169  include "iniprint.h"
170 
171  WRITE(lunout,*) 'ii_begin =', ii_begin
172  WRITE(lunout,*) 'ii_end =', ii_end
173  WRITE(lunout,*) 'jj_begin =',jj_begin
174  WRITE(lunout,*) 'jj_end =', jj_end
175  WRITE(lunout,*) 'jj_nb =', jj_nb
176  WRITE(lunout,*) 'ij_begin =', ij_begin
177  WRITE(lunout,*) 'ij_end =', ij_end
178  WRITE(lunout,*) 'ij_nb =', ij_nb
179  WRITE(lunout,*) 'klon_mpi_begin =', klon_mpi_begin
180  WRITE(lunout,*) 'klon_mpi_end =', klon_mpi_end
181  WRITE(lunout,*) 'klon_mpi =', klon_mpi
182  WRITE(lunout,*) 'jj_para_nb =', jj_para_nb
183  WRITE(lunout,*) 'jj_para_begin =', jj_para_begin
184  WRITE(lunout,*) 'jj_para_end =', jj_para_end
185  WRITE(lunout,*) 'ii_para_begin =', ii_para_begin
186  WRITE(lunout,*) 'ii_para_end =', ii_para_end
187  WRITE(lunout,*) 'ij_para_nb =', ij_para_nb
188  WRITE(lunout,*) 'ij_para_begin =', ij_para_begin
189  WRITE(lunout,*) 'ij_para_end =', ij_para_end
190  WRITE(lunout,*) 'klon_mpi_para_nb =', klon_mpi_para_nb
191  WRITE(lunout,*) 'klon_mpi_para_begin =', klon_mpi_para_begin
192  WRITE(lunout,*) 'klon_mpi_para_end =', klon_mpi_para_end
193  WRITE(lunout,*) 'mpi_rank =', mpi_rank
194  WRITE(lunout,*) 'mpi_size =', mpi_size
195  WRITE(lunout,*) 'mpi_root =', mpi_root
196  WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
197  WRITE(lunout,*) 'is_north_pole =', is_north_pole
198  WRITE(lunout,*) 'is_south_pole =', is_south_pole
199  WRITE(lunout,*) 'COMM_LMDZ_PHY =', comm_lmdz_phy
200 
201  END SUBROUTINE print_module_data
202 
203 END MODULE mod_phys_lmdz_mpi_data
integer, dimension(:), allocatable, save jj_para_nb
integer, dimension(:), allocatable, save ii_para_end
integer, dimension(:), allocatable, save jj_para_end
integer, dimension(:), allocatable, save ij_para_begin
integer, dimension(:), allocatable, save klon_mpi_para_nb
!$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
integer, dimension(:), allocatable, save klon_mpi_para_begin
integer comm_lmdz
integer, dimension(:), allocatable, save klon_mpi_para_end
!$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 ij_para_nb
subroutine init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator)
integer, dimension(:), allocatable, save jj_para_begin
integer, dimension(:), allocatable, save ii_para_begin
integer, dimension(:), allocatable, save ij_para_end
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
Definition: iniprint.h:7