source: XIOS/dev/dev_rv/src/xmlio/fortran/idata.f90 @ 1512

Last change on this file since 1512 was 276, checked in by hozdoba, 13 years ago

Corrections de bugs

File size: 6.7 KB
Line 
1MODULE IDATA
2   USE, INTRINSIC :: ISO_C_BINDING
3   USE ICONTEXT
4   
5   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
6
7      SUBROUTINE  xios_init_ioserver(comm_client) BIND(C)
8         USE ISO_C_BINDING
9         INTEGER  (kind = C_INT) :: comm_client
10      END SUBROUTINE xios_init_ioserver
11
12      SUBROUTINE xios_dtreatment_start(context_hdl, filetype, comm_client_server, comm_server) BIND(C)
13         USE ISO_C_BINDING
14         INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl
15         INTEGER (kind = C_INT)     , VALUE :: filetype, comm_client_server, comm_server
16      END SUBROUTINE xios_dtreatment_start
17
18      SUBROUTINE xios_dtreatment_end() BIND(C)
19         ! Sans argument
20      END SUBROUTINE xios_dtreatment_end
21
22      SUBROUTINE xios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
23         USE ISO_C_BINDING
24         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
25         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
26         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
27         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
28      END SUBROUTINE xios_write_data_k81
29     
30      SUBROUTINE xios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
31         USE ISO_C_BINDING
32         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
33         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
34         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
35         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
36      END SUBROUTINE xios_write_data_k82
37     
38      SUBROUTINE xios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
39         USE ISO_C_BINDING
40         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
41         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
42         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
43         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
44      END SUBROUTINE xios_write_data_k83
45     
46      SUBROUTINE xios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
47         USE ISO_C_BINDING
48         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
49         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
50         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
51         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
52      END SUBROUTINE xios_write_data_k41
53     
54      SUBROUTINE xios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
55         USE ISO_C_BINDING
56         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
57         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
58         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
59         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
60      END SUBROUTINE xios_write_data_k42
61     
62      SUBROUTINE xios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
63         USE ISO_C_BINDING
64         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
65         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
66         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
67         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
68      END SUBROUTINE xios_write_data_k43
69     
70   END INTERFACE
71   
72   INTERFACE write_data
73      MODULE PROCEDURE write_data_k81,write_data_k82,write_data_k83,write_data_k41,write_data_k42,write_data_k43
74   END INTERFACE
75   
76   CONTAINS ! Fonctions disponibles pour les utilisateurs.
77
78   SUBROUTINE  init_ioserver(comm_client)
79      INTEGER, INTENT(INOUT) :: comm_client
80      CALL xios_init_ioserver(comm_client)
81   END SUBROUTINE init_ioserver
82   
83   SUBROUTINE dtreatment_start(context_hdl, filetype, comm_client_server, comm_server)
84      TYPE(XContextHandle), INTENT(IN)           :: context_hdl
85      INTEGER             , INTENT(IN), OPTIONAL :: filetype , comm_client_server , comm_server
86      INTEGER                                    :: filetype_, comm_client_server_, comm_server_
87      IF (PRESENT(filetype)) THEN
88         filetype_ = filetype
89      ELSE
90         filetype_ = NETCDF4
91      END IF
92      IF (PRESENT(comm_client_server)) THEN
93         comm_client_server_ = comm_client_server
94      ELSE
95         comm_client_server_ = -1
96      END IF
97      IF (PRESENT(comm_server)) THEN
98         comm_server_ = comm_server
99      ELSE
100         comm_server_ = -1
101      END IF
102      CALL context_set_current(context_hdl)
103      CALL xios_dtreatment_start(context_hdl%daddr, filetype_, comm_client_server_, comm_server_)
104   END SUBROUTINE dtreatment_start
105   
106   SUBROUTINE dtreatment_end(context_hdl)
107      TYPE(XContextHandle), INTENT(IN), OPTIONAL :: context_hdl
108      CALL context_set_current(context_hdl)
109      CALL xios_dtreatment_end()
110   END SUBROUTINE dtreatment_end
111   
112   SUBROUTINE write_data_k81(fieldid, data1d_k8)
113      CHARACTER(len = *)               , INTENT(IN) :: fieldid
114      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:)
115      CALL xios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1))
116   END SUBROUTINE write_data_k81
117   
118   SUBROUTINE write_data_k82(fieldid, data2d_k8)
119      CHARACTER(len = *)               , INTENT(IN) :: fieldid
120      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:)
121      CALL xios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
122   END SUBROUTINE write_data_k82
123   
124   SUBROUTINE write_data_k83(fieldid, data3d_k8)
125      CHARACTER(len = *)               , INTENT(IN) :: fieldid
126      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:)
127      CALL xios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
128   END SUBROUTINE write_data_k83
129   
130   SUBROUTINE write_data_k41(fieldid, data1d_k4)
131      CHARACTER(len = *)               , INTENT(IN) :: fieldid
132      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:)
133      CALL xios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1))
134   END SUBROUTINE write_data_k41
135   
136   SUBROUTINE write_data_k42(fieldid, data2d_k4)
137      CHARACTER(len = *)               , INTENT(IN) :: fieldid
138      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:)
139      CALL xios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
140   END SUBROUTINE write_data_k42
141   
142   SUBROUTINE write_data_k43(fieldid, data3d_k4)
143      CHARACTER(len = *)               , INTENT(IN) :: fieldid
144      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:)
145      CALL xios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
146   END SUBROUTINE write_data_k43
147   
148END MODULE IDATA
Note: See TracBrowser for help on using the repository browser.