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

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

Externalized version merged with the trunk

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