44 TYPE(vol7d_timerange),
PARAMETER :: vol7d_timerange_miss= &
51 MODULE PROCEDURE vol7d_timerange_init
57 MODULE PROCEDURE vol7d_timerange_delete
63 INTERFACE OPERATOR (==)
64 MODULE PROCEDURE vol7d_timerange_eq
70 INTERFACE OPERATOR (/=)
71 MODULE PROCEDURE vol7d_timerange_ne
77 INTERFACE OPERATOR (>)
78 MODULE PROCEDURE vol7d_timerange_gt
84 INTERFACE OPERATOR (<)
85 MODULE PROCEDURE vol7d_timerange_lt
91 INTERFACE OPERATOR (>=)
92 MODULE PROCEDURE vol7d_timerange_ge
98 INTERFACE OPERATOR (<=)
99 MODULE PROCEDURE vol7d_timerange_le
104 INTERFACE OPERATOR (.almosteq.)
105 MODULE PROCEDURE vol7d_timerange_almost_eq
112 MODULE PROCEDURE vol7d_timerange_c_e
115 #define VOL7D_POLY_TYPE TYPE(vol7d_timerange) 116 #define VOL7D_POLY_TYPES _timerange 118 #include "array_utilities_pre.F90" 122 MODULE PROCEDURE display_timerange
127 MODULE PROCEDURE to_char_timerange
130 #define ARRAYOF_ORIGTYPE TYPE(vol7d_timerange) 131 #define ARRAYOF_TYPE arrayof_vol7d_timerange 132 #define ARRAYOF_ORIGEQ 1 133 #include "arrayof_pre.F90" 136 type(vol7d_timerange) :: almost_equal_timeranges(2)=(/&
143 PUBLIC insert_unique, append_unique
144 PUBLIC almost_equal_timeranges
154 FUNCTION vol7d_timerange_new(timerange, p1, p2)
RESULT(this)
155 INTEGER,
INTENT(IN),
OPTIONAL :: timerange
156 INTEGER,
INTENT(IN),
OPTIONAL :: p1
157 INTEGER,
INTENT(IN),
OPTIONAL :: p2
159 TYPE(vol7d_timerange) :: this
161 CALL init(this, timerange, p1, p2)
163 END FUNCTION vol7d_timerange_new
169 SUBROUTINE vol7d_timerange_init(this, timerange, p1, p2)
170 TYPE(vol7d_timerange),
INTENT(INOUT) :: this
171 INTEGER,
INTENT(IN),
OPTIONAL :: timerange
172 INTEGER,
INTENT(IN),
OPTIONAL :: p1
173 INTEGER,
INTENT(IN),
OPTIONAL :: p2
175 IF (
PRESENT(timerange))
THEN 176 this%timerange = timerange
178 this%timerange = imiss
194 IF (
PRESENT(p1))
THEN 199 IF (
PRESENT(p2))
THEN 206 END SUBROUTINE vol7d_timerange_init
210 SUBROUTINE vol7d_timerange_delete(this)
211 TYPE(vol7d_timerange),
INTENT(INOUT) :: this
213 this%timerange = imiss
217 END SUBROUTINE vol7d_timerange_delete
220 SUBROUTINE display_timerange(this)
221 TYPE(vol7d_timerange),
INTENT(in) :: this
223 print*,to_char_timerange(this)
225 END SUBROUTINE display_timerange
228 FUNCTION to_char_timerange(this)
230 #ifdef HAVE_DBALLEF_MOD 236 TYPE(vol7d_timerange),
INTENT(in) :: this
237 CHARACTER(len=80) :: to_char_timerange
240 INTEGER :: handle, ier
243 ier = idba_messaggi(handle,
"/dev/null",
"w",
"BUFR")
244 ier = idba_spiegat(handle,this%timerange,this%p1,this%p2,to_char_timerange)
245 ier = idba_fatto(handle)
247 to_char_timerange=
"Timerange: "//to_char_timerange
251 to_char_timerange=
"Timerange: "//trim(
to_char(this%timerange))//
" P1: "//&
256 END FUNCTION to_char_timerange
259 ELEMENTAL FUNCTION vol7d_timerange_eq(this, that)
RESULT(res)
265 this%timerange == that%timerange .AND. &
266 this%p1 == that%p1 .AND. (this%p2 == that%p2 .OR. &
267 this%timerange == 254)
269 END FUNCTION vol7d_timerange_eq
272 ELEMENTAL FUNCTION vol7d_timerange_almost_eq(this, that)
RESULT(res)
273 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
276 IF (.not.
c_e(this%timerange) .or. .not.
c_e(that%timerange) .or. this%timerange == that%timerange .AND. &
277 this%p1 == that%p1 .AND. &
278 this%p2 == that%p2)
THEN 284 END FUNCTION vol7d_timerange_almost_eq
287 ELEMENTAL FUNCTION vol7d_timerange_ne(this, that)
RESULT(res)
288 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
291 res = .NOT.(this == that)
293 END FUNCTION vol7d_timerange_ne
296 ELEMENTAL FUNCTION vol7d_timerange_gt(this, that)
RESULT(res)
297 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
300 IF (this%timerange > that%timerange .OR. &
301 (this%timerange == that%timerange .AND. this%p1 > that%p1) .OR. &
302 (this%timerange == that%timerange .AND. this%p1 == that%p1 .AND. &
303 this%p2 > that%p2))
THEN 309 END FUNCTION vol7d_timerange_gt
312 ELEMENTAL FUNCTION vol7d_timerange_lt(this, that)
RESULT(res)
313 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
316 IF (this%timerange < that%timerange .OR. &
317 (this%timerange == that%timerange .AND. this%p1 < that%p1) .OR. &
318 (this%timerange == that%timerange .AND. this%p1 == that%p1 .AND. &
319 this%p2 < that%p2))
THEN 325 END FUNCTION vol7d_timerange_lt
328 ELEMENTAL FUNCTION vol7d_timerange_ge(this, that)
RESULT(res)
329 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
332 IF (this == that)
THEN 334 ELSE IF (this > that)
THEN 340 END FUNCTION vol7d_timerange_ge
343 ELEMENTAL FUNCTION vol7d_timerange_le(this, that)
RESULT(res)
344 TYPE(vol7d_timerange),
INTENT(IN) :: this, that
347 IF (this == that)
THEN 349 ELSE IF (this < that)
THEN 355 END FUNCTION vol7d_timerange_le
358 ELEMENTAL FUNCTION vol7d_timerange_c_e(this)
RESULT(c_e)
359 TYPE(vol7d_timerange),
INTENT(IN) :: this
361 c_e = this /= vol7d_timerange_miss
362 END FUNCTION vol7d_timerange_c_e
365 #include "array_utilities_inc.F90" 367 #include "arrayof_post.F90" Distruttore per la classe vol7d_timerange.
Represent timerange object in a pretty string.
Method for packing the array object reducing at a minimum the memory occupation, without destroying i...
Definisce l'intervallo temporale di un'osservazione meteo.
Classe per la gestione degli intervalli temporali di osservazioni meteo e affini. ...
Definitions of constants and functions for working with missing values.
Method for inserting elements of the array at a desired position.
Quick method to append an element to the array.
Utilities for CHARACTER variables.
Costruttore per la classe vol7d_timerange.
Method for removing elements of the array at a desired position.
Definition of constants to be used for declaring variables of a desired type.