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

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

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

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