source: XIOS/trunk/src/interface/fortran/idata.F90 @ 325

Last change on this file since 325 was 325, checked in by ymipsl, 12 years ago

port to gfortran/g++

YM

File size: 7.6 KB
Line 
1#include "xios_fortran_prefix.hpp"
2
3MODULE IDATA
4   USE, INTRINSIC :: ISO_C_BINDING
5   USE ICONTEXT
6   
7   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
8
9      SUBROUTINE  cxios_init_server() BIND(C)
10      END SUBROUTINE cxios_init_server
11
12     SUBROUTINE cxios_init_client(client_id, len_client_id, f_local_comm, f_return_comm) BIND(C)
13         USE ISO_C_BINDING
14         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: client_id
15         INTEGER  (kind = C_INT)     , VALUE        :: len_client_id
16         INTEGER  (kind = C_INT)                    :: f_local_comm
17         INTEGER  (kind = C_INT)                    :: f_return_comm
18      END SUBROUTINE cxios_init_client
19     
20      SUBROUTINE  cxios_context_initialize(context_id,len_context_id,f_comm) BIND(C)
21         USE ISO_C_BINDING
22         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: context_id
23         INTEGER  (kind = C_INT)     , VALUE        :: len_context_id
24         INTEGER  (kind = C_INT)                    :: f_comm
25      END SUBROUTINE cxios_context_initialize
26
27       SUBROUTINE  cxios_context_close_definition() BIND(C)
28         USE ISO_C_BINDING
29      END SUBROUTINE cxios_context_close_definition
30     
31
32       SUBROUTINE  cxios_context_finalize() BIND(C)
33         USE ISO_C_BINDING
34      END SUBROUTINE cxios_context_finalize
35     
36 
37      SUBROUTINE  cxios_finalize() BIND(C)
38      END SUBROUTINE cxios_finalize
39
40 
41      SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
42         USE ISO_C_BINDING
43         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
44         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
45         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
46         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
47      END SUBROUTINE cxios_write_data_k81
48     
49      SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
50         USE ISO_C_BINDING
51         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
52         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
53         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
54         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
55      END SUBROUTINE cxios_write_data_k82
56     
57      SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
58         USE ISO_C_BINDING
59         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
60         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
61         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
62         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
63      END SUBROUTINE cxios_write_data_k83
64     
65      SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
66         USE ISO_C_BINDING
67         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
68         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
69         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
70         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
71      END SUBROUTINE cxios_write_data_k41
72     
73      SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
74         USE ISO_C_BINDING
75         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
76         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
77         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
78         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
79      END SUBROUTINE cxios_write_data_k42
80     
81      SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
82         USE ISO_C_BINDING
83         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
84         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
85         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
86         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
87      END SUBROUTINE cxios_write_data_k43
88     
89   END INTERFACE
90   
91   
92   CONTAINS ! Fonctions disponibles pour les utilisateurs.
93
94   SUBROUTINE  xios(init_server)()
95   IMPLICIT NONE
96     CALL cxios_init_server()
97   END SUBROUTINE xios(init_server)
98   
99   SUBROUTINE  xios(initialize)(client_id, local_comm, return_comm)
100   IMPLICIT NONE
101   INCLUDE 'mpif.h'
102   CHARACTER(LEN=*),INTENT(IN) :: client_id
103   INTEGER,INTENT(IN),OPTIONAL         :: local_comm 
104   INTEGER,INTENT(OUT),OPTIONAL        :: return_comm
105   INTEGER :: f_local_comm
106   INTEGER :: f_return_comm
107   
108      IF (PRESENT(local_comm)) THEN
109        f_local_comm=local_comm 
110      ELSE
111        f_local_comm = MPI_COMM_NULL 
112      ENDIF
113     
114      CALL cxios_init_client(client_id,LEN(client_id),f_local_comm,f_return_comm)
115 
116      IF (PRESENT(return_comm)) return_comm=f_return_comm
117
118   END SUBROUTINE  xios(initialize)
119
120
121   SUBROUTINE  xios(context_initialize)(context_id,comm)
122   IMPLICIT NONE
123   CHARACTER(LEN=*),INTENT(IN)  :: context_id
124   INTEGER, INTENT(IN)          :: comm
125     
126      CALL cxios_context_initialize(context_id,LEN(context_id),comm)
127 
128    END SUBROUTINE  xios(context_initialize)
129   
130   
131   SUBROUTINE  xios(finalize)
132   IMPLICIT NONE
133
134      CALL cxios_finalize
135
136    END SUBROUTINE  xios(finalize)
137
138   
139   SUBROUTINE xios(close_context_definition)()
140   IMPLICIT NONE
141      CALL cxios_context_close_definition()
142   END SUBROUTINE xios(close_context_definition)
143
144   
145   SUBROUTINE xios(context_finalize)()
146   IMPLICIT NONE
147      CALL cxios_context_finalize()
148   END SUBROUTINE xios(context_finalize)
149   
150
151   
152   SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8)
153   IMPLICIT NONE
154      CHARACTER(len = *)               , INTENT(IN) :: fieldid
155      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:)
156      CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1))
157   END SUBROUTINE xios(send_field_r8_1d)
158   
159   SUBROUTINE  xios(send_field_r8_2d)(fieldid, data2d_k8)
160   IMPLICIT NONE
161      CHARACTER(len = *)               , INTENT(IN) :: fieldid
162      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:)
163      CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
164   END SUBROUTINE  xios(send_field_r8_2d)
165   
166   SUBROUTINE  xios(send_field_r8_3d)(fieldid, data3d_k8)
167   IMPLICIT NONE
168      CHARACTER(len = *)               , INTENT(IN) :: fieldid
169      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:)
170      CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
171   END SUBROUTINE  xios(send_field_r8_3d)
172   
173   SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4)
174   IMPLICIT NONE
175      CHARACTER(len = *)               , INTENT(IN) :: fieldid
176      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:)
177      CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1))
178   END SUBROUTINE xios(send_field_r4_1d)
179   
180   SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4)
181   IMPLICIT NONE
182      CHARACTER(len = *)               , INTENT(IN) :: fieldid
183      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:)
184      CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
185   END SUBROUTINE xios(send_field_r4_2d)
186   
187   SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4)
188   IMPLICIT NONE
189      CHARACTER(len = *)               , INTENT(IN) :: fieldid
190      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:)
191      CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
192   END SUBROUTINE xios(send_field_r4_3d)
193   
194   
195END MODULE IDATA
Note: See TracBrowser for help on using the repository browser.