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

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

Revised calendar functionalities:

  • the calendar is now configured from a specific calendar child node of the context in the XML configuration file. Example: <calendar type="Gregorian" start_date="2012-03-01 15:00:00" time_origin="2012-02-29 15:00:00" timestep="1h" />
  • the calendar type should now be configured when defining the start time and/or the time origin.
  • the start time and the time origin are now optional, 0000-01-01 00:00:00 will be used by default. It is also possible to define them partially. For example, 2015 and 2014-12 are valid dates corresponding respectively to 2015-01-01 00:00:00 and 2014-12-01 00:00:00.
  • an optional duration offset can be added to the start date and time origin. For example, it's possible to define the date 2015-01-12 12:00:00 as 2015-01-11 + 36h or 2015-01-11 12:00:00 + 1d. The duration format is the same as the time step. Being that the date is optional, it is possible to only use a duration (for example + 42s is the same as 0000-01-01 00:00:00 + 42s). An error will be raised if a duration based on the time step is used before the time step was configured. For example, the following would cause an error: <calendar type="Gregorian" start_date="+ 1ts" /> but <calendar type="Gregorian" start_date="+ 1ts" timestep="0.5h" /> would not.
  • new Fortran interface to define the calendar:
    • xios_define_calendar(type[, timestep, start_date, time_origin]) will create a calendar when none had previously been defined. Only the type argument is mandatory, the rest is optional. Calendar operations on dates and durations are possible as soon as the calendar is created (either using this procedure or directly from the XML configuration file).
    • the following getter and setter procedures are available: xios_set_timestep, xios_set_start_date, xios_set_time_origin, xios_get_calendar_type, xios_get_timestep, xios_get_start_date, xios_get_time_origin.
  • new Fortran interface to interact with the calendar: xios_update_calendar, xios_get_current_date, xios_get_year_length_in_seconds, xios_get_day_length_in_seconds.
  • new Fortran interface for date conversion: xios_date_get_second_of_year, xios_date_get_day_of_year, xios_date_get_fraction_of_year, xios_date_get_second_of_day, xios_date_get_fraction_of_day.
  • two new placeholders are available to format the file name when splitting the output (split_freq_format attribute):
    • %S the number of seconds since the time origin
    • %D the integral number of days since the time origin
  • 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: 14.0 KB
Line 
1#include "xios_fortran_prefix.hpp"
2
3MODULE XIOS
4
5USE icalendar, ONLY : xios(define_calendar), xios(set_timestep), xios(set_start_date), xios(set_time_origin), &
6                      xios(get_calendar_type), xios(get_timestep), xios(get_start_date), xios(get_time_origin), &
7                      xios(update_calendar), xios(get_current_date), &
8                      xios(get_year_length_in_seconds), xios(get_day_length_in_seconds)
9
10USE icontext, ONLY : txios(context), xios(get_context_handle), xios(set_current_context),    &
11                     xios(is_valid_context)
12
13USE icontext_attr, ONLY : xios(set_context_attr), xios(set_context_attr_hdl), &
14                          xios(get_context_attr), xios(get_context_attr_hdl), &
15                          xios(is_defined_context_attr), xios(is_defined_context_attr_hdl)
16
17USE idata, ONLY : xios(initialize),xios(init_server), xios(finalize), xios(context_initialize),  &
18                  xios(context_is_initialized), xios(close_context_definition),xios(solve_inheritance),       &
19                  xios(context_finalize), xios(send_field_r8_1d), xios(send_field_r8_2d), &
20                  xios(send_field_r8_3d), xios(send_field_r4_1d), xios(send_field_r4_2d), &
21                  xios(send_field_r4_3d), xios(getVar_k8), xios(getVar_k4), xios(getVar_int), &
22                  xios(getVar_logic), xios(getVar_char), xios(setVar_k8), xios(setVar_k4), xios(setVar_int), &
23                  xios(setVar_logic), xios(setVar_char)
24
25USE idate, ONLY : txios(date), &
26                  xios(date_convert_to_seconds), &
27                  xios(date_add_duration), xios(date_sub_duration), xios(date_sub), &
28                  xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge), &
29                  xios(date_get_second_of_year), xios(date_get_day_of_year), xios(date_get_fraction_of_year), &
30                  xios(date_get_second_of_day), xios(date_get_fraction_of_day), &
31                  OPERATOR(+), OPERATOR(-), &
32                  OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=), &
33                  ASSIGNMENT(=)
34
35USE idomain, ONLY : txios(domain), txios(domaingroup), xios(get_domain_handle),  &
36                    xios(get_domaingroup_handle),xios(is_valid_domain),     &
37                    xios(is_valid_domaingroup)
38
39USE idomain_attr, ONLY :  xios(set_domain_attr), xios(set_domain_attr_hdl),  &
40                          xios(get_domain_attr), xios(get_domain_attr_hdl), &
41                          xios(is_defined_domain_attr), xios(is_defined_domain_attr_hdl)
42
43USE idomaingroup_attr, ONLY : xios(set_domaingroup_attr), xios(set_domaingroup_attr_hdl),  &
44                              xios(get_domaingroup_attr), xios(get_domaingroup_attr_hdl), &
45                              xios(is_defined_domaingroup_attr), xios(is_defined_domaingroup_attr_hdl)
46
47USE iduration, ONLY: txios(duration), &
48                     xios(year), xios(month), xios(day), xios(hour), xios(minute), xios(second), xios(timestep), &
49                     xios(duration_add), xios(duration_sub), xios(duration_mult), xios(duration_neg), &
50                     xios(duration_eq), xios(duration_neq), &
51                     OPERATOR(+), OPERATOR(-), OPERATOR(*)
52
53USE ifield, ONLY : txios(field), txios(fieldgroup), xios(get_field_handle),  &
54                   xios(get_fieldgroup_handle), xios(is_valid_field),        &
55                   xios(is_valid_fieldgroup),xios(field_is_active_id),xios(field_is_active_hdl)
56
57USE ifield_attr, ONLY : xios(set_field_attr),xios(set_field_attr_hdl),    &
58                        xios(get_field_attr),xios(get_field_attr_hdl), &
59                        xios(is_defined_field_attr),xios(is_defined_field_attr_hdl)
60
61USE ifieldgroup_attr, ONLY : xios(set_fieldgroup_attr), xios(set_fieldgroup_attr_hdl),  &
62                             xios(get_fieldgroup_attr), xios(get_fieldgroup_attr_hdl), &
63                             xios(is_defined_fieldgroup_attr), xios(is_defined_fieldgroup_attr_hdl)
64
65USE ivariable, ONLY : txios(variable), txios(variablegroup), xios(get_variable_handle),  &
66                   xios(get_variablegroup_handle), xios(is_valid_variable),        &
67                   xios(is_valid_variablegroup)
68
69USE ivariable_attr, ONLY : xios(set_variable_attr),xios(set_variable_attr_hdl),    &
70                        xios(get_variable_attr),xios(get_variable_attr_hdl), &
71                        xios(is_defined_variable_attr),xios(is_defined_variable_attr_hdl)
72
73USE ivariablegroup_attr, ONLY : xios(set_variablegroup_attr), xios(set_variablegroup_attr_hdl),  &
74                             xios(get_variablegroup_attr), xios(get_variablegroup_attr_hdl), &
75                             xios(is_defined_variablegroup_attr), xios(is_defined_variablegroup_attr_hdl)
76
77USE ifile, ONLY : txios(file), txios(filegroup), xios(get_file_handle),    &
78                  xios(get_filegroup_handle), xios(is_valid_file), xios(is_valid_filegroup)
79
80USE ifile_attr, ONLY : xios(set_file_attr),xios(set_file_attr_hdl), &
81                       xios(get_file_attr),xios(get_file_attr_hdl), &
82                       xios(is_defined_file_attr),xios(is_defined_file_attr_hdl)
83
84USE ifilegroup_attr, ONLY : xios(set_filegroup_attr), xios(set_filegroup_attr_hdl), &
85                            xios(get_filegroup_attr), xios(get_filegroup_attr_hdl), &
86                            xios(is_defined_filegroup_attr), xios(is_defined_filegroup_attr_hdl)
87
88USE igrid, ONLY : txios(grid), txios(gridgroup), xios(get_grid_handle),     &
89                  xios(get_gridgroup_handle), xios(is_valid_grid), xios(is_valid_gridgroup)
90
91USE igrid_attr, ONLY : xios(set_grid_attr_hdl), xios(set_grid_attr), &
92                       xios(get_grid_attr_hdl), xios(get_grid_attr), &
93                       xios(is_defined_grid_attr_hdl), xios(is_defined_grid_attr)
94
95USE igridgroup_attr, ONLY : xios(set_gridgroup_attr), xios(set_gridgroup_attr_hdl),  &
96                            xios(get_gridgroup_attr), xios(get_gridgroup_attr_hdl), &
97                            xios(is_defined_gridgroup_attr), xios(is_defined_gridgroup_attr_hdl)
98
99USE iaxis, ONLY : txios(axis), txios(axisgroup), xios(get_axis_handle),     &
100                  xios(get_axisgroup_handle), xios(is_valid_axis), xios(is_valid_axisgroup)
101
102USE iaxis_attr, ONLY :  xios(set_axis_attr), xios(set_axis_attr_hdl), &
103                        xios(get_axis_attr), xios(get_axis_attr_hdl), &
104                        xios(is_defined_axis_attr), xios(is_defined_axis_attr_hdl)
105
106USE iaxisgroup_attr, ONLY : xios(set_axisgroup_attr), xios(set_axisgroup_attr_hdl), &
107                            xios(get_axisgroup_attr), xios(get_axisgroup_attr_hdl), &
108                            xios(is_defined_axisgroup_attr), xios(is_defined_axisgroup_attr_hdl)
109
110USE ixml_tree, ONLY : xios(add_axis), xios(add_file), xios(add_grid), xios(add_field), xios(add_domain),          &
111                     xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield),                  &
112                     xios(add_axisgroup), xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup),         &
113                     xios(add_domaingroup), xios(add_fieldgrouptofile), xios(add_variablegrouptofile),            &
114                     xios(add_variablegrouptofield)
115
116PRIVATE
117
118
119INTERFACE xios(set_attr)
120  MODULE PROCEDURE xios(set_domaingroup_attr_hdl), xios(set_domain_attr_hdl), xios(set_fieldgroup_attr_hdl), &
121                   xios(set_field_attr_hdl),xios(set_variable_attr_hdl), xios(set_variablegroup_attr_hdl),   &
122                   xios(set_file_attr_hdl), xios(set_filegroup_attr_hdl),                                    &
123                   xios(set_grid_attr_hdl), xios(set_gridgroup_attr_hdl), xios(set_axis_attr_hdl) ,          &
124                   xios(set_axisgroup_attr_hdl), xios(set_context_attr_hdl)
125END INTERFACE xios(set_attr)
126
127INTERFACE xios(get_attr)
128  MODULE PROCEDURE xios(get_domaingroup_attr_hdl), xios(get_domain_attr_hdl), xios(get_fieldgroup_attr_hdl), &
129                   xios(get_field_attr_hdl), xios(get_variable_attr_hdl), xios(get_variablegroup_attr_hdl),  &
130                   xios(get_file_attr_hdl), xios(get_filegroup_attr_hdl),                                    &
131                   xios(get_grid_attr_hdl), xios(get_gridgroup_attr_hdl), xios(get_axis_attr_hdl) ,          &
132                   xios(get_axisgroup_attr_hdl), xios(get_context_attr_hdl)
133END INTERFACE xios(get_attr)
134
135INTERFACE xios(is_defined_attr)
136  MODULE PROCEDURE xios(is_defined_domaingroup_attr_hdl), xios(is_defined_domain_attr_hdl), xios(is_defined_fieldgroup_attr_hdl), &
137                   xios(is_defined_field_attr_hdl), xios(is_defined_variable_attr_hdl), xios(is_defined_variablegroup_attr_hdl),  &
138                   xios(is_defined_file_attr_hdl), xios(is_defined_filegroup_attr_hdl),                                           &
139                   xios(is_defined_grid_attr_hdl), xios(is_defined_gridgroup_attr_hdl), xios(is_defined_axis_attr_hdl) ,          &
140                   xios(is_defined_axisgroup_attr_hdl), xios(is_defined_context_attr_hdl)
141END INTERFACE xios(is_defined_attr)
142
143INTERFACE xios(get_handle)
144  MODULE PROCEDURE  xios(get_context_handle), xios(get_domain_handle), xios(get_domaingroup_handle),        &
145                    xios(get_file_handle), xios(get_filegroup_handle), xios(get_grid_handle),               &
146                    xios(get_gridgroup_handle), xios(get_axis_handle), xios(get_axisgroup_handle),          &
147                    xios(get_field_handle), xios(get_fieldgroup_handle),xios(get_variable_handle),          &
148                    xios(get_variablegroup_handle)
149END INTERFACE xios(get_handle)
150
151INTERFACE xios(add_child)
152  MODULE PROCEDURE xios(add_axis), xios(add_file), xios(add_grid), xios(add_field), xios(add_domain),                &
153                   xios(add_fieldtofile), xios(add_variabletofile), xios(add_variabletofield), xios(add_axisgroup),  &
154                   xios(add_filegroup), xios(add_gridgroup), xios(add_fieldgroup), xios(add_domaingroup),            &
155                   xios(add_fieldgrouptofile), xios(add_variablegrouptofile),xios(add_variablegrouptofield)
156END INTERFACE xios(add_child)
157
158
159INTERFACE xios(send_field)
160  MODULE PROCEDURE  xios(send_field_r8_1d), xios(send_field_r8_2d), xios(send_field_r8_3d),              &
161                    xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d)
162END INTERFACE xios(send_field)
163
164INTERFACE xios(field_is_active)
165  MODULE PROCEDURE xios(field_is_active_id),xios(field_is_active_hdl)
166END INTERFACE
167
168INTERFACE xios(getVar)
169  MODULE PROCEDURE xios(getVar_k8), xios(getVar_k4), xios(getVar_int), xios(getVar_logic), xios(getVar_char)
170END INTERFACE xios(getVar)
171
172INTERFACE xios(setVar)
173  MODULE PROCEDURE xios(setVar_k8), xios(setVar_k4), xios(setVar_int), xios(setVar_logic), xios(setVar_char)
174END INTERFACE xios(setVar)
175
176 PUBLIC :: txios(domain), txios(domaingroup),txios(field), txios(fieldgroup),txios(file), txios(filegroup), &
177          txios(grid), txios(gridgroup), txios(axis), txios(axisgroup),txios(context), txios(date),         &
178          txios(duration), txios(variable)
179
180 PUBLIC :: xios(set_attr), xios(set_domain_attr), xios(set_domaingroup_attr), xios(set_fieldgroup_attr), &
181          xios(set_field_attr), xios(set_file_attr), xios(set_filegroup_attr),          &
182          xios(set_grid_attr), xios(set_gridgroup_attr), xios(set_axis_attr) ,          &
183          xios(set_axisgroup_attr), xios(set_context_attr)
184
185 PUBLIC :: xios(get_attr), xios(get_domain_attr), xios(get_domaingroup_attr), xios(get_fieldgroup_attr), &
186          xios(get_field_attr), xios(get_file_attr), xios(get_filegroup_attr),          &
187          xios(get_grid_attr), xios(get_gridgroup_attr), xios(get_axis_attr) ,          &
188          xios(get_axisgroup_attr), xios(get_context_attr)
189
190PUBLIC :: xios(is_defined_attr), xios(is_defined_domain_attr), xios(is_defined_domaingroup_attr), xios(is_defined_fieldgroup_attr), &
191          xios(is_defined_field_attr), xios(is_defined_file_attr), xios(is_defined_filegroup_attr),          &
192          xios(is_defined_grid_attr), xios(is_defined_gridgroup_attr), xios(is_defined_axis_attr) ,          &
193          xios(is_defined_axisgroup_attr), xios(is_defined_context_attr)
194
195 PUBLIC :: xios(get_handle)
196 PUBLIC :: xios(add_child)
197
198 PUBLIC :: xios(is_valid_context),xios(is_valid_domain), xios(is_valid_domaingroup),xios(is_valid_field),        &
199           xios(is_valid_fieldgroup), xios(is_valid_file), xios(is_valid_filegroup), xios(is_valid_grid),         &
200           xios(is_valid_gridgroup), xios(is_valid_axis), xios(is_valid_axisgroup), xios(is_valid_variable),      &
201           xios(is_valid_variablegroup)
202
203 PUBLIC :: xios(set_current_context)
204 PUBLIC :: xios(initialize), xios(init_server), xios(finalize), xios(context_initialize),xios(context_is_initialized), &
205           xios(solve_inheritance), xios(close_context_definition), xios(context_finalize), xios(send_field),          &
206           xios(field_is_active)
207
208 PUBLIC :: xios(define_calendar), xios(set_timestep), xios(set_start_date), xios(set_time_origin), &
209           xios(get_calendar_type), xios(get_timestep), xios(get_start_date), xios(get_time_origin), &
210           xios(update_calendar), xios(get_current_date), &
211           xios(get_year_length_in_seconds), xios(get_day_length_in_seconds)
212
213 PUBLIC :: xios(year), xios(month), xios(day), xios(hour), xios(minute), xios(second), xios(timestep), &
214           xios(duration_add), xios(duration_sub), xios(duration_mult), xios(duration_neg), &
215           xios(duration_eq), xios(duration_neq)
216
217 PUBLIC :: xios(date_convert_to_seconds), &
218           xios(date_add_duration), xios(date_sub_duration), xios(date_sub), &
219           xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge), &
220           xios(date_get_second_of_year), xios(date_get_day_of_year), xios(date_get_fraction_of_year), &
221           xios(date_get_second_of_day), xios(date_get_fraction_of_day)
222
223 PUBLIC :: OPERATOR(+), OPERATOR(-), OPERATOR(*), &
224           OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=), &
225           ASSIGNMENT(=)
226
227 PUBLIC :: xios(getVar)
228 PUBLIC :: xios(setVar)
229
230END MODULE XIOS
Note: See TracBrowser for help on using the repository browser.