New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
ixml_tree.F90 in vendors/XIOS/current/src/interface/fortran – NEMO

source: vendors/XIOS/current/src/interface/fortran/ixml_tree.F90 @ 3428

Last change on this file since 3428 was 3428, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

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