source: branches/publications/ORCHIDEE_CAN_r3069/src_parallel/orch_write_field_p.f90 @ 7346

Last change on this file since 7346 was 1586, checked in by matthew.mcgrath, 11 years ago

DEV: Compiles with NAG but does not link yet

  • Property svn:keywords set to HeadURL Date Author Revision
File size: 3.9 KB
Line 
1! Yann Meurdesoif functions for parallel tests.
2
3!-
4!< $HeadURL$
5!< $Date$
6!< $Author$
7!< $Revision$
8!-
9
10MODULE Orch_Write_field_p
11 
12  interface WriteField_p
13    module procedure WriteField_4d_p,WriteField_3d_p,WriteField_2d_p
14  end interface WriteField_p
15 
16  interface WriteFieldI_p
17    module procedure WriteFieldI_3d_p,WriteFieldI_2d_p,WriteFieldI_1d_p
18  end interface WriteFieldI_p 
19 
20 
21CONTAINS
22
23  SUBROUTINE init_WriteField_p
24  USE mod_orchidee_para
25  USE Write_Field, only : Init_WriteField
26  IMPLICIT NONE
27    IF (is_root_prc) CALL Init_WriteField(iim_g,jjm_g,nbp_glo,index_g)
28   
29  END SUBROUTINE init_WriteField_p
30
31  SUBROUTINE WriteField_4d_p(name,Field)
32    USE mod_orchidee_para
33    USE Write_field, only : WriteField
34    IMPLICIT NONE
35      CHARACTER(len=*) :: name
36      REAL(r_std), DIMENSION(:,:,:,:) :: Field 
37      INTEGER, DIMENSION(4) :: Dim
38     
39      REAL(r_std), ALLOCATABLE, DIMENSION(:,:,:,:) :: Field_g
40     
41      Dim=shape(Field)
42     
43      ALLOCATE(Field_g(iim_g,jjm_g,Dim(3),Dim(4)))
44      CALL Gather2D_mpi(Field,Field_g)
45      IF (is_root_prc) CALL WriteField(name,Field_g) 
46     
47      DEALLOCATE(Field_g)
48  END SUBROUTINE WriteField_4d_p
49   
50  SUBROUTINE WriteField_3d_p(name,Field)
51    USE mod_orchidee_para
52    USE Write_field, only : WriteField
53    IMPLICIT NONE
54      CHARACTER(len=*) :: name
55      REAL(r_std), DIMENSION(:,:,:) :: Field 
56      INTEGER, DIMENSION(3) :: Dim
57     
58      REAL(r_std), ALLOCATABLE, DIMENSION(:,:,:) :: Field_g
59     
60     
61      Dim=shape(Field)
62     
63      ALLOCATE(Field_g(iim_g,jjm_g,Dim(3)))
64      CALL Gather2D_mpi(Field,Field_g)
65      IF (is_root_prc) CALL WriteField(name,Field_g) 
66     
67      DEALLOCATE(Field_g)
68  END SUBROUTINE WriteField_3d_p
69
70  SUBROUTINE WriteField_2d_p(name,Field)
71    USE mod_orchidee_para
72    USE Write_field, only : WriteField
73    IMPLICIT NONE
74      CHARACTER(len=*) :: name
75      REAL(r_std), DIMENSION(:,:) :: Field 
76      INTEGER, DIMENSION(2) :: Dim
77     
78      REAL(r_std), ALLOCATABLE, DIMENSION(:,:) :: Field_g
79     
80     
81      Dim=shape(Field)
82     
83      ALLOCATE(Field_g(iim_g,jjm_g))
84      CALL Gather2D_mpi(Field,Field_g)
85      IF (is_root_prc) CALL WriteField_gen(name,Field_g) 
86     
87      DEALLOCATE(Field_g)
88  END SUBROUTINE WriteField_2d_p
89
90  SUBROUTINE WriteFieldI_3d_p(name,Field)
91    USE mod_orchidee_para
92    USE Write_field, only : WriteFieldI
93    IMPLICIT NONE
94      CHARACTER(len=*) :: name
95      REAL(r_std), DIMENSION(:,:,:) :: Field 
96      INTEGER, DIMENSION(3) :: Dim
97     
98      REAL(r_std), ALLOCATABLE, DIMENSION(:,:,:) :: Field_g
99     
100     
101      Dim=shape(Field)
102     
103      ALLOCATE(Field_g(nbp_glo,Dim(2),Dim(3)))
104      CALL gather(Field,Field_g)
105     
106      IF (is_root_prc) CALL WriteFieldI(name,Field_g) 
107     
108      DEALLOCATE(Field_g)
109  END SUBROUTINE WriteFieldI_3d_p
110
111  SUBROUTINE WriteFieldI_2d_p(name,Field)
112    USE mod_orchidee_para
113    USE Write_field, only : WriteFieldI
114    IMPLICIT NONE
115      CHARACTER(len=*) :: name
116      REAL(r_std), DIMENSION(:,:) :: Field 
117      INTEGER, DIMENSION(2) :: Dim
118     
119      REAL(r_std), ALLOCATABLE, DIMENSION(:,:) :: Field_g
120     
121     
122      Dim=shape(Field)
123     
124      ALLOCATE(Field_g(nbp_glo,Dim(2)))
125      CALL gather(Field,Field_g)
126     
127      IF (is_root_prc) CALL WriteFieldI(name,Field_g) 
128     
129      DEALLOCATE(Field_g)
130  END SUBROUTINE WriteFieldI_2d_p   
131
132  SUBROUTINE WriteFieldI_1d_p(name,Field)
133    USE mod_orchidee_para
134    USE Write_field, only : WriteFieldI
135    IMPLICIT NONE
136      CHARACTER(len=*) :: name
137      REAL(r_std), DIMENSION(:) :: Field 
138      INTEGER, DIMENSION(1) :: Dim
139     
140      REAL(r_std), ALLOCATABLE, DIMENSION(:) :: Field_g
141     
142     
143      Dim=shape(Field)
144     
145      ALLOCATE(Field_g(nbp_glo))
146      CALL gather(Field,Field_g)
147     
148      IF (is_root_prc) CALL WriteFieldI(name,Field_g) 
149     
150      DEALLOCATE(Field_g)
151  END SUBROUTINE WriteFieldI_1d_p   
152   
153END MODULE Orch_Write_field_p
Note: See TracBrowser for help on using the repository browser.