GCC Code Coverage Report


Directory: ./
File: phys/mod_surf_para.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 110 0.0%
Branches: 0 228 0.0%

Line Branch Exec Source
1 MODULE mod_surf_para
2 IMPLICIT NONE
3
4 INTERFACE gather_surf
5 MODULE PROCEDURE gather_surf_i,gather_surf_r
6 END INTERFACE gather_surf
7
8 INTERFACE gather_surf_omp
9 MODULE PROCEDURE gather_surf_omp_i,gather_surf_omp_r
10 END INTERFACE gather_surf_omp
11
12 INTERFACE gather_surf_mpi
13 MODULE PROCEDURE gather_surf_mpi_i,gather_surf_mpi_r
14 END INTERFACE gather_surf_mpi
15
16 INTERFACE scatter_surf
17 MODULE PROCEDURE scatter_surf_i,scatter_surf_r
18 END INTERFACE scatter_surf
19
20 INTERFACE scatter_surf_omp
21 MODULE PROCEDURE scatter_surf_omp_i,scatter_surf_omp_r
22 END INTERFACE scatter_surf_omp
23
24 INTERFACE scatter_surf_mpi
25 MODULE PROCEDURE scatter_surf_mpi_i,scatter_surf_mpi_r
26 END INTERFACE scatter_surf_mpi
27
28
29 INTEGER,SAVE :: knon_omp
30 INTEGER,SAVE :: knon_omp_begin
31 INTEGER,SAVE :: knon_omp_end
32 !$OMP THREADPRIVATE(knon_omp,knon_omp_begin,knon_omp_end)
33 INTEGER,ALLOCATABLE,SAVE :: knon_omp_para(:)
34 INTEGER,ALLOCATABLE,SAVE :: knon_omp_begin_para(:)
35 INTEGER,ALLOCATABLE,SAVE :: knon_omp_end_para(:)
36
37 INTEGER,SAVE :: knon_mpi
38 INTEGER,ALLOCATABLE,SAVE :: knon_mpi_para(:)
39 INTEGER,ALLOCATABLE,SAVE :: knon_mpi_begin_para(:)
40 INTEGER,ALLOCATABLE,SAVE :: knon_mpi_end_para(:)
41
42 INTEGER,SAVE :: knon_glo
43 INTEGER,SAVE,ALLOCATABLE :: knon_glo_para(:)
44 INTEGER,ALLOCATABLE,SAVE :: knon_glo_begin_para(:)
45 INTEGER,ALLOCATABLE,SAVE :: knon_glo_end_para(:)
46
47
48 CONTAINS
49
50 SUBROUTINE Init_surf_para(knon)
51 USE mod_phys_lmdz_para
52 INTEGER :: knon
53 INTEGER :: i,ierr
54
55 knon_omp=knon
56 IF (is_omp_root) THEN
57 ALLOCATE(knon_omp_para(0:omp_size-1))
58 ALLOCATE(knon_omp_begin_para(0:omp_size-1))
59 ALLOCATE(knon_omp_end_para(0:omp_size-1))
60 ENDIF
61 !$OMP BARRIER
62 knon_omp_para(omp_rank)=knon
63 !$OMP BARRIER
64 IF (is_omp_root) THEN
65 knon_omp_begin_para(0)=1
66 knon_omp_end_para(0)=knon_omp_para(0)
67 DO i=1,omp_size-1
68 knon_omp_begin_para(i)=knon_omp_end_para(i-1)+1
69 knon_omp_end_para(i)=knon_omp_begin_para(i)+knon_omp_para(i)-1
70 ENDDO
71 ENDIF
72 !$OMP BARRIER
73 knon_omp_begin=knon_omp_begin_para(omp_rank)
74 knon_omp_end=knon_omp_end_para(omp_rank)
75 !$OMP BARRIER
76 IF (is_omp_root) THEN
77 knon_mpi=sum(knon_omp_para)
78 ALLOCATE(knon_mpi_para(0:mpi_size-1))
79 ALLOCATE(knon_mpi_begin_para(0:mpi_size-1))
80 ALLOCATE(knon_mpi_end_para(0:mpi_size-1))
81
82 ALLOCATE(knon_glo_para(0:mpi_size*omp_size-1))
83 ALLOCATE(knon_glo_begin_para(0:mpi_size*omp_size-1))
84 ALLOCATE(knon_glo_end_para(0:mpi_size*omp_size-1))
85
86 IF (is_using_mpi) THEN
87 ELSE
88 knon_mpi_para(:)=knon_mpi
89 knon_glo_para(:)=knon_omp_para(:)
90 ENDIF
91
92 knon_glo=sum(knon_mpi_para(:))
93
94 knon_mpi_begin_para(0)=1
95 knon_mpi_end_para(0)=knon_mpi_para(0)
96 DO i=1,mpi_size-1
97 knon_mpi_begin_para(i)=knon_mpi_end_para(i-1)+1
98 knon_mpi_end_para(i)=knon_mpi_begin_para(i)+knon_mpi_para(i)-1
99 ENDDO
100
101 knon_glo_begin_para(0)=1
102 knon_glo_end_para(0)=knon_glo_para(0)
103 DO i=1,mpi_size*omp_size-1
104 knon_glo_begin_para(i)=knon_glo_end_para(i-1)+1
105 knon_glo_end_para(i)= knon_glo_begin_para(i)+knon_glo_para(i)-1
106 ENDDO
107 ENDIF
108 !$OMP BARRIER
109
110 END SUBROUTINE Init_surf_para
111
112
113 SUBROUTINE Finalize_surf_para
114 USE mod_phys_lmdz_para
115
116 !$OMP BARRIER
117 IF (is_omp_root) THEN
118 DEALLOCATE(knon_omp_para)
119 DEALLOCATE(knon_omp_begin_para)
120 DEALLOCATE(knon_omp_end_para)
121 DEALLOCATE(knon_mpi_para)
122 DEALLOCATE(knon_mpi_begin_para)
123 DEALLOCATE(knon_mpi_end_para)
124 DEALLOCATE(knon_glo_para)
125 DEALLOCATE(knon_glo_begin_para)
126 DEALLOCATE(knon_glo_end_para)
127 ENDIF
128
129 END SUBROUTINE Finalize_surf_para
130
131
132 SUBROUTINE gather_surf_i(FieldIn, FieldOut)
133 USE mod_phys_lmdz_para
134 INTEGER :: FieldIn(:)
135 INTEGER :: FieldOut(:)
136 INTEGER :: FieldTmp(knon_mpi)
137
138 CALL gather_surf_omp_i(FieldIn,FieldTmp)
139 IF (is_omp_root) CALL gather_surf_mpi_i(FieldTmp,FieldOut)
140
141 END SUBROUTINE gather_surf_i
142
143
144 SUBROUTINE gather_surf_omp_i(FieldIn,FieldOut)
145 USE mod_phys_lmdz_para
146 INTEGER :: FieldIn(:)
147 INTEGER :: FieldOut(:)
148
149 INTEGER,SAVE,ALLOCATABLE :: Field_tmp(:)
150
151 IF (is_omp_root) ALLOCATE(Field_tmp(knon_mpi))
152 !$OMP BARRIER
153 Field_tmp(knon_omp_begin:knon_omp_end)=FieldIn(:)
154 !$OMP BARRIER
155 IF (is_omp_root) FieldOut(:)=Field_tmp(:)
156 !$OMP BARRIER
157 IF (is_omp_root) DEALLOCATE(Field_tmp)
158
159 END SUBROUTINE gather_surf_omp_i
160
161
162 SUBROUTINE gather_surf_mpi_i(FieldIn,FieldOut)
163 USE mod_phys_lmdz_para
164 INTEGER :: FieldIn(:)
165 INTEGER :: FieldOut(:)
166 INTEGER :: ierr
167
168 IF (is_using_mpi) THEN
169 ELSE
170 FieldOut(:)=FieldIn(:)
171 ENDIF
172
173 END SUBROUTINE gather_surf_mpi_i
174
175
176
177
178
179 SUBROUTINE gather_surf_r(FieldIn, FieldOut)
180 USE mod_phys_lmdz_para
181 REAL :: FieldIn(:)
182 REAL :: FieldOut(:)
183 REAL :: FieldTmp(knon_mpi)
184
185 CALL gather_surf_omp_r(FieldIn,FieldTmp)
186 IF (is_omp_root) CALL gather_surf_mpi_r(FieldTmp,FieldOut)
187
188 END SUBROUTINE gather_surf_r
189
190
191 SUBROUTINE gather_surf_omp_r(FieldIn,FieldOut)
192 USE mod_phys_lmdz_para
193 REAL :: FieldIn(:)
194 REAL :: FieldOut(:)
195
196 REAL,SAVE,ALLOCATABLE :: Field_tmp(:)
197
198 IF (is_omp_root) ALLOCATE(Field_tmp(knon_mpi))
199 !$OMP BARRIER
200 Field_tmp(knon_omp_begin:knon_omp_end)=FieldIn(:)
201 !$OMP BARRIER
202 IF (is_omp_root) FieldOut(:)=Field_tmp(:)
203 !$OMP BARRIER
204 IF (is_omp_root) DEALLOCATE(Field_tmp)
205
206 END SUBROUTINE gather_surf_omp_r
207
208
209 SUBROUTINE gather_surf_mpi_r(FieldIn,FieldOut)
210 USE mod_phys_lmdz_para
211 REAL :: FieldIn(:)
212 REAL :: FieldOut(:)
213 REAL :: ierr
214
215 IF (is_using_mpi) THEN
216 ELSE
217 FieldOut(:)=FieldIn(:)
218 ENDIF
219
220 END SUBROUTINE gather_surf_mpi_r
221
222
223
224
225 SUBROUTINE scatter_surf_i(FieldIn, FieldOut)
226 USE mod_phys_lmdz_para
227 INTEGER :: FieldIn(:)
228 INTEGER :: FieldOut(:)
229 INTEGER :: FieldTmp(knon_mpi)
230
231 IF (is_omp_root) CALL scatter_surf_mpi_i(FieldIn,FieldTmp)
232 CALL scatter_surf_omp_i(FieldTmp,FieldOut)
233
234 END SUBROUTINE scatter_surf_i
235
236
237 SUBROUTINE scatter_surf_omp_i(FieldIn,FieldOut)
238 USE mod_phys_lmdz_para
239 INTEGER :: FieldIn(:)
240 INTEGER :: FieldOut(:)
241
242 INTEGER,SAVE,ALLOCATABLE :: Field_tmp(:)
243
244 IF (is_omp_root) ALLOCATE(Field_tmp(knon_mpi))
245 IF (is_omp_root) Field_tmp(:)=FieldIn(:)
246 !$OMP BARRIER
247 FieldOut(:)=Field_tmp(knon_omp_begin:knon_omp_end)
248 !$OMP BARRIER
249 IF (is_omp_root) DEALLOCATE(Field_tmp)
250
251 END SUBROUTINE scatter_surf_omp_i
252
253
254 SUBROUTINE scatter_surf_mpi_i(FieldIn,FieldOut)
255 USE mod_phys_lmdz_para
256 INTEGER :: FieldIn(:)
257 INTEGER :: FieldOut(:)
258 INTEGER :: ierr
259
260 IF (is_using_mpi) THEN
261 ELSE
262 FieldOut(:)=FieldIn(:)
263 ENDIF
264
265 END SUBROUTINE scatter_surf_mpi_i
266
267
268
269 SUBROUTINE scatter_surf_r(FieldIn, FieldOut)
270 USE mod_phys_lmdz_para
271 REAL :: FieldIn(:)
272 REAL :: FieldOut(:)
273 REAL :: FieldTmp(knon_mpi)
274
275 IF (is_omp_root) CALL scatter_surf_mpi_r(FieldIn,FieldTmp)
276 CALL scatter_surf_omp_r(FieldTmp,FieldOut)
277
278 END SUBROUTINE scatter_surf_r
279
280
281 SUBROUTINE scatter_surf_omp_r(FieldIn,FieldOut)
282 USE mod_phys_lmdz_para
283 REAL :: FieldIn(:)
284 REAL :: FieldOut(:)
285
286 INTEGER,SAVE,ALLOCATABLE :: Field_tmp(:)
287
288 IF (is_omp_root) ALLOCATE(Field_tmp(knon_mpi))
289 IF (is_omp_root) Field_tmp(:)=FieldIn(:)
290 !$OMP BARRIER
291 FieldOut(:)=Field_tmp(knon_omp_begin:knon_omp_end)
292 !$OMP BARRIER
293 IF (is_omp_root) DEALLOCATE(Field_tmp)
294
295 END SUBROUTINE scatter_surf_omp_r
296
297
298 SUBROUTINE scatter_surf_mpi_r(FieldIn,FieldOut)
299 USE mod_phys_lmdz_para
300 REAL :: FieldIn(:)
301 REAL :: FieldOut(:)
302 INTEGER :: ierr
303
304 IF (is_using_mpi) THEN
305 ELSE
306 FieldOut(:)=FieldIn(:)
307 ENDIF
308
309 END SUBROUTINE scatter_surf_mpi_r
310
311 END MODULE mod_surf_para
312
313