source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/src/INCA_PARA/mod_grid_inca.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: 15.2 KB
Line 
1MODULE MOD_GRID_INCA
2
3  INTEGER, SAVE :: nbp_lon  ! == iim
4  INTEGER, SAVE :: nbp_lat  ! == jjmp1
5  INTEGER, SAVE :: nbp_lev  ! == llm
6  INTEGER, SAVE :: plon_glo
7  INTEGER, SAVE :: nvertex
8  INTEGER, SAVE :: grid_type
9
10  INTEGER,PARAMETER :: unstructured=0
11  INTEGER,PARAMETER :: regular_lonlat=1
12
13
14  INTERFACE grid1dTo2d_glo
15    MODULE PROCEDURE grid1dTo2d_glo_i,grid1dTo2d_glo_i1,grid1dTo2d_glo_i2,grid1dTo2d_glo_i3, &
16       grid1dTo2d_glo_r,grid1dTo2d_glo_r1,grid1dTo2d_glo_r2,grid1dTo2d_glo_r3, &
17       grid1dTo2d_glo_l,grid1dTo2d_glo_l1,grid1dTo2d_glo_l2,grid1dTo2d_glo_l3
18  END INTERFACE
19 
20  INTERFACE grid2dTo1d_glo
21    MODULE PROCEDURE grid2dTo1d_glo_i,grid2dTo1d_glo_i1,grid2dTo1d_glo_i2,grid2dTo1d_glo_i3, &
22       grid2dTo1d_glo_r,grid2dTo1d_glo_r1,grid2dTo1d_glo_r2,grid2dTo1d_glo_r3, &
23       grid2dTo1d_glo_l,grid2dTo1d_glo_l1,grid2dTo1d_glo_l2,grid2dTo1d_glo_l3
24  END INTERFACE
25 
26
27CONTAINS
28
29!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30  !! SUBROUTINE grid1dTo2d  !! 
31!!!!!!!!!!!!!!!!!!!!!!!!!!!!
32 
33
34  SUBROUTINE Init_grid_inca(iim,jjp1,llm)
35   
36    USE PRINT_INCA
37
38    IMPLICIT NONE
39
40    INTEGER, INTENT(in) :: iim
41    INTEGER, INTENT(in) :: jjp1
42    INTEGER, INTENT(in) :: llm
43   
44    nbp_lon=iim
45    nbp_lat=jjp1
46    nbp_lev=llm
47    plon_glo=(iim*jjp1)-2*(iim-1)
48
49    WRITE(lunout,*)'Init_grid_inca nbp_lon  =', nbp_lon
50    WRITE(lunout,*)'Init_grid_inca nbp_lat  =', nbp_lat
51    WRITE(lunout,*)'Init_grid_inca nbp_lev  =', nbp_lev
52    WRITE(lunout,*)'Init_grid_inca plon_glo =', plon_glo
53 
54  END SUBROUTINE Init_grid_inca
55 
56 
57  SUBROUTINE grid1dTo2d_glo_i(VarIn,VarOut) 
58  IMPLICIT NONE 
59    INTEGER,INTENT(IN),DIMENSION(:)     :: VarIn
60    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
61   
62    CALL grid1dTo2d_glo_igen_inca(VarIn,VarOut,1)
63 
64  END SUBROUTINE grid1dTo2d_glo_i
65 
66
67  SUBROUTINE grid1dTo2d_glo_i1(VarIn,VarOut) 
68  IMPLICIT NONE 
69    INTEGER,INTENT(IN),DIMENSION(:,:)     :: VarIn
70    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
71   
72    CALL grid1dTo2d_glo_igen_inca(VarIn,VarOut,size(VarIn,2))
73 
74  END SUBROUTINE grid1dTo2d_glo_i1
75
76  SUBROUTINE grid1dTo2d_glo_i2(VarIn,VarOut) 
77  IMPLICIT NONE 
78    INTEGER,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
79    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
80   
81    CALL grid1dTo2d_glo_igen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
82 
83  END SUBROUTINE grid1dTo2d_glo_i2
84 
85  SUBROUTINE grid1dTo2d_glo_i3(VarIn,VarOut) 
86  IMPLICIT NONE 
87    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
88    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
89   
90    CALL grid1dTo2d_glo_igen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
91 
92  END SUBROUTINE grid1dTo2d_glo_i3
93
94
95  SUBROUTINE grid1dTo2d_glo_r(VarIn,VarOut) 
96  IMPLICIT NONE 
97    REAL,INTENT(IN),DIMENSION(:)     :: VarIn
98    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
99   
100    CALL grid1dTo2d_glo_rgen_inca(VarIn,VarOut,1)
101 
102  END SUBROUTINE grid1dTo2d_glo_r
103 
104
105  SUBROUTINE grid1dTo2d_glo_r1(VarIn,VarOut) 
106  IMPLICIT NONE 
107    REAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
108    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
109   
110    CALL grid1dTo2d_glo_rgen_inca(VarIn,VarOut,size(VarIn,2))
111 
112  END SUBROUTINE grid1dTo2d_glo_r1
113
114  SUBROUTINE grid1dTo2d_glo_r2(VarIn,VarOut) 
115  IMPLICIT NONE 
116    REAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
117    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
118   
119    CALL grid1dTo2d_glo_rgen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
120 
121  END SUBROUTINE grid1dTo2d_glo_r2
122 
123  SUBROUTINE grid1dTo2d_glo_r3(VarIn,VarOut) 
124  IMPLICIT NONE 
125    REAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
126    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
127   
128    CALL grid1dTo2d_glo_rgen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
129 
130  END SUBROUTINE grid1dTo2d_glo_r3
131 
132 
133 
134  SUBROUTINE grid1dTo2d_glo_l(VarIn,VarOut) 
135  IMPLICIT NONE 
136    LOGICAL,INTENT(IN),DIMENSION(:)     :: VarIn
137    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
138   
139    CALL grid1dTo2d_glo_lgen_inca(VarIn,VarOut,1)
140 
141  END SUBROUTINE grid1dTo2d_glo_l
142 
143
144  SUBROUTINE grid1dTo2d_glo_l1(VarIn,VarOut) 
145  IMPLICIT NONE 
146    LOGICAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
147    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
148   
149    CALL grid1dTo2d_glo_lgen_inca(VarIn,VarOut,size(VarIn,2))
150 
151  END SUBROUTINE grid1dTo2d_glo_l1
152
153  SUBROUTINE grid1dTo2d_glo_l2(VarIn,VarOut) 
154  IMPLICIT NONE 
155    LOGICAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
156    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
157   
158    CALL grid1dTo2d_glo_lgen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
159 
160  END SUBROUTINE grid1dTo2d_glo_l2
161 
162  SUBROUTINE grid1dTo2d_glo_l3(VarIn,VarOut) 
163  IMPLICIT NONE 
164    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
165    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
166   
167    CALL grid1dTo2d_glo_lgen_inca(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
168 
169  END SUBROUTINE grid1dTo2d_glo_l3 
170 
171    SUBROUTINE grid2dTo1d_glo_i(VarIn,VarOut) 
172  IMPLICIT NONE 
173    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
174    INTEGER,INTENT(OUT),DIMENSION(:)  :: VarOut
175   
176    CALL grid2dTo1d_glo_igen_inca(VarIn,VarOut,1)
177 
178  END SUBROUTINE grid2dTo1d_glo_i
179 
180
181  SUBROUTINE grid2dTo1d_glo_i1(VarIn,VarOut) 
182  IMPLICIT NONE 
183    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
184    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
185   
186    CALL grid2dTo1d_glo_igen_inca(VarIn,VarOut,size(VarIn,3))
187 
188  END SUBROUTINE grid2dTo1d_glo_i1
189
190  SUBROUTINE grid2dTo1d_glo_i2(VarIn,VarOut) 
191  IMPLICIT NONE 
192    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
193    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
194   
195    CALL grid2dTo1d_glo_igen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
196 
197  END SUBROUTINE grid2dTo1d_glo_i2
198 
199  SUBROUTINE grid2dTo1d_glo_i3(VarIn,VarOut) 
200  IMPLICIT NONE 
201    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
202    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
203   
204    CALL grid2dTo1d_glo_igen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
205 
206  END SUBROUTINE grid2dTo1d_glo_i3
207 
208
209
210
211  SUBROUTINE grid2dTo1d_glo_r(VarIn,VarOut) 
212  IMPLICIT NONE 
213    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
214    REAL,INTENT(OUT),DIMENSION(:)  :: VarOut
215   
216    CALL grid2dTo1d_glo_rgen_inca(VarIn,VarOut,1)
217 
218  END SUBROUTINE grid2dTo1d_glo_r
219 
220
221  SUBROUTINE grid2dTo1d_glo_r1(VarIn,VarOut) 
222  IMPLICIT NONE 
223    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
224    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
225   
226    CALL grid2dTo1d_glo_rgen_inca(VarIn,VarOut,size(VarIn,3))
227 
228  END SUBROUTINE grid2dTo1d_glo_r1
229
230  SUBROUTINE grid2dTo1d_glo_r2(VarIn,VarOut) 
231  IMPLICIT NONE 
232    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
233    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
234   
235    CALL grid2dTo1d_glo_rgen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
236 
237  END SUBROUTINE grid2dTo1d_glo_r2
238 
239  SUBROUTINE grid2dTo1d_glo_r3(VarIn,VarOut) 
240  IMPLICIT NONE 
241    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
242    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
243   
244    CALL grid2dTo1d_glo_rgen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
245 
246  END SUBROUTINE grid2dTo1d_glo_r3
247
248
249
250  SUBROUTINE grid2dTo1d_glo_l(VarIn,VarOut) 
251  IMPLICIT NONE 
252    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
253    LOGICAL,INTENT(OUT),DIMENSION(:)  :: VarOut
254   
255    CALL grid2dTo1d_glo_lgen_inca(VarIn,VarOut,1)
256 
257  END SUBROUTINE grid2dTo1d_glo_l
258 
259
260  SUBROUTINE grid2dTo1d_glo_l1(VarIn,VarOut) 
261  IMPLICIT NONE 
262    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
263    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
264   
265    CALL grid2dTo1d_glo_lgen_inca(VarIn,VarOut,size(VarIn,3))
266 
267  END SUBROUTINE grid2dTo1d_glo_l1
268
269  SUBROUTINE grid2dTo1d_glo_l2(VarIn,VarOut) 
270  IMPLICIT NONE 
271    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
272    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
273   
274    CALL grid2dTo1d_glo_lgen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
275 
276  END SUBROUTINE grid2dTo1d_glo_l2
277 
278  SUBROUTINE grid2dTo1d_glo_l3(VarIn,VarOut) 
279  IMPLICIT NONE 
280    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
281    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
282   
283    CALL grid2dTo1d_glo_lgen_inca(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
284 
285  END SUBROUTINE grid2dTo1d_glo_l3
286
287
288END MODULE MOD_GRID_INCA
289
290
291 
292SUBROUTINE GRID1DTO2D_GLO_IGEN_INCA(VarIn,VarOut,dimsize)
293  USE MOD_GRID_INCA
294  IMPLICIT NONE
295
296  INTEGER,INTENT(IN) :: dimsize
297  INTEGER,INTENT(IN) ,DIMENSION(plon_glo,dimsize)       :: VarIn
298  INTEGER,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize)  :: VarOut
299  INTEGER :: i,ij,Offset
300
301   
302  Offset=nbp_lon
303       
304  DO i=1,dimsize
305    DO ij=1,plon_glo
306      VarOut(ij+offset-1,i)=VarIn(ij,i)
307    ENDDO
308  ENDDO
309   
310   
311  DO i=1,dimsize
312    DO ij=1,nbp_lon
313      VarOut(ij,i)=VarIn(1,i)
314    ENDDO
315  ENDDO
316   
317   
318  DO i=1,dimsize
319    DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
320      VarOut(ij,i)=VarIn(plon_glo,i)
321    ENDDO
322  ENDDO
323
324END SUBROUTINE grid1dTo2d_glo_igen_inca
325
326
327SUBROUTINE grid1dTo2d_glo_rgen_inca(VarIn,VarOut,dimsize)
328  USE mod_grid_inca
329  IMPLICIT NONE
330 
331  INTEGER,INTENT(IN) :: dimsize
332  REAL,INTENT(IN) ,DIMENSION(plon_glo,dimsize)       :: VarIn
333  REAL,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize)  :: VarOut
334  INTEGER :: i,ij,Offset
335 
336  Offset=nbp_lon
337       
338  DO i=1,dimsize
339    DO ij=1,plon_glo
340      VarOut(ij+offset-1,i)=VarIn(ij,i)
341    ENDDO
342  ENDDO
343 
344 
345  DO i=1,dimsize
346    DO ij=1,nbp_lon
347      VarOut(ij,i)=VarIn(1,i)
348    ENDDO
349  ENDDO
350 
351 
352  DO i=1,dimsize
353    DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
354      VarOut(ij,i)=VarIn(plon_glo,i)
355    ENDDO
356  ENDDO
357 
358END SUBROUTINE grid1dTo2d_glo_rgen_inca
359
360SUBROUTINE grid1dTo2d_glo_lgen_inca(VarIn,VarOut,dimsize)
361  USE mod_grid_inca
362  IMPLICIT NONE
363 
364  INTEGER,INTENT(IN) :: dimsize
365  LOGICAL,INTENT(IN) ,DIMENSION(plon_glo,dimsize)       :: VarIn
366  LOGICAL,INTENT(OUT),DIMENSION(nbp_lon*nbp_lat,dimsize)  :: VarOut
367  INTEGER :: i,ij,Offset
368 
369  Offset=nbp_lon
370 
371  DO i=1,dimsize
372    DO ij=1,plon_glo
373      VarOut(ij+offset-1,i)=VarIn(ij,i)
374    ENDDO
375  ENDDO
376 
377 
378  DO i=1,dimsize
379    DO ij=1,nbp_lon
380      VarOut(ij,i)=VarIn(1,i)
381    ENDDO
382  ENDDO
383 
384 
385  DO i=1,dimsize
386    DO ij=nbp_lon*(nbp_lat-1)+1,nbp_lat*nbp_lon
387      VarOut(ij,i)=VarIn(plon_glo,i)
388    ENDDO
389  ENDDO
390 
391END SUBROUTINE grid1dTo2d_glo_lgen_inca
392 
393 
394SUBROUTINE grid2dTo1d_glo_igen_inca(VarIn,VarOut,dimsize)
395  USE mod_grid_inca
396  IMPLICIT NONE
397
398  INTEGER,INTENT(IN) :: dimsize
399  INTEGER,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
400  INTEGER,INTENT(OUT),DIMENSION(plon_glo,dimsize)      :: VarOut
401  INTEGER :: i,ij,offset
402
403  offset=nbp_lon
404 
405  DO i=1,dimsize
406    DO ij=1,plon_glo
407      VarOut(ij,i)=VarIn(ij+offset-1,i)
408    ENDDO
409  ENDDO
410 
411  DO i=1,dimsize
412    VarOut(1,i)=VarIn(1,i)
413  ENDDO
414 
415END SUBROUTINE grid2dTo1d_glo_igen_inca
416 
417SUBROUTINE grid2dTo1d_glo_rgen_inca(VarIn,VarOut,dimsize)
418  USE mod_grid_inca
419  IMPLICIT NONE
420 
421  INTEGER,INTENT(IN) :: dimsize
422  REAL,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
423  REAL,INTENT(OUT),DIMENSION(plon_glo,dimsize)      :: VarOut
424  INTEGER :: i,ij,offset
425
426  offset=nbp_lon
427
428  DO i=1,dimsize
429    DO ij=1,plon_glo
430      VarOut(ij,i)=VarIn(ij+offset-1,i)
431    ENDDO
432  ENDDO
433
434  DO i=1,dimsize
435    VarOut(1,i)=VarIn(1,i)
436  ENDDO
437 
438END SUBROUTINE grid2dTo1d_glo_rgen_inca
439
440SUBROUTINE grid2dTo1d_glo_lgen_inca(VarIn,VarOut,dimsize)
441  USE mod_grid_inca
442  IMPLICIT NONE
443 
444  INTEGER,INTENT(IN) :: dimsize
445  LOGICAL,INTENT(IN) ,DIMENSION(nbp_lon*nbp_lat,dimsize) :: VarIn
446  LOGICAL,INTENT(OUT),DIMENSION(plon_glo,dimsize)      :: VarOut
447  INTEGER :: i,ij,offset
448 
449  offset=nbp_lon
450
451  DO i=1,dimsize
452    DO ij=1,plon_glo
453      VarOut(ij,i)=VarIn(ij+offset-1,i)
454    ENDDO
455  ENDDO
456
457  DO i=1,dimsize
458    VarOut(1,i)=VarIn(1,i)
459  ENDDO
460 
461END SUBROUTINE grid2dTo1d_glo_lgen_inca
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479#if 0
480!************************************************************!
481  SUBROUTINE grid1dTo2d_r(VarIn,VarOut) 
482  IMPLICIT NONE 
483    REAL,INTENT(IN),DIMENSION(:)     :: VarIn
484    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
485   
486    CALL grid1dTo2d_rgen(VarIn,VarOut,1)
487 
488  END SUBROUTINE grid1dTo2d_r
489 
490
491  SUBROUTINE grid1dTo2d_r1(VarIn,VarOut) 
492  IMPLICIT NONE 
493    REAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
494    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
495   
496    CALL grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2))
497 
498  END SUBROUTINE grid1dTo2d_r1
499
500  SUBROUTINE grid1dTo2d_r2(VarIn,VarOut) 
501  IMPLICIT NONE 
502    REAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
503    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
504   
505    CALL grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
506 
507  END SUBROUTINE grid1dTo2d_r2
508 
509  SUBROUTINE grid1dTo2d_r3(VarIn,VarOut) 
510  IMPLICIT NONE 
511    REAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
512    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
513   
514    CALL grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
515 
516  END SUBROUTINE grid1dTo2d_r3
517
518
519  SUBROUTINE grid2dTo1d_r(VarIn,VarOut) 
520  IMPLICIT NONE 
521    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
522    REAL,INTENT(OUT),DIMENSION(:)  :: VarOut
523   
524    CALL grid2dTo1d_rgen(VarIn,VarOut,1)
525 
526  END SUBROUTINE grid2dTo1d_r
527 
528
529  SUBROUTINE grid2dTo1d_r1(VarIn,VarOut) 
530  IMPLICIT NONE 
531    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
532    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
533   
534    CALL grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3))
535 
536  END SUBROUTINE grid2dTo1d_r1
537
538  SUBROUTINE grid2dTo1d_r2(VarIn,VarOut) 
539  IMPLICIT NONE 
540    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
541    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
542   
543    CALL grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
544 
545  END SUBROUTINE grid2dTo1d_r2
546 
547  SUBROUTINE grid2dTo1d_r3(VarIn,VarOut) 
548  IMPLICIT NONE 
549    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
550    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
551   
552    CALL grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
553 
554  END SUBROUTINE grid2dTo1d_r3
555
556  SUBROUTINE grid2dTo1d_rgen(VarIn,VarOut,dimsize)
557    USE mod_inca_mpi_data
558    USE mod_grid_inca
559    IMPLICIT NONE
560   
561    INTEGER,INTENT(IN) :: dimsize
562    REAL,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
563    REAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
564    INTEGER :: i,ij,offset
565
566    offset=ii_begin
567    IF (is_north_pole) offset=nbp_lon
568
569    DO i=1,dimsize
570      DO ij=1,plon_mpi
571        VarOut(ij,i)=VarIn(ij+offset-1,i)
572      ENDDO
573    ENDDO
574
575    IF (is_north_pole) THEN
576      DO i=1,dimsize
577         VarOut(1,i)=VarIn(1,i)
578      ENDDO
579    ENDIF
580   
581   
582  END SUBROUTINE grid2dTo1d_rgen   
583
584  SUBROUTINE grid1dTo2d_rgen(VarIn,VarOut,dimsize)
585    USE mod_inca_mpi_data
586    USE mod_grid_inca
587    IMPLICIT NONE
588   
589    INTEGER,INTENT(IN) :: dimsize
590    REAL,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
591    REAL,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
592    INTEGER :: i,ij,Offset
593
594   
595    VarOut(1:nbp_lon,:)=0
596    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=0
597   
598    offset=ii_begin
599    IF (is_north_pole) Offset=nbp_lon
600   
601   
602    DO i=1,dimsize
603      DO ij=1,plon_mpi
604        VarOut(ij+offset-1,i)=VarIn(ij,i)
605      ENDDO
606    ENDDO
607   
608   
609    IF (is_north_pole) THEN
610      DO i=1,dimsize
611        DO ij=1,nbp_lon
612         VarOut(ij,i)=VarIn(1,i)
613        ENDDO
614      ENDDO
615    ENDIF
616   
617    IF (is_south_pole) THEN
618      DO i=1,dimsize
619        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
620         VarOut(ij,i)=VarIn(plon_mpi,i)
621        ENDDO
622      ENDDO
623    ENDIF
624
625   END SUBROUTINE grid1dTo2d_rgen   
626#endif
Note: See TracBrowser for help on using the repository browser.