source: XIOS/trunk/src/interface/fortran/ixios.F90 @ 545

Last change on this file since 545 was 545, checked in by rlacroix, 6 years ago

Expose the calendar operations through the Fortran interface.

  • Add arithmetic operations on the xios_duration and xios_date types:
    • xios_duration + xios_duration = xios_duration
    • xios_duration - xios_duration = xios_duration
    • scalar * xios_duration = xios_duration * scalar = xios_duration
    • - xios_duration = xios_duration
    • xios_date + xios_duration = xios_date
    • xios_date - xios_duration = xios_date
    • xios_date - xios_date = xios_duration
  • Add comparison operations on the xios_duration and xios_date types:
    • xios_duration: ==, /=
    • xios_date: ==, /=, <, <=, >, >=
  • Add a new function "xios_date_convert_to_seconds" to convert a date into the number of seconds since the time origin of the calendar
  • Define some constant durations "xios_second", "xios_minute", "xios_hour", "xios_day", "xios_month", "xios_year" et "xios_timestep" to ease the definition of new durations (for example, 10h is just 10 * xios_hour)
  • Add a new function "xios_set_calendar" so that one can manually create the calendar attached to the current context and thus use the calendar operations before calling "xios_close_context_definition". This function can accept optional parameters so that the calendar attributes (calendar_type, start_date, time_origin and timestep) can be easily overwritten. Note that you cannot define a new calendar after one was already created (either because "xios_set_calendar" or "xios_close_context_definition" was used)
  • Readd the function "xios_set_timestep" as a simplified alias of "xios_set_context_attr(context, timestep)" for the current context
  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 13.0 KB
