source: LMDZ5/trunk/libf/dyn3dmem/allocate_field_mod.F90 @ 3862

Last change on this file since 3862 was 1907, checked in by lguez, 11 years ago

Added a copyright property to every file of the distribution, except
for the fcm files (which have their own copyright). Use svn propget on
a file to see the copyright. For instance:

$ svn propget copyright libf/phylmd/physiq.F90
Name of program: LMDZ
Creation date: 1984
Version: LMDZ5
License: CeCILL version 2
Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
See the license file in the root directory

Also added the files defining the CeCILL version 2 license, in French
and English, at the top of the LMDZ tree.

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 15.6 KB
RevLine 
[1810]1MODULE allocate_field_mod
[1632]2
3  INTERFACE allocate_u
4    MODULE PROCEDURE allocate1d_u1d,allocate2d_u1d,allocate3d_u1d
5  END INTERFACE allocate_u
6
7  INTERFACE switch_u
8    MODULE PROCEDURE switch1d_u1d,switch2d_u1d,switch3d_u1d
9  END INTERFACE switch_u
10
11  INTERFACE switch_v
12    MODULE PROCEDURE switch1d_v1d,switch2d_v1d,switch3d_v1d
13  END INTERFACE switch_v
14
15  INTERFACE allocate_v
16    MODULE PROCEDURE allocate1d_v1d,allocate2d_v1d,allocate3d_v1d
17  END INTERFACE allocate_v
18
19  INTERFACE allocate2d_u
20    MODULE PROCEDURE allocate1d_u2d,allocate2d_u2d,allocate3d_u2d
21  END INTERFACE allocate2d_u
22
23  INTERFACE allocate2d_v
24    MODULE PROCEDURE allocate1d_v2d,allocate2d_v2d,allocate3d_v2d
25  END INTERFACE allocate2d_v
26
27  INTERFACE switch2d_u
28    MODULE PROCEDURE switch1d_u2d,switch2d_u2d,switch3d_u2d
29  END INTERFACE switch2d_u
30
31  INTERFACE switch2d_v
32    MODULE PROCEDURE switch1d_v2d,switch2d_v2d,switch3d_v2d
33  END INTERFACE switch2D_v
34
35  REAL :: nan
36
37CONTAINS
38
39  SUBROUTINE Init_nan
40  IMPLICIT NONE
41    REAL*8 :: rnan
42    INTEGER :: inan(2)
43    EQUIVALENCE(rnan,inan)
44   
45    inan(1)=2147483647
46    inan(2)=2147483647
47   
48    nan=rnan
49 
50  END SUBROUTINE Init_nan
51
52  SUBROUTINE allocate1d_u1d(field,d)
[1823]53  USE parallel_lmdz
[1632]54  IMPLICIT NONE
55  REAL,POINTER :: field(:)
56  TYPE(distrib),INTENT(IN) :: d
57
58!$OMP BARRIER
59!$OMP MASTER   
60    IF (ASSOCIATED(field)) DEALLOCATE(field)
61    ALLOCATE(field(d%ijb_u:d%ije_u))
62!$OMP END MASTER
63!$OMP BARRIER
64
65  END SUBROUTINE allocate1d_u1d
66
67
68  SUBROUTINE allocate2d_u1d(field,dim1,d)
[1823]69  USE parallel_lmdz
[1632]70  IMPLICIT NONE
71  REAL,POINTER :: field(:,:)
72  INTEGER      :: dim1
73  TYPE(distrib),INTENT(IN) :: d
74
75!$OMP BARRIER
76!$OMP MASTER   
77    IF (ASSOCIATED(field)) DEALLOCATE(field)
78    ALLOCATE(field(d%ijb_u:d%ije_u,dim1))
79!$OMP END MASTER
80!$OMP BARRIER
81
82  END SUBROUTINE allocate2d_u1d
83
84  SUBROUTINE allocate3d_u1d(field,dim1,dim2,d)
[1823]85  USE parallel_lmdz
[1632]86  IMPLICIT NONE
87  REAL,POINTER :: field(:,:,:)
88  INTEGER      :: dim1,dim2
89  TYPE(distrib),INTENT(IN) :: d
90
91!$OMP BARRIER
92!$OMP MASTER   
93    IF (ASSOCIATED(field)) DEALLOCATE(field)
94    ALLOCATE(field(d%ijb_u:d%ije_u,dim1,dim2))
95!$OMP END MASTER
96!$OMP BARRIER
97
98  END SUBROUTINE allocate3d_u1d   
99
100
101
102  SUBROUTINE allocate1d_v1d(field,d)
[1823]103  USE parallel_lmdz
[1632]104  IMPLICIT NONE
105  REAL,POINTER :: field(:)
106  TYPE(distrib),INTENT(IN) :: d
107
108!$OMP BARRIER
109!$OMP MASTER   
110    IF (ASSOCIATED(field)) DEALLOCATE(field)
111    ALLOCATE(field(d%ijb_v:d%ije_v))
112!$OMP END MASTER
113!$OMP BARRIER
114
115  END SUBROUTINE allocate1d_v1d
116
117
118  SUBROUTINE allocate2d_v1d(field,dim1,d)
[1823]119  USE parallel_lmdz
[1632]120  IMPLICIT NONE
121  REAL,POINTER :: field(:,:)
122  INTEGER      :: dim1
123  TYPE(distrib),INTENT(IN) :: d
124
125!$OMP BARRIER
126!$OMP MASTER   
127    IF (ASSOCIATED(field)) DEALLOCATE(field)
128    ALLOCATE(field(d%ijb_v:d%ije_v,dim1))
129!$OMP END MASTER
130!$OMP BARRIER
131
132  END SUBROUTINE allocate2d_v1d
133
134  SUBROUTINE allocate3d_v1d(field,dim1,dim2,d)
[1823]135  USE parallel_lmdz
[1632]136  IMPLICIT NONE
137  REAL,POINTER :: field(:,:,:)
138  INTEGER      :: dim1,dim2
139  TYPE(distrib),INTENT(IN) :: d
140
141!$OMP BARRIER
142!$OMP MASTER   
143    IF (ASSOCIATED(field)) DEALLOCATE(field)
144    ALLOCATE(field(d%ijb_v:d%ije_v,dim1,dim2))
145!$OMP END MASTER
146!$OMP BARRIER
147
148  END SUBROUTINE allocate3d_v1d   
149
150
151
152
153
154
155
156
157
158  SUBROUTINE allocate1d_u2d(field,d)
[1823]159  USE parallel_lmdz
[1810]160  USE dimensions_mod
[1632]161  IMPLICIT NONE
162  REAL,POINTER :: field(:,:)
163  TYPE(distrib),INTENT(IN) :: d
164
165!$OMP BARRIER
166!$OMP MASTER   
167    IF (ASSOCIATED(field)) DEALLOCATE(field)
168    ALLOCATE(field(iip1,d%jjb_u:d%jje_u))
169!$OMP END MASTER
170!$OMP BARRIER
171
172  END SUBROUTINE allocate1d_u2d
173
174
175  SUBROUTINE allocate2d_u2d(field,dim1,d)
[1823]176  USE parallel_lmdz
[1810]177  USE dimensions_mod
[1632]178  IMPLICIT NONE
179  REAL,POINTER :: field(:,:,:)
180  INTEGER      :: dim1
181  TYPE(distrib),INTENT(IN) :: d
182
183!$OMP BARRIER
184!$OMP MASTER   
185    IF (ASSOCIATED(field)) DEALLOCATE(field)
186    ALLOCATE(field(iip1,d%jjb_u:d%jje_u,dim1))
187!$OMP END MASTER
188!$OMP BARRIER
189
190  END SUBROUTINE allocate2d_u2d
191
192  SUBROUTINE allocate3d_u2d(field,dim1,dim2,d)
[1823]193  USE parallel_lmdz
[1810]194  USE dimensions_mod
[1632]195  IMPLICIT NONE
196  REAL,POINTER :: field(:,:,:,:)
197  INTEGER      :: dim1,dim2
198  TYPE(distrib),INTENT(IN) :: d
199
200!$OMP BARRIER
201!$OMP MASTER   
202    IF (ASSOCIATED(field)) DEALLOCATE(field)
203    ALLOCATE(field(iip1,d%jjb_u:d%jje_u,dim1,dim2))
204!$OMP END MASTER
205!$OMP BARRIER
206
207  END SUBROUTINE allocate3d_u2d   
208
209
210
211  SUBROUTINE allocate1d_v2d(field,d)
[1823]212  USE parallel_lmdz
[1810]213  USE dimensions_mod
[1632]214  IMPLICIT NONE
215  REAL,POINTER :: field(:,:)
216  TYPE(distrib),INTENT(IN) :: d
217
218!$OMP BARRIER
219!$OMP MASTER   
220    IF (ASSOCIATED(field)) DEALLOCATE(field)
221    ALLOCATE(field(iip1,d%jjb_v:d%jje_v))
222!$OMP END MASTER
223!$OMP BARRIER
224
225  END SUBROUTINE allocate1d_v2d
226
227
228  SUBROUTINE allocate2d_v2d(field,dim1,d)
[1823]229  USE parallel_lmdz
[1810]230  USE dimensions_mod
[1632]231  IMPLICIT NONE
232  REAL,POINTER :: field(:,:,:)
233  INTEGER      :: dim1
234  TYPE(distrib),INTENT(IN) :: d
235
236!$OMP BARRIER
237!$OMP MASTER   
238    IF (ASSOCIATED(field)) DEALLOCATE(field)
239    ALLOCATE(field(iip1,d%jjb_v:d%jje_v,dim1))
240!$OMP END MASTER
241!$OMP BARRIER
242
243  END SUBROUTINE allocate2d_v2d
244
245  SUBROUTINE allocate3d_v2d(field,dim1,dim2,d)
[1823]246  USE parallel_lmdz
[1810]247  USE dimensions_mod
[1632]248  IMPLICIT NONE
249  REAL,POINTER :: field(:,:,:,:)
250  INTEGER      :: dim1,dim2
251  TYPE(distrib),INTENT(IN) :: d
252
253!$OMP BARRIER
254!$OMP MASTER   
255    IF (ASSOCIATED(field)) DEALLOCATE(field)
256    ALLOCATE(field(iip1,d%jjb_v:d%jje_v,dim1,dim2))
257!$OMP END MASTER
258!$OMP BARRIER
259
260  END SUBROUTINE allocate3d_v2d   
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280  SUBROUTINE switch1d_u1d(field,old_dist,new_dist,up,down)
[1823]281  USE parallel_lmdz
[1632]282  USE mod_hallo
283  IMPLICIT NONE
284  REAL,POINTER :: field(:)
285  TYPE(distrib),INTENT(IN) :: old_dist
286  TYPE(distrib),INTENT(IN) :: new_dist
287  INTEGER, OPTIONAL,INTENT(IN) :: up
288  INTEGER, OPTIONAL,INTENT(IN) :: down
289 
290  REAL,POINTER,SAVE :: new_field(:)
291  TYPE(request) :: req
292 
293  !$OMP BARRIER
294  !$OMP MASTER   
295    ALLOCATE(new_field(new_dist%ijb_u:new_dist%ije_u))
296    new_field=nan
297  !$OMP END MASTER
298  !$OMP BARRIER
299    CALL Register_SwapField_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
300 
301    CALL SendRequest(req)
302
303  !$OMP BARRIER
304    CALL WaitRequest(req)     
305  !$OMP BARRIER
306   
307  !$OMP MASTER
308    DEALLOCATE(field)
309    field=>new_field
310  !$OMP END MASTER
311  !$OMP BARRIER
312   
313    CALL barrier
314  END SUBROUTINE switch1d_u1d 
315 
316  SUBROUTINE switch2d_u1d(field,old_dist,new_dist,up,down)
[1823]317  USE parallel_lmdz
[1632]318  USE mod_hallo
319  IMPLICIT NONE
320  REAL,POINTER :: field(:,:)
321  TYPE(distrib),INTENT(IN) :: old_dist
322  TYPE(distrib),INTENT(IN) :: new_dist
323  INTEGER, OPTIONAL,INTENT(IN) :: up
324  INTEGER, OPTIONAL,INTENT(IN) :: down
325
326  REAL,POINTER,SAVE :: new_field(:,:)
327  TYPE(request) :: req
328 
329  !$OMP BARRIER
330  !$OMP MASTER   
331    ALLOCATE(new_field(new_dist%ijb_u:new_dist%ije_u,size(field,2)))
332    new_field=nan
333  !$OMP END MASTER
334  !$OMP BARRIER
335    CALL Register_SwapField_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
336 
337    CALL SendRequest(req)
338
339  !$OMP BARRIER
340    CALL WaitRequest(req)     
341  !$OMP BARRIER
342   
343  !$OMP MASTER
344    DEALLOCATE(field)
345    field=>new_field
346  !$OMP END MASTER
347  !$OMP BARRIER
348    CALL barrier
349
350  END SUBROUTINE switch2d_u1d 
351
352  SUBROUTINE switch3d_u1d(field,old_dist,new_dist,up,down)
[1823]353  USE parallel_lmdz
[1632]354  USE mod_hallo
355  IMPLICIT NONE
356  REAL,POINTER :: field(:,:,:)
357  TYPE(distrib),INTENT(IN) :: old_dist
358  TYPE(distrib),INTENT(IN) :: new_dist
359  INTEGER, OPTIONAL,INTENT(IN) :: up
360  INTEGER, OPTIONAL,INTENT(IN) :: down
361
362  REAL,POINTER,SAVE :: new_field(:,:,:)
363  TYPE(request) :: req
364 
365  !$OMP BARRIER
366  !$OMP MASTER   
367    ALLOCATE(new_field(new_dist%ijb_u:new_dist%ije_u,size(field,2),size(field,3)))
368    new_field=nan
369  !$OMP END MASTER
370  !$OMP BARRIER
371    CALL Register_SwapField_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
372 
373    CALL SendRequest(req)
374
375  !$OMP BARRIER
376    CALL WaitRequest(req)     
377  !$OMP BARRIER
378   
379  !$OMP MASTER
380    DEALLOCATE(field)
381    field=>new_field
382  !$OMP END MASTER
383  !$OMP BARRIER
384    CALL barrier
385
386  END SUBROUTINE switch3d_u1d 
387
388
389
390
391  SUBROUTINE switch1d_v1d(field,old_dist,new_dist,up,down)
[1823]392  USE parallel_lmdz
[1632]393  USE mod_hallo
394  IMPLICIT NONE
395  REAL,POINTER :: field(:)
396  TYPE(distrib),INTENT(IN) :: old_dist
397  TYPE(distrib),INTENT(IN) :: new_dist
398  INTEGER, OPTIONAL,INTENT(IN) :: up
399  INTEGER, OPTIONAL,INTENT(IN) :: down
400
401  REAL,POINTER,SAVE :: new_field(:)
402  TYPE(request) :: req
403 
404  !$OMP BARRIER
405  !$OMP MASTER   
406    ALLOCATE(new_field(new_dist%ijb_v:new_dist%ije_v))
407    new_field=nan
408  !$OMP END MASTER
409  !$OMP BARRIER
410    CALL Register_SwapField_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
411 
412    CALL SendRequest(req)
413
414  !$OMP BARRIER
415    CALL WaitRequest(req)     
416  !$OMP BARRIER
417   
418  !$OMP MASTER
419    DEALLOCATE(field)
420    field=>new_field
421  !$OMP END MASTER
422  !$OMP BARRIER
423
424    CALL barrier
425  END SUBROUTINE switch1d_v1d 
426 
427  SUBROUTINE switch2d_v1d(field,old_dist,new_dist,up,down)
[1823]428  USE parallel_lmdz
[1632]429  USE mod_hallo
430  IMPLICIT NONE
431  REAL,POINTER :: field(:,:)
432  TYPE(distrib),INTENT(IN) :: old_dist
433  TYPE(distrib),INTENT(IN) :: new_dist
434  INTEGER, OPTIONAL,INTENT(IN) :: up
435  INTEGER, OPTIONAL,INTENT(IN) :: down
436
437  REAL,POINTER,SAVE :: new_field(:,:)
438  TYPE(request) :: req
439 
440  !$OMP BARRIER
441  !$OMP MASTER   
442    ALLOCATE(new_field(new_dist%ijb_v:new_dist%ije_v,size(field,2)))
443    new_field=nan
444  !$OMP END MASTER
445  !$OMP BARRIER
446    CALL Register_SwapField_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
447 
448    CALL SendRequest(req)
449
450  !$OMP BARRIER
451    CALL WaitRequest(req)     
452  !$OMP BARRIER
453   
454  !$OMP MASTER
455    DEALLOCATE(field)
456    field=>new_field
457  !$OMP END MASTER
458  !$OMP BARRIER
459    CALL barrier
460
461  END SUBROUTINE switch2d_v1d 
462
463  SUBROUTINE switch3d_v1d(field,old_dist,new_dist,up,down)
[1823]464  USE parallel_lmdz
[1632]465  USE mod_hallo
466  IMPLICIT NONE
467  REAL,POINTER :: field(:,:,:)
468  TYPE(distrib),INTENT(IN) :: old_dist
469  TYPE(distrib),INTENT(IN) :: new_dist
470  INTEGER, OPTIONAL,INTENT(IN) :: up
471  INTEGER, OPTIONAL,INTENT(IN) :: down
472
473  REAL,POINTER,SAVE :: new_field(:,:,:)
474  TYPE(request) :: req
475 
476  !$OMP BARRIER
477  !$OMP MASTER   
478    ALLOCATE(new_field(new_dist%ijb_v:new_dist%ije_v,size(field,2),size(field,3)))
479    new_field=nan
480  !$OMP END MASTER
481  !$OMP BARRIER
482    CALL Register_SwapField_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
483 
484    CALL SendRequest(req)
485
486  !$OMP BARRIER
487    CALL WaitRequest(req)     
488  !$OMP BARRIER
489   
490  !$OMP MASTER
491    DEALLOCATE(field)
492    field=>new_field
493  !$OMP END MASTER
494  !$OMP BARRIER
495    CALL barrier
496
497  END SUBROUTINE switch3d_v1d 
498
499
500
501
502
503
504
505
506
507
508
509
510  SUBROUTINE switch1d_u2d(field,old_dist,new_dist,up,down)
[1823]511  USE parallel_lmdz
[1632]512  USE mod_hallo
[1810]513  USE dimensions_mod
[1632]514  IMPLICIT NONE
515  REAL,POINTER :: field(:,:)
516  TYPE(distrib),INTENT(IN) :: old_dist
517  TYPE(distrib),INTENT(IN) :: new_dist
518  INTEGER, OPTIONAL,INTENT(IN) :: up
519  INTEGER, OPTIONAL,INTENT(IN) :: down
520
521  REAL,POINTER,SAVE :: new_field(:,:)
522  TYPE(request) :: req
523 
524  !$OMP BARRIER
525  !$OMP MASTER   
526    ALLOCATE(new_field(iip1,new_dist%jjb_u:new_dist%jje_u))
527    new_field=nan
528  !$OMP END MASTER
529  !$OMP BARRIER
530    CALL Register_SwapField2d_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
531 
532    CALL SendRequest(req)
533
534  !$OMP BARRIER
535    CALL WaitRequest(req)     
536  !$OMP BARRIER
537   
538  !$OMP MASTER
539    DEALLOCATE(field)
540    field=>new_field
541  !$OMP END MASTER
542  !$OMP BARRIER
543    CALL barrier
544
545  END SUBROUTINE switch1d_u2d 
546 
547  SUBROUTINE switch2d_u2d(field,old_dist,new_dist,up,down)
[1823]548  USE parallel_lmdz
[1632]549  USE mod_hallo
[1810]550  USE dimensions_mod
[1632]551  IMPLICIT NONE
552  REAL,POINTER :: field(:,:,:)
553  TYPE(distrib),INTENT(IN) :: old_dist
554  TYPE(distrib),INTENT(IN) :: new_dist
555  INTEGER, OPTIONAL,INTENT(IN) :: up
556  INTEGER, OPTIONAL,INTENT(IN) :: down
557
558  REAL,POINTER,SAVE :: new_field(:,:,:)
559  TYPE(request) :: req
560 
561  !$OMP BARRIER
562  !$OMP MASTER   
563    ALLOCATE(new_field(iip1,new_dist%jjb_u:new_dist%jje_u,size(field,3)))
564    new_field=nan
565  !$OMP END MASTER
566  !$OMP BARRIER
567    CALL Register_SwapField2d_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
568 
569    CALL SendRequest(req)
570
571  !$OMP BARRIER
572    CALL WaitRequest(req)     
573  !$OMP BARRIER
574   
575  !$OMP MASTER
576    DEALLOCATE(field)
577    field=>new_field
578  !$OMP END MASTER
579  !$OMP BARRIER
580    CALL barrier
581
582  END SUBROUTINE switch2d_u2d 
583
584  SUBROUTINE switch3d_u2d(field,old_dist,new_dist,up,down)
[1823]585  USE parallel_lmdz
[1632]586  USE mod_hallo
[1810]587  USE dimensions_mod
[1632]588  IMPLICIT NONE
589  REAL,POINTER :: field(:,:,:,:)
590  TYPE(distrib),INTENT(IN) :: old_dist
591  TYPE(distrib),INTENT(IN) :: new_dist
592  INTEGER, OPTIONAL,INTENT(IN) :: up
593  INTEGER, OPTIONAL,INTENT(IN) :: down
594
595  REAL,POINTER,SAVE :: new_field(:,:,:,:)
596  TYPE(request) :: req
597 
598  !$OMP BARRIER
599  !$OMP MASTER   
600    ALLOCATE(new_field(iip1,new_dist%jjb_u:new_dist%jje_u,size(field,3),size(field,4)))
601    new_field=nan
602  !$OMP END MASTER
603  !$OMP BARRIER
604    CALL Register_SwapField2d_u(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
605 
606    CALL SendRequest(req)
607
608  !$OMP BARRIER
609    CALL WaitRequest(req)     
610  !$OMP BARRIER
611   
612  !$OMP MASTER
613    DEALLOCATE(field)
614    field=>new_field
615  !$OMP END MASTER
616  !$OMP BARRIER
617    CALL barrier
618
619  END SUBROUTINE switch3d_u2d 
620
621
622
623
624  SUBROUTINE switch1d_v2d(field,old_dist,new_dist,up,down)
[1823]625  USE parallel_lmdz
[1632]626  USE mod_hallo
[1810]627  USE dimensions_mod
[1632]628  IMPLICIT NONE
629  REAL,POINTER :: field(:,:)
630  TYPE(distrib),INTENT(IN) :: old_dist
631  TYPE(distrib),INTENT(IN) :: new_dist
632  INTEGER, OPTIONAL,INTENT(IN) :: up
633  INTEGER, OPTIONAL,INTENT(IN) :: down
634
635  REAL,POINTER,SAVE :: new_field(:,:)
636  TYPE(request) :: req
637 
638  !$OMP BARRIER
639  !$OMP MASTER   
640    ALLOCATE(new_field(iip1,new_dist%jjb_v:new_dist%jje_v))
641    new_field=nan
642  !$OMP END MASTER
643  !$OMP BARRIER
644    CALL Register_SwapField2d_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
645 
646    CALL SendRequest(req)
647
648  !$OMP BARRIER
649    CALL WaitRequest(req)     
650  !$OMP BARRIER
651   
652  !$OMP MASTER
653    DEALLOCATE(field)
654    field=>new_field
655  !$OMP END MASTER
656  !$OMP BARRIER
657    CALL barrier
658
659  END SUBROUTINE switch1d_v2d 
660 
661  SUBROUTINE switch2d_v2d(field,old_dist,new_dist,up,down)
[1823]662  USE parallel_lmdz
[1632]663  USE mod_hallo
[1810]664  USE dimensions_mod
[1632]665  IMPLICIT NONE
666  REAL,POINTER :: field(:,:,:)
667  TYPE(distrib),INTENT(IN) :: old_dist
668  TYPE(distrib),INTENT(IN) :: new_dist
669  INTEGER, OPTIONAL,INTENT(IN) :: up
670  INTEGER, OPTIONAL,INTENT(IN) :: down
671
672  REAL,POINTER,SAVE :: new_field(:,:,:)
673  TYPE(request) :: req
674 
675  !$OMP BARRIER
676  !$OMP MASTER   
677    ALLOCATE(new_field(iip1,new_dist%jjb_v:new_dist%jje_v,size(field,3)))
678    new_field=nan
679  !$OMP END MASTER
680  !$OMP BARRIER
681    CALL Register_SwapField2d_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
682 
683    CALL SendRequest(req)
684
685  !$OMP BARRIER
686    CALL WaitRequest(req)     
687  !$OMP BARRIER
688   
689  !$OMP MASTER
690    DEALLOCATE(field)
691    field=>new_field
692  !$OMP END MASTER
693  !$OMP BARRIER
694
695    CALL barrier
696  END SUBROUTINE switch2d_v2d 
697
698  SUBROUTINE switch3d_v2d(field,old_dist,new_dist,up,down)
[1823]699  USE parallel_lmdz
[1632]700  USE mod_hallo
[1810]701  USE dimensions_mod
[1632]702  IMPLICIT NONE
703  REAL,POINTER :: field(:,:,:,:)
704  TYPE(distrib),INTENT(IN) :: old_dist
705  TYPE(distrib),INTENT(IN) :: new_dist
706  INTEGER, OPTIONAL,INTENT(IN) :: up
707  INTEGER, OPTIONAL,INTENT(IN) :: down
708
709  REAL,POINTER,SAVE :: new_field(:,:,:,:)
710  TYPE(request) :: req
711 
712  !$OMP BARRIER
713  !$OMP MASTER   
714    ALLOCATE(new_field(iip1,new_dist%jjb_v:new_dist%jje_v,size(field,3),size(field,4)))
715    new_field=nan
716  !$OMP END MASTER
717  !$OMP BARRIER
718    CALL Register_SwapField2d_v(field,new_field,new_dist,req,old_dist=old_dist,up=up,down=down)
719 
720    CALL SendRequest(req)
721
722  !$OMP BARRIER
723    CALL WaitRequest(req)     
724  !$OMP BARRIER
725   
726  !$OMP MASTER
727    DEALLOCATE(field)
728    field=>new_field
729  !$OMP END MASTER
730  !$OMP BARRIER
731
732    CALL barrier
733  END SUBROUTINE switch3d_v2d
734
[1810]735END MODULE allocate_field_mod
[1632]736 
737 
738 
739 
Note: See TracBrowser for help on using the repository browser.