Ignore:
Timestamp:
12/10/14 14:27:09 (9 years ago)
Author:
rlacroix
Message:

Add a new attribute type for dates and use it for the context's start_date and time_origin.

The "xios_date" type should now be used to get/set date attributes through the Fortran interface. This avoids using strings to manipulate dates.

Location:
XIOS/trunk/src/interface
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/c_attr/icaxis_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icaxisgroup_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/iccontext_attr.cpp

    r526 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
     
    6970   
    7071   
    71   void cxios_set_context_start_date(context_Ptr context_hdl, const char * start_date, int start_date_size) 
     72  void cxios_set_context_start_date(context_Ptr context_hdl, cxios_date start_date_c) 
    7273  { 
    73     std::string start_date_str; 
    74     if(!cstr2string(start_date, start_date_size, start_date_str)) return; 
    75      CTimer::get("XIOS").resume(); 
    76     context_hdl->start_date.setValue(start_date_str); 
    77      CTimer::get("XIOS").suspend(); 
     74    CTimer::get("XIOS").resume(); 
     75    context_hdl->start_date.allocate(); 
     76    CDate& start_date = context_hdl->start_date.get(); 
     77    start_date.setDate(start_date_c.year, 
     78                           start_date_c.month, 
     79                           start_date_c.day, 
     80                           start_date_c.hour, 
     81                           start_date_c.minute, 
     82                           start_date_c.second); 
     83    if (start_date.hasRelCalendar()) 
     84      start_date.checkDate(); 
     85    CTimer::get("XIOS").suspend(); 
    7886  } 
    7987   
    80   void cxios_get_context_start_date(context_Ptr context_hdl, char * start_date, int start_date_size) 
     88  void cxios_get_context_start_date(context_Ptr context_hdl, cxios_date* start_date_c) 
    8189  { 
    82      CTimer::get("XIOS").resume(); 
    83     if(!string_copy(context_hdl->start_date.getInheritedValue(),start_date , start_date_size)) 
    84       ERROR("void cxios_get_context_start_date(context_Ptr context_hdl, char * start_date, int start_date_size)", <<"Input string is to short"); 
    85      CTimer::get("XIOS").suspend(); 
     90    CTimer::get("XIOS").resume(); 
     91    CDate start_date = context_hdl->start_date.getInheritedValue(); 
     92    start_date_c->year = start_date.getYear(); 
     93    start_date_c->month = start_date.getMonth(); 
     94    start_date_c->day = start_date.getDay(); 
     95    start_date_c->hour = start_date.getHour(); 
     96    start_date_c->minute = start_date.getMinute(); 
     97    start_date_c->second = start_date.getSecond(); 
     98    CTimer::get("XIOS").suspend(); 
    8699  } 
    87100   
     
    95108   
    96109   
    97   void cxios_set_context_time_origin(context_Ptr context_hdl, const char * time_origin, int time_origin_size) 
     110  void cxios_set_context_time_origin(context_Ptr context_hdl, cxios_date time_origin_c) 
    98111  { 
    99     std::string time_origin_str; 
    100     if(!cstr2string(time_origin, time_origin_size, time_origin_str)) return; 
    101      CTimer::get("XIOS").resume(); 
    102     context_hdl->time_origin.setValue(time_origin_str); 
    103      CTimer::get("XIOS").suspend(); 
     112    CTimer::get("XIOS").resume(); 
     113    context_hdl->time_origin.allocate(); 
     114    CDate& time_origin = context_hdl->time_origin.get(); 
     115    time_origin.setDate(time_origin_c.year, 
     116                           time_origin_c.month, 
     117                           time_origin_c.day, 
     118                           time_origin_c.hour, 
     119                           time_origin_c.minute, 
     120                           time_origin_c.second); 
     121    if (time_origin.hasRelCalendar()) 
     122      time_origin.checkDate(); 
     123    CTimer::get("XIOS").suspend(); 
    104124  } 
    105125   
    106   void cxios_get_context_time_origin(context_Ptr context_hdl, char * time_origin, int time_origin_size) 
     126  void cxios_get_context_time_origin(context_Ptr context_hdl, cxios_date* time_origin_c) 
    107127  { 
    108      CTimer::get("XIOS").resume(); 
    109     if(!string_copy(context_hdl->time_origin.getInheritedValue(),time_origin , time_origin_size)) 
    110       ERROR("void cxios_get_context_time_origin(context_Ptr context_hdl, char * time_origin, int time_origin_size)", <<"Input string is to short"); 
    111      CTimer::get("XIOS").suspend(); 
     128    CTimer::get("XIOS").resume(); 
     129    CDate time_origin = context_hdl->time_origin.getInheritedValue(); 
     130    time_origin_c->year = time_origin.getYear(); 
     131    time_origin_c->month = time_origin.getMonth(); 
     132    time_origin_c->day = time_origin.getDay(); 
     133    time_origin_c->hour = time_origin.getHour(); 
     134    time_origin_c->minute = time_origin.getMinute(); 
     135    time_origin_c->second = time_origin.getSecond(); 
     136    CTimer::get("XIOS").suspend(); 
    112137  } 
    113138   
  • XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icfield_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icfieldgroup_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icfile_attr.cpp

    r528 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icfilegroup_attr.cpp

    r528 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icgrid_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icgridgroup_attr.cpp

    r509 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icvariable_attr.cpp

    r527 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/c_attr/icvariablegroup_attr.cpp

    r527 r532  
    1010#include "group_template.hpp" 
    1111#include "icutil.hpp" 
     12#include "icdate.hpp" 
    1213#include "timer.hpp" 
    1314#include "node_type.hpp" 
  • XIOS/trunk/src/interface/fortran/idate.F90

    r501 r532  
    66   INTEGER(kind = C_INT), PARAMETER :: D360 = 0 , ALLLEAP = 1 , NOLEAP = 2 , JULIAN = 3 , GREGORIAN = 4 
    77 
    8    TYPE txios(date) 
    9       INTEGER :: year, month, day, hour, minute, second 
     8   TYPE, BIND(C) :: txios(date) 
     9      INTEGER(kind = C_INT) :: year, month, day, hour, minute, second 
    1010   END TYPE txios(date) 
    1111 
  • XIOS/trunk/src/interface/fortran_attr/axis_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE axis_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/axisgroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE axisgroup_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/context_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE context_interface_attr 
     
    5152     
    5253     
    53     SUBROUTINE cxios_set_context_start_date(context_hdl, start_date, start_date_size) BIND(C) 
     54    SUBROUTINE cxios_set_context_start_date(context_hdl, start_date) BIND(C) 
    5455      USE ISO_C_BINDING 
     56      USE IDATE 
    5557      INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    56       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: start_date 
    57       INTEGER  (kind = C_INT)     , VALUE        :: start_date_size 
     58      TYPE(xios_date), VALUE :: start_date 
    5859    END SUBROUTINE cxios_set_context_start_date 
    5960     
    60     SUBROUTINE cxios_get_context_start_date(context_hdl, start_date, start_date_size) BIND(C) 
     61    SUBROUTINE cxios_get_context_start_date(context_hdl, start_date) BIND(C) 
    6162      USE ISO_C_BINDING 
     63      USE IDATE 
    6264      INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    63       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: start_date 
    64       INTEGER  (kind = C_INT)     , VALUE        :: start_date_size 
     65      TYPE(txios(date)) :: start_date 
    6566    END SUBROUTINE cxios_get_context_start_date 
    6667     
     
    7273     
    7374     
    74     SUBROUTINE cxios_set_context_time_origin(context_hdl, time_origin, time_origin_size) BIND(C) 
     75    SUBROUTINE cxios_set_context_time_origin(context_hdl, time_origin) BIND(C) 
    7576      USE ISO_C_BINDING 
     77      USE IDATE 
    7678      INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    77       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_origin 
    78       INTEGER  (kind = C_INT)     , VALUE        :: time_origin_size 
     79      TYPE(xios_date), VALUE :: time_origin 
    7980    END SUBROUTINE cxios_set_context_time_origin 
    8081     
    81     SUBROUTINE cxios_get_context_time_origin(context_hdl, time_origin, time_origin_size) BIND(C) 
     82    SUBROUTINE cxios_get_context_time_origin(context_hdl, time_origin) BIND(C) 
    8283      USE ISO_C_BINDING 
     84      USE IDATE 
    8385      INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    84       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: time_origin 
    85       INTEGER  (kind = C_INT)     , VALUE        :: time_origin_size 
     86      TYPE(txios(date)) :: time_origin 
    8687    END SUBROUTINE cxios_get_context_time_origin 
    8788     
  • XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE domain_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE domaingroup_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/field_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE field_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/fieldgroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE fieldgroup_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/file_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE file_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/filegroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE filegroup_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/grid_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE grid_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/gridgroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE gridgroup_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/icontext_attr.F90

    r501 r532  
    1919      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type 
    2020      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir 
    21       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: start_date 
    22       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: time_origin 
     21      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: start_date 
     22      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: time_origin 
    2323      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: timestep 
    2424       
     
    3636      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type 
    3737      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir 
    38       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: start_date 
    39       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: time_origin 
     38      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: start_date 
     39      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: time_origin 
    4040      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: timestep 
    4141       
     
    5252      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type_ 
    5353      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir_ 
    54       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: start_date_ 
    55       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: time_origin_ 
     54      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: start_date_ 
     55      TYPE(txios(date)) , OPTIONAL, INTENT(IN) :: time_origin_ 
    5656      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: timestep_ 
    5757       
     
    6565       
    6666      IF (PRESENT(start_date_)) THEN 
    67         CALL cxios_set_context_start_date(context_hdl%daddr, start_date_, len(start_date_)) 
     67        CALL cxios_set_context_start_date(context_hdl%daddr, start_date_) 
    6868      ENDIF 
    6969       
    7070      IF (PRESENT(time_origin_)) THEN 
    71         CALL cxios_set_context_time_origin(context_hdl%daddr, time_origin_, len(time_origin_)) 
     71        CALL cxios_set_context_time_origin(context_hdl%daddr, time_origin_) 
    7272      ENDIF 
    7373       
     
    8888      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type 
    8989      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir 
    90       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: start_date 
    91       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: time_origin 
     90      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: start_date 
     91      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: time_origin 
    9292      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: timestep 
    9393       
     
    105105      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type 
    106106      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir 
    107       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: start_date 
    108       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: time_origin 
     107      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: start_date 
     108      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: time_origin 
    109109      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: timestep 
    110110       
     
    121121      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type_ 
    122122      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir_ 
    123       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: start_date_ 
    124       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: time_origin_ 
     123      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: start_date_ 
     124      TYPE(txios(date)) , OPTIONAL, INTENT(OUT) :: time_origin_ 
    125125      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: timestep_ 
    126126       
     
    134134       
    135135      IF (PRESENT(start_date_)) THEN 
    136         CALL cxios_get_context_start_date(context_hdl%daddr, start_date_, len(start_date_)) 
     136        CALL cxios_get_context_start_date(context_hdl%daddr, start_date_) 
    137137      ENDIF 
    138138       
    139139      IF (PRESENT(time_origin_)) THEN 
    140         CALL cxios_get_context_time_origin(context_hdl%daddr, time_origin_, len(time_origin_)) 
     140        CALL cxios_get_context_time_origin(context_hdl%daddr, time_origin_) 
    141141      ENDIF 
    142142       
  • XIOS/trunk/src/interface/fortran_attr/variable_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE variable_interface_attr 
  • XIOS/trunk/src/interface/fortran_attr/variablegroup_interface_attr.F90

    r531 r532  
    22! *               Interface auto generated - do not modify                     * 
    33! * ************************************************************************** * 
     4#include "../fortran/xios_fortran_prefix.hpp" 
    45 
    56MODULE variablegroup_interface_attr 
Note: See TracChangeset for help on using the changeset viewer.