source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/build/ppsrc/INCA_PARA/mod_inca_mpi_data.f90 @ 6610

Last change on this file since 6610 was 6610, checked in by acosce, 10 months ago

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 6.4 KB
Line 
1
2
3
4
5
6
7
8
9
10
11
12MODULE MOD_INCA_MPI_DATA
13  USE MOD_CONST_MPI_INCA
14
15  IMPLICIT NONE
16 
17  INTEGER,SAVE :: ii_begin
18  INTEGER,SAVE :: ii_end
19  INTEGER,SAVE :: jj_begin
20  INTEGER,SAVE :: jj_end
21  INTEGER,SAVE :: jj_nb
22  INTEGER,SAVE :: ij_begin
23  INTEGER,SAVE :: ij_end
24  INTEGER,SAVE :: ij_nb
25  INTEGER,SAVE :: plon_mpi_begin
26  INTEGER,SAVE :: plon_mpi_end
27  INTEGER,SAVE :: plon_mpi
28  INTEGER,SAVE :: ni_winds  ! ni_winds et nj_winds dim de la grille vents 320x160
29  INTEGER,SAVE :: nj_winds
30  INTEGER,SAVE :: ni_oxyd, nj_oxyd, presnivs_oxyd
31  INTEGER,SAVE :: ntime_winds
32  INTEGER,SAVE :: ntime_chemLR
33  INTEGER,SAVE :: ntime_npp
34  INTEGER,SAVE :: ntime_oxyd
35  INTEGER,SAVE :: ntime_co2h
36  INTEGER,SAVE :: ntype_landuse
37  INTEGER,SAVE :: ni_u_vlr  ! ni_winds et nj_winds dim de la grille vents 320x160
38  INTEGER,SAVE :: nj_u_vlr
39  INTEGER,SAVE :: ni_v_vlr  ! ni_winds et nj_winds dim de la grille vents 320x160
40  INTEGER,SAVE :: nj_v_vlr
41  INTEGER,SAVE :: ntime_winds_vlr
42 
43  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_nb
44  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_begin
45  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: jj_para_end
46
47  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_begin
48  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ii_para_end
49
50  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_nb
51  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_begin
52  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: ij_para_end
53
54  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_nb
55  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_begin
56  INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: plon_mpi_para_end 
57
58  INTEGER,SAVE :: mpi_rank
59  INTEGER,SAVE :: mpi_size
60  INTEGER,SAVE :: mpi_root
61  LOGICAL,SAVE :: is_mpi_root
62  LOGICAL,SAVE :: is_ok_mpi
63 
64  LOGICAL,SAVE :: is_north_pole
65  LOGICAL,SAVE :: is_south_pole
66
67  INTEGER,SAVE :: MPI_COMM_INCA
68
69CONTAINS
70 
71  SUBROUTINE Init_inca_mpi_data(iim,jjp1,nb_proc,distrib,COMM_LMDZ)
72    USE mod_const_mpi_inca
73    IMPLICIT NONE
74   
75    INTEGER,INTENT(in) :: iim
76    INTEGER,INTENT(in) :: jjp1
77    INTEGER,INTENT(in) :: nb_proc
78    INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
79    INTEGER,INTENT(IN) :: COMM_LMDZ
80   
81    INTEGER :: ierr
82    INTEGER :: plon_glo
83    INTEGER :: i
84
85    print *,  "(inca) COMM_LMDZ ", COMM_LMDZ
86
87    CALL Init_const_mpi_inca(COMM_LMDZ)
88    is_ok_mpi=.TRUE.
89   
90    plon_glo=iim*(jjp1-2)+2
91   
92    MPI_COMM_INCA=COMM_INCA
93
94    IF (is_ok_mpi) THEN   
95        print *,  '(inca) MPI_COMM_INCA = ', MPI_COMM_INCA, COMM_LMDZ
96       CALL MPI_COMM_SIZE(MPI_COMM_INCA,mpi_size,ierr)   
97       CALL MPI_COMM_RANK(MPI_COMM_INCA,mpi_rank,ierr)
98    ELSE
99       mpi_size=1
100       mpi_rank=0
101    ENDIF
102   
103    IF (mpi_rank == 0) THEN
104      mpi_root = 0
105      is_mpi_root = .true.
106    ENDIF
107   
108    IF (mpi_rank == 0) THEN
109      is_north_pole = .TRUE.
110    ELSE
111      is_north_pole = .FALSE.
112    ENDIF
113   
114    IF (mpi_rank == mpi_size-1) THEN
115      is_south_pole = .TRUE.
116    ELSE
117      is_south_pole = .FALSE.
118    ENDIF
119   
120    ALLOCATE(jj_para_nb(0:mpi_size-1))
121    ALLOCATE(jj_para_begin(0:mpi_size-1))
122    ALLOCATE(jj_para_end(0:mpi_size-1))
123   
124    ALLOCATE(ij_para_nb(0:mpi_size-1))
125    ALLOCATE(ij_para_begin(0:mpi_size-1))
126    ALLOCATE(ij_para_end(0:mpi_size-1))
127   
128    ALLOCATE(ii_para_begin(0:mpi_size-1))
129    ALLOCATE(ii_para_end(0:mpi_size-1))
130
131    ALLOCATE(plon_mpi_para_nb(0:mpi_size-1))
132    ALLOCATE(plon_mpi_para_begin(0:mpi_size-1))
133    ALLOCATE(plon_mpi_para_end(0:mpi_size-1))
134 
135     
136    plon_mpi_para_nb(0:mpi_size-1)=distrib(0:nb_proc-1)
137
138    DO i=0,mpi_size-1
139      IF (i==0) THEN
140        plon_mpi_para_begin(i)=1
141      ELSE
142        plon_mpi_para_begin(i)=plon_mpi_para_end(i-1)+1
143      ENDIF
144      plon_mpi_para_end(i)=plon_mpi_para_begin(i)+plon_mpi_para_nb(i)-1
145    ENDDO
146
147
148    DO i=0,mpi_size-1
149     
150      IF (i==0) THEN
151        ij_para_begin(i) = 1
152      ELSE
153        ij_para_begin(i) = plon_mpi_para_begin(i)+iim-1
154      ENDIF
155
156      jj_para_begin(i) = (ij_para_begin(i)-1)/iim + 1
157      ii_para_begin(i) = MOD(ij_para_begin(i)-1,iim) + 1
158
159     
160      ij_para_end(i) = plon_mpi_para_end(i)+iim-1
161      jj_para_end(i) = (ij_para_end(i)-1)/iim + 1
162      ii_para_end(i) = MOD(ij_para_end(i)-1,iim) + 1
163
164
165      ij_para_nb(i) = ij_para_end(i)-ij_para_begin(i)+1
166      jj_para_nb(i) = jj_para_end(i)-jj_para_begin(i)+1
167         
168    ENDDO
169 
170    ii_begin = ii_para_begin(mpi_rank)
171    ii_end   = ii_para_end(mpi_rank)
172    jj_begin = jj_para_begin(mpi_rank)
173    jj_end   = jj_para_end(mpi_rank)
174    jj_nb    = jj_para_nb(mpi_rank)
175    ij_begin = ij_para_begin(mpi_rank)
176    ij_end   = ij_para_end(mpi_rank)
177    ij_nb    = ij_para_nb(mpi_rank)
178    plon_mpi_begin = plon_mpi_para_begin(mpi_rank)
179    plon_mpi_end   = plon_mpi_para_end(mpi_rank)
180    plon_mpi       = plon_mpi_para_nb(mpi_rank)
181   
182    CALL Print_module_data
183
184    CALL MPI_BARRIER(MPI_COMM_INCA, ierr)
185  END SUBROUTINE Init_inca_mpi_data
186
187  SUBROUTINE print_module_data
188
189    IMPLICIT NONE
190 
191    print *,   '(Inca) print_module_data'
192    print *,   '(Inca) ii_begin =', ii_begin
193    print *,   '(Inca) ii_end =', ii_end
194    print *,   '(Inca) jj_begin =',jj_begin
195    print *,   '(Inca) jj_end =', jj_end
196    print *,   '(Inca) jj_nb =', jj_nb
197    print *,   '(Inca) ij_begin =', ij_begin
198    print *,   '(Inca) ij_end =', ij_end
199    print *,   '(Inca) ij_nb =', ij_nb
200    print *,   '(Inca) plon_mpi_begin =', plon_mpi_begin
201    print *,   '(Inca) plon_mpi_end =', plon_mpi_end
202    print *,   '(Inca) plon_mpi =', plon_mpi
203    print *,   '(Inca) jj_para_nb =', jj_para_nb
204    print *,   '(Inca) jj_para_begin =', jj_para_begin
205    print *,   '(Inca) jj_para_end =', jj_para_end
206    print *,   '(Inca) ii_para_begin =', ii_para_begin
207    print *,   '(Inca) ii_para_end =', ii_para_end
208    print *,   '(Inca) ij_para_nb =', ij_para_nb
209    print *,   '(Inca) ij_para_begin =', ij_para_begin
210    print *,   '(Inca) ij_para_end =', ij_para_end
211    print *,   '(Inca) plon_mpi_para_nb =', plon_mpi_para_nb
212    print *,   '(Inca) plon_mpi_para_begin =', plon_mpi_para_begin
213    print *,   '(Inca) plon_mpi_para_end  =', plon_mpi_para_end 
214    print *,   '(Inca) mpi_rank =', mpi_rank
215    print *,   '(Inca) mpi_size =', mpi_size
216    print *,   '(Inca) mpi_root =', mpi_root
217    print *,   '(Inca) is_mpi_root =', is_mpi_root
218    print *,   '(Inca) is_north_pole =', is_north_pole
219    print *,   '(Inca) is_south_pole =', is_south_pole
220    print *,   '(Inca) MPI_COMM_INCA =', MPI_COMM_INCA
221 
222  END SUBROUTINE print_module_data
223 
224END MODULE mod_inca_mpi_data
Note: See TracBrowser for help on using the repository browser.