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

Last change on this file since 445 was 445, checked in by ymipsl, 11 years ago

Add possibility to make inheritance of attributes and reference before closing the context definition.
New fortran fonction : xios_solve inheritance()
After this call, the value of attribute have the inherited value of their parent.

YM

File size: 7.8 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      SUBROUTINE  cxios_solve_inheritance() BIND(C)
41      END SUBROUTINE cxios_solve_inheritance
42
43 
44      SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
45         USE ISO_C_BINDING
46         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
47         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
48         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
49         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
50      END SUBROUTINE cxios_write_data_k81
51     
52      SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
53         USE ISO_C_BINDING
54         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
55         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
56         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
57         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
58      END SUBROUTINE cxios_write_data_k82
59     
60      SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
61         USE ISO_C_BINDING
62         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
63         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
64         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
65         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
66      END SUBROUTINE cxios_write_data_k83
67     
68      SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
69         USE ISO_C_BINDING
70         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
71         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
72         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
73         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
74      END SUBROUTINE cxios_write_data_k41
75     
76      SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
77         USE ISO_C_BINDING
78         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
79         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
80         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
81         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
82      END SUBROUTINE cxios_write_data_k42
83     
84      SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
85         USE ISO_C_BINDING
86         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
87         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
88         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
89         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
90      END SUBROUTINE cxios_write_data_k43
91     
92   END INTERFACE
93   
94   
95   CONTAINS ! Fonctions disponibles pour les utilisateurs.
96
97   SUBROUTINE  xios(init_server)()
98   IMPLICIT NONE
99     CALL cxios_init_server()
100   END SUBROUTINE xios(init_server)
101   
102   SUBROUTINE  xios(initialize)(client_id, local_comm, return_comm)
103   IMPLICIT NONE
104   INCLUDE 'mpif.h'
105   CHARACTER(LEN=*),INTENT(IN) :: client_id
106   INTEGER,INTENT(IN),OPTIONAL         :: local_comm 
107   INTEGER,INTENT(OUT),OPTIONAL        :: return_comm
108   INTEGER :: f_local_comm
109   INTEGER :: f_return_comm
110   
111      IF (PRESENT(local_comm)) THEN
112        f_local_comm=local_comm 
113      ELSE
114        f_local_comm = MPI_COMM_NULL 
115      ENDIF
116     
117      CALL cxios_init_client(client_id,LEN(client_id),f_local_comm,f_return_comm)
118 
119      IF (PRESENT(return_comm)) return_comm=f_return_comm
120
121   END SUBROUTINE  xios(initialize)
122
123
124   SUBROUTINE  xios(context_initialize)(context_id,comm)
125   IMPLICIT NONE
126   CHARACTER(LEN=*),INTENT(IN)  :: context_id
127   INTEGER, INTENT(IN)          :: comm
128     
129      CALL cxios_context_initialize(context_id,LEN(context_id),comm)
130 
131    END SUBROUTINE  xios(context_initialize)
132   
133   
134   SUBROUTINE  xios(finalize)
135   IMPLICIT NONE
136
137      CALL cxios_finalize
138
139    END SUBROUTINE  xios(finalize)
140
141   
142   SUBROUTINE xios(close_context_definition)()
143   IMPLICIT NONE
144      CALL cxios_context_close_definition()
145   END SUBROUTINE xios(close_context_definition)
146
147   
148   SUBROUTINE xios(context_finalize)()
149   IMPLICIT NONE
150      CALL cxios_context_finalize()
151   END SUBROUTINE xios(context_finalize)
152   
153   SUBROUTINE xios(solve_inheritance)()
154   IMPLICIT NONE
155      CALL cxios_solve_inheritance()
156   END SUBROUTINE xios(solve_inheritance)
157 
158   
159   SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8)
160   IMPLICIT NONE
161      CHARACTER(len = *)               , INTENT(IN) :: fieldid
162      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:)
163      CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1))
164   END SUBROUTINE xios(send_field_r8_1d)
165   
166   SUBROUTINE  xios(send_field_r8_2d)(fieldid, data2d_k8)
167   IMPLICIT NONE
168      CHARACTER(len = *)               , INTENT(IN) :: fieldid
169      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:)
170      CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
171   END SUBROUTINE  xios(send_field_r8_2d)
172   
173   SUBROUTINE  xios(send_field_r8_3d)(fieldid, data3d_k8)
174   IMPLICIT NONE
175      CHARACTER(len = *)               , INTENT(IN) :: fieldid
176      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:)
177      CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
178   END SUBROUTINE  xios(send_field_r8_3d)
179   
180   SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4)
181   IMPLICIT NONE
182      CHARACTER(len = *)               , INTENT(IN) :: fieldid
183      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:)
184      CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1))
185   END SUBROUTINE xios(send_field_r4_1d)
186   
187   SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4)
188   IMPLICIT NONE
189      CHARACTER(len = *)               , INTENT(IN) :: fieldid
190      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:)
191      CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
192   END SUBROUTINE xios(send_field_r4_2d)
193   
194   SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4)
195   IMPLICIT NONE
196      CHARACTER(len = *)               , INTENT(IN) :: fieldid
197      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:)
198      CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
199   END SUBROUTINE xios(send_field_r4_3d)
200   
201   
202END MODULE IDATA
Note: See TracBrowser for help on using the repository browser.