source: perso/abdelouhab.djerrah/ORCHIDEE/src_parallel/ioipsl_para.f90 @ 938

Last change on this file since 938 was 643, checked in by martial.mancip, 12 years ago

Use the script trunk/TOOLS/script_cvssvn_headers in src_parallel and src_stomate to replace old CVS entries for SVN ones.
This has to be done on trunk before merge the DOC.

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