1 | ! --------------------------------------------------- ! |
---|
2 | ! ------------- XMLIO SERVER MAIN TEST ------------- ! |
---|
3 | ! --------------------------------------------------- ! |
---|
4 | |
---|
5 | MODULE XTYPE |
---|
6 | IMPLICIT NONE |
---|
7 | |
---|
8 | ! Ne jamais modifier les valeurs internes de ce type dans le code fortran. |
---|
9 | TYPE XHandle |
---|
10 | INTEGER :: dtype |
---|
11 | INTEGER :: daddr |
---|
12 | END TYPE XHandle |
---|
13 | |
---|
14 | TYPE XDate |
---|
15 | INTEGER :: year, month, day, hour, minute, second |
---|
16 | END TYPE XDate |
---|
17 | |
---|
18 | TYPE XDuration |
---|
19 | REAL(kind = 8) :: year, month, day, hour, minute, second |
---|
20 | END TYPE XDuration |
---|
21 | |
---|
22 | ! enum XDType |
---|
23 | INTEGER, PARAMETER :: NOTYPE = 0 |
---|
24 | INTEGER, PARAMETER :: DTREATMENT = 1, DDATE = 2, CALENDAR = 3, ECONTEXT = 4 |
---|
25 | INTEGER, PARAMETER :: EAXIS = 5 , EDOMAIN = 6 , EFIELD = 7 , EFILE = 8 , EGRID = 9 |
---|
26 | INTEGER, PARAMETER :: GAXIS = 10, GDOMAIN = 11, GFIELD = 12, GFILE = 13, GGRID = 14 |
---|
27 | |
---|
28 | ! enum XFileType |
---|
29 | INTEGER, PARAMETER :: NETCDF4 = 0 |
---|
30 | |
---|
31 | ! Autres constantes |
---|
32 | TYPE(XHandle) , PARAMETER :: NULLHANDLE = XHandle(0, 0) |
---|
33 | TYPE(XDuration), PARAMETER :: NONEDUR = XDuration(0., 0., 0., 0., 0., 0.) |
---|
34 | |
---|
35 | END MODULE XTYPE |
---|
36 | |
---|
37 | MODULE IXHANDLE |
---|
38 | |
---|
39 | INTERFACE |
---|
40 | |
---|
41 | SUBROUTINE xios_handle_create(ret, dtype, idt) |
---|
42 | USE XTYPE |
---|
43 | TYPE(XHandle), INTENT(OUT) :: ret |
---|
44 | INTEGER , INTENT(IN) :: dtype |
---|
45 | CHARACTER*(*), INTENT(IN) :: idt |
---|
46 | END SUBROUTINE xios_handle_create |
---|
47 | |
---|
48 | END INTERFACE |
---|
49 | |
---|
50 | END MODULE IXHANDLE |
---|
51 | |
---|
52 | MODULE IXML |
---|
53 | IMPLICIT NONE |
---|
54 | INTERFACE |
---|
55 | |
---|
56 | SUBROUTINE xios_xml_Parse_File(filename) |
---|
57 | CHARACTER*(*), INTENT(IN) :: filename |
---|
58 | END SUBROUTINE xios_xml_Parse_File |
---|
59 | |
---|
60 | SUBROUTINE xios_xml_Parse_String(xmlcontent) |
---|
61 | CHARACTER*(*), INTENT(IN) :: xmlcontent |
---|
62 | END SUBROUTINE xios_xml_Parse_String |
---|
63 | |
---|
64 | END INTERFACE |
---|
65 | END MODULE IXML |
---|
66 | |
---|
67 | MODULE ICONTEXT |
---|
68 | IMPLICIT NONE |
---|
69 | INTERFACE |
---|
70 | |
---|
71 | SUBROUTINE xios_context_set_current(context, withswap) |
---|
72 | USE XTYPE |
---|
73 | TYPE(XHandle), INTENT(IN) :: context |
---|
74 | LOGICAL, OPTIONAL, INTENT(IN) :: withswap |
---|
75 | END SUBROUTINE xios_context_set_current |
---|
76 | |
---|
77 | SUBROUTINE xios_context_get_current(context) |
---|
78 | USE XTYPE |
---|
79 | TYPE(XHandle), INTENT(IN) :: context |
---|
80 | END SUBROUTINE xios_context_get_current |
---|
81 | |
---|
82 | SUBROUTINE xios_context_get_calendar(context, calend) |
---|
83 | USE XTYPE |
---|
84 | TYPE(XHandle), INTENT(IN) :: context |
---|
85 | TYPE(XHandle), INTENT(OUT) :: calend |
---|
86 | END SUBROUTINE xios_context_get_calendar |
---|
87 | |
---|
88 | END INTERFACE |
---|
89 | |
---|
90 | END MODULE ICONTEXT |
---|
91 | |
---|
92 | MODULE ICALENDAR |
---|
93 | IMPLICIT NONE |
---|
94 | INTERFACE |
---|
95 | |
---|
96 | SUBROUTINE xios_calendar_set_timestep(calend, dur) |
---|
97 | USE XTYPE |
---|
98 | TYPE(XHandle) , INTENT(IN) :: calend |
---|
99 | TYPE(XDuration), INTENT(IN) :: dur |
---|
100 | END SUBROUTINE xios_calendar_set_timestep |
---|
101 | |
---|
102 | END INTERFACE |
---|
103 | |
---|
104 | END MODULE ICALENDAR |
---|
105 | |
---|
106 | MODULE IDATATREATMENT |
---|
107 | IMPLICIT NONE |
---|
108 | INTERFACE |
---|
109 | |
---|
110 | SUBROUTINE xios_dtreatment_new(dt, context) |
---|
111 | USE XTYPE |
---|
112 | TYPE(XHandle), INTENT(OUT) :: dt |
---|
113 | TYPE(XHandle), INTENT(IN) :: context |
---|
114 | END SUBROUTINE xios_dtreatment_new |
---|
115 | |
---|
116 | SUBROUTINE xios_dtreatment_create_files_and_headers(dt, ftype) |
---|
117 | USE XTYPE |
---|
118 | TYPE(XHandle), INTENT(IN) :: dt |
---|
119 | INTEGER , INTENT(IN) :: ftype |
---|
120 | END SUBROUTINE xios_dtreatment_create_files_and_headers |
---|
121 | |
---|
122 | END INTERFACE |
---|
123 | END MODULE IDATATREATMENT |
---|
124 | |
---|
125 | PROGRAM MAIN |
---|
126 | USE XTYPE |
---|
127 | USE IXHANDLE |
---|
128 | USE IXML |
---|
129 | USE ICONTEXT |
---|
130 | USE IDATATREATMENT |
---|
131 | USE ICALENDAR |
---|
132 | |
---|
133 | IMPLICIT NONE |
---|
134 | |
---|
135 | INTEGER :: compt |
---|
136 | TYPE(XHandle) :: context1 = NULLHANDLE |
---|
137 | TYPE(XHandle) :: dtreat = NULLHANDLE |
---|
138 | TYPE(XHandle) :: calend = NULLHANDLE |
---|
139 | TYPE(XDuration) :: timestep_1h = XDuration(0., 0., 0., 1., 0., 0.) |
---|
140 | |
---|
141 | ! Parsing du document xml depuis un fichier situé sur le disque. |
---|
142 | CALL xios_xml_Parse_File("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml") |
---|
143 | |
---|
144 | ! Le calendrier doit être initialisé ici s'il ne l'a pas déjà été depuis le document xml. |
---|
145 | |
---|
146 | ! Création d'un handle sur le contexte dans lequel on souhaite travailler, cà d 'context1' ici. |
---|
147 | CALL xios_handle_create(context1, ECONTEXT, "context1") |
---|
148 | iF ((context1%dtype == 0) .AND. (context1%daddr == 0)) THEN |
---|
149 | PRINT *, "Impossible de créer un handle sur l'élément context1 !" |
---|
150 | STOP |
---|
151 | END IF |
---|
152 | |
---|
153 | ! ----------- Début du traitement ----------- ! |
---|
154 | |
---|
155 | CALL xios_context_set_current(context1, .TRUE.) |
---|
156 | |
---|
157 | ! Création et initialisation d'une instance de traitement des données dans 'context1'. |
---|
158 | CALL xios_dtreatment_new(dtreat, context1) |
---|
159 | iF ((dtreat%dtype == 0) .AND. (dtreat%daddr == 0)) THEN |
---|
160 | PRINT *, "Impossible d'initialiser l'instance de traitement !" |
---|
161 | STOP |
---|
162 | END IF |
---|
163 | |
---|
164 | ! Création des fichiers et des entêtes dans le contexte. |
---|
165 | CALL xios_dtreatment_create_files_and_headers(dtreat, NETCDF4) |
---|
166 | |
---|
167 | ! On récupére le calendrier associé au contexte en cours de traitement. |
---|
168 | CALL xios_context_get_calendar(context1, calend) |
---|
169 | iF ((calend%dtype == 0) .AND. (calend%daddr == 0)) THEN |
---|
170 | PRINT *, "Impossible de récupérer le calendrier !" |
---|
171 | STOP |
---|
172 | END IF |
---|
173 | |
---|
174 | ! On change la durée du timestep. |
---|
175 | CALL xios_calendar_set_timestep(calend, timestep_1h) |
---|
176 | |
---|
177 | ! Exécution de la boucle de calcul-écriture. |
---|
178 | DO compt = 0, 9 |
---|
179 | |
---|
180 | END DO |
---|
181 | |
---|
182 | END PROGRAM MAIN |
---|