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

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

Suite nouvelle interface fortran

File size: 13.8 KB
Line 
1MODULE IXML_TREE
2   USE, INTRINSIC :: ISO_C_BINDING
3   USE IAXIS
4   USE IFILE
5   USE IFIELD
6   USE IGRID
7   USE IDOMAIN
8     
9   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
10     
11      SUBROUTINE xios_xml_tree_add_field(parent_, child_, child_id, child_id_size) BIND(C)
12         USE ISO_C_BINDING
13         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
14         INTEGER  (kind = C_INTPTR_T)               :: child_
15         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
16         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
17      END SUBROUTINE xios_xml_tree_add_field
18     
19      SUBROUTINE xios_xml_tree_add_grid(parent_, child_, child_id, child_id_size) BIND(C)
20         USE ISO_C_BINDING
21         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
22         INTEGER  (kind = C_INTPTR_T)               :: child_
23         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
24         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
25      END SUBROUTINE xios_xml_tree_add_grid
26     
27      SUBROUTINE xios_xml_tree_add_file(parent_, child_, child_id, child_id_size) BIND(C)
28         USE ISO_C_BINDING
29         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
30         INTEGER  (kind = C_INTPTR_T)               :: child_
31         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
32         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
33      END SUBROUTINE xios_xml_tree_add_file
34     
35      SUBROUTINE xios_xml_tree_add_axis(parent_, child_, child_id, child_id_size) BIND(C)
36         USE ISO_C_BINDING
37         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
38         INTEGER  (kind = C_INTPTR_T)               :: child_
39         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
40         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
41      END SUBROUTINE xios_xml_tree_add_axis
42     
43      SUBROUTINE xios_xml_tree_add_domain(parent_, child_, child_id, child_id_size) BIND(C)
44         USE ISO_C_BINDING
45         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
46         INTEGER  (kind = C_INTPTR_T)               :: child_
47         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
48         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
49      END SUBROUTINE xios_xml_tree_add_domain
50     
51      SUBROUTINE xios_xml_tree_add_fieldtofile(parent_, child_, child_id, child_id_size) BIND(C)
52         USE ISO_C_BINDING
53         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
54         INTEGER  (kind = C_INTPTR_T)               :: child_
55         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
56         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
57      END SUBROUTINE xios_xml_tree_add_fieldtofile
58
59      SUBROUTINE xios_xml_tree_add_fieldgroup(parent_, child_, child_id, child_id_size) BIND(C)
60         USE ISO_C_BINDING
61         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
62         INTEGER  (kind = C_INTPTR_T)               :: child_
63         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
64         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
65      END SUBROUTINE xios_xml_tree_add_fieldgroup
66
67      SUBROUTINE xios_xml_tree_add_gridgroup(parent_, child_, child_id, child_id_size) BIND(C)
68         USE ISO_C_BINDING
69         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
70         INTEGER  (kind = C_INTPTR_T)               :: child_
71         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
72         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
73      END SUBROUTINE xios_xml_tree_add_gridgroup
74
75      SUBROUTINE xios_xml_tree_add_filegroup(parent_, child_, child_id, child_id_size) BIND(C)
76         USE ISO_C_BINDING
77         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
78         INTEGER  (kind = C_INTPTR_T)               :: child_
79         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
80         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
81      END SUBROUTINE xios_xml_tree_add_filegroup
82
83      SUBROUTINE xios_xml_tree_add_axisgroup(parent_, child_, child_id, child_id_size) BIND(C)
84         USE ISO_C_BINDING
85         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
86         INTEGER  (kind = C_INTPTR_T)               :: child_
87         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
88         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
89      END SUBROUTINE xios_xml_tree_add_axisgroup
90
91      SUBROUTINE xios_xml_tree_add_domaingroup(parent_, child_, child_id, child_id_size) BIND(C)
92         USE ISO_C_BINDING
93         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
94         INTEGER  (kind = C_INTPTR_T)               :: child_
95         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
96         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
97      END SUBROUTINE xios_xml_tree_add_domaingroup
98     
99      SUBROUTINE xios_xml_tree_add_fieldgrouptofile(parent_, child_, child_id, child_id_size) BIND(C)
100         USE ISO_C_BINDING
101         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
102         INTEGER  (kind = C_INTPTR_T)               :: child_
103         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
104         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
105      END SUBROUTINE xios_xml_tree_add_fieldgrouptofile   
106
107      SUBROUTINE xios_xml_tree_show(filename, filename_size) BIND(C)
108         USE ISO_C_BINDING
109         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
110         INTEGER  (kind = C_INT) , VALUE        :: filename_size
111      END SUBROUTINE xios_xml_tree_show
112
113      SUBROUTINE xios_xml_parse_file(filename, filename_size) BIND(C)
114         USE ISO_C_BINDING
115         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
116         INTEGER  (kind = C_INT) , VALUE        :: filename_size
117      END SUBROUTINE xios_xml_parse_file
118
119      SUBROUTINE xios_xml_parse_string(xmlcontent, xmlcontent_size) BIND(C)
120         USE ISO_C_BINDING
121         CHARACTER(kind = C_CHAR), DIMENSION(*) :: xmlcontent
122         INTEGER  (kind = C_INT) , VALUE        :: xmlcontent_size
123      END SUBROUTINE xios_xml_parse_string
124     
125   END INTERFACE
126   
127   !----------------------------------------------------------------------------
128   INTERFACE xml_tree_add
129      MODULE PROCEDURE xml_tree_add_axis,   xml_tree_add_axisgroup,    &
130                       xml_tree_add_file,   xml_tree_add_filegroup,    &
131                       xml_tree_add_grid,   xml_tree_add_gridgroup,    &
132                       xml_tree_add_field,  xml_tree_add_fieldgroup,   &
133                       xml_tree_add_domain, xml_tree_add_domaingroup,  &
134                       xml_tree_add_fieldgrouptofile, xml_tree_add_fieldtofile
135   END INTERFACE 
136   !----------------------------------------------------------------------------
137   
138   CONTAINS ! Fonctions disponibles pour les utilisateurs.
139
140   SUBROUTINE xml_tree_add_axis(parent_hdl, child_hdl, child_id)
141      TYPE(XAxisGroupHandle)      , INTENT(IN) :: parent_hdl
142      TYPE(XAxisHandle)           , INTENT(OUT):: child_hdl
143      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
144      IF (PRESENT(child_id)) THEN
145         CALL xios_xml_tree_add_axis(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
146      ELSE
147         CALL xios_xml_tree_add_axis(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
148      END IF
149   END SUBROUTINE xml_tree_add_axis
150   
151   SUBROUTINE xml_tree_add_file(parent_hdl, child_hdl, child_id)
152      TYPE(XFileGroupHandle)      , INTENT(IN) :: parent_hdl
153      TYPE(XFileHandle)           , INTENT(OUT):: child_hdl
154      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
155      IF (PRESENT(child_id)) THEN
156         CALL xios_xml_tree_add_file(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
157      ELSE
158         CALL xios_xml_tree_add_file(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
159      END IF
160   END SUBROUTINE xml_tree_add_file
161   
162   SUBROUTINE xml_tree_add_grid(parent_hdl, child_hdl, child_id)
163      TYPE(XGridGroupHandle)      , INTENT(IN) :: parent_hdl
164      TYPE(XGridHandle)           , INTENT(OUT):: child_hdl
165      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
166      IF (PRESENT(child_id)) THEN
167         CALL xios_xml_tree_add_grid(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
168      ELSE
169         CALL xios_xml_tree_add_grid(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
170      END IF
171   END SUBROUTINE xml_tree_add_grid
172   
173   SUBROUTINE xml_tree_add_field(parent_hdl, child_hdl, child_id)
174      TYPE(XFieldGroupHandle)     , INTENT(IN) :: parent_hdl
175      TYPE(XFieldHandle)          , INTENT(OUT):: child_hdl
176      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
177      IF (PRESENT(child_id)) THEN
178         CALL xios_xml_tree_add_field(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
179      ELSE
180         CALL xios_xml_tree_add_field(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
181      END IF
182   END SUBROUTINE xml_tree_add_field
183   
184   SUBROUTINE xml_tree_add_domain(parent_hdl, child_hdl, child_id)
185      TYPE(XDomainGroupHandle)     , INTENT(IN) :: parent_hdl
186      TYPE(XDomainHandle)          , INTENT(OUT):: child_hdl
187      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
188      IF (PRESENT(child_id)) THEN
189         CALL xios_xml_tree_add_domain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
190      ELSE
191         CALL xios_xml_tree_add_domain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
192      END IF
193   END SUBROUTINE xml_tree_add_domain
194   
195   SUBROUTINE xml_tree_add_fieldtofile(parent_hdl, child_hdl, child_id)
196      TYPE(XFileHandle)            , INTENT(IN) :: parent_hdl
197      TYPE(XFieldHandle)           , INTENT(OUT):: child_hdl
198      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
199      IF (PRESENT(child_id)) THEN
200         CALL xios_xml_tree_add_fieldtofile(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
201      ELSE
202         CALL xios_xml_tree_add_fieldtofile(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
203      END IF
204   END SUBROUTINE xml_tree_add_fieldtofile
205
206   SUBROUTINE xml_tree_add_axisgroup(parent_hdl, child_hdl, child_id)
207      TYPE(XAxisGroupHandle)      , INTENT(IN) :: parent_hdl
208      TYPE(XAxisGroupHandle)      , INTENT(OUT):: child_hdl
209      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
210      IF (PRESENT(child_id)) THEN
211         CALL xios_xml_tree_add_axisgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
212      ELSE
213         CALL xios_xml_tree_add_axisgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
214      END IF
215   END SUBROUTINE xml_tree_add_axisgroup
216
217   SUBROUTINE xml_tree_add_filegroup(parent_hdl, child_hdl, child_id)
218      TYPE(XFileGroupHandle)      , INTENT(IN) :: parent_hdl
219      TYPE(XFileGroupHandle)      , INTENT(OUT):: child_hdl
220      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
221      IF (PRESENT(child_id)) THEN
222         CALL xios_xml_tree_add_filegroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
223      ELSE
224         CALL xios_xml_tree_add_filegroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
225      END IF
226   END SUBROUTINE xml_tree_add_filegroup
227
228   SUBROUTINE xml_tree_add_gridgroup(parent_hdl, child_hdl, child_id)
229      TYPE(XGridGroupHandle)      , INTENT(IN) :: parent_hdl
230      TYPE(XGridGroupHandle)      , INTENT(OUT):: child_hdl
231      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
232      IF (PRESENT(child_id)) THEN
233         CALL xios_xml_tree_add_gridgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
234      ELSE
235         CALL xios_xml_tree_add_gridgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
236      END IF
237   END SUBROUTINE xml_tree_add_gridgroup
238
239   SUBROUTINE xml_tree_add_fieldgroup(parent_hdl, child_hdl, child_id)
240      TYPE(XFieldGroupHandle)     , INTENT(IN) :: parent_hdl
241      TYPE(XFieldGroupHandle)     , INTENT(OUT):: child_hdl
242      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
243      IF (PRESENT(child_id)) THEN
244         CALL xios_xml_tree_add_fieldgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
245      ELSE
246         CALL xios_xml_tree_add_fieldgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
247      END IF
248   END SUBROUTINE xml_tree_add_fieldgroup
249
250   SUBROUTINE xml_tree_add_domaingroup(parent_hdl, child_hdl, child_id)
251      TYPE(XDomainGroupHandle)     , INTENT(IN) :: parent_hdl
252      TYPE(XDomainGroupHandle)     , INTENT(OUT):: child_hdl
253      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
254      IF (PRESENT(child_id)) THEN
255         CALL xios_xml_tree_add_domaingroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
256      ELSE
257         CALL xios_xml_tree_add_domaingroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
258      END IF
259   END SUBROUTINE xml_tree_add_domaingroup
260
261   SUBROUTINE xml_tree_add_fieldgrouptofile(parent_hdl, child_hdl, child_id)
262      TYPE(XFileHandle)            , INTENT(IN) :: parent_hdl
263      TYPE(XFieldGroupHandle)      , INTENT(OUT):: child_hdl
264      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
265      IF (PRESENT(child_id)) THEN
266         CALL xios_xml_tree_add_fieldgrouptofile(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
267      ELSE
268         CALL xios_xml_tree_add_fieldgrouptofile(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
269      END IF
270   END SUBROUTINE xml_tree_add_fieldgrouptofile
271
272   SUBROUTINE xml_tree_show(filename)
273      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: filename
274      IF (PRESENT(filename)) THEN
275         CALL xios_xml_tree_show(filename, len(filename))
276      ELSE
277         CALL xios_xml_tree_show("NONE", -1)
278      END IF
279   END SUBROUTINE xml_tree_show
280   
281   SUBROUTINE xml_parse_file(filename)
282      CHARACTER(len = *), INTENT(IN) :: filename
283      CALL xios_xml_parse_file(filename, len(filename))
284   END SUBROUTINE xml_Parse_File
285   
286   SUBROUTINE xml_parse_string(xmlcontent)
287      CHARACTER(len = *), INTENT(IN) :: xmlcontent
288      CALL xios_xml_parse_string(xmlcontent, len(xmlcontent))
289   END SUBROUTINE xml_Parse_String
290     
291END MODULE IXML_TREE
Note: See TracBrowser for help on using the repository browser.