GCC Code Coverage Report


Directory: ./
File: phy_common/mod_grid_phy_lmdz.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 9 136 6.6%
Branches: 1 248 0.4%

Line Branch Exec Source
1 !
2 !$Id $
3 !
4 MODULE mod_grid_phy_lmdz
5
6 PUBLIC
7 PRIVATE :: grid1dTo2d_glo_igen, grid1dTo2d_glo_rgen, grid1dTo2d_glo_lgen, &
8 grid2dTo1d_glo_igen, grid2dTo1d_glo_rgen, grid2dTo1d_glo_lgen
9
10 INTEGER,PARAMETER :: unstructured=0
11 INTEGER,PARAMETER :: regular_lonlat=1
12
13 INTEGER,SAVE :: grid_type
14 INTEGER,SAVE :: nvertex
15 INTEGER,SAVE :: nbp_lon ! == iim
16 INTEGER,SAVE :: nbp_lat ! == jjmp1 (or == 1 if running 1D model)
17 INTEGER,SAVE :: nbp_lev ! == llm
18 INTEGER,SAVE :: klon_glo ! total number of atmospheric columns
19
20 INTERFACE grid1dTo2d_glo
21 MODULE PROCEDURE grid1dTo2d_glo_i,grid1dTo2d_glo_i1,grid1dTo2d_glo_i2,grid1dTo2d_glo_i3, &
22 grid1dTo2d_glo_r,grid1dTo2d_glo_r1,grid1dTo2d_glo_r2,grid1dTo2d_glo_r3, &
23 grid1dTo2d_glo_l,grid1dTo2d_glo_l1,grid1dTo2d_glo_l2,grid1dTo2d_glo_l3
24 END INTERFACE
25
26 INTERFACE grid2dTo1d_glo
27 MODULE PROCEDURE grid2dTo1d_glo_i,grid2dTo1d_glo_i1,grid2dTo1d_glo_i2,grid2dTo1d_glo_i3, &
28 grid2dTo1d_glo_r,grid2dTo1d_glo_r1,grid2dTo1d_glo_r2,grid2dTo1d_glo_r3, &
29 grid2dTo1d_glo_l,grid2dTo1d_glo_l1,grid2dTo1d_glo_l2,grid2dTo1d_glo_l3
30 END INTERFACE
31
32 CONTAINS
33
34 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
35 !! SUBROUTINE grid1dTo2d !!
36 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
37
38
39 1 SUBROUTINE init_grid_phy_lmdz(grid_type_,nvertex_,nbp_lon_,nbp_lat_,nbp_lev_)
40 IMPLICIT NONE
41 INTEGER,INTENT(IN) :: grid_type_
42 INTEGER,INTENT(IN) :: nvertex_
43 INTEGER, INTENT(IN) :: nbp_lon_
44 INTEGER, INTENT(IN) :: nbp_lat_
45 INTEGER, INTENT(IN) :: nbp_lev_
46
47 1 grid_type = grid_type_
48 1 nvertex = nvertex_
49 1 nbp_lon = nbp_lon_
50 1 nbp_lat = nbp_lat_
51 1 nbp_lev = nbp_lev_
52
53
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 IF (nbp_lon*nbp_lat==1) THEN
54 klon_glo=1
55 ELSE
56 1 klon_glo=(nbp_lon*nbp_lat)-2*(nbp_lon-1)
57 ENDIF
58
59 1 END SUBROUTINE init_grid_phy_lmdz
60
61
62 SUBROUTINE grid1dTo2d_glo_i(VarIn,VarOut)
63 IMPLICIT NONE
64 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
65 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
66
67 CALL grid1dTo2d_glo_igen(VarIn,VarOut,1)
68
69 END SUBROUTINE grid1dTo2d_glo_i
70
71
72 SUBROUTINE grid1dTo2d_glo_i1(VarIn,VarOut)
73 IMPLICIT NONE
74 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
75 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
76
77 CALL grid1dTo2d_glo_igen(VarIn,VarOut,size(VarIn,2))
78
79 END SUBROUTINE grid1dTo2d_glo_i1
80
81 SUBROUTINE grid1dTo2d_glo_i2(VarIn,VarOut)
82 IMPLICIT NONE
83 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
84 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
85
86 CALL grid1dTo2d_glo_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
87
88 END SUBROUTINE grid1dTo2d_glo_i2
89
90 SUBROUTINE grid1dTo2d_glo_i3(VarIn,VarOut)
91 IMPLICIT NONE
92 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
93 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
94
95 CALL grid1dTo2d_glo_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
96
97 END SUBROUTINE grid1dTo2d_glo_i3
98
99
100 SUBROUTINE grid1dTo2d_glo_r(VarIn,VarOut)
101 IMPLICIT NONE
102 REAL,INTENT(IN),DIMENSION(:) :: VarIn
103 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
104
105 CALL grid1dTo2d_glo_rgen(VarIn,VarOut,1)
106
107 END SUBROUTINE grid1dTo2d_glo_r
108
109
110 SUBROUTINE grid1dTo2d_glo_r1(VarIn,VarOut)
111 IMPLICIT NONE
112 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
113 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
114
115 CALL grid1dTo2d_glo_rgen(VarIn,VarOut,size(VarIn,2))
116
117 END SUBROUTINE grid1dTo2d_glo_r1
118
119 SUBROUTINE grid1dTo2d_glo_r2(VarIn,VarOut)
120 IMPLICIT NONE
121 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
122 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
123
124 CALL grid1dTo2d_glo_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
125
126 END SUBROUTINE grid1dTo2d_glo_r2
127
128 SUBROUTINE grid1dTo2d_glo_r3(VarIn,VarOut)
129 IMPLICIT NONE
130 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
131 REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
132
133 CALL grid1dTo2d_glo_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
134
135 END SUBROUTINE grid1dTo2d_glo_r3
136
137
138
139 SUBROUTINE grid1dTo2d_glo_l(VarIn,VarOut)
140 IMPLICIT NONE
141 LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
142 LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
143
144 CALL grid1dTo2d_glo_lgen(VarIn,VarOut,1)
145
146 END SUBROUTINE grid1dTo2d_glo_l
147
148
149 SUBROUTINE grid1dTo2d_glo_l1(VarIn,VarOut)
150 IMPLICIT NONE
151 LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
152 LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
153
154 CALL grid1dTo2d_glo_lgen(VarIn,VarOut,size(VarIn,2))
155
156 END SUBROUTINE grid1dTo2d_glo_l1
157
158 SUBROUTINE grid1dTo2d_glo_l2(VarIn,VarOut)
159 IMPLICIT NONE
160 LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
161 LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
162
163 CALL grid1dTo2d_glo_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
164
165 END SUBROUTINE grid1dTo2d_glo_l2
166
167 SUBROUTINE grid1dTo2d_glo_l3(VarIn,VarOut)
168 IMPLICIT NONE
169 LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
170 LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
171
172 CALL grid1dTo2d_glo_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
173
174 END SUBROUTINE grid1dTo2d_glo_l3
175
176 SUBROUTINE grid2dTo1d_glo_i(VarIn,VarOut)
177 IMPLICIT NONE
178 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
179 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
180
181 CALL grid2dTo1d_glo_igen(VarIn,VarOut,1)
182
183 END SUBROUTINE grid2dTo1d_glo_i
184
185
186 SUBROUTINE grid2dTo1d_glo_i1(VarIn,VarOut)
187 IMPLICIT NONE
188 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
189 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
190
191 CALL grid2dTo1d_glo_igen(VarIn,VarOut,size(VarIn,3))
192
193 END SUBROUTINE grid2dTo1d_glo_i1
194
195 SUBROUTINE grid2dTo1d_glo_i2(VarIn,VarOut)
196 IMPLICIT NONE
197 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
198 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
199
200 CALL grid2dTo1d_glo_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
201
202 END SUBROUTINE grid2dTo1d_glo_i2
203
204 SUBROUTINE grid2dTo1d_glo_i3(VarIn,VarOut)
205 IMPLICIT NONE
206 INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
207 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
208
209 CALL grid2dTo1d_glo_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
210
211 END SUBROUTINE grid2dTo1d_glo_i3
212
213
214
215
216 SUBROUTINE grid2dTo1d_glo_r(VarIn,VarOut)
217 IMPLICIT NONE
218 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
219 REAL,INTENT(OUT),DIMENSION(:) :: VarOut
220
221 CALL grid2dTo1d_glo_rgen(VarIn,VarOut,1)
222
223 END SUBROUTINE grid2dTo1d_glo_r
224
225
226 SUBROUTINE grid2dTo1d_glo_r1(VarIn,VarOut)
227 IMPLICIT NONE
228 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
229 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
230
231 CALL grid2dTo1d_glo_rgen(VarIn,VarOut,size(VarIn,3))
232
233 END SUBROUTINE grid2dTo1d_glo_r1
234
235 SUBROUTINE grid2dTo1d_glo_r2(VarIn,VarOut)
236 IMPLICIT NONE
237 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
238 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
239
240 CALL grid2dTo1d_glo_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
241
242 END SUBROUTINE grid2dTo1d_glo_r2
243
244 SUBROUTINE grid2dTo1d_glo_r3(VarIn,VarOut)
245 IMPLICIT NONE
246 REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
247 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
248
249 CALL grid2dTo1d_glo_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
250
251 END SUBROUTINE grid2dTo1d_glo_r3
252
253
254
255 SUBROUTINE grid2dTo1d_glo_l(VarIn,VarOut)
256 IMPLICIT NONE
257 LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
258 LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
259
260 CALL grid2dTo1d_glo_lgen(VarIn,VarOut,1)
261
262 END SUBROUTINE grid2dTo1d_glo_l
263
264
265 SUBROUTINE grid2dTo1d_glo_l1(VarIn,VarOut)
266 IMPLICIT NONE
267 LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
268 LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
269
270 CALL grid2dTo1d_glo_lgen(VarIn,VarOut,size(VarIn,3))
271
272 END SUBROUTINE grid2dTo1d_glo_l1
273
274 SUBROUTINE grid2dTo1d_glo_l2(VarIn,VarOut)
275 IMPLICIT NONE
276 LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
277 LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
278
279 CALL grid2dTo1d_glo_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
280
281 END SUBROUTINE grid2dTo1d_glo_l2
282
283 SUBROUTINE grid2dTo1d_glo_l3(VarIn,VarOut)
284 IMPLICIT NONE
285 LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
286 LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
287
288 CALL grid2dTo1d_glo_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
289
290 END SUBROUTINE grid2dTo1d_glo_l3
291
292 !----------------------------------------------------------------
293 ! Generic (private) fonctions
294 !----------------------------------------------------------------
295
296 SUBROUTINE grid1dTo2d_glo_igen(VarIn,VarOut,dimsize)
297
298 IMPLICIT NONE
299
300 INTEGER,INTENT(IN) :: dimsize
301 INTEGER,INTENT(IN) ,DIMENSION(klon_glo,dimsize) :: VarIn
302 INTEGER,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarOut
303 INTEGER :: i,ij,Offset
304
305
306 Offset=nbp_lon
307
308 DO i=1,dimsize
309 DO ij=1,klon_glo
310 VarOut(ij+offset-1,i)=VarIn(ij,i)
311 ENDDO
312 ENDDO
313
314
315 DO i=1,dimsize
316 DO ij=1,nbp_lon
317 VarOut(ij,i)=VarIn(1,i)
318 ENDDO
319 ENDDO
320
321
322 DO i=1,dimsize
323 DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
324 VarOut(ij,i)=VarIn(klon_glo,i)
325 ENDDO
326 ENDDO
327
328 END SUBROUTINE grid1dTo2d_glo_igen
329
330
331 SUBROUTINE grid1dTo2d_glo_rgen(VarIn,VarOut,dimsize)
332
333 IMPLICIT NONE
334
335 INTEGER,INTENT(IN) :: dimsize
336 REAL,INTENT(IN) ,DIMENSION(klon_glo,dimsize) :: VarIn
337 REAL,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarOut
338 INTEGER :: i,ij,Offset
339
340
341 Offset=nbp_lon
342
343 DO i=1,dimsize
344 DO ij=1,klon_glo
345 VarOut(ij+offset-1,i)=VarIn(ij,i)
346 ENDDO
347 ENDDO
348
349
350 DO i=1,dimsize
351 DO ij=1,nbp_lon
352 VarOut(ij,i)=VarIn(1,i)
353 ENDDO
354 ENDDO
355
356
357 DO i=1,dimsize
358 DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
359 VarOut(ij,i)=VarIn(klon_glo,i)
360 ENDDO
361 ENDDO
362
363 END SUBROUTINE grid1dTo2d_glo_rgen
364
365 SUBROUTINE grid1dTo2d_glo_lgen(VarIn,VarOut,dimsize)
366
367 IMPLICIT NONE
368
369 INTEGER,INTENT(IN) :: dimsize
370 LOGICAL,INTENT(IN) ,DIMENSION(klon_glo,dimsize) :: VarIn
371 LOGICAL,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarOut
372 INTEGER :: i,ij,Offset
373
374 Offset=nbp_lon
375
376 DO i=1,dimsize
377 DO ij=1,klon_glo
378 VarOut(ij+offset-1,i)=VarIn(ij,i)
379 ENDDO
380 ENDDO
381
382
383 DO i=1,dimsize
384 DO ij=1,nbp_lon
385 VarOut(ij,i)=VarIn(1,i)
386 ENDDO
387 ENDDO
388
389
390 DO i=1,dimsize
391 DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
392 VarOut(ij,i)=VarIn(klon_glo,i)
393 ENDDO
394 ENDDO
395
396 END SUBROUTINE grid1dTo2d_glo_lgen
397
398
399 SUBROUTINE grid2dTo1d_glo_igen(VarIn,VarOut,dimsize)
400
401 IMPLICIT NONE
402
403 INTEGER,INTENT(IN) :: dimsize
404 INTEGER,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
405 INTEGER,INTENT(OUT),DIMENSION(klon_glo,dimsize) :: VarOut
406 INTEGER :: i,ij,offset
407
408 offset=nbp_lon
409
410 DO i=1,dimsize
411 DO ij=1,klon_glo
412 VarOut(ij,i)=VarIn(ij+offset-1,i)
413 ENDDO
414 ENDDO
415
416 DO i=1,dimsize
417 VarOut(1,i)=VarIn(1,i)
418 ENDDO
419
420 END SUBROUTINE grid2dTo1d_glo_igen
421
422 SUBROUTINE grid2dTo1d_glo_rgen(VarIn,VarOut,dimsize)
423
424 IMPLICIT NONE
425
426 INTEGER,INTENT(IN) :: dimsize
427 REAL,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
428 REAL,INTENT(OUT),DIMENSION(klon_glo,dimsize) :: VarOut
429 INTEGER :: i,ij,offset
430
431 offset=nbp_lon
432
433 DO i=1,dimsize
434 DO ij=1,klon_glo
435 VarOut(ij,i)=VarIn(ij+offset-1,i)
436 ENDDO
437 ENDDO
438
439 DO i=1,dimsize
440 VarOut(1,i)=VarIn(1,i)
441 ENDDO
442
443 END SUBROUTINE grid2dTo1d_glo_rgen
444
445 SUBROUTINE grid2dTo1d_glo_lgen(VarIn,VarOut,dimsize)
446
447 IMPLICIT NONE
448
449 INTEGER,INTENT(IN) :: dimsize
450 LOGICAL,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
451 LOGICAL,INTENT(OUT),DIMENSION(klon_glo,dimsize) :: VarOut
452 INTEGER :: i,ij,offset
453
454 offset=nbp_lon
455
456 DO i=1,dimsize
457 DO ij=1,klon_glo
458 VarOut(ij,i)=VarIn(ij+offset-1,i)
459 ENDDO
460 ENDDO
461
462 DO i=1,dimsize
463 VarOut(1,i)=VarIn(1,i)
464 ENDDO
465
466 END SUBROUTINE grid2dTo1d_glo_lgen
467
468 END MODULE mod_grid_phy_lmdz
469