Line 
1#include "xios_fortran_prefix.hpp"
2
3MODULE XIOS
4
5USE icalendar, ONLY : xios(set_calendar), xios(set_timestep), xios(update_calendar)
6
7USE icontext, ONLY : txios(context), xios(get_context_handle), xios(set_current_context),    &
8                     xios(is_valid_context)
9
10USE icontext_attr, ONLY : xios(set_context_attr), xios(set_context_attr_hdl), &
11                          xios(get_context_attr), xios(get_context_attr_hdl), &
12                          xios(is_defined_context_attr), xios(is_defined_context_attr_hdl)
13
14USE idata, ONLY : xios(initialize),xios(init_server), xios(finalize), xios(context_initialize),  &
15                  xios(context_is_initialized), xios(close_context_definition),xios(solve_inheritance),       &
16                  xios(context_finalize), xios(send_field_r8_1d), xios(send_field_r8_2d), &
17                  xios(send_field_r8_3d), xios(send_field_r4_1d), xios(send_field_r4_2d), &
18                  xios(send_field_r4_3d), xios(getVar_k8), xios(getVar_k4), xios(getVar_int), &
19                  xios(getVar_logic), xios(getVar_char), xios(setVar_k8), xios(setVar_k4), xios(setVar_int), &
20                  xios(setVar_logic), xios(setVar_char)
21
22USE idate, ONLY : txios(date), &
23                  xios(date_convert_to_seconds), &
24                  xios(date_add_duration), xios(date_sub_duration), xios(date_sub), &
25                  xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge), &
26                  OPERATOR(+), OPERATOR(-), &
27                  OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=)
28
29USE idomain, ONLY : txios(domain), txios(domaingroup), xios(get_domain_handle),  &
30                    xios(get_domaingroup_handle),xios(is_valid_domain),     &
31                    xios(is_valid_domaingroup)
32
33USE idomain_attr, ONLY :  xios(set_domain_attr), xios(set_domain_attr_hdl),  &
34                          xios(get_domain_attr), xios(get_domain_attr_hdl), &
35                          xios(is_defined_domain_attr), xios(is_defined_domain_attr_hdl)
36
37USE idomaingroup_attr, ONLY : xios(set_domaingroup_attr), xios(set_domaingroup_attr_hdl),  &
38                              xios(get_domaingroup_attr), xios(get_domaingroup_attr_hdl), &
39                              xios(is_defined_domaingroup_attr), xios(is_defined_domaingroup_attr_hdl)
40
41USE iduration, ONLY: txios(duration), &
42                     xios(year), xios(month), xios(day), xios(hour), xios(minute), xios(second), xios(timestep), &
43                     xios(duration_add), xios(duration_sub), xios(duration_mult), xios(duration_neg), &
44                     xios(duration_eq), xios(duration_neq), &
45                     OPERATOR(+), OPERATOR(-), OPERATOR(*)
46
47USE ifield, ONLY : txios(field), txios(fieldgroup), xios(get_field_handle),  &
48                   xios(get_fieldgroup_handle), xios(is_valid_field),        &
49                   xios(is_valid_fieldgroup),xios(field_is_active_id),xios(field_is_active_hdl)
50
51USE ifield_attr, ONLY : xios(set_field_attr),xios(set_field_attr_hdl),    &
52                        xios(get_field_attr),xios(get_field_attr_hdl), &
53                        xios(is_defined_field_attr),xios(is_defined_field_attr_hdl)
54
55USE ifieldgroup_attr, ONLY : xios(set_fieldgroup_attr), xios(set_fieldgroup_attr_hdl),  &
56                             xios(get_fieldgroup_attr), xios(get_fieldgroup_attr_hdl), &
57                             xios(is_defined_fieldgroup_attr), xios(is_defined_fieldgroup_attr_hdl)
58
59USE ivariable, ONLY : txios(variable), txios(variablegroup), xios(get_variable_handle),  &
60                   xios(get_variablegroup_handle), xios(is_valid_variable),        &
61                   xios(is_valid_variablegroup)
62
63USE ivariable_attr, ONLY : xios(set_variable_attr),xios(set_variable_attr_hdl),    &
64                        xios(get_variable_attr),xios(get_variable_attr_hdl), &
65                        xios(is_defined_variable_attr),xios(is_defined_variable_attr_hdl)
66
67USE ivariablegroup_attr, ONLY : xios(set_variablegroup_attr), xios(set_variablegroup_attr_hdl),  &
68                             xios(get_variablegroup_attr), xios(get_variablegroup_attr_hdl), &
69                             xios(is_defined_variablegroup_attr), xios(is_defined_variablegroup_attr_hdl)
70
71USE ifile, ONLY : txios(file), txios(filegroup), xios(get_file_handle),    &
72                  xios(get_filegroup_handle), xios(is_valid_file), xios(is_valid_filegroup)
73
74USE ifile_attr, ONLY : xios(set_file_attr),xios(set_file_attr_hdl), &
75                       xios(get_file_attr),xios(get_file_attr_hdl), &
76                       xios(is_defined_file_attr),xios(is_defined_file_attr_hdl)
77
78USE ifilegroup_attr, ONLY : xios(set_filegroup_attr), xios(set_filegroup_attr_hdl), &
79                            xios(get_filegroup_attr), xios(get_filegroup_attr_hdl), &
80                            xios(is_defined_filegroup_attr), xios(is_defined_filegroup_attr_hdl)
81
82USE igrid, ONLY : txios(grid), txios(gridgroup), xios(get_grid_handle),     &
83                  xios(get_gridgroup_handle), xios(is_valid_grid), xios(is_valid_gridgroup)
84
85USE igrid_attr, ONLY : xios(set_grid_attr_hdl), xios(set_grid_attr), &
86                       xios(get_grid_attr_hdl), xios(get_grid_attr), &
87                       xios(is_defined_grid_attr_hdl), xios(is_defined_grid_attr)
88
89USE igridgroup_attr, ONLY : xios(set_gridgroup_attr), xios(set_gridgroup_attr_hdl),  &
90                            xios(get_gridgroup_attr), xios(get_gridgroup_attr_hdl), &
91                            xios(is_defined_gridgroup_attr), xios(is_defined_gridgroup_attr_hdl)
92
93USE iaxis, ONLY : txios(axis), txios(axisgroup), xios(get_axis_handle),     &
94                  xios(get_axisgroup_handle), xios(is_valid_axis), xios(is_valid_axisgroup)
95
96USE iaxis_attr, ONLY :  xios(set_axis_attr), xios(set_axis_attr_hdl), &
97                        xios(get_axis_attr), xios(get_axis_attr_hdl), &
98                        xios(is_defined_axis_attr), xios(is_defined_axis_attr_hdl)
99
100USE iaxisgroup_attr, ONLY : xios(set_axisgroup_attr), xios(set_axisgroup_attr_hdl), &
101                            xios(get_axisgroup_attr), xios(get_axisgroup_attr_hdl), &
102                            xios(is_defined_axisgroup_attr), xios(is_defined_axisgroup_attr_hdl)
103
104USE ixml_tree, ONLY : xios(add_axis), xios(add_file), xios(add_grid), xios(add_field), xios(add_domain),          &
105                     xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield),                  &
106                     xios(add_axisgroup), xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup),         &
107                     xios(add_domaingroup), xios(add_fieldgrouptofile), xios(add_variablegrouptofile),            &
108                     xios(add_variablegrouptofield)
109
110PRIVATE
111
112
113INTERFACE xios(set_attr)
114  MODULE PROCEDURE xios(set_domaingroup_attr_hdl), xios(set_domain_attr_hdl), xios(set_fieldgroup_attr_hdl), &
115                   xios(set_field_attr_hdl),xios(set_variable_attr_hdl), xios(set_variablegroup_attr_hdl),   &
116                   xios(set_file_attr_hdl), xios(set_filegroup_attr_hdl),                                    &
117                   xios(set_grid_attr_hdl), xios(set_gridgroup_attr_hdl), xios(set_axis_attr_hdl) ,          &
118                   xios(set_axisgroup_attr_hdl), xios(set_context_attr_hdl)
119END INTERFACE xios(set_attr)
120
121INTERFACE xios(get_attr)
122  MODULE PROCEDURE xios(get_domaingroup_attr_hdl), xios(get_domain_attr_hdl), xios(get_fieldgroup_attr_hdl), &
123                   xios(get_field_attr_hdl), xios(get_variable_attr_hdl), xios(get_variablegroup_attr_hdl),  &
124                   xios(get_file_attr_hdl), xios(get_filegroup_attr_hdl),                                    &
125                   xios(get_grid_attr_hdl), xios(get_gridgroup_attr_hdl), xios(get_axis_attr_hdl) ,          &
126                   xios(get_axisgroup_attr_hdl), xios(get_context_attr_hdl)
127END INTERFACE xios(get_attr)
128
129INTERFACE xios(is_defined_attr)
130  MODULE PROCEDURE xios(is_defined_domaingroup_attr_hdl), xios(is_defined_domain_attr_hdl), xios(is_defined_fieldgroup_attr_hdl), &
131                   xios(is_defined_field_attr_hdl), xios(is_defined_variable_attr_hdl), xios(is_defined_variablegroup_attr_hdl),  &
132                   xios(is_defined_file_attr_hdl), xios(is_defined_filegroup_attr_hdl),                                           &
133                   xios(is_defined_grid_attr_hdl), xios(is_defined_gridgroup_attr_hdl), xios(is_defined_axis_attr_hdl) ,          &
134                   xios(is_defined_axisgroup_attr_hdl), xios(is_defined_context_attr_hdl)
135END INTERFACE xios(is_defined_attr)
136
137INTERFACE xios(get_handle)
138  MODULE PROCEDURE  xios(get_context_handle), xios(get_domain_handle), xios(get_domaingroup_handle),        &
139                    xios(get_file_handle), xios(get_filegroup_handle), xios(get_grid_handle),               &
140                    xios(get_gridgroup_handle), xios(get_axis_handle), xios(get_axisgroup_handle),          &
141                    xios(get_field_handle), xios(get_fieldgroup_handle),xios(get_variable_handle),          &
142                    xios(get_variablegroup_handle)
143END INTERFACE xios(get_handle)
144
145INTERFACE xios(add_child)
146  MODULE PROCEDURE xios(add_axis), xios(add_file), xios(add_grid), xios(add_field), xios(add_domain),                &
147                   xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield), xios(add_axisgroup),  &
148                   xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), xios(add_domaingroup),            &
149                   xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield)
150END INTERFACE xios(add_child)
151
152
153INTERFACE xios(send_field)
154  MODULE PROCEDURE  xios(send_field_r8_1d), xios(send_field_r8_2d), xios(send_field_r8_3d),              &
155                    xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d)
156END INTERFACE xios(send_field)
157
158INTERFACE xios(field_is_active)
159  MODULE PROCEDURE xios(field_is_active_id),xios(field_is_active_hdl)
160END INTERFACE
161
162INTERFACE xios(getVar)
163  MODULE PROCEDURE xios(getVar_k8), xios(getVar_k4), xios(getVar_int), xios(getVar_logic), xios(getVar_char)
164END INTERFACE xios(getVar)
165
166INTERFACE xios(setVar)
167  MODULE PROCEDURE xios(setVar_k8), xios(setVar_k4), xios(setVar_int), xios(setVar_logic), xios(setVar_char)
168END INTERFACE xios(setVar)
169
170 PUBLIC :: txios(domain), txios(domaingroup),txios(field), txios(fieldgroup),txios(file), txios(filegroup), &
171          txios(grid), txios(gridgroup), txios(axis), txios(axisgroup),txios(context), txios(date),         &
172          txios(duration), txios(variable)
173
174 PUBLIC :: xios(set_attr), xios(set_domain_attr), xios(set_domaingroup_attr), xios(set_fieldgroup_attr), &
175          xios(set_field_attr), xios(set_file_attr), xios(set_filegroup_attr),          &
176          xios(set_grid_attr), xios(set_gridgroup_attr), xios(set_axis_attr) ,          &
177          xios(set_axisgroup_attr), xios(set_context_attr)
178
179 PUBLIC :: xios(get_attr), xios(get_domain_attr), xios(get_domaingroup_attr), xios(get_fieldgroup_attr), &
180          xios(get_field_attr), xios(get_file_attr), xios(get_filegroup_attr),          &
181          xios(get_grid_attr), xios(get_gridgroup_attr), xios(get_axis_attr) ,          &
182          xios(get_axisgroup_attr), xios(get_context_attr)
183
184PUBLIC :: xios(is_defined_attr), xios(is_defined_domain_attr), xios(is_defined_domaingroup_attr), xios(is_defined_fieldgroup_attr), &
185          xios(is_defined_field_attr), xios(is_defined_file_attr), xios(is_defined_filegroup_attr),          &
186          xios(is_defined_grid_attr), xios(is_defined_gridgroup_attr), xios(is_defined_axis_attr) ,          &
187          xios(is_defined_axisgroup_attr), xios(is_defined_context_attr)
188
189 PUBLIC :: xios(get_handle)
190 PUBLIC :: xios(add_child)
191
192 PUBLIC :: xios(is_valid_context),xios(is_valid_domain), xios(is_valid_domaingroup),xios(is_valid_field),        &
193           xios(is_valid_fieldgroup), xios(is_valid_file), xios(is_valid_filegroup), xios(is_valid_grid),         &
194           xios(is_valid_gridgroup), xios(is_valid_axis), xios(is_valid_axisgroup), xios(is_valid_variable),      &
195           xios(is_valid_variablegroup)
196
197 PUBLIC :: xios(set_current_context)
198 PUBLIC :: xios(initialize), xios(init_server), xios(finalize), xios(context_initialize),xios(context_is_initialized), &
199           xios(solve_inheritance), xios(close_context_definition), xios(context_finalize), xios(send_field),          &
200           xios(field_is_active)
201
202 PUBLIC :: xios(set_calendar), xios(set_timestep), xios(update_calendar)
203
204 PUBLIC :: xios(year), xios(month), xios(day), xios(hour), xios(minute), xios(second), xios(timestep), &
205           xios(duration_add), xios(duration_sub), xios(duration_mult), xios(duration_neg), &
206           xios(duration_eq), xios(duration_neq)
207
208 PUBLIC :: xios(date_convert_to_seconds), &
209           xios(date_add_duration), xios(date_sub_duration), xios(date_sub), &
210           xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge)
211
212 PUBLIC :: OPERATOR(+), OPERATOR(-), OPERATOR(*), &
213           OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=)
214
215 PUBLIC :: xios(getVar)
216 PUBLIC :: xios(setVar)
217
218END MODULE XIOS
Note: See TracBrowser for help on using the repository browser.