source: branches/ORCHIDEE_EXT/ORCHIDEE/src_parallel/ioipsl_para.f90 @ 64

Last change on this file since 64 was 64, checked in by didier.solyga, 13 years ago

Import first version of ORCHIDEE_EXT

File size: 9.8 KB
Line 
1! Overlap of IOIPSL functions for specific parallel use in ORCHIDEE.
2
3!-
4!- $Header: /home/ssipsl/CVSREP/ORCHIDEE/src_parallel/ioipsl_para.f90,v 1.4 2008/01/08 11:52:35 ssipsl Exp $
5!-
6
7MODULE ioipsl_para
8  USE ioipsl
9  USE data_para
10  USE transfert_para
11  USE constantes
12!-
13  IMPLICIT NONE
14!-
15#include "src_parallel.h"
16!-
17  INTERFACE getin_p
18    MODULE PROCEDURE getin_p_c,                      &
19         getin_p_i,getin_p_i1,getin_p_i2,&
20         getin_p_r,getin_p_r1,getin_p_r2,&
21         getin_p_l,getin_p_l1,getin_p_l2
22  END INTERFACE
23!-
24  INTERFACE restput_p
25     MODULE PROCEDURE &
26          restput_p_r3d, restput_p_r2d, restput_p_r1d, &
27          restput_p_opp_r2d, restput_p_opp_r1d
28  END INTERFACE
29!-
30  INTERFACE restget_p
31     MODULE PROCEDURE &
32          restget_p_r3d, restget_p_r2d, restget_p_r1d, &
33          restget_p_opp_r2d, restget_p_opp_r1d
34  END INTERFACE
35
36CONTAINS
37
38
39!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
40!!   Definition des getin -> bcast      !!
41!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
42
43!! -- Les chaines de caracteres -- !!
44 
45  SUBROUTINE getin_p_c(VarIn,VarOut)
46    IMPLICIT NONE   
47    CHARACTER(LEN=*),INTENT(IN) :: VarIn
48    CHARACTER(LEN=*),INTENT(INOUT) :: VarOut   
49
50    IF (is_root_prc) CALL getin(VarIn,VarOut)
51    CALL bcast(VarOut)
52  END SUBROUTINE getin_p_c 
53
54!! -- Les entiers -- !!
55 
56  SUBROUTINE getin_p_i(VarIn,VarOut)
57    IMPLICIT NONE   
58    CHARACTER(LEN=*),INTENT(IN) :: VarIn
59    INTEGER,INTENT(INOUT) :: VarOut   
60
61    IF (is_root_prc) CALL getin(VarIn,VarOut)
62    CALL bcast(VarOut)
63  END SUBROUTINE getin_p_i
64
65  SUBROUTINE getin_p_i1(VarIn,VarOut)
66    IMPLICIT NONE   
67    CHARACTER(LEN=*),INTENT(IN) :: VarIn
68    INTEGER,INTENT(INOUT) :: VarOut(:)
69
70    IF (is_root_prc) CALL getin(VarIn,VarOut)
71    CALL bcast(VarOut)
72  END SUBROUTINE getin_p_i1
73
74  SUBROUTINE getin_p_i2(VarIn,VarOut)
75    IMPLICIT NONE   
76    CHARACTER(LEN=*),INTENT(IN) :: VarIn
77    INTEGER,INTENT(INOUT) :: VarOut(:,:)
78
79    IF (is_root_prc) CALL getin(VarIn,VarOut)
80    CALL bcast(VarOut)
81  END SUBROUTINE getin_p_i2
82
83!! -- Les flottants -- !!
84 
85  SUBROUTINE getin_p_r(VarIn,VarOut)
86    IMPLICIT NONE   
87    CHARACTER(LEN=*),INTENT(IN) :: VarIn
88    REAL,INTENT(INOUT) :: VarOut
89
90    IF (is_root_prc) CALL getin(VarIn,VarOut)
91    CALL bcast(VarOut)
92  END SUBROUTINE getin_p_r
93
94  SUBROUTINE getin_p_r1(VarIn,VarOut)
95    IMPLICIT NONE   
96    CHARACTER(LEN=*),INTENT(IN) :: VarIn
97    REAL,INTENT(INOUT) :: VarOut(:)
98
99    IF (is_root_prc) CALL getin(VarIn,VarOut)
100    CALL bcast(VarOut)
101  END SUBROUTINE getin_p_r1
102
103  SUBROUTINE getin_p_r2(VarIn,VarOut)
104    IMPLICIT NONE   
105    CHARACTER(LEN=*),INTENT(IN) :: VarIn
106    REAL,INTENT(INOUT) :: VarOut(:,:)
107
108    IF (is_root_prc) CALL getin(VarIn,VarOut)
109    CALL bcast(VarOut)
110  END SUBROUTINE getin_p_r2
111
112!! -- Les Booleens -- !!
113 
114  SUBROUTINE getin_p_l(VarIn,VarOut)
115    IMPLICIT NONE   
116    CHARACTER(LEN=*),INTENT(IN) :: VarIn
117    LOGICAL,INTENT(INOUT) :: VarOut
118
119    IF (is_root_prc) CALL getin(VarIn,VarOut)
120    CALL bcast(VarOut)
121  END SUBROUTINE getin_p_l
122
123  SUBROUTINE getin_p_l1(VarIn,VarOut)
124    IMPLICIT NONE   
125    CHARACTER(LEN=*),INTENT(IN) :: VarIn
126    LOGICAL,INTENT(INOUT) :: VarOut(:)
127
128    IF (is_root_prc) CALL getin(VarIn,VarOut)
129    CALL bcast(VarOut)
130  END SUBROUTINE getin_p_l1
131
132  SUBROUTINE getin_p_l2(VarIn,VarOut)
133    IMPLICIT NONE   
134    CHARACTER(LEN=*),INTENT(IN) :: VarIn
135    LOGICAL,INTENT(INOUT) :: VarOut(:,:)
136
137    IF (is_root_prc) CALL getin(VarIn,VarOut)
138    CALL bcast(VarOut)
139  END SUBROUTINE getin_p_l2
140!-
141!-----------------------------
142!-----------------------------
143!-----------------------------
144!-
145  SUBROUTINE restget_p_opp_r1d &
146  (fid, vname_q, iim, jjm, llm, itau, def_beha, &
147   var, MY_OPERATOR, nbindex, ijndex)
148! DO NOT USE THIS FUNCTION WITH NON GRID VARIABLE !
149    IMPLICIT NONE
150!-
151    INTEGER :: fid
152    CHARACTER(LEN=*) :: vname_q
153    INTEGER :: iim, jjm, llm, itau
154    LOGICAL def_beha
155    REAL :: var(:)
156    CHARACTER(LEN=*) :: MY_OPERATOR
157    INTEGER :: nbindex, ijndex(nbindex)
158    !-----------------------------
159    REAL, ALLOCATABLE, DIMENSION(:) :: temp_g
160
161    IF (is_root_prc) THEN
162       ALLOCATE( temp_g(iim*jjm*llm) )
163       CALL restget &
164            (fid, vname_q, iim, jjm, llm, itau, def_beha, &
165            temp_g, MY_OPERATOR, nbindex, ijndex)
166    ENDIF
167    CALL scatter(temp_g,var)
168    IF (is_root_prc) DEALLOCATE(temp_g)
169  END SUBROUTINE restget_p_opp_r1d
170!-
171!===
172!-
173  SUBROUTINE restget_p_opp_r2d &
174  (fid, vname_q, iim, jjm, llm, itau, def_beha, &
175   var, MY_OPERATOR, nbindex, ijndex)
176    IMPLICIT NONE
177    !-
178    INTEGER :: fid
179    CHARACTER(LEN=*) :: vname_q
180    INTEGER :: iim, jjm, llm, itau
181    LOGICAL def_beha
182    REAL :: var(:,:)
183    CHARACTER(LEN=*) :: MY_OPERATOR
184    INTEGER :: nbindex, ijndex(nbindex)
185    !-----------------------------
186    REAL, ALLOCATABLE, DIMENSION(:,:) :: temp_g
187
188    IF (is_root_prc) THEN
189       ALLOCATE( temp_g(iim,jjm) )
190       CALL restget &
191            (fid, vname_q, iim, jjm, llm, itau, def_beha, &
192            temp_g, MY_OPERATOR, nbindex, ijndex)
193    ENDIF
194    CALL scatter(temp_g,var)
195    IF (is_root_prc) DEALLOCATE(temp_g)
196  END SUBROUTINE restget_p_opp_r2d
197!-
198!===
199!-
200  SUBROUTINE restget_p_r1d &
201  (fid,vname_q,iim,jjm,llm,itau,def_beha,var)
202! DO NOT USE THIS FUNCTION WITH NON GRID VARIABLE !
203    IMPLICIT NONE
204!-
205    INTEGER :: fid
206    CHARACTER(LEN=*) :: vname_q
207    INTEGER :: iim, jjm, llm, itau
208    LOGICAL :: def_beha
209    REAL :: var(:)
210    !-------------------------
211    REAL, ALLOCATABLE, DIMENSION(:) :: temp_g
212
213    IF (is_root_prc) THEN
214       ALLOCATE( temp_g(iim*jjm*llm) )
215       CALL restget &
216            (fid,vname_q,iim,jjm,llm,itau,def_beha,temp_g)
217    ENDIF
218    CALL scatter(temp_g,var)
219    IF (is_root_prc) DEALLOCATE(temp_g)
220  END SUBROUTINE restget_p_r1d
221!-
222!===
223!-
224  SUBROUTINE restget_p_r2d &
225  (fid,vname_q,iim,jjm,llm,itau,def_beha,var)
226    IMPLICIT NONE
227!-
228    INTEGER :: fid
229    CHARACTER(LEN=*) :: vname_q
230    INTEGER :: iim, jjm, llm, itau
231    LOGICAL :: def_beha
232    REAL :: var(:,:)
233    !-------------------------
234    REAL, ALLOCATABLE, DIMENSION(:,:) :: temp_g
235
236    IF (is_root_prc) THEN
237       ALLOCATE( temp_g(iim,jjm) )
238       CALL restget &
239            (fid,vname_q,iim,jjm,llm,itau,def_beha,temp_g)
240    ENDIF
241    CALL scatter(temp_g,var)
242    IF (is_root_prc) DEALLOCATE(temp_g)
243  END SUBROUTINE restget_p_r2d
244!-
245!===
246!-
247  SUBROUTINE restget_p_r3d &
248  (fid,vname_q,iim,jjm,llm,itau,def_beha,var)
249    IMPLICIT NONE
250!-
251    INTEGER :: fid
252    CHARACTER(LEN=*) :: vname_q
253    INTEGER :: iim, jjm, llm, itau
254    LOGICAL def_beha
255    REAL :: var(:,:,:)
256    !-------------------------
257    REAL, ALLOCATABLE, DIMENSION(:,:,:) :: temp_g
258
259    IF (is_root_prc) THEN
260       ALLOCATE( temp_g(iim,jjm,llm) )
261       CALL restget &
262            (fid,vname_q,iim,jjm,llm,itau,def_beha,temp_g)
263    ENDIF
264    CALL scatter(temp_g,var)
265    IF (is_root_prc) DEALLOCATE(temp_g)
266  END SUBROUTINE restget_p_r3d
267!-
268!-----------------------------
269!-----------------------------
270!-
271  SUBROUTINE restput_p_opp_r1d &
272  (fid, vname_q, iim, jjm, llm, itau, var, MY_OPERATOR, nbindex, ijndex)
273    IMPLICIT NONE
274!-
275    INTEGER :: fid
276    CHARACTER(LEN=*) :: vname_q
277    INTEGER :: iim, jjm, llm, itau
278    REAL :: var(:)
279    CHARACTER(LEN=*) :: MY_OPERATOR
280    INTEGER :: nbindex, ijndex(nbindex)
281    !-----------------------------
282    REAL, ALLOCATABLE, DIMENSION(:) :: temp_g
283
284    IF (is_root_prc) ALLOCATE( temp_g(iim*jjm*llm) )
285    CALL gather(var,temp_g)
286    IF (is_root_prc) THEN
287       CALL restput &
288            (fid, vname_q, iim, jjm, llm, itau, temp_g, MY_OPERATOR, nbindex, ijndex)
289
290       DEALLOCATE( temp_g )
291    ENDIF
292         
293  END SUBROUTINE restput_p_opp_r1d
294!-
295!===
296!-
297  SUBROUTINE restput_p_opp_r2d &
298  (fid, vname_q, iim, jjm, llm, itau, var, MY_OPERATOR, nbindex, ijndex)
299    IMPLICIT NONE
300!-
301    INTEGER :: fid
302    CHARACTER(LEN=*) :: vname_q
303    INTEGER :: iim, jjm, llm, itau
304    REAL :: var(:,:)
305    CHARACTER(LEN=*) :: MY_OPERATOR
306    INTEGER :: nbindex, ijndex(nbindex)
307    !-----------------------------
308    REAL, ALLOCATABLE, DIMENSION(:,:) :: temp_g
309
310    IF (is_root_prc) ALLOCATE( temp_g(iim,jjm) )
311    CALL gather(var,temp_g)
312    IF (is_root_prc) THEN
313       CALL restput &
314            (fid, vname_q, iim, jjm, llm, itau, temp_g, MY_OPERATOR, nbindex, ijndex)
315       DEALLOCATE( temp_g )
316    ENDIF
317         
318  END SUBROUTINE restput_p_opp_r2d
319!-
320!===
321!-
322  SUBROUTINE restput_p_r1d (fid,vname_q,iim,jjm,llm,itau,var)
323    IMPLICIT NONE
324!-
325    INTEGER :: fid
326    CHARACTER(LEN=*) :: vname_q
327    INTEGER :: iim, jjm, llm, itau
328    REAL :: var(:)
329    !-----------------------------
330    REAL, ALLOCATABLE, DIMENSION(:) :: temp_g
331
332    IF (is_root_prc) ALLOCATE( temp_g(iim*jjm*llm) )
333    CALL gather(var,temp_g)
334    IF (is_root_prc) THEN
335       CALL restput (fid,vname_q,iim,jjm,llm,itau,temp_g)
336       DEALLOCATE( temp_g )
337    ENDIF
338         
339  END SUBROUTINE restput_p_r1d
340!-
341!===
342!-
343  SUBROUTINE restput_p_r2d (fid,vname_q,iim,jjm,llm,itau,var)
344    IMPLICIT NONE
345!-
346    INTEGER :: fid
347    CHARACTER(LEN=*) :: vname_q
348    INTEGER :: iim, jjm, llm, itau
349    REAL :: var(:,:)
350    !-------------------------
351    REAL, ALLOCATABLE, DIMENSION(:,:) :: temp_g
352
353    IF (is_root_prc) ALLOCATE( temp_g(iim,jjm) )
354    CALL gather(var,temp_g)
355    IF (is_root_prc) THEN
356       CALL restput (fid,vname_q,iim,jjm,llm,itau,temp_g)
357       DEALLOCATE( temp_g )
358    ENDIF
359         
360  END SUBROUTINE restput_p_r2d
361!-
362!===
363!-
364  SUBROUTINE restput_p_r3d (fid,vname_q,iim,jjm,llm,itau,var)
365    IMPLICIT NONE
366!-
367    INTEGER :: fid
368    CHARACTER(LEN=*) :: vname_q
369    INTEGER :: iim, jjm, llm, itau
370    REAL :: var(:,:,:)
371    !-------------------------
372    REAL, ALLOCATABLE, DIMENSION(:,:,:) :: temp_g
373
374    IF (is_root_prc) ALLOCATE( temp_g(iim,jjm,llm) )
375    CALL gather(var,temp_g)
376    IF (is_root_prc) THEN
377       CALL restput (fid,vname_q,iim,jjm,llm,itau,temp_g)
378       DEALLOCATE( temp_g )
379    ENDIF
380         
381  END SUBROUTINE restput_p_r3d
382
383END MODULE ioipsl_para
Note: See TracBrowser for help on using the repository browser.