source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/DYNAMICO/ppsrc/parallel/transfert.f90 @ 6612

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

DYNAMICO used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 5.4 KB
Line 
1module transfert_mod
2
3
4
5  use transfert_mpi_legacy_mod, only :  t_message, t_request, &
6                                        req_i1, req_e1_scal, req_e1_vect, &
7                                        req_i0, req_e0_scal, req_e0_vect, &
8                                        req_z1_scal, &
9                                        init_transfert, &
10                                        init_message => init_message_mpi, &
11                                        finalize_message => finalize_message_mpi, &
12                                        send_message => send_message_mpi, &
13                                        wait_message => wait_message_mpi, &
14                                        test_message => test_message_mpi
15
16
17  use transfert_mpi_collectives_mod, only : gather_field, scatter_field, bcast_field, bcast_mpi
18  use transfert_omp_mod, only : bcast_omp
19
20  implicit none
21  private
22  public :: t_message, t_request, &
23          req_i1, req_e1_scal, req_e1_vect, &
24          req_i0, req_e0_scal, req_e0_vect, &
25          req_z1_scal, &
26          init_transfert, &
27          init_message, &
28          finalize_message, &
29          send_message, &
30          wait_message, &
31          test_message, &
32          transfert_request, &
33          transfert_message, &
34          gather_field, scatter_field, bcast_field, bcast, bcast_omp
35
36  interface bcast
37    module procedure  bcast_c,                                     &
38                      bcast_i,bcast_i1,bcast_i2,bcast_i3,bcast_i4, &
39                      bcast_r,bcast_r1,bcast_r2,bcast_r3,bcast_r4, &
40                      bcast_l,bcast_l1,bcast_l2,bcast_l3,bcast_l4
41  end interface
42
43contains
44  subroutine transfert_message(field, message)
45    use field_mod, only : t_field
46    type(t_field), pointer :: field(:)
47    type(t_message) :: message
48
49    call send_message(field, message)
50    call wait_message(message)
51  end subroutine
52
53  subroutine transfert_request(field, request)
54    use field_mod, only : t_field
55    type(t_field),pointer :: field(:)
56    type(t_request),pointer :: request(:)
57    type(t_message), save :: message ! Save because shared between threads
58
59    call init_message(field, request, message)
60    call transfert_message(field, message)
61    call finalize_message(message)
62  end subroutine
63
64!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
65!! Definition des Broadcast --> 4D   !!
66!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67
68!! -- Les chaine de charactï¿œre -- !!
69
70  SUBROUTINE bcast_c(var)
71  IMPLICIT NONE
72    CHARACTER(LEN=*),INTENT(INOUT) :: Var
73
74!$OMP MASTER
75    CALL bcast_mpi(Var)
76!$OMP END MASTER
77    CALL bcast_omp(Var)
78
79  END SUBROUTINE bcast_c
80
81!! -- Les entiers -- !!
82
83  SUBROUTINE bcast_i(var)
84  IMPLICIT NONE
85    INTEGER,INTENT(INOUT) :: Var
86!$OMP MASTER
87    CALL bcast_mpi(Var)
88!$OMP END MASTER
89    CALL bcast_omp(Var)
90
91  END SUBROUTINE bcast_i
92
93  SUBROUTINE bcast_i1(var)
94  IMPLICIT NONE
95    INTEGER,INTENT(INOUT) :: Var(:)
96
97!$OMP MASTER
98    CALL bcast_mpi(Var)
99!$OMP END MASTER
100    CALL bcast_omp(Var)
101
102  END SUBROUTINE bcast_i1
103
104
105  SUBROUTINE bcast_i2(var)
106  IMPLICIT NONE
107    INTEGER,INTENT(INOUT) :: Var(:,:)
108
109!$OMP MASTER
110    CALL bcast_mpi(Var)
111!$OMP END MASTER
112    CALL bcast_omp(Var)
113
114  END SUBROUTINE bcast_i2
115
116
117  SUBROUTINE bcast_i3(var)
118  IMPLICIT NONE
119    INTEGER,INTENT(INOUT) :: Var(:,:,:)
120
121!$OMP MASTER
122    CALL bcast_mpi(Var)
123!$OMP END MASTER
124    CALL bcast_omp(Var)
125
126  END SUBROUTINE bcast_i3
127
128
129  SUBROUTINE bcast_i4(var)
130  IMPLICIT NONE
131    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
132
133!$OMP MASTER
134    CALL bcast_mpi(Var)
135!$OMP END MASTER
136    CALL bcast_omp(Var)
137
138  END SUBROUTINE bcast_i4
139
140
141!! -- Les reels -- !!
142
143  SUBROUTINE bcast_r(var)
144  IMPLICIT NONE
145    REAL,INTENT(INOUT) :: Var
146
147!$OMP MASTER
148    CALL bcast_mpi(Var)
149!$OMP END MASTER
150    CALL bcast_omp(Var)
151
152  END SUBROUTINE bcast_r
153
154  SUBROUTINE bcast_r1(var)
155  IMPLICIT NONE
156    REAL,INTENT(INOUT) :: Var(:)
157
158!$OMP MASTER
159    CALL bcast_mpi(Var)
160!$OMP END MASTER
161    CALL bcast_omp(Var)
162
163  END SUBROUTINE bcast_r1
164
165
166  SUBROUTINE bcast_r2(var)
167  IMPLICIT NONE
168    REAL,INTENT(INOUT) :: Var(:,:)
169
170!$OMP MASTER
171    CALL bcast_mpi(Var)
172!$OMP END MASTER
173    CALL bcast_omp(Var)
174
175  END SUBROUTINE bcast_r2
176
177
178  SUBROUTINE bcast_r3(var)
179  IMPLICIT NONE
180    REAL,INTENT(INOUT) :: Var(:,:,:)
181
182!$OMP MASTER
183    CALL bcast_mpi(Var)
184!$OMP END MASTER
185    CALL bcast_omp(Var)
186
187  END SUBROUTINE bcast_r3
188
189
190  SUBROUTINE bcast_r4(var)
191  IMPLICIT NONE
192    REAL,INTENT(INOUT) :: Var(:,:,:,:)
193
194!$OMP MASTER
195    CALL bcast_mpi(Var)
196!$OMP END MASTER
197    CALL bcast_omp(Var)
198
199  END SUBROUTINE bcast_r4
200
201
202!! -- Les booleens -- !!
203
204  SUBROUTINE bcast_l(var)
205  IMPLICIT NONE
206    LOGICAL,INTENT(INOUT) :: Var
207!$OMP MASTER
208    CALL bcast_mpi(Var)
209!$OMP END MASTER
210    CALL bcast_omp(Var)
211
212  END SUBROUTINE bcast_l
213
214  SUBROUTINE bcast_l1(var)
215  IMPLICIT NONE
216    LOGICAL,INTENT(INOUT) :: Var(:)
217
218!$OMP MASTER
219    CALL bcast_mpi(Var)
220!$OMP END MASTER
221    CALL bcast_omp(Var)
222
223  END SUBROUTINE bcast_l1
224
225
226  SUBROUTINE bcast_l2(var)
227  IMPLICIT NONE
228    LOGICAL,INTENT(INOUT) :: Var(:,:)
229
230!$OMP MASTER
231    CALL bcast_mpi(Var)
232!$OMP END MASTER
233    CALL bcast_omp(Var)
234
235  END SUBROUTINE bcast_l2
236
237
238  SUBROUTINE bcast_l3(var)
239  IMPLICIT NONE
240    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
241
242!$OMP MASTER
243    CALL bcast_mpi(Var)
244!$OMP END MASTER
245    CALL bcast_omp(Var)
246
247  END SUBROUTINE bcast_l3
248
249
250  SUBROUTINE bcast_l4(var)
251  IMPLICIT NONE
252    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
253
254!$OMP MASTER
255    CALL bcast_mpi(Var)
256!$OMP END MASTER
257    CALL bcast_omp(Var)
258
259  END SUBROUTINE bcast_l4
260
261
262END MODULE transfert_mod
Note: See TracBrowser for help on using the repository browser.