source: LMDZ4/trunk/libf/phylmd/mod_phys_lmdz_mpi_data.F90 @ 851

Last change on this file since 851 was 775, checked in by Laurent Fairhead, 17 years ago

Suite du merge entre la version et la HEAD: quelques modifications
de Yann sur le

LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1!
2!$Header$
3!
4MODULE mod_phys_lmdz_mpi_data
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_ok_mpi
40 
41 
42  LOGICAL,SAVE :: is_north_pole
43  LOGICAL,SAVE :: is_south_pole
44  INTEGER,SAVE :: COMM_LMDZ_PHY
45
46CONTAINS
47 
48  SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
49  USE mod_const_mpi, ONLY : COMM_LMDZ
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_PARA
61    is_ok_mpi=.TRUE.
62#else
63    is_ok_mpi=.FALSE.
64#endif
65   
66    klon_glo=iim*(jjp1-2)+2
67   
68    COMM_LMDZ_PHY=COMM_LMDZ
69
70    IF (is_ok_mpi) THEN   
71#ifdef CPP_PARA
72      CALL MPI_COMM_SIZE(COMM_LMDZ_PHY,mpi_size,ierr)   
73      CALL MPI_COMM_RANK(COMM_LMDZ_PHY,mpi_rank,ierr)
74#endif
75    ELSE
76      mpi_size=1
77      mpi_rank=0
78    ENDIF
79   
80    IF (mpi_rank == 0) THEN
81      mpi_root = 0
82      is_mpi_root = .true.
83    ENDIF
84   
85    IF (mpi_rank == 0) THEN
86      is_north_pole = .TRUE.
87    ELSE
88      is_north_pole = .FALSE.
89    ENDIF
90   
91    IF (mpi_rank == mpi_size-1) THEN
92      is_south_pole = .TRUE.
93    ELSE
94      is_south_pole = .FALSE.
95    ENDIF
96   
97    ALLOCATE(jj_para_nb(0:mpi_size-1))
98    ALLOCATE(jj_para_begin(0:mpi_size-1))
99    ALLOCATE(jj_para_end(0:mpi_size-1))
100   
101    ALLOCATE(ij_para_nb(0:mpi_size-1))
102    ALLOCATE(ij_para_begin(0:mpi_size-1))
103    ALLOCATE(ij_para_end(0:mpi_size-1))
104   
105    ALLOCATE(ii_para_begin(0:mpi_size-1))
106    ALLOCATE(ii_para_end(0:mpi_size-1))
107
108    ALLOCATE(klon_mpi_para_nb(0:mpi_size-1))
109    ALLOCATE(klon_mpi_para_begin(0:mpi_size-1))
110    ALLOCATE(klon_mpi_para_end(0:mpi_size-1))
111 
112     
113    klon_mpi_para_nb(0:mpi_size-1)=distrib(0:nb_proc-1)
114
115    DO i=0,mpi_size-1
116      IF (i==0) THEN
117        klon_mpi_para_begin(i)=1
118      ELSE
119        klon_mpi_para_begin(i)=klon_mpi_para_end(i-1)+1
120      ENDIF
121        klon_mpi_para_end(i)=klon_mpi_para_begin(i)+klon_mpi_para_nb(i)-1
122    ENDDO
123
124
125    DO i=0,mpi_size-1
126     
127      IF (i==0) THEN
128        ij_para_begin(i) = 1
129      ELSE
130        ij_para_begin(i) = klon_mpi_para_begin(i)+iim-1
131      ENDIF
132
133      jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1
134      ii_para_begin(i) = MOD(ij_para_begin(i)-1,iim) + 1
135
136     
137      ij_para_end(i) = klon_mpi_para_end(i)+iim-1
138      jj_para_end(i) = (ij_para_end(i)-1)/iim + 1
139      ii_para_end(i) = MOD(ij_para_end(i)-1,iim) + 1
140
141
142      ij_para_nb(i) = ij_para_end(i)-ij_para_begin(i)+1
143      jj_para_nb(i) = jj_para_end(i)-jj_para_begin(i)+1
144         
145    ENDDO
146 
147    ii_begin = ii_para_begin(mpi_rank)
148    ii_end   = ii_para_end(mpi_rank)
149    jj_begin = jj_para_begin(mpi_rank)
150    jj_end   = jj_para_end(mpi_rank)
151    jj_nb    = jj_para_nb(mpi_rank)
152    ij_begin = ij_para_begin(mpi_rank)
153    ij_end   = ij_para_end(mpi_rank)
154    ij_nb    = ij_para_nb(mpi_rank)
155    klon_mpi_begin = klon_mpi_para_begin(mpi_rank)
156    klon_mpi_end   = klon_mpi_para_end(mpi_rank)
157    klon_mpi       = klon_mpi_para_nb(mpi_rank)
158   
159    CALL Print_module_data
160   
161  END SUBROUTINE Init_phys_lmdz_mpi_data
162
163  SUBROUTINE print_module_data
164  IMPLICIT NONE
165 
166 
167    PRINT *, 'ii_begin =', ii_begin
168    PRINT *, 'ii_end =', ii_end
169    PRINT *, 'jj_begin =',jj_begin
170    PRINT *, 'jj_end =', jj_end
171    PRINT *, 'jj_nb =', jj_nb
172    PRINT *, 'ij_begin =', ij_begin
173    PRINT *, 'ij_end =', ij_end
174    PRINT *, 'ij_nb =', ij_nb
175    PRINT *, 'klon_mpi_begin =', klon_mpi_begin
176    PRINT *, 'klon_mpi_end =', klon_mpi_end
177    PRINT *, 'klon_mpi =', klon_mpi
178    PRINT *, 'jj_para_nb =', jj_para_nb
179    PRINT *, 'jj_para_begin =', jj_para_begin
180    PRINT *, 'jj_para_end =', jj_para_end
181    PRINT *, 'ii_para_begin =', ii_para_begin
182    PRINT *, 'ii_para_end =', ii_para_end
183    PRINT *, 'ij_para_nb =', ij_para_nb
184    PRINT *, 'ij_para_begin =', ij_para_begin
185    PRINT *, 'ij_para_end =', ij_para_end
186    PRINT *, 'klon_mpi_para_nb =', klon_mpi_para_nb
187    PRINT *, 'klon_mpi_para_begin =', klon_mpi_para_begin
188    PRINT *, 'klon_mpi_para_end  =', klon_mpi_para_end
189    PRINT *, 'mpi_rank =', mpi_rank
190    PRINT *, 'mpi_size =', mpi_size
191    PRINT *, 'mpi_root =', mpi_root
192    PRINT *, 'is_mpi_root =', is_mpi_root
193    PRINT *, 'is_north_pole =', is_north_pole
194    PRINT *, 'is_south_pole =', is_south_pole
195    PRINT *, 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
196 
197  END SUBROUTINE print_module_data
198 
199END MODULE mod_phys_lmdz_mpi_data
Note: See TracBrowser for help on using the repository browser.