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