Changeset 545 for XIOS/trunk/src/interface/fortran/idate.F90
- Timestamp:
- 12/17/14 11:14:05 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/interface/fortran/idate.F90
r537 r545 2 2 MODULE IDATE 3 3 USE, INTRINSIC :: ISO_C_BINDING 4 USE DATE_INTERFACE 4 5 5 ! enum XCalendarType 6 INTEGER(kind = C_INT), PARAMETER :: D360 = 0 , ALLLEAP = 1 , NOLEAP = 2 , JULIAN = 3 , GREGORIAN = 4 6 INTERFACE OPERATOR(+) 7 MODULE PROCEDURE xios(date_add_duration) 8 END INTERFACE 7 9 8 TYPE, BIND(C) :: txios(date) 9 INTEGER(kind = C_INT) :: year, month, day, hour, minute, second 10 END TYPE txios(date) 10 INTERFACE OPERATOR(-) 11 MODULE PROCEDURE xios(date_sub_duration) 12 MODULE PROCEDURE xios(date_sub) 13 END INTERFACE 11 14 12 TYPE, BIND(C) :: txios(duration)13 REAL(kind = C_DOUBLE) :: year=0, month=0, day=0, hour=0, minute=0, second=0, timestep=014 END TYPE txios(duration)15 INTERFACE OPERATOR(==) 16 MODULE PROCEDURE xios(date_eq) 17 END INTERFACE 15 18 16 INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 19 INTERFACE OPERATOR(/=) 20 MODULE PROCEDURE xios(date_neq) 21 END INTERFACE 17 22 18 SUBROUTINE cxios_update_calendar(step) BIND(C) 19 IMPORT C_INT 20 INTEGER (kind = C_INT), VALUE :: step 21 END SUBROUTINE cxios_update_calendar 23 INTERFACE OPERATOR(<) 24 MODULE PROCEDURE xios(date_lt) 25 END INTERFACE 22 26 27 INTERFACE OPERATOR(<=) 28 MODULE PROCEDURE xios(date_le) 23 29 END INTERFACE 24 30 31 INTERFACE OPERATOR(>) 32 MODULE PROCEDURE xios(date_gt) 33 END INTERFACE 34 35 INTERFACE OPERATOR(>=) 36 MODULE PROCEDURE xios(date_ge) 37 END INTERFACE 38 25 39 CONTAINS ! Fonctions disponibles pour les utilisateurs. 26 40 27 SUBROUTINE xios(update_calendar)(step) 28 IMPLICIT NONE 29 INTEGER, INTENT(IN):: step 30 31 IF (step < 0) THEN 32 PRINT *, "L'argument 'step' ne peut être négatif" 33 STOP 34 END IF 35 CALL cxios_update_calendar(step) 36 END SUBROUTINE xios(update_calendar) 41 FUNCTION xios(date_convert_to_seconds)(date) RESULT(res) 42 USE DATE_INTERFACE, only : txios(date) 43 IMPLICIT NONE 44 TYPE(txios(date)), INTENT(IN) :: date 45 INTEGER(kind = C_LONG_LONG) :: res 46 47 res = cxios_date_convert_to_seconds(date) 48 END FUNCTION xios(date_convert_to_seconds) 49 50 ! Addition: date + duration = date 51 52 FUNCTION xios(date_add_duration)(date, dur) RESULT(res) 53 USE DATE_INTERFACE, only : txios(date) 54 USE IDURATION, only : txios(duration) 55 IMPLICIT NONE 56 TYPE(txios(date)), INTENT(IN) :: date 57 TYPE(txios(duration)), INTENT(IN) :: dur 58 TYPE(txios(date)) :: res 59 60 res = cxios_date_add_duration(date, dur) 61 END FUNCTION xios(date_add_duration) 62 63 ! Subtraction: date - duration = date 64 65 FUNCTION xios(date_sub_duration)(date, dur) RESULT(res) 66 USE DATE_INTERFACE, only : txios(date) 67 USE IDURATION, only : txios(duration) 68 IMPLICIT NONE 69 TYPE(txios(date)), INTENT(IN) :: date 70 TYPE(txios(duration)), INTENT(IN) :: dur 71 TYPE(txios(date)) :: res 72 73 res = cxios_date_sub_duration(date, dur) 74 END FUNCTION xios(date_sub_duration) 75 76 ! Subtraction: date - date = duration 77 78 FUNCTION xios(date_sub)(date1, date2) RESULT(res) 79 USE DATE_INTERFACE, only : txios(date) 80 USE IDURATION, only : txios(duration) 81 IMPLICIT NONE 82 TYPE(txios(date)), INTENT(IN) :: date1, date2 83 TYPE(txios(duration)) :: res 84 85 res = cxios_date_sub(date1, date2) 86 END FUNCTION xios(date_sub) 87 88 FUNCTION xios(date_eq)(date1, date2) RESULT(res) 89 USE DATE_INTERFACE, only : txios(date) 90 IMPLICIT NONE 91 TYPE(txios(date)), INTENT(IN) :: date1, date2 92 LOGICAL :: res 93 94 res = cxios_date_eq(date1, date2) 95 END FUNCTION xios(date_eq) 96 97 FUNCTION xios(date_neq)(date1, date2) RESULT(res) 98 USE DATE_INTERFACE, only : txios(date) 99 IMPLICIT NONE 100 TYPE(txios(date)), INTENT(IN) :: date1, date2 101 LOGICAL :: res 102 103 res = cxios_date_neq(date1, date2) 104 END FUNCTION xios(date_neq) 105 106 FUNCTION xios(date_lt)(date1, date2) RESULT(res) 107 USE DATE_INTERFACE, only : txios(date) 108 IMPLICIT NONE 109 TYPE(txios(date)), INTENT(IN) :: date1, date2 110 LOGICAL :: res 111 112 res = cxios_date_lt(date1, date2) 113 END FUNCTION xios(date_lt) 114 115 FUNCTION xios(date_le)(date1, date2) RESULT(res) 116 USE DATE_INTERFACE, only : txios(date) 117 IMPLICIT NONE 118 TYPE(txios(date)), INTENT(IN) :: date1, date2 119 LOGICAL :: res 120 121 res = cxios_date_le(date1, date2) 122 END FUNCTION xios(date_le) 123 124 FUNCTION xios(date_gt)(date1, date2) RESULT(res) 125 USE DATE_INTERFACE, only : txios(date) 126 IMPLICIT NONE 127 TYPE(txios(date)), INTENT(IN) :: date1, date2 128 LOGICAL :: res 129 130 res = cxios_date_gt(date1, date2) 131 END FUNCTION xios(date_gt) 132 133 FUNCTION xios(date_ge)(date1, date2) RESULT(res) 134 USE DATE_INTERFACE, only : txios(date) 135 IMPLICIT NONE 136 TYPE(txios(date)), INTENT(IN) :: date1, date2 137 LOGICAL :: res 138 139 res = cxios_date_ge(date1, date2) 140 END FUNCTION xios(date_ge) 37 141 38 142 END MODULE IDATE
Note: See TracChangeset
for help on using the changeset viewer